PHP質問・雑談スレ 2【初心者お断り(ROM歓迎)】©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん 転載ダメ©2ch.net
2016/10/17(月) 21:44:12.59ID:???初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
http://echo.2ch.net/tech/ (【PHP】で板内を検索)
前スレ
http://tamae.2ch.net/test/read.cgi/php/1461283091/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
http://ideone.com/
・プログラミングのお題スレ Part8 (求PHPer参戦)
http://echo.2ch.net/test/read.cgi/tech/1444216746/
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造
0596nobodyさん
2016/11/28(月) 23:11:21.71ID:Jo2/Mp4P知らん。
ただ、メモっておくとほんと便利。
コード忘れても基本自分のノート代わりにしてるので
検索してすぐ欲しい情報が見つかるからね。
他人が書いたくそメモサイトと違って
自分の言葉で自分が分かる事に特化した記載をしてるのでほんと快適♪
0597nobodyさん
2016/11/28(月) 23:17:13.31ID:???そもそも正規表現で弾くような必要が本当にあるのか問い詰めたい
0598nobodyさん
2016/11/28(月) 23:45:26.94ID:???開いただけで使うかどうかはまた別の話。
タイトルや引っかかった文で目的のものか開いてみるけど、開いたら全然見当違いだったってことは多い。
0599nobodyさん
2016/11/28(月) 23:47:06.69ID:???あなたが書いてるコードがどういうものか分からないけど、そのくそメモサイトの同類になってないなら別にいいと思うよ。
ただ、自分用のメモなら全世界に公開する必要なんてないだろとも思う。
0601nobodyさん
2016/11/29(火) 01:00:04.73ID:???別に>>592が悪いと言ってるわけじゃないよ。
嫌だとも思ってないし。ただ調べものしてるとサイトを開いた回数と、その内容が参考になる回数は大幅に違うってだけ。
0603nobodyさん
2016/11/29(火) 09:25:35.65ID:???公開すると適度な緊張が生まれて微妙に洗練されるんだよな
まぁそれで助かる人もいるだろうしいいんじゃね?
俺は一応エラーと解決方法を積極敵に載せるようにしてるよ。ハマったときが一番きついからな
0604nobodyさん
2016/11/29(火) 10:45:32.56ID:???新着に近い場合は評価も付かないから、リンク開かないと内容がわからん
で、開いてがっかりする
0605nobodyさん
2016/11/29(火) 10:52:03.75ID:???永遠なんて、ないんだよ
0606nobodyさん
2016/11/29(火) 11:07:31.92ID:QC5ddTRE>俺は一応エラーと解決方法を積極敵に載せるようにしてるよ。ハマったときが一番きついからな
うん、これで何度か救われた
>>604
見るなバカ
0607nobodyさん
2016/11/29(火) 15:29:54.33ID:???0608nobodyさん
2016/11/29(火) 16:03:32.57ID:/xcsBLK+0610nobodyさん
2016/11/29(火) 17:05:20.73ID:???同じアホなら見せなきゃ損損
0611nobodyさん
2016/11/29(火) 19:58:25.40ID:QC5ddTREのぞいてんじゃねーよ。変態!
0612nobodyさん
2016/11/29(火) 21:45:24.60ID:???0613nobodyさん
2016/11/29(火) 23:53:26.53ID:???0614nobodyさん
2016/11/30(水) 00:02:30.80ID:J1ZKp0ZYうっせーばか。仕切るな
0615nobodyさん
2016/11/30(水) 03:51:04.75ID:???0617nobodyさん
2016/11/30(水) 18:20:49.91ID:???・関数を3つに分ける
例)photoSmallUrl, photoMediumUrl, photoLargeUrl
・関数の引数で指定させる
例)photoUrl(int $id, str $type = 'small')
どちらがベストプラクティスですか?
0618nobodyさん
2016/11/30(水) 19:37:49.32ID:J1ZKp0ZYお前の脳みそでは無理
がベストチョイス
0619nobodyさん
2016/11/30(水) 20:15:36.96ID:???1案のコードを書いてみると、おそらく3つの関数でほとんど同じコードが出てくる結果になるだろう。
その場合、当然2案にリファクタリングすることになる。
0620nobodyさん
2016/11/30(水) 20:16:49.27ID:???後者
まぁ前者は可変関数なんてのもあるけどな
http://php.net/manual/ja/functions.variable-functions.php
0621nobodyさん
2016/11/30(水) 20:48:32.17ID:???可変にしてもコードが重複するのは変わらんからね。
関数を可変にするのは今回のような場合の為じゃないかな。
0622nobodyさん
2016/11/30(水) 20:54:41.13ID:???0623nobodyさん
2016/11/30(水) 22:28:20.62ID:???0624nobodyさん
2016/12/01(木) 05:11:23.70ID:???だから違和感があってな
0625nobodyさん
2016/12/01(木) 05:11:55.22ID:???まぁさっしてくだし
0626nobodyさん
2016/12/01(木) 17:15:12.06ID:???elseif?
0627nobodyさん
2016/12/01(木) 20:26:43.07ID:aRkR7W4hお前の顔もおかしいよ
0628nobodyさん
2016/12/02(金) 12:55:15.56ID:???http://php.net/index.php#id2016-12-01-3
0629nobodyさん
2016/12/02(金) 13:26:41.26ID:???0630nobodyさん
2016/12/03(土) 13:17:39.70ID:???0632nobodyさん
2016/12/17(土) 09:45:26.51ID:???$fp = stream_socket_client( "tcp://xxx.xxx.xxx.{$i}:1234", $errno, $errstr, 0.3 );
if ( $fp ) {
echo "{$i} OK\n";
fclose( $fp );
}
}
一括サーバチェックコードなのですが、
$iを増やせば増やすほど正常なのにレスポンスが返ってくることが少なくなります。
たまに調子が悪いと漏れますが、1個ずつやれば自分とのやり取りは0.2秒でも問題のない国内サーバ群です。
タイムアウトを3秒ぐらいにすれば問題がなくなるのですが、それだと時間がかかりすぎます。
これは単純にPHPだけの問題じゃない気がするのですが、どこを見なおせばいいでしょうか?
0633nobodyさん
2016/12/17(土) 10:19:26.66ID:???0634632
2016/12/17(土) 11:22:19.39ID:???ありがとうございます。
sleep挟んでみましたが特に効果は見られませんでした。
3秒ぐらいにすると10までしかいかなかったのが20ぐらいになる程度には改善するのですが、すぐに手詰まりになります。
OS(Windows)側でTcpTimedWaitDelayを30秒に変更もしてみましたが、それも特に効果はありませんでした。
一番安定するのはソケットのタイムアウトを0.3秒から増やすことで、それ以外はあまり効果がないようです。
0.3秒でもリスト(上のコードはforですが実際はforeachでやります)の最初のほうに持ってきたIPはポンポン返るんですけどね。
0635nobodyさん
2016/12/19(月) 10:56:38.32ID:???まず何エラーが発生してるのか教えろ
問題の把握&解決法
・tcpをダンプして何が起こっているのか観察する
・スレッドを使える言語にしてタイムアウトを伸ばす
・PHPじゃなきゃ駄目なら、複数プロセスを同時に起動させて対象を分割しタイムアウトを伸ばす
0636nobodyさん
2016/12/19(月) 11:36:42.72ID:???> これは単純にPHPだけの問題じゃない気がするのですが、どこを見なおせばいいでしょうか?
別手段で同じ事やってみて、再現するかどうか試してみたら?
0637nobodyさん
2016/12/19(月) 14:57:55.84ID:???前提として、まず、*.*.*.0と*.*.*.255が同時に使えるということはない。
さらに、*.*.*.256〜は使えない。
それはわかってるのか?
0638nobodyさん
2016/12/19(月) 15:57:55.19ID:???0639nobodyさん
2016/12/19(月) 16:06:34.88ID:???0640nobodyさん
2016/12/19(月) 17:32:46.69ID:???0641nobodyさん
2016/12/19(月) 20:17:26.20ID:???0642632
2016/12/20(火) 15:57:45.40ID:???> 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
> または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
エラーはこんな感じです。
遅延を伸ばせば期待通りになります。
wiresharkの使い方もよくわからず、tcpダンプとかちょっとレベルが高くて無理なので、
あれから試行錯誤してみたところわかったことが1つありました。
チェックに使うサーバ郡は、応答が返って来ないサーバのほうが多いぐらいなのですが、
その中から返ってきたもののみを抽出して、再度チェックしたところ、
全てのサーバが0.1秒でも問題なく返ってきました。
>>632のコードで全部ifの中を通ってきたということなのですが、
ひょっとしたらfcloseしないことが何か関係しているのでしょうか?
スレッド使えというのはもっともな意見ですね。
とりあえず今回の問題の原因が気になるので、もうちょっと調べてみようと思います。
0643nobodyさん
2016/12/20(火) 16:56:26.59ID:???> チェックに使うサーバ郡は、応答が返って来ないサーバのほうが多いぐらいなのですが
そのサーバは、ポート1234でlistenしているの?してないの?
してるとしたら、サーバ側でログは出せないの?
別手段で試すことはできないの?
0644632
2016/12/20(火) 17:44:20.39ID:???サーバの管理者は自分ではありません。
そのため、今現在各サーバ管理者がlistenしてるかどうかまではわかりません。
サーバがどういうものかよくわかっていないような人でも、
設定不要でワンクリックでWindows上で立てれるような代物なので、
中にはダイナミックなIPアドレスでDDNSを使わず運用してる人もいると思います。
古い情報も多く整理するためにやっているのですが、
今の書き方だと問題のないサーバまで弾いてしまう可能性があるので、
原因がどこにあるのか(PHPの問題なのか)知りたいです。
専用クライアント使って別手段で1個ずつ試すことは出来ますが、時間がかかりすぎる上に手動になるので・・・
0645nobodyさん
2016/12/20(火) 18:14:23.46ID:???> 専用クライアント使って別手段で1個ずつ試すことは出来ますが、時間がかかりすぎる上に手動になるので・・・
少しは調べろ
https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=windows+tcp+%E7%96%8E%E9%80%9A%E7%A2%BA%E8%AA%8D
0646nobodyさん
2016/12/20(火) 18:21:39.38ID:???> 遅延を伸ばせば期待通りになります。
期待通りって何だよ?
> 1個ずつやれば自分とのやり取りは0.2秒
とあるが、>>632のコードのタイムアウトを10秒とかにすると、生きてるサーバは全部0.2秒以内に戻るのか?
0647nobodyさん
2016/12/20(火) 18:51:50.60ID:???0648632
2016/12/20(火) 20:13:02.88ID:???別手段ってそういうことだったんですね。
なんか特別な専用ツールがないかみたいなことを聞かれてるかと思ったので。
>>646
>>641へのレスだったのですが、長めに5秒にしてみたのですが、生きてるものはちゃんと返ってきました。
この生きてるものというのは、0.3秒で10個ずつ分割して、コンソールからやったときに正常に返ってきたものと同じです。
これを10個ずつとか分割しないで、一気に1回でやったら5秒なら返ってきました。
>生きてるサーバは全部0.2秒以内に戻るのか?
生きてるサーバにたいしてタイムアウトを0.1秒にしたら(分割しないでも)全部返ってきました。
>>647
なんか他にいい手段ありますか?
0649nobodyさん
2016/12/20(火) 22:49:27.33ID:???0650nobodyさん
2016/12/21(水) 11:05:46.46ID:???>>648
> これを10個ずつとか分割しないで、一気に1回でやったら5秒なら返ってきました。
と
> 生きてるサーバにたいしてタイムアウトを0.1秒にしたら(分割しないでも)全部返ってきました。
は、矛盾してるが。
> なんか他にいい手段ありますか?
質問の意図は、なんでstreamを使ってるのか、だ。
普通の手段をなんで使わないんだ?
http://php.net/manual/ja/book.sockets.php
とか
http://php.net/manual/ja/ref.network.php
(つか、検索しろよ)
0651nobodyさん
2016/12/21(水) 13:12:59.09ID:???0652632
2016/12/21(水) 15:25:46.59ID:???いくつかのタイトルのゲームサーバです。
>>650
>>632のコードで、0〜255までのうち、偶数は正常で応答があり、奇数は異常で応答がないとし、
これは正常なサーバの状態とします。
stream_socket_clientのタイムアウトは0.3秒に設定されていますが、
これでは、最初の方は正常に応答があるものの(分割した理由はこのため)、ある程度いくと、
正常なはずの偶数のサーバの応答も返ってこなくなります(100%ではありませんが)。
しかし、タイムアウトを5秒まで伸ばしたところ、全て正常に応答が返ってくるようになりました。
ちなみに分割というのは、sleepを挟んでということではなく、
一度スクリプトを終了して、再度スクリプトを起動しています(引数でstartとendを指定するイメージ)。
forのインクリメントを$i++から$i+=2にし、正常な偶数のサーバのみに問い合わせた場合、
タイムアウトを0.1秒にしても全て正常に応答が返ってきます。
教えていただいた関数ですが、上のはクライアント側には使わないと思います。
下のはfsockopenのことを言っているのなら、stream_socket_clientとほぼ同じ関数です。
0653632
2016/12/21(水) 15:41:28.87ID:???使わないというのは語弊があったので、訂正します。
使う必要がないというニュアンスでお願いします。
サーバの仕様がわからないので・・・
0654nobodyさん
2016/12/21(水) 16:38:45.41ID:???0655632
2016/12/21(水) 16:40:31.51ID:???正しくはWindows7+PHP5.4です。
ハード的にいえばWindowsのものよりだいぶ劣っているのですが、
先ほどCentOS7+PHP7の別環境を構築したので(VM上ではなく専用機)、
>>632のコードを実行しましたが、同一回線で問題なく最後まで正常に動作しました。
Windowsのソケットが悪いのか、ハードに問題があるのか、
何が原因かまではわかりませんが、どうも環境依存っぽいです。
環境依存となると、正確な情報が欲しければタイムアウト伸ばしたほうがよさそうなので、
一応Javaでもためそうとおもいますが、とりあえず構築したLinuxで気長にやることにします。
0657nobodyさん
2016/12/21(水) 18:35:56.95ID:???お前らいい加減学習しろよ
0658nobodyさん
2016/12/22(木) 12:51:15.27ID:???0659nobodyさん
2016/12/23(金) 23:24:25.82ID:GYV6CxEoSESSIONなのか、classなのか、それともtmp用のテーブルを作るのか・・・
何か色々作ってみたいのですが、前に勧めません。とりあえずなんでもいいから作って見たほうが良いんでしょうかe?
こういうのは場数を踏むしかないんでしょうか?
0660nobodyさん
2016/12/23(金) 23:58:36.32ID:???IOは別クラスに切り出すと後のストレージ切り替えなんかの変更に強い
が, 考え過ぎて手が動かないよりは最初は手を動かした方が良い
0661nobodyさん
2016/12/24(土) 00:05:01.87ID:Zz5BM5EIありがとうございます
失敗しても何かの糧になると思って、やってみます
0662nobodyさん
2016/12/24(土) 07:51:09.57ID:???だいたいあれこれ考えてると完成までしないで構想で終わるから
0663nobodyさん
2016/12/24(土) 08:43:49.53ID:???そう。あとセキュアも完璧主義になりすぎると、リリースできない。
破壊される前提で設計したら負けない。
0664nobodyさん
2016/12/24(土) 09:02:16.35ID:Zz5BM5EIそれちょっと違うくね
0666nobodyさん
2016/12/24(土) 12:30:40.79ID:???自信ないやつは笑われてもそうすればいいんだぜ
普通じゃないことをさも当たり前のように言わなければ
自分は糞だからそうするって自覚してれば何をしたっていいじゃない
0667nobodyさん
2016/12/24(土) 12:34:40.76ID:???0671nobodyさん
2016/12/25(日) 16:38:23.16ID:???抽象化も下手くそだし、こいつは普段どんなコードを書いているのかというのがひと目で分かるな。
0672nobodyさん
2016/12/25(日) 16:48:34.64ID:k0peFTaNリソースも実質無制限にあるようなもんから速度以外考えない
そりゃ環境に甘えたコードが出てきてしまうだろう
0673nobodyさん
2016/12/25(日) 17:32:25.87ID:???なに!? おまえPHPマスターになにいってんの?
完全なセキュアなんて無いんだが?
オレの手法は免震構造マンションからヒントを得ている。固く守れば逆に崩れる。
ハッキングされようがその力を無力化する。おまえのスペックでは理解不能の次元であることを謝罪する。
0675nobodyさん
2016/12/25(日) 20:58:02.34ID:k0peFTaN尊大さが足りない
0676nobodyさん
2016/12/26(月) 00:08:21.78ID:???0677nobodyさん
2016/12/26(月) 00:18:19.36ID:BpT0k2cTソロだとアホらしいだけだ
0678nobodyさん
2016/12/26(月) 11:20:55.28ID:miFRCdVbhttps://youtu.be/uH-WOOcNZ0s
https://youtu.be/xHx5MbIGEoY
0679nobodyさん
2016/12/26(月) 11:45:29.81ID:BpT0k2cT0680nobodyさん
2016/12/26(月) 12:03:46.34ID:???//
}
$input['q']が存在してなおかつ空ではないことを確認する場合、
上記よりも簡潔な書き方はありませんか?
0682nobodyさん
2016/12/26(月) 15:52:00.20ID:???0684nobodyさん
2016/12/26(月) 22:16:26.19ID:???今知ったけど怖すぎて使えない
gmp_divexact
gmp_divexact ― 正確な除算
GMP gmp_divexact ( GMP $n , GMP $d )
高速な "exact division" アルゴリズムを使用して n を d で割ります。 この関数は、n が d で割り切れることがわかっている場合にのみ正確な結果を出力します。
$div2 = gmp_divexact("10", "3"); // 間違った結果となります
echo gmp_strval($div2) . "\n";
0686nobodyさん
2016/12/27(火) 22:27:51.95ID:???死にたい・・・
以下で半日潰れましたorz
これはマッチしてしまう
var_dump(preg_match('/[あい]/', 'う')); // int(1)
0687nobodyさん
2016/12/27(火) 23:09:25.98ID:???マルチバイト使うのにuオプション付けないお前の頭がクソ
PHPにクソな部分があるのは否定しないがそもそも外部ライブラリ側の仕様持って来るヤツはプログラミング向いてないから早いとこ引退しろ
0688nobodyさん
2016/12/28(水) 01:50:10.42ID:???こっちで回収しておく
0689nobodyさん
2016/12/28(水) 09:04:28.87ID:???0692nobodyさん
2016/12/28(水) 21:36:15.17ID:???PHPでpear::mailを使ってヤフーでSMTP認証してヤフーからメール送れますか?
0693nobodyさん
2016/12/28(水) 21:43:17.54ID:???0694692
2016/12/29(木) 00:28:31.69ID:???ありがとうございました
0695nobodyさん
2016/12/29(木) 22:45:48.26ID:???「はいはい、emptyね」みたいな感じで昔書いたコードを読んでいったら、
そのへんは全部対策してあるのになおも値がとれなくて、
どうなってんだこれ?と思ったら、
keyがアンダースコアとハイフン間違えてて本当にPOSTされてないだけだった。
PHPさん疑ってごめん。でも君は普段から疑わしすぎるんだよ。
0696nobodyさん
2016/12/30(金) 08:33:26.83ID:???PHPStormで、カーソル位置がPHPの関数の文字列にあるとき、
F1 キーを押すとPHP日本語ヘルプでその関数の説明をを表示する
ようにしたいです。
ご存じの方いましたら教えてください。
■ このスレッドは過去ログ倉庫に格納されています