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の改造 >>234
イメージが悪くなった, という話の流れなんだがな Javaは元々、冗長すぎてまともなプログラマからは嫌われていた。 JAVAが世界を席巻していた頃は
まさか将来毎年のように新言語が
登場するようになるとは夢にも思ってなかった
JAVAで世界は統一されると堅く信じていた >>236
PHPで全然かまへんで
ただPHPでかけるがSwiftやC#でかけないなんてことはないと思うぞ
(Webに限っては)その逆もしかり
まあどっちが楽かっていう問題はあるけどね
PHPはimportするパッケージ探すとこから始めなくていいことも多いしな PHPまでしかできない奴はc#は無理な奴かなり多い 動的型付け言語全般がタイプヒントつけるのがしんどい c#で何をするかによるが
少なくともVSで開発するGUIアプリは
htmlとjavascriptの基礎があれば作れるだろう laravel使っているのですがphpかlaravelで下記のことはどうすればできますか?
ページ内のボタンをクリック→データベースのテーブルを作成 CREATE TABLEとかのDDLは普通はマイグレーションで実行するよな
APIで誰でも実行出来るようにするなんて普通はない 企業内閉鎖系ならまだしもネット接続でそんなの開放したらイチコロだな ちょっとfuel phpの仕様でdoc読んでも見当たらないので教えてほしいんだ。。
fuel/app/config/routes.phpで
return array(
'api/hoge' => 'hoge',
'api/hige' => 'hige',
'api/hage' => 'hage',
);
ってなってるのを
return array(
'api' => array(
'hoge' => 'hoge',
'hige' => 'hige',
'hage' => 'hage',
),
);
って出来る?
目的としてはクソみたいに汚くなったルーティングを整理したいからで
ソース読んだ限りだと正規表現を利用する書き方的なことをしないと
ダメっぽい気がしたんだが一応確証がほしい そんな事より
なんでarrayじゃなくて[]で書かないの? >>249
無知乙
>>250
グラブルが2019時点でいまだにfuel採用しているし豚みたいなLaravelより軽いし
>>249みたいなスクール上がりの馬鹿なカスが寄り付きづらいから割とピンピンしてる >このスレで扱わない話題
>・直接関係ない○○特有の質問(専スレへ)
> (HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
https://medaka.5ch.net/test/read.cgi/php/1321843505/
ageて質問したら誰か答えるんじゃね?
マイナーなFWしかも5chみたいな人いないとこで質問してんだから
答え返ってこないことは覚悟してくれ ffmpegコマンドを叩いて変換待ちってのはどんな感じに実装すればいいですか? >>253
裏でやらせておいて、出来上がったら教える感じで実装する >>254
マルチスレッドとかで並列処理をするかんじですかね?
pthreadとかでいいのかな?
それでタイムアウト対策とかはどうしたらいいんでしょう?
flushとかそのへんを使う感じですか? >>255
バックグラウンドで動く別プログラムをsystem関数で呼ぶとかする
タイムアウトも別プログラムに勝手にやらせる 最近のフレームワークならキューに入ったジョブを実行するシステムがあるだろう ffmpeg は処理途中で標準出力するから同期処理は無理じゃねえ。 >>259
標準出力をファイルに落として、のぞき見 公式のwindows版PHPってあれMSがビルドしてたのか
野良ビルドよりは安心だけどまあ正直どうでもいいっすねw
公式が書き換えられたりしても気づくことなく
公式にあるってだけでホイホイダウンロードしちまうだろうし MS、なんでPHP8ビルドしないん(´・ω・`)? MSがPHPを切ったのではない
PHPがMSを捨てたのだ PHPってなんで未だにasync awaitないの?
C#、JavaScript、Pythonはあるでしよ
Javaは無いみたいだけど
コールバック地獄なしで非同期コード書きたい >>267
forkすればいいじゃん
なんでいちいち待つの? >>268
Guzzleのpromiseも
curl_multiも知らない男の人って・・・ forkって
親プロセスと変数は共有出来ない(子プロセスの変数を変えても親プロセスの方はそのまま)
その一方MySQLを使ってると子プロセスが終了時に接続がクローズされる
何も良いことがなさげなんだが
親プロセスと変数が共有できないなら
普通にexecする方がマシじゃね?
それだけじゃなく
実行時間が短い処理には
プロセス生成はオーバーヘッドが大きすぎる 「hogeしか出来ない人」
が存在する言語ってもしかしてphpしかなくない?
マジで? 言語の欠点をどうやって補うかって話じゃなくただ言語の欠点をあげつらうだけなら、
普通に他の言語使えば?としか思わんのだが
他の言語使えないというならお前が無能なだけだろうと PHPはNodeと違ってイベントループがコア機能として組み込まれていないから
Guzzleの場合、非同期処理の恩恵を得るには
Promiseの配列(またはイテレータ、ジェネレータ)を用意して
適切な場所でそれをwaitしてイベントループを回す必要がある
場面によっては非同期の恩恵を得られない
言語に非同期処理が組み込まれてないのもこの辺が理由か
イベントループって、
リクエストの度にプロセスを初期化するPHPの構造と合わなそうだし 質問させてください。
今PHPで3択クイズを作ってます
配列に正解が1つと間違いが2つ入ってます
この3つをランダムに表示させて答え合わせしたいのですが
やり方がわかりません。先輩方、ご教授お願いします。 >>274
完全なランダムはPHPでは使用できません。
PHP以外の言語でも完全なランダムは不可能です。
あと30年ほど経てば、利用できる可能性があります。 >>275
お前リアルでもそんなこと言ってんの?w $a[0] = "正解";
$a[1] = "間違い1";
$a[2] = "間違い2";
shuffle($a);
ここまでは考えたのですが
これをどうやって正解判定するのか
案外難しいですねこれ・・・ >>278
ありがとうございますた!
ちなみにくだスレないです(´;ω;`) file_get_contentsでtwitterを読んでrssにするプログラムが
いつの間にか動かなくなっていたので調べたところ、
ツイッターのページがほぼJavaScriptのみになっていてツイートをHTMLとして含まないようになっていました
もうtwitter APIを介して取得するしかないのでしょうか? >>281
twitterをRSS化するサービスがいくつもあったので、それを使うことにしました
失礼しました phpで掲示板を作ってます
threadテーブルとpostテーブルがあります
threadテーブルのカラム
・thread_id(スレッドID)
・time(スレッド作成タイム)
・title(スレッドタイトル)
postテーブルのカラム
・thread_id(スレッドID)
・name(投稿者)
・res_no(レスナンバー)
スレッド一覧を表示する際、タイトルの横に投稿者を付けたいので、以下のSQLを発行しました
sql = "SELECT t.title, p.name FROM thread t JOIN post p ON t.thread_id = p.thread_id WHERE p.res_no = 1 LIMIT 0,10"
※行 0 - 9 の表示 (合計 10, クエリの実行時間: 0.0029 秒。)
スレッド作成順にソートしたいため、ORDER BY句を入れると
sql = "SELECT t.title, p.name FROM thread t JOIN post p ON t.thread_id = p.thread_id WHERE p.res_no = 1 ORDER BY t.time DESC LIMIT 0,10"
※行 0 - 9 の表示 (合計 10, クエリの実行時間: 0.6489 秒。)
と実行時間が大幅に上がってしまいました
実行時間を抑えるためにどうしたら良いですか? 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の過去改変は無理だよね
無害なコミットに見せかけて紛れ込ませたウイルスが無いかってことじゃね ■ このスレッドは過去ログ倉庫に格納されています