PHP質問・雑談スレ6【初心者お断り(ROM歓迎)】
■ このスレッドは過去ログ倉庫に格納されています
PHPに関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
https://mevius.5ch.net/tech/ (【PHP】で板内を検索)
前スレ
https://medaka.5ch.net/test/read.cgi/php/1538639036/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
https://ideone.com/
・プログラミングのお題スレ (求PHPer参戦)
https://mevius.5ch.net/tech/ (お題スレで板内を検索)
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造 WSL2のDockerで
Windowsのファイルシステム上にあるphpファイルを読ませると
遅すぎて使い物にならない
従来のHyper-Vバックエンドの方がまだマシ
https://github.com/docker/for-win/issues/7719
WSL2のWindowsファイルシステムが遅いせいらしい
Unisonで同期すれば速いけどちょっと最初の設定が面倒くさい >>274
2週間以上前の質問にレスするのもアレだが2次元以上の配列を使えば良いだけでは?
$arr = [
1 => [
'question' => '昼間の空は何色?',
'choice' => [
'A' => '青',
'B' => '赤',
'C' => 'ピンク',
],
'correct' => 'A',
],
2 => [
'question' => 'てめぇの血は何色だぁ?',
'choice' => [
'A' => '青',
'B' => '赤',
'C' => 'ピンク',
],
'correct' => 'B',
],
];
$qid = array_rand($arr);
$question = $arr[$qid]['question']; // 問題
$choice = $arr[$qid]['choice']; // 選択肢
$correct = $arr[$qid]['correct']; // 正解
unset($arr[$qid]); // $qidを何らかの方法で保存しておいて、出題が終わったものは削除すりゃいい >>287のインデントが消えて見にくいだろから、インデント部分を全角スペースに置き換えたら見やすくなるか?
shuffle()は駄目だな 配列のキーがリセットされてしまうから、287みたいな事ができなくなるので
$arr = [
1 => [
'question' => '昼間の空は何色?',
'choice' => [
'A' => '青',
'B' => '赤',
'C' => 'ピンク',
],
'correct' => 'A',
],
2 => [
'question' => 'てめぇの血は何色だぁ?',
'choice' => [
'A' => '青',
'B' => '赤',
'C' => 'ピンク',
],
'correct' => 'B',
],
]; windows consoleでfgets(STDIN,4096)で
入力待ちにしたいのですが次に進んでしまって入力待ちになりません
この間まで問題なかったのですが
proc_openあたりの関数使ってからおかしくなった気がします
設定でも書き換わったのか再起動しましたが直りません
何か修正する方法知ってる方いたら教えて下さい なんか似たような報告ありました
https://stackoverflow.com/questions/59092779/has-php-7-4-broken-fgetsstdin
PHPのバグっぽいですね?
ちょうどPHP7.4にしたのでそれのせいだったようです
最新の7.4.11にしたら問題なくなりました テキストファイル保存して適宜読み込もうと思ってる
テキストファイルのコンテンツは1行のものもあれば複数行のものもある
うまい具合に混在させるにはどういう仕様にしたらいいかな?
ぱっとおもいついたのは次のような書式
AAA
BBB
CCC
[multi1]
DDD
EEE
[/multi1]
FFF
GGG
[multi2]
HHH
III
JJJ
[/multi2]
KKK
これより優れた書式ってあると思う? >>291
csv tsv xml json 好きなの選べ >>291
いくらでもあるが
思ったら既に挙げられてるか jsonはねぇ・・・
見やすいことは見やすいんだけど
いざ手書きで記述するとなると括弧が結構面倒くさくて 全部単行にして複数行へは実態への参照だけ置くとかもあるね
用途次第かなと Worldwide, Nov 2020 compared to a year ago:
Rank
Change Language Share Trend
1 Python 30.8 % +1.8 %
2 Java 16.79 % -2.3 %
3 JavaScript 8.37 % +0.3 %
4 C# 6.42 % -0.9 %
5 PHP 5.92 % -0.2 %
6 C/C++ 5.78 % -0.2 %
7 R 4.16 % +0.4 %
8 Objective-C 3.57 % +1.0 %
9 Swift 2.29 % -0.2 %
10 TypeScript PHP8とLibreSSLって相性悪い?
makeしたらOPENSSLでエラー
ソースコードopenssl.cでLibreSSLを除外するよう、イジったらmake testでエラー >>291
単に改行を含みたいだけならシングルカラムのcsvでいいと思いますよ phpとpythonはどっちがつおいですか?(´・ω・`)c とうとうPython環境作りましたけどPHPと同じことするんだったらちょっとつまらないです もうそろそろPHPカンファレンス2020が始まりますな
視聴しよう 最近のPHPって引数や返り値の型指定できんのに
オーバーロードはまだ使えないのね(まだっていうか一生使えないのだろうが)
同じ関数名でいいのに関数名考えるのがめんどくさいし盛りすぎてださくなるわー
もう少しだけ賢くなってくれえ そっちの方向に行きすぎるとC言語でいいじゃん、ってなってしまう
適度な中庸が肝心よ strpos(string $haystack, string $needle)
変な引数名だよなこれ >>306
7.4でようやくプリミティブ型の指定に対応したばっかだし、まだまだ先だろうな。
>>307
Cにオーバーロードなんて無いが…? 干し草の中から金の針を探すっちゅうやつやろ
別に変だとは思わないけど引数の順番をなんとかしろは5万年前から言われてるな strpos(string $string, string $search) string.search(searchstr) return int position phpunitでモックを使う方法について、
なんかいい感じに解説してる記事ない?
電子書籍でも可 そもそもモックを使う意味からして分かってないんよ
モックってクラスにある実際の関数が動くものかと思ってたら
調べてみると関数だけあっても中身は空になってしまうみたいで
じゃあモックを使ったら何をテストできるのかってのが
全く分からん
というわけで、モックを使う意味からして解説してくれている
書が必要なのです >>316
今テストしたくない関数をモックにするんだよ >>317
テストしたい関数の中で使われている関数をモックにする
という理解でええ? >>319
なるほどなぁ
何でモックと呼ばれてるのかようやく分かったわ
ありがとう GETで指定したディレクトリの内容を読み取るスクリプトがあります
シングル/ダブルクオートやバックスラッシュが入ると
$_GETで取得した際スクリプト側で勝手にエスケープされるらしく
色々試したのですがstripcslashesでうまく取り除くことができました
それでエスケープ解除したこの文字列でディレクトリ検索をかけるわけですが
これら文字のエスケープを解除して検索することで
何かセキュリティでまずくなるようなおそれってありますか?
CRUDでいうとRの機能しかありません
またファイルにアクセスできるわけでなくあくまでもプロパティの表示にとどめています
スクリプト側で指定したルートディレクトリから始まって
かつ../が入っていないといった感じにしてディレクトリトラバーサルは対処しています >>321
頑張ってるたあ思うけど、「頑張らなくても大丈夫」な方法を採った方がより良いよ
chrootをきちんと使うとか 質問させてください
リンク先がSSL対応してるか調べるにはどうしたら良いですか?
よろしくお願いします! >>323
httpsでアクセスして、応答があれば対応しています >>324
すみません、PHPのソースで教えてください >>326
レスありがとうございます
やはりcURLかfile_get_contentsですよね
でもそれでどうやってSSL対応を判別するのか?ググっても情報が出てきません...orz >>328
ソース付きでお願いします。
ちなみにSSL非対応でもhttpsでアクセスして応答あります。 PHPの公式Gitサーバーにハッキング被害--バックドアを仕掛けるコードが見つかる - CNET Japan
https://japan.cnet.com/article/35168549/ まぁ実害は皆無だろうな
これを機にGitHubに移行するっぽいし良かったんじゃね >>333
過去のも改変がないか今チェック中だそうだよ
証拠残しちゃうのはお粗末だったね
まあ証拠残さないでGit改変するのも大変そうやが gitの過去改変は無理だよね
無害なコミットに見せかけて紛れ込ませたウイルスが無いかってことじゃね 質問です。当方、プログラムのことは全くわからない人間です。
7年前に亡くなったはずの父からメールが届きました。
メールには「このメール読んでるってことは、俺死んだんだな。元気してるか?」
みたいなメッセージが書かれていました。
父は昔PHPというプログラム言語を使っていたらしいです。
そしてこの掲示板を見ていた形跡がありました。
この技術もPHPというプログラムを使ってできる事なのでしょうか? 申し訳ありません、初心者お断りの表記に気がつきませんでした。
上記の質問は無視していただいてOKです。
大変失礼しました。 ネタだろうがPHPでもできないことはないだろうなw 親父からのメールと判断したのはなんでだ?
もし既知のメアドが7年前の仕様のまま生きてるならそういうこともあるのだろうな
PHPの仕業の場合トリガーになったのは親父のPCの起動か
誰かがまだ生きてる親父のHPにアクセスしたか
(ほぼ有料の)cron使えるサーバを今日まで親父の死後も律儀に契約し続けたか いや、普通に考えて、
『一定時間ログインしなかった事』がトリガーだろw
つまり、七回忌を狙ったんだよ、本当に親父さんなら。 本当に親父さんのイタズラなら、メールヘッダ読んでみると
どこにイタズラ仕込んであったかは割と簡単に分かるかもな。
流石にそこは隠蔽しねぇだろ。 7年だろ?
Raspberry Pi が本棚の隅とかに鎮座しててもおかしくねぇんじゃねぇの? なんでこの話でメールヘッダやラズパイなんて単語が出てくるのやらw
頭固そう >>344
頭『悪い』のが、お前だよ。
前提条件、よくお前の頭で整理してみ? そんな事を考えなくても実現できるから頭がお固いなと言ってるだけね
よく居るんだよなー
大した能力もないくせに「知ったか」で色んな単語を出したがる奴が
本人にその自覚がないのが笑えるところ > そんな事を考えなくても実現できるから頭がお固いなと言ってるだけね
どうやって実現する? 7年前、という条件だけど、分かってるか?
おまえ、本物の馬鹿だろ? >>346 は『馬鹿すぎて、煙に巻いて逃げる』に、100ガバス。 おわっ! 本当に逃げたし
>>346 馬鹿過ぎだろwww 検索用のテキストボックスに「’」と入れて検索するとsyntacsエラーになるのですが、
これはSQLインジェクションの驚異にさらされているということでしょうか? >>350
はいそうです。
SQLインジェクションは大変恐ろしいのです。
備えよう PHP5.3あたりから前のバージョンとの差分を復習のために追ってみようと思ったけど
archive.orgには残ってるけど本家ではどんどん消されちゃうんだねえ
https://web.archive.org/web/20180216004439/https://www.php.net/manual/ja/migration54.php
https://www.php.net/manual/ja/migration54.php [404] 言語の問題でなく開発者の問題だな
もちろんPHPのコアに脆弱性があることもあるがそれを利用したものではない
PHPが狙われてるのは単に利用者が多いだけだし
他の言語含めて言語自体にそういったマルウェアに対応するプロテクトが備わってるわけじゃないので
状況はいつだって変わる >>353
それ、PHPの問題じゃなくてWordPress固有の問題。 WordPressの「固定ページの子ページ」でタグ付け可能にする方法を知っている方、教えて下さい。
■子ページとは
子ページは固定ページの一種。
親ページのスラッグが「oya」、子ページのスラッグが「ko」だった場合子ページのURLは「example.com/oya/ko/」になります
■「固定ページ」「固定ページの親ページ」でタグ付け可能にする方法
https://techmemo.biz...ge-category-tag-use/
■参考になりそうなサイト
https://wordpress.st...itle-of-a-child-page >>353=プログラミングが全くできない人だという事だけはよく分かるなw
問題の本質がまるで理解できていない お昼時にゴメンナサイ、よろしくお願いいたします
PHPのバージョンを 5.6.40 から 7.3.27 に上げたら↓がエラーするようになりました
【PHP文】
ループ
$hage[$id][0]=$row[name];
$hage[$id][1]=$row[age];
$id++;
ループ終わり
【エラーメッセージ】
arse error: syntax error, unexpected ',', expecting ']' in /home/xxxx >>359
未定義定数を勝手に文字列にする仕様ってPHP7だと廃止になったんだっけ? なるほど PHP7.2以降では E_WARNINGになんのか
あれ邪魔だったもんな php.netからメールがきて焦ったわ
10年前に出鱈目な英語でPHPのバグリポート送って
見てる人は何言ってんだコイツ?状態だったと思うんだけど
一応再現できるコード書いといたから当時誰かが試してくれたのか
1票イイネ的なもの押してくれたのだがそれっきり10年経って
今更になってリプライがついて俺はどうしたらいいんだw
それによると今のバージョンでは再現しないとのことらしい >>363
問題のコードが消えてなくなるまで辛抱強く待ってたのか
案外せこい連中だ 質問させてください
このコードがエラーになるのですが解決方法ありますか?
return ($binary{0} == "0" ? bindec($binary) : 釣りなのか知らんけど釣りじゃないならエラーメッセージくらい貼りなよ エラー貼らなきゃわからん問題じゃねぇだろ。
三項演算子 a = b ? c : d ; の形になってない。
意味は、
if(b) { a = c } else { a = d}
else { a = d } の部分がない。
つまり、 : 〜 ; が必要。 return ($binary{0} == "0") ? bindec($binary) : hogehage ;
の hogehage が必要という意味。 ? の前の綴じ括弧は補完した。 失礼しました
エラーメッセージはこれです
↓
Deprecated: Array and string offset access syntax with curly braces is deprecated in ちなみにソースコードはこのページの18行目です
https://gist.github.com/hm2k/2690037
PHPをバージョンアップした後にエラーが出たので
ソースコードを弄ればエラー解消すると思うのですが、どうでしょうか?
ご教授お願いします。 >>371
すみません、わかりません、当方初心者です >>372
別人ですが、
$binary{0}
のように波括弧で配列のキーを書くことができたのはphp7までで、php8ではエラーになります。
php8では
$binary[0]
↑
波括弧ではない。[0] >>373
なるほど、そういうことでしたか!
ありがとうございました! エラーメッセージに思いっきりそのまま書いてあるじゃないか >>377
ほらよ
非推奨: 配列と文字列の添字に波括弧を使うことは非推奨になりました >>378
そんな上手に訳せるとはあなた頭いいですね! 簡単なお問い合わせフォームだけというありそうでなかった依頼が来たんだけど
素のPHPでゼロから作るとテンプレートエンジンとかバリデーションとかめんどくさいので、何か向いてる極小なフレームワークないだろうか めんどくさいってほどめんどくさくないだろ
html部を除けば1時間で終わる
そんなFWの選定やらよくわからんものの使用方法学ぶよりさっさと作っておしまい セキュリティ的にある程度しっかりしたことしようと思ったら面倒じゃない?
適当に作ったら絶対抜けがあるし お問い合わせフォームで本当にめんどくさいのは
「お客さんから確認メールが届かないって苦情が来てるんだけど…」
だよ。 それ単に迷惑フォルダに入っているだけでは?と回答して終了じゃない? ■ このスレッドは過去ログ倉庫に格納されています