PHP質問・雑談スレ5【初心者お断り(ROM歓迎)】
■ このスレッドは過去ログ倉庫に格納されています
PHPに関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
https://mevius.5ch.net/tech/ (【PHP】で板内を検索)
前スレ
https://medaka.5ch.net/test/read.cgi/php/1498653249/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
https://ideone.com/
・プログラミングのお題スレ (求PHPer参戦)
https://mevius.5ch.net/test/read.cgi/tech/1538096947/
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造 iconv_strlen()ってmb_strlen()と何が違うんや・・・ array_intersectとか使う方法を思い浮かんだが
コードは短くてもどう考えてもおせえな >>483
自分の環境だとpreg_matchより倍ぐらい速かったよ
GoogleCloud GAE PHP5.5の環境で1000回実行したときの時間
preg_match 1.7ミリ秒
strpos 0.8ミリ秒
ちなみに配列ブン回すロジックは1.9ミリ秒だった 468、476、481 はプログラマの適正なし!
ふつうのコードは470だろ
計算量?速度?そんなの元の質問にねーよw >>487
言われなくても考慮するのがプログラマってもんだろ ユーザビリティに影響するなら考慮するけど、
>>486にもあるように0.0008秒の差でしょ。それ考慮して何かあるのけ 正規表現は荒れるからやめろよ
>>468はとても説明的で初心者向けだと思うがな >>489
この測定はあくまでも5文字から3文字分の先頭を求めるロジックの測定
質問者が例題でそうしただけでとんでもない容量のデータを対象にした場合は結果も変わってくるでしょう
preg_matchはレングスによっては動作しなくなるみたいだし >>487
速度の話になって対比で書いただけだから
ま、実際strpos使って正規表現は使わんけどね 単純検索や置換で正規表現止めとけは分かるけどこの内容なら普通に正規表現でいいわ /[DEF]/
$m[0]
でいいだろ
グルーピングする理由がない >>491
>preg_matchはレングスによっては動作しなくなるみたいだし
これマジ? どのくらいから動作しなくなるの?
ちょっとソース教えてクレメンス >>491
100回でも0.1秒差だぞ
>>465の処理をそんなにループさせる場面を想定してるの?w
それともこんな変な処理ばっかり押し付けられてるの? >>496
一回では測定出来ないから1000回の時間で比較しただけだよ >>495
気になったので試してみた
4億8000万文字でも大丈夫だった
$text = str_repeat ( 'D' , 480000000 );
if(preg_match("/([DEF])/",$text,$m)) echo $m[1];
4億8000万文字はphpがエラーになった。
$text = str_repeat ( 'D' , 490000000 );
制限無いと思う
>>491
嘘つきは朝鮮人の始まりだぞ >>487
ペチパーってレベル低いな
そのまま解こうとしててバカみたいだわ
>>465の要件がおかしいんだからそれを直せよ 単純な文字列検索は配列でもstrposのほうが安全 if (preg_match('/[DEF]/', $text, $matches)) {
// $matches[0] <-
}
って書いといてパフォーマンスが気になるなら計測してから直す
最初からパフォーマンスが―ってのは無能 >>470はきれいなサンプルコード書いてやれよに呼応して出したんだろ
JavaScriptの小技的なサイトにのってそうな初心者受けしそうなコードじゃないか
質問者も満足して帰ったんだしそれでええだろう スレ的にはトリッキーでも面白いコードをみたいところだが
そんなコードが出てきても
速度 読みやすさ コードの長さ どれかに欠点もっててボロクソ叩かれる運命 >>506
動かなかったのは仕様をちゃんと読まなかった私の責任です
と書いてあるね >>507
質問者はpreg_match使うって言ってたからこの辺のリスクも知ってもらわないといけない /[DEF]/とかバックトラックも再帰もスタックもO(1)だろ >>499の言う通り
どうせ実際の用途は違うんだろ 正規表現のほうが改修ラクだしいいだろ
文字一文字じゃなく文字列になった場合でもちょっと変えるだけで済むし 改修が楽なわけないじゃん
strposなら配列に文字列のリスト突っ込むだけに対して
正規表現は何するつもりだ?orでつなぐのか?アホくさw 正規表現はどうしても荒れるね
>>512みたいな低レベルが自覚せずにしゃしゃりでてくる >>513
じゃ答えてみろよ
まさかただの文字列検索にpreg_matchで配列渡すとか愉快なこというんじゃないだろうな? >>514
その前に君の意見をどうぞ
随分と高尚なのでそれに見合った意見があるのだろう
別にコードで書かなくてもいいぞ 正規表現に変数突っ込むのはあかんのか?
<?php
$text = "ADCEB";
$match = "DEF"
if(preg_match("/([".$match.""])/",$text,$m))
echo $m[1]; >>515
>>512で答えてんだろうが
理解出来ない雑魚は引っ込んでろよ 3日間も大盛り上がりしてるから仕切り直してみよう
"PHPに関する質問や雑談をするスレです。" *1
この文字列において、
("PHP","質問","雑談") *2
の単語のうち最初に出てくる単語を返しなさい
実際の運用において*1の文字列は大変長いものであり、
*2の単語や数は変わりうるものとし、
実行速度を考慮した上で最適なコードを述べよ
ファイッ >>519
大変長いってのはマジでやめてw
保守性だけに笑点しぼってほしい ああ、スマン
複数の文字列から検索ってのに脳内変換してた
$match = ["DEF", "CEB"];
foreach ($match as $var)
if (strpos($text, $var) !== false) //match
アホくさと言ったコード↓
$match = implode("|", $match);
if (preg_match("/(".$match.")/", $text)) //match
>>516見て>>511の言いたいことは理解した
preg_match("/(".$match.")/", $text)って言いたかったのね
ただそれだとpreg_match使う意味が全くないし
strposに比べて改修楽って主張も全く意味わからんけど >>512
| を知らんのか?正規表現を知らない初心者かよ >>522
こいつ殴っていい?
orと|が別物とか言っちゃうの? >>519
$pdo = new PDO("sqlite::memory:");
以下略 <?php
$text = "PHPに関する質問や雑談をするスレです。" ;
$match = ["質問","雑談"];
$boolean = strpos($text,$match);
if($boolean){
var_dump($boolean );
}
これあかんのか strposに配列渡せるのは知らんかったわ
うえのほうでforeachで回してるもんだからてっきりそういうもんかと
オーバーロードはマニュアル分けてほしいわややこしい クライアントが使っているレンタルサーバーが全部5系で絶望中
7系に対応してないサーバーや、7.0系にしか対応してないサーバーが多い
5系でも5.6系じゃなくて5.1系とか5.3系とかとっくに死んでるのも多い
5.1系でWP4系を動かしてる無茶なサイトもあるし
そもそも互換性がないから安易に7系に移行できない
セキュリティーサポート終了は知らなかったことにしたい
あるいはガッツリ金と時間を取って対応したい クライアントからクレーム来た
アルファメールのphpバージョンが5.4→7.0
どっちにしてもセキュリティ的に問題があるだろってさ
知らんがな、それ選んだのは君だろう >>529
うおっとすごい奇遇だね
なんか流行りでもあるのかね。スパムメールで営業でもしているのだろうか
とりあえず金とって対応スべきだとは思う
これはハイハイといっていい案件ではないわ array()とかcreate_functionとか書かなきゃいけないサーバは勘弁してほしいわ >>531
金と時間の話も絶望的だが仮に金と時間が取れたとしても
全てのクライアントのサーバー引っ越し作業が必要になる絶望感 >>529
うるせーぞ
保守案件とはいえ いまだに4.4使ってんだこっちは 4.4とかセキュリティ的に怖いすぎる
調べるのも面倒なレベルだ 保守案件だからこそバージョンが問題になるんじゃないのか・・・
ネットに繋がってないシステムなら話は別だけど
結局、まだどこも5系使っているし、
赤信号皆で渡れば怖くない的な状態?
いやこの場合、皆だと更に怖いんだけど 零細相手だと金がないからその場しのぎでアップデート渋ってるんだろ
結局そっちのほうがコストかさむのにな お問い合わせフォームで入力してもらう件名や本文の文字数の上限って皆さんどんな感じで決めてるんですか? >>538
それができるなんてうらやましい
妄想じゃないよな? 対応出来るかどうかは別にしてもセキュリティについて責任持てませんは言わなきゃダメよ実際責任持てんし まぁこれはweb業者側から言って置かないとダメだな
書面にして残しておくぐらいでも良い
ってか、アップデートぐらいしようよ、普通に だってレンタルしているサーバーが対応してないんだもん
同じ会社の新しいサーバーは対応しているけど、
クライアントはいっぱいいて1つ1つ移行を代行するのも大変なんだもん
わからない?
わかったらどーしたらええか教えてくれや 暇があれば移行できるとはなんとも小規模事業者のような考え方
あるいはその逆で大規模技術者集団か
うちみたいに人員と技術力に見合わない規模の事業やっている、
中途半端なところが大変なんです >>538
じゃあ 6 でお願いしますね(ニッコリ 開発が頓挫してリリースされなかっただけで存在しないわけではないのでは? >>543
金を請求して、サーバー移行作業を行うのが正しい姿
最低限蔵には現状ヤバイ状態と言うだけ言っておかないと、
今後何か合った時に大惨事になるよ >>550
そりゃそうなんだけど、
クライアントに説明して金を貰うところまでは
(一社一社やっていくわけだから面倒だけど)とりあえずはいいとして、
その後の実際の仕事の量に絶望するよね
うちサーバー移行のノウハウないし 世の中素人なのが当たり前
だからこれだけPHP5が使われている 素人なのは恥ずべきことであって
決して開きなおるようなことではない 一部の7使いが高みの見物をする中、
多くの5使いがいつか大殺戮に遭うんだろうな
素人なのは嘆かわしいことでもある 個人情報取り扱ってなかったらHPがエロサイトになるぐらいで済む
平気平気 今までextだったのがバンドルされてたり廃止されたりして設定がなくなってたりするけど
そのへんdllや設定読み込み無視したりでPHP5の設定をPHP7でそのまま使える?
まあめんどくさいしソースからビルドはしないで
パッケージから入れて使うext有効にするだけなんだけど…
最近じゃ専用PHPが必要なlsws使ってるからリリースすぐに最新のPHPアプデ出来るしな lswsってどう?Apacheと同じ感覚でつかえる? LSWSはPHPerなら非WPユーザーにもおすすめ
Apacheのルールが使えるからリライト設定も楽だし
PHP製の設定ツールが標準でついてて
設定ファイル編集からサーバ再起動までWebで出来るのも良い
http2も証明書設定すませるだけで使えるようになってたしとにかく楽
肥大化しすぎたApacheをシンプルにまとめたような代物
信頼性堅牢さの評価はわからんが特に問題にもなってないし大丈夫だと思う >>540
え、むしろ君のところでは出来ないの?
保守案件なんかは仕方ないかもしれんけど、新規は5系切り捨ててるよ。
だって実際5系切り捨ててるフレームワークやライブラリ増えてきてるし。
Laravelなんかはバージョン5.5から5系のphp切り捨ててるよ。 phpバージョンってずーっとほっといたら強制的にバージョン上がったりする? >>567
俺たちじゃ分からないからサーバー管理者に聞こう 今からFWやCMSみたいな第三者に使ってもらう前提のものを作るとして
5系は全く配慮しなくてもいいだろう(少なくとも国内は)
数百円でも有料サーバなら今どき7も使えるように配慮してるわ
たとえ4時代から使ってるような古いサーバであっても
15年ぐらい前に使い始めて未だアカウント有効なxreaがまさにそう(放置して無料プランだけど)
昔はサーバごとに入ってるPHPのバージョンはバラバラで
なかなか上がらないバージョンに不満があってだいぶ昔に見限ったけど
いつのタイミングかどのサーバでもPHPのバージョン選択出来るよう仕様変更したらしい 今はサーバー会社がphp複数入れておいて、ユーザーが選択って方式ばっかりだね
全く利用者がいなくなってから古いバージョン削除とかそんな感じだと思う うーん。うちの場合は保守運用している案件で、
サーバー引っ越さないと駄目なところが多いんだよなあ。
レンタル会社の選択ミスったか。
いや、選んだの俺じゃないけど、
クライアントに提案したのうちの奴だしな。 >>571
ちなみに失敗したサーバーってどこ?
俺はアルファメール
未だにphp7.0が最新、サポートきれとる >>572
ちょっとコンプライアンス的に厳しいかな。ごめん。 >>573
気にするな
全く別の質問スレで、
「xxのサーバーのセキュリティ的にどう?」と、あくまで感想を聞くのは問題ないと思うぞ 選択できるバージョンのphpってcgiモードでしょ?
7.2提供開始ってことで選択して使ってみたけど、cgiエラーで時々500 Internal Server Error出すからモジュール版の5.6に戻した
cgi版は不安定という印象で、安定求めるなら使えなくない? そもそもPHPで○○求めてるのが間違いと開き直って
適当に富豪的プログラムやってる結果だろう サーバリソースないくせに ね
あるならいいんだよ好き勝手やって >>575
普通に使えるし500エラーは見当たらない
コードがどこか変なんじゃないか コマンドラインからの対話型アプリケーションを作ろうと思ってるんですが
操作途中でctrl+cみたいな強制終了された場合destructorは呼ばれますか?
OSやシェルによっては呼ばれなかったりしますか?
あと
class C {
function __destruct() {
echo "DESTRUCT";
}
function _echo($str) {
echo $str;
}
}
$t = new C;
$t->_echo("test");
$t->__destruct();
$t->_echo("test2");
このコードはちゃんと動くんですが
このようにdestructorは任意のタイミングで呼んでもいいのでしょうか?
終了メソッドが減らせるのでおかしくなかったらこれにしようかと思います $t->__destruct();
動くか否か以前に、こんなの書いたら末代まで笑いものにされるぞ。 上の例ではテストでechoしてますが
明示的に呼びたかっただけでdestruct呼び出したあとは
オブジェクトには用事はないので単にnullを入れることにしました
それでも呼べるようなので 制御文字が含まれているかを調べるためにpreg_match関数を使っているのですが、他に代替できる関数はありますか?(´・ω・`) >>582
あるけどpreg_matchがだんぜん速い
スクリプトでループを書くより、ライブラリ内でループさせた方が良い ■ このスレッドは過去ログ倉庫に格納されています