【PHP】下らねぇ質問はここに書き込みやがれ 10
■ このスレッドは過去ログ倉庫に格納されています
PHPに関する質問スレです
前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 9
http://mevius.5ch.net/test/read.cgi/tech/1513760420/
次スレは>>980以降
本文の1行目に以下を追加すること
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured >>405
string(3) ってのは長さ 3 の文字列ということを示してるから、カウンタファイルにカウント値に続いてスペースとか改行コードがくっついてるんだろうね。
fgets した値を trim すればいいんじゃないかな。
文字列変数を数値としてそのまま計算することは可能だから、intval は必須ではない。
あと fgets や fputs じゃなく fread と fwrite を使ってはいかが。 PHPにおける連想配列はキーが文字列の場合を指すのでしょうか?
$yasai = [1 => 'キャベツ', 'にんじん', 'レタス', 'トマト'];
これはキーが1から始まる整数ですが、
プログラマが指定しているので連想配列ですか? >>408
なんとなく使い出したatomの仕様でした。
datファイルを1バイトの文字だけ書いて上書き保存すると0A0Dの文字コードが足されていました・・・
string(3)というのが不思議だったのですが、自分で1バイトなのになぜ?と思い込みが強く気付くのが遅れてしまいました。
fread, fwriteというのがあるのですね。
検索すると色々出てきたりするのですが、どれも正しいものと思っていたのですが、
時代的に推奨されない関数などがあるようで、そのあたりの見極めが良くなりたいです。
>>407
excelの関数でたくさん入れ子になったものを見たことがあります、こんな感じでまとめられるのですね。 >>410
php では fputs と fwrite は全く一緒。
C なんかだと文字列長をサイズなり終端文字なりで示す必要があるので、その示し方の違いで関数が別れてる。
php の変数は文字列の長さを変数自体が知っているから、fputs と fwrite に違いを付けようがない。
fgets については、改行かファイル終端まで、または指定サイズに達するまで読み込むが、fread は改行で読み取りをやめない点が違う。
対象のファイルが改行区切りのテキストファイルを読む場合は fgets が便利に使えることも多い。
でも今回のカウンタファイルはカウント値がひとつ書いてあるだけのファイルだから fgets でも fread でも表向きの結果は一緒だけど、
それでも fgets は改行を探しながら読み取る分少し遅いことが予想される。
そもそも fgets を使う場面では、そのファイルが改行で区切られていることを暗に示しているので、今回の使用を表すコードとしては適切と言えない。 >>411
正 今回の仕様を表すコード
誤 今回の使用を表すコード 遅くなってすいません。
カウンターのデータとしてあるべき姿ではありませんが、複数行に数字を書いたファイルを
fgetとfreadを使って読むと、fgetは改行付きの1行、freadはすべての数字と改行を読みましたが、
意外と後者でも1つ目の数字だけをインクリメントして書き戻しました。
最終的にはLAMP環境でDBとの読み書きを行いたいのですが、
やはりアプリケーションのログとかをディレクトリ内で追記することを考えると
ファイルの読み書きコマンドは必須ですよね。 データベースに書き込みコードを作ったんだけどどうしてもカラムがカラムとして認識されなくてエラーになるんだけどなぜか教えてくれ
$sql = "INSERT INTO comments(
number, name, time, comment←ここ
) VALUES (
'', '$myname', '$time', '$comment'
)"; >>416
desc comments か show create table comments の結果を見せて `number`
`name`
`time`
`comment` >>416
解決しました、このコードの前の変数代入のスペルミスでした、お騒がせしました 自分で、SQL 文を組み立てて送信するのは、
SQLインジェクションもあり、お勧めできない!
フレームワークには、O/R マッパーが付いている
Ruby on Rails を知っているなら、CakePHP も出来る。
CakePHPは、Rails のコピーだから!
掌田津耶乃が、CakePHPの本も書いてる。
彼は、ほとんどのフレームワーク・ゲームエンジンの本も書いてる in とか like とか動的な条件式を構成する程度のありふれたことをやるにもおかしなラッパやライブラリを作るハメになるから、
SQLインジェクション対策ごときで有りもののフレームワークに拘る必要なんて全く無い。 >>426
だからPDOで充分じゃん。
でもPDOの名前つきプレースホルダは、値を入れる連想配列に余剰な項目があるとエラーになっちゃうのがイケてないんだよな。
いくつかSQLを続けて発行しようと思っても、同じ連想配列の使い回しがやりづらい、というか実質できない。
なんでこんな余計なお世話の仕様にした。 PHP7.2をインストールしたサーバから外部サイトを取得しているfile_get_contentsで
SSL routines:ssl3_get_server_certificate:certificate verify failed
というエラーが出たので
ググったところ、サーバのSSL証明書ファイルが古かったりうまく設定できていない時に出るエラーのようでした
ググった先の情報に従って、
opensslをアップデートしてから、php.iniで
openssl.cafile=/etc/ssl/certs/ca-bundle.crt
と設定したのですが現象は変わらず(phpinfoで設定の反映は確認済み)
http://curl.haxx.se/ca/cacert.pem
を取得してそれをopenssl.cafileに設定しても、やはり現象に変化なしでした
しかたなくfile_get_contentsのオプションでverify_peerとverify_peer_nameをfalseにして、
証明書のチェック自体をしないようにしたらエラーは消えましたが、
なぜ証明書ファイルを設定してもエラーになったのかが気になります
どんな原因が考えられるでしょうか? >>429
もしかして読み込み先のサーバに問題があるのでは?
と思ってhttps://yahoo.co.jp/をfile_get_contentsで取得してみたら、
エラーは出ませんでした
そこで読み込み先のサイトをブラウザで表示して、証明書を確認したところ、
有効期間が2019/6/14〜になっていました
つまり、最近証明書を更新したようです
file_get_contentsでは古い証明書を取得しまっている、ということだと思いますが
何故そんなことが起きるのでしょうか?
どうすれば解決できますか? プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。 ファイルの書き出し処理で分からないことがあったので質問します
Windowsでファイル名に使えない文字がありますよね
日本語だと、全角文字に置き換えるということができますが
海外だと、どんな方法で対処してるのでしょうか?
英語というか、1バイト文字でどう回避してるのか、よく分からないです
全部 _(アンダースコア)で置き換えとか? 音楽ファイルなんかでよく見るけど予約文字は大体アンダースコアになってるね
アポストロフィや?は省略されてることが多い 単一のphpで、1つのinput textからポストしてデータベースに接続してselectしてレコードを
input textの下に表示する、というコードを書いて動いたのは嬉しいのですが、
functionは使っていません。
いずれclassの中にfunctionを入れたいのですが、私のphp部分なら30行ぐらいのコードでもそういう
ことができるのでしょうか?
人のコードで、functionばかりあって、最後に
main();
みたいなのがありますが、それが行き着く先の形なのでしょうか。 補足です。
sqlインジェクションとかXSSとかの対策も知らないのでそのままではダメですが、
自分なりの堅牢なfunctionを作って、それを組み合わせるというのがphpプログラマーなのでしょうか。 >>437
ありとうございます。デザインパターンで検索するとちょっと内容が濃すぎました。
オンラインの学習でclassやextendを使った内容は一通りやってみたのですが、
既存のfunction無しのコードを、classやfunctionありのコードに直すのではなくて、
始めから書き直すことになりそうですね。 >>438
「PHP リファクタリング」で検索
リファクタリングして、デザインパターンに寄せるのがいい設計のひとつ。
30行ぐらいのコードでも機能が3つあれば、10行ずつ3つに分けてfunctionにしてもいい。
そして、それをまとめて1つのclassにしてもいい。
試しにfunction化して動かしてみて、それが出来たら更にclass化して動かしてみればいいよ。
思ったより簡単に動くから。 >>439
>試しにfunction化して動かしてみて
そうですね、恐らく自分の書いているのはifとメソッドと呼ばれるものを上から書いているだけなので、
function化をやってみたいと思います。
リファクタリングの単語ありがとうございます、今ではデザインパターンよりこっちのほうが
合っていると思います。 PhpOffice¥PhpSpreadsheetの質問です
$sheet->getCell()->getValue()メソッドでセルの値をとっているのですが
エクセル側でセルの内容が装飾されているとき
プレーンテキストではなく
object(PhpOffice¥PhpSpreadsheet¥RichText¥RichText)
として返ってきます
これをサラっとプレーンテキストにするにはどうしたらよいでしょか? DB板が過疎化しているので、こちらで聞きたいのですが、
phpのページにアクセスするとカウンターの値をデータベースから取得して、
1足して表示して、その値をupdateしたいのですが、
DBのcounterテーブルにはcountカラムだけあり、値を入れています。
MariaDB [web]> select * from web.counter;
+-------+
| count |
+-------+
| 1 |
+-------+
カウンターを上げようとするとエラーが出るのですが、
MariaDB [web]> updete web.counter set count=2;
ERROR 1064 (42000): You have an error in your SQL syntax;
2カラムにして、name=count, value=1みたいなテーブルを作って
whereを使ってupdateするのが正しいやり方なのでしょうか?
1カラムではそもそも無理があるのでしょうか。 すみません、自決しました。
コマンドのスペルミスでした。 じゃあ昔DB板にいた人たちは今どこにいるんだろ?まさかTwitterとか?w DB板の1-3番目はoracleですが、
3番目のスレッドは2003年のスレ立てから16年経っても250スレしかないぐらいですね・・・ DB板は比較的過疎だけど、
マイナーなDBMSでなければ
質問すれば回答してくれるよ
MariaならMySQLスレで聞けば良い unixタイムスタンプで
mktime(0,0,0,1,2,1970);
1970年1月2日0時0分0秒(1日後)
を実行すると82800秒と1日の秒数より1時間少ない結果が出るので
次に1970年1月3日0時0分0秒(2日後)を試し
169200と23時間+1日という結果が出ました
これはどういう仕様なのでしょうか?
何か見落としてますか? >>452
ありがとうございます
タイムゾーンを調べる方法があれば教えてもらえますか?
初心者でlocalサーバーで勉強中なのですがそれは関係ないですかね? セミコロンを文字列としてechoしようとするとエラーが出るので、エスケープしようと思うのですがバックスラッシュが効きません
どうしたらいいでしょうか? >>454ですがくだらなすぎました
phpのバージョン上げたら解決しました php.iniファイルのdate.timezoneをasia/tokyoに変更したらうまくいきました
ありがとうございました。 mb_send_mailでメール送信すると、特定のアドレスに送信するとuser unkownになって送れない
これってsmtpの設定をしなくて直接受信サーバーを叩きにいってしまうからダメなのかな
phpmailerとかにすれば解決すると思う? ウインドウズ10で
include_once "C:/folder1/folder2/mytest.php";
みたいな絶対パス指定してphpファイルを読み込んで実行する事は出来ないの? ローカルにあるHTML ファイルを、ブラウザで読み込める
file:///C:/Users/Owner/Documents/index.html
ローカルにあるHTML ファイル内で、ローカルの相対パスを読み込める
<script type="text/javascript" src="../jQuery/jquery-3.1.0.js"></script>
<script src="test.js"></script>
ローカルにあるHTML ファイル内で、ローカルにある画像も読み込める
<img src="C:/Users/Owner/Pictures/a.png">
<img src="C:/Users/Owner/Pictures/b.jpg">
ローカルにあるRuby ファイル内で、ローカルの相対パスを読み込める
require_relative "../my_utility.rb" 今php.exeが配布してるか知らないが
php.exe -filename.php
的なことができるかも Rubyファイルは読み込めないな。
そんなゴミ入れてないからwww XAMPP使えば、phpをコマンドラインから実行できるぞ。 >>464
include_onceで使えますか? >>465
試してみなさい。危険なコードでなければ簡単には壊れないから。
危険なコードというのはファイルを削除したりシステム設定などを書き換えたりするコード。 >>467
じゃあ、エラーメッセージを確認して。phpはローカルにあるの? PHPがローカルにないなら、サーバー側のPHPからローカルファイルにはアクセスできない。アップロードするかなんかしないといけないよ。 初心者は、最初に警告やエラーが見えるようにPHPを設定した方がいいよ。 パスに一字でも間違いはない? 全角・半角が間違ってない? そもそもphpだからって、
Webサーバでしか動かしてはいけない、
なんてルールはないと思うが
シェルスクリプトとかpythonみたいに使ったら良いと思うの >>473
Win10にインストールしたFlywheelのPHPなんだけど、
それが絶対パスでファイルが読めない原因かな? phpを始めて、50行程度で色々作ったりしているのですが、
それが合っているかどうか、無駄や脆弱性があったりと心配になるので、
webサービスでコードを貼り付けて、相談してもらうようなサービスはあるのでしょうか。
数行であればスレの皆さんにご指摘を受けるのは嬉しいのですが
多い行を貼り付けることもスレ汚しにもなるので、何か良い方法はありませんか? >>476
長いソースなら、こういう所を利用して公開すればいい
http://codepad.org/ >>477
ありがとうございます。
適当にechoとか書くとシンタックスハイライトもしたので、便利ですね。 ファイル名にUnicode制御文字らしきものが入ってしまったのですが
それを削除する方法を教えてください
具体的に何が入っているのかを調べる方法もあれば教えて欲しいです
https://i.imgur.com/V7xutMK.png
twitter のツイートをコピペしたものをファイル名にする処理をしたときに
そうなりました
上の画像で言うと、@の前にある文字です
おそらく、[RLO]だと思いますが、これを取り除く方法が分かりません >>479
自己解決
とりあえず、これでなんとかなりました
$str = preg_replace('/[\p{Cc}\p{Cf}\p{Zs}]/u', '', $str);
このへん、参考にしました
U+001DなどUnicode(ASCII,C0)制御文字がHeaderに含まれるとaborting requestするので除去する - Qiita
https://qiita.com/khsk/items/3c98174bc6cb9b596e61
PHP: Unicode 文字プロパティ - Manual
https://www.php.net/manual/ja/regexp.reference.unicode.php メーラーを作ってる人が集まってるスレはありますか? ものすごく基本的な質問かもしれません。
本物のサーバで実験したいのですが
PHPが使えるレンタルサーバで安いところはどこですか?
将来的にはなんらかの形でネット商売するかもしれません。 「PHPが使えるレンタルサーバで安いところ」で検索するだけなのにマジで商売するの? まず目の前にあるPCに仮想環境を入れて
適当なLinuxをインストールしてサーバーにしてみ
それなら好き勝手にいじれるし誰にも迷惑かけないしタダだ
そっから始めてみたらどう? CentOS6 + Remi php 5.6 で動いているphpは
CentOS7 + Remi php 5.6 でも動くのでしょうか?
DBはOSのリポジトリに登録されているmysqlを使います。 プラットフォームによっては使えない機能や関数もあるけど
使う(必要な)パッケージが揃ってればOSによる差はだいたい設定でどうにかなる
意図的にプログラム側でOSに依存するコードやOSを制限するコード書いてなければ
CentOSのバージョンアップぐらいならそのまま使えるんじゃないの php内でexecを使って外部コマンドを実行させたいです
ローカルでは成功しますが、
webブラウザだとexecでエラー126(コマンド実行不可能)が返ってきます
やはりサーバー側の問題なのでしょうか?
Xサーバーを使っているんですが、どこをいじればいいのか分からなくて・・ >>491
せめてなにを実行してるくらい書かないと誰にも伝わらんぞ
パーミッション関係だと思うけども >>492
exeファイルを実行しています
パーミッションを疑って、Xサーバー側にアップしたものを全部777に書き換えたんですが動きませんでした >>493
exeファイルって何?サーバーの既存のコマンド? Xサーバって X window のじゃなくてレンタルサーバのことなのか。
それは置いといて、exec エラー126 で検索すると答えっぽい情報があるよ。
実行ファイル名をフルパスで書けばいいとか。
試してないけど。 XサーバーってUnix環境だと思うから、その環境で動かせるって事がまず必要だよ
もしかしてWindowsで動作するファイルをアップロードしてない? >>494
いえ個人が作ったexeファイルです
>>495
それも
echo __FILE__ ;
でフルパス確認して、フルパス表記で実行したんですがエラー126のままで・・・
フルパスって
exec ("/home/hogehoge/xxxxx.com/public_html/hogehoge2/xxx.exe", $output, $error);
var_dump($output);
var_dump($error);
こういう表記でいいんですよね? >>496
してました・・
フリーの実行プログラムを使ってるのですが、
一応Unix用のファイルも配布元が配布していて
そっちを使ってもエラー126になります・・・ >>498
ユーザーがアップロードした実行プログラムは動かせないと思う
phpやperlのスクリプトなら動作するようなので
そういうものを用意するしかないと思う 皆さんありがとうございます
根本的に無理ぽな感じですね
一人で煮詰まっていましたが、いろいろ指摘をもらってまた頑張ろうと思います 一般的に、鯖側でexec可能になると悪意のないプログラムでもミスで鯖全体を殺してしまうリスクがあるので
鯖屋ではexecは認められない
はずよ
今時は知らんけど 最後に
Unixで実行可能なファイルで、フルパスで、パーミッションの実行権限付与したら
いけました!
4日間悩んでたのでとても嬉しいです
どうもありがとうございました!!
>>502
複雑な数値計算をするプログラムです
>>503
そうなんですね今後使えなくなったら困るな〜 >>504
xserverでは一応、負荷かかったら制限するかもと書いてるので
その辺注意しとけば大丈夫そう ど素人がよくそう言ってるの聞くけどプログラミング言語だよ ■ このスレッドは過去ログ倉庫に格納されています