PHP上級者が集まるスレ
ここでは他のPHPスレよりもより一層と高いレベルでの情報交換・体験談などを行うスレです。 我こそはPHPプロフェッショナルだという方の書き込みをお待ちしております。 PHPやシェルスクリプトなど、シングルクォートとダブルクォートで違いがある以上、使い分けるのが当然。 ダブルクォートは、必要があるときだけ。 必要が無いのにダブルクォートを使っていたら、必要があるから使っているように見えて混乱する。 >>453 どっちを基準にするかは自由だけどな おれはダブルクォートをメインに使って、 必要があるときにのみシングルを使うわ 妙にやる気がでなくてphpだけでだらだら作った測定ツールが思いのほか 大好評で、バグってハニーしても満面の笑みで「許す!」と言われた時に 「じゃあ直さなくてもいいですよね」と堂々とサボります宣言できるようになったら 上級者って思ってもいいですよね。 ちなみに今日それを言ったらもう30になるのに物凄い説教されました。 めんどくさいです。 流れ読まずに質問するが、 0123456789abcdefABCDEF しか含まれていないことをチェックする最速な方法って何だと思う? その変数はマルチバイトが入る可能性があるんだ。 ちなみに PostgreSQL+phpで書くと SELECT $str=replace('0123456789abcdefABCDEF',$str,''); が多分一番早そうに思うんだ。phpのみでこんなことをする場合のゆとり用の関数あったかな? >>458 あ、ごめん。 SELECT translate($str,'0123456789abcdefABCDEF','')=''; だった。 最速、という答えを言えるには上級者じゃないと! ちなみに当方、アクセラレータいれてるんでインタープリタのオーバーヘッドは無視してください。 >>458 preg_match('^[0-9a-f]+$/i', $string); しか考えられんが最速かどうかは知らん >>462 可読性からいうと一番「美しい」予感ではありますな。 >>464 エスケープ文字が2段階入った鬼のような正規表現に比べりゃ >>462 は余裕っしょ。 $str = "aaaa @bbbb"; // ← @ $dummy = split("@",$str); @において @の左側の一見すると半角スペースの部分に バイナリエディタで確認すると 1A の文字が入っている場合に splitでは意図した分割が出来ません。 そもそも、この 1A ってなんなんでしょうか? いずれにしてもこのデータのパターンは例外の様なので UTF-8で定義した変数内文字列に 1A の物があったら除外を行う方向で対応したいのですが どうすれば、 特定の文字コード(文字列じゃない)の文字を削除する事が出来ますか? >>447 文字と文字列の差を考えるとまぁ、そんな感じ。 >>458 最速かは分からんが、alpha numeric略してalnumというのを探してみると、なんやらにあったりする事がある。関数のオプションとか。 >>470 そこから調べてみたら ctype_xdigit なんてのがあることが判った。サンクス。あとで比較してみるわ。 PHPの上級者の皆さん(自称は勘弁)は Eclipseで開発する場合に ブレークポイントとかって使っていますか? PHP上級者がEclipseで開発するとは思えんw EclipseはPHP苦手な人用に関数名教えてくれたり引数指定を教えてくれたり シンタックスエラーがあれば教えてくれたり・・ だからなぁ PHP上級者だったら使い慣れたシンプルなエディタで十分やろな >>477 Eclipseの使い方を知らないだけじゃないの? (実は、初心者の為) 早速3種類の方法を比較してみましたよ? 検査データの質にもよるだろうけれど、とりあえず 1000個の32文字のデータを用意した。 それらは9割が 0123456789abcdefABCDEF のみからなり、残り1割が それ以外のマルチバイト文字を含む。 1.preg_match('/[^0-9a-f]/iu',$str) 2.ctype_xdigit($str) 3.for($j=0,$jmax=mb_strlen($str,'UTF-8'),$b=true;$j<$jmax;$j++) $b&=!(mb_strpos($safestr,mb_substr($str,$j,1,'UTF-8'),0,'UTF-8')===false); それぞれについて1000個のデータを100回まわした結果。 1→245.14[msec] 2→41.80[msec] 3→7953.70[msec] ちなみに環境は Pentium(R) Dual-Core CPU E5400 @ 2.70GHz cache size : 2048 KB CentOS release 5.5 (Final) PHP Version 5.2.17, Zend Engine v2.2.0 想像以上に正規表現はやいな。 >>462 さん >>470 さん ありがとう。 >>477 要は使いどころなんじゃね?客先やちょっとしたものはviで書いちゃうとかあるし。 実をいうとうちも エディタで書いている。Java は Eclipse つかってんだけど、 エディタだけでも別に困らないし。本当は Eclipse 入れたほうがべんりなんだろうな。 Eclipseは習得までに時間かかったけど、 今はPEARとかの糞長いクラス名を手打ちするとか考えられんわ・・・ メソッドチェーンもコード補完してくれるし重宝しているよ。 ネットワークにつながって無い環境で imagickのモジュールをインストールするには どうしたらいいんですかね >>482 あっさりしすぎじゃない? 何のOSでとかせめて書かないと・・・ 質問の意図や前提をくみ取れない糞質問 が多い。それで回答者が逆質問をしたり 悪口を言ったりする。それを前もって思 い描く力が絶望的に欠如してるに違いない。 スーパーハッカーだけが意図を理解できる。 レアなそういう神が颯爽と登場する予感。 >>481 メソッドチェーンは猿のやる行動なので、自嘲した方がいい 自重なのか自嘲なのか、まぁどちらにしたって同じようなもんだが メソッドチェーンってどこでエラーになったかわからなくない? IDEを使えばメソッドチェーンのどこからNULLかわかる メソッドからの戻り値で成否を判別するような実装してるからだろうw 例外と try catch 使おうぜ。 なんか得体の知れないエラーが出てしまいます。 何が原因なのでしょうか? [test.php] <?php phpinfo(); ?> #php test.php →正常にPHPが実行されます。 しかし、ブラウザより http://hogehoge.com/test.php とやると Internal Server Error UID of script "/home/first_hoge/public_html/second_hoge/test.php" is smaller than min_uid suPHP 0.7.1 PHPじゃなくて、suPHPやらサーバ側の問題だな。 test.phpの所有者やパーミッションを確認してみれ。 >>496 ありがとうございます。所有者を変更したらブラウザからアクセスできる様になりました。 情報セキュリティスペシャリスト試験に、PHPが含まれなくなったのは、PHP勉強していた受験者にとっては 反則以外の何者でもない。 結局、PerlとJavaとC++しか出なかったわけだ。 PHPは昨今難易度あがりすぎだからな。 >PHPに最悪のバグ発覚!CGIモードで動かしてる奴はソース丸みえ!!ソースにパス埋めてる奴は死ぬぞ! 個人で持ちやすい庶民系レンタルサーバーってほとんどcgiだと思うけど http://rental.off-soft.net/4166.html これで鯖屋がモジュールにシフトしてくれるとありがたい。 脆弱性の発覚なんかどんなプログラムにもあるわい。 ちゃんとバージョン上げてるやつには関係ない話。 影響を与える範囲が広範囲に渡るんだから堅牢な作りにするのが当然なのに、 相変わらずその場しのぎの突貫工事だからこんなことになるんだろ PHPがどうこうより、WEBの公開ディレクトリにフロントコントローラ以外もおいてる人って・・・ www.php.net にアクセスできなくね?俺だけ? そのうち直るだろ。 「オレだけ?」って疑問が湧いたら、 まずケータイからでも同じか確認すればいい。 >>507 おれは506じゃないけど、ひとこと言わせて なんでそんな面倒なことを要求するの? あなたも確認してみればわかることじゃないの? どうして自分は確かめるのをいやがるの? そんなにツンツンしないで馴れ合おうぜ〜(^ε^)チュ 外は冷たいのにどうして俺の部屋だけこんなに暑いのだ? >> 505 > PHPがどうこうより、WEBの公開ディレクトリにフロントコントローラ以外もおいてる人って・・・ うちの会社が開発してるシステムには公開ディレクトリに、phpファイル全部置いてありますw 社長兼CTOにそれを指摘したら、 「htaccessでアクセスさせなければいいじゃん」 で終わり・・・。 糞CTOを論破するための、シンプル且つ論理的なセリフないですかね?w CLIで、root権限で動いているプログラムを プログラムの中から 一般ユーザーに降格させたいんですが どうしたらよいでしょうか >>513 君が理由も分からないまま人に言われたことを鵜呑みにしちゃってるのが悪いんでない? > 「htaccessでアクセスさせなければいいじゃん」 おれもそう思うんだけど。 .htaccessで塞ぐぐらいなら最初から、別のディレクトリに置けよ。 設定ミスで.htaccessが無効化されたり、 ずさんな運営でゴミファイル(xxxx.php.bk)が生成されたり、 色々と問題は起こる。 「公開ディレクトリに置く理由」が無い。 理由はインストール型パッケージの配布のしやすさかな。 もちろんユーザーが望めば非公開のディレクトリに置くこともできるわけで、 ちょっと別の話だなこれは。 配布するレベルのものなら尚更、 非公開にすべきファイル(ライブラリやコンフィグ)は好きなディレクトリに設置出来るようにしておくべき・・・ それは極論。 導入をし易いって意味ではPHPはベター。 上級者に聞きたい。 例えばcount.phpというのがあって これはリファラをチェックして 同じリファラをカウントするコードなんだけど(要はランキングみたいなもん) iframeやimgタグで<img src="http://hoge-hoge-hoge.com/count.php ">とかやられたら 不正されるよね?これを上手く回避する方法ないかな? >>522 最終アクセスのIPを記録しておいて、連続同一IPは無視する >>523-524 レスありがと けどそれだと相手サイトにimgタグ設置しておいて 普通に他人がアクセスした奴が時刻バラバラIPバラバラなら 全部カウントされてしまわない? 要するにAというサイトがあって それにBサイトのcount.phpをimgタグで仕込ませておけば Aサイトに検索で飛んで来た時刻・IPバラバラの アクセスは全部imgタグを介してBのcount.phpとしてカウントされてしまうと思う。 >>525 あーなるほど iframeだと実質的に違いはクライアントサイズしかないから、 JavaScriptを使ってブラウザ間の差異に気をつけつつ判断するしかないんじゃね。 リンク流入数とか、広告流入数を取りたいのかな? どちらにせよcount.php側の処理を2重3重にしないと不正対策は難しい。 みんなレスありがと。う〜ん何か簡潔な解決策はないもんかな… 簡潔な方法というとアクセスが送られてくるサイトを 定期的に調べるスクリプト動かすとかしか思い浮かばない… 不正やってるimgタグとかiframeとかがないかどうかチェックみたいな。 (こちらのカウント処理用PHP(count.php)が埋め込まれてないかどうかの) ただ相手もそんな簡単にバレるようなことはしないから こちらのリファラとかIPとか調べてサイト主がアクセスしてきた可能性が高い場合は 不正コードを生成しないとかされてたらこのチェックはかなり難しいなぁ。 なんか良い方法ないのかなぁ… >>528 そこまで恐ろしい相手と戦うのかwww 確かにリファラをたどって相手のHTMLを取得してa以外の要素があれば弾くのはいいかもね。 こちらのIPだけに特別なHTMLを生成する懸念に対しては、相手のGoogleキャッシュを確認するとかでどう? んでさらに心配ならJavaScriptによる表示サイズでフィルタするしかないのでは。 >>529 なるほどなるほど。キャッシュを調べる手があるね。 とにかくこれは地道に色々やるしかなさそうだなぁ。 がんがってみますね。レスありがとうございました! 上級者の方、ご教示お願いします。 for($i = 0; $i < 100; ++$i){ print '<a href="' . $url[$i] . '" target="_blank"><img src="img.png" width="100" height="100"></a>'; } こうやってimgタグをaタグでリンクすると処理コストがかなり掛かるんです。 a単体にするとかなり速いです。なんででしょう? あとimgを付けていても、href="hoge.com" みたいに直接URL記述したら速いです。 わけが分かりません… だれか助けて〜 html = ''; for($i = 0; $i < 100; ++$i){ html .= '<a href="' . $url[$i] . '" target="_blank"><img src="img.png" width="100" height="100"></a>'; } print html; こうやったら解決しました!どうもお騒がせしました! と思ったら気のせいだった…初心者スレ行ってきます! 他のPHPスレ言って質問したんですが 「PHPは糞言語」「消えろ」「速度を気にするやつがPHPなか使うな」 とか言われてまともな回答が来ませんでした… だれか教えて下さい〜 またお前か 繰り返すが俺らが答えるまでもない 少しは学習しろ >>536-537 そんなこと言わないでお願いしますよm(__)m 他のスレ言っても全然答えてくれないんです。 やっぱ何か改善可能な原因があるんですかね? >>531 マジレスすると、質問者のレベルを考慮すると、回答がすごくめんどくさい。 ここは上級者同士が集まって高尚(笑)な話をしたいスレのはず。 ここと向こう?の登場人物が同じ可能性だってあるのにバカなやつ phpでprivateなクラスをテストしたい時って、ReflectionMethodを使うのが一般的なのでしょうか??誰か教えてください ToT うるせーぞクズ てめーにコード組んでもらわなくても誰も困らないからさっさと失せろ >>544 初心者未満のゴミが俺ら上級者の手を煩わせないでくれたまえ foreach ($arr as &$value) { /* hoge */ } unset($value) foreachでリファレンスを利用したあとにunset()するけど unsetしないで$valueを有効活用したことあるやついる? >>547 初心者レベルのクズが俺たち上級者に気安く話しかけるな なるほど・・・ 上級者としては、foreach後の参照はむしろ使うべきではないということか。 ありがとうございました。 foreach後の参照がどうこうより、 どんなロジック組んだら有効活用出来るのか考えてみると、 そのロジック自体無いな・・・って答えになる気がする。 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる