【PHP】下らねぇ質問はここに書き込みやがれ 71
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2008/07/17(木) 19:42:52ID:DVaNTncwPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 70
http://pc11.2ch.net/test/read.cgi/php/1214356448/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0957nobodyさん
2008/08/15(金) 12:46:28ID:???0958nobodyさん
2008/08/15(金) 12:47:13ID:???関数内でprintしちゃマズくね?
最終行のprint_rはデバッグ目的だと思うが >>953よ、どうなんだ?
0959nobodyさん
2008/08/15(金) 12:51:13ID:k2b6NQX0全てのファイル名が表示されます。
>>958
その通りです。
因みに、csvファイルは2つ存在してますが
一番最後のcsvファイル名のみが出力されます
0960958
2008/08/15(金) 12:54:19ID:???テストしてないから、アレだが「array_filter」は便利だぞ
function firflist_re($directory, $pattern){
$dirs = scandir($directory); // scandirが使える環境用
return array_filter($dirs, create_function('$name', 'return preg_match("/'.$pattern.'/", $name);'));
}
0961nobodyさん
2008/08/15(金) 12:55:10ID:???一つ一つの原因を切り分けて実装してみることです。
特になんでもかんでも一行の正規表現で文字列を引っかけようとしたら
はまります。正規表現は万能でもないし、コードがわかりにくい。
うちの会社の品質管理部が正規表現を見たら、一発でアウトです。
正規表現を使わずに分かりやすいコードを書く方がバグがすくなくて済みます。
趣味でやっているんじゃないでしょ。利用者が迷惑しますよ。
0962nobodyさん
2008/08/15(金) 13:00:22ID:???matches を指定した場合、検索結果が代入されます。 $matches[0] にはパターン全体にマッチしたテキストが代入され、 $matches[1] には 1 番目ののキャプチャ用サブパターンにマッチした 文字列が代入され、といったようになります。
つまり↑の方法では最終ループで一致したファイル名しか返さない。
>>955が正しい。
while内で$i++;して、$ret[$i] = $flist。そんでreturn $ret;とか。
0963nobodyさん
2008/08/15(金) 13:12:09ID:k2b6NQX0まだ初心者で知らない関数がいくつか含まれてますので勉強してみます;
>>961
PHP勉強し始めて3週間です。
他のプログラムの知識もないに等しいのでまだ趣味というにも程遠いのですがorz
しかし、逆に正規表現は業界標準の表記なのかと勘違いしてました。
勉強になります。
>>962
今からさっそく試してみます
>>955
すみません、読み飛ばしてました
修正してみます。
0964953
2008/08/15(金) 14:24:58ID:k2b6NQX0まず>>962氏を参考に修正しましたが、
matchしないファイル、ディレクトリを読み込んだ際には、
配列が空白にだったので、6行目のif文の判定をFALSEではなく
NULLにしたところ上手く行きました。
(FALSEはNOmatchという意味ではなかったんですね、勘違いしてました)
function dirflist_re($directory, $pattern ) {
$i = 0;
$pattern = '/' . $pattern . '/';
$handle = opendir($directory);
while ( ($f = readdir($handle)) !== FALSE ) {
if( preg_match($pattern, $f) != NULL) {
preg_match($pattern, $f, $flist);
$ret[$i] = $flist;
$i++;
}
}
return($ret);
}
$f = dirflist_re('.','.+csv$');
print_r($f);
皆さんのご協力感謝します。
0965nobodyさん
2008/08/15(金) 15:16:46ID:zS1QTwus0966nobodyさん
2008/08/15(金) 15:16:46ID:6pQMDtTM0967nobodyさん
2008/08/15(金) 15:18:19ID:???環境変数はApacheが設定するもの。
環境変数の仕様を換えたかったら、自分でApacheのモジュールを自作するしかない。
俺もスパム対策用にApacheモジュールを作って組み込んでいる。
0968nobodyさん
2008/08/15(金) 15:30:26ID:6pQMDtTMそれはApacheEnvironmentにあたるものですよね?
http://www.21style.jp/
たとえば上記URLのEnvironmentにある
USERはatwなのにHOMEが/rootになる
このサイトのatwユーザのHOMEが/rootなのかもしれませんが
このような状況は自分のサイトでも起こっており何故なのかと思いました
0969nobodyさん
2008/08/15(金) 15:50:08ID:???環境変数って言うくらいだから、Apache起動時にセットされるんじゃね?
(ソース見る余裕はないから妄想)
試しにApacheを停止して、suでrootになった普通のユーザでApacheを起動したら
そのユーザの環境変数が継承されたから、正解と言えなくとも近いはず
0970nobodyさん
2008/08/15(金) 16:10:55ID:6pQMDtTM起動ユーザの環境変数だったんですね・・・
ありがとうございました
0971nobodyさん
2008/08/16(土) 01:53:07ID:MsTyjZua変数のスコープのレベル感が無駄になるようなのですが、
これは仕様的なのでしょうか?
if文の中に定義してある変数的なものが、
その外においても有効になっていて、
同じような変数とコリジョンを起こして結果が不正になります。
0972nobodyさん
2008/08/16(土) 01:58:16ID:P/MDsP8S| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0973nobodyさん
2008/08/16(土) 02:00:00ID:???| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0974nobodyさん
2008/08/16(土) 10:18:20ID:8euwbT+o次のようにセパレーターを含まない文字列を指定文字目(或いは指定バイト目)で分割する関数ってありますか?
情報収集不足なのかもしれませんがよろしくお願いします。
"20080816" ⇒ 4文字目、6文字目 ⇒ "2008" "08" "16"
"abcdefgh" ⇒ 4文字目、6文字目 ⇒ "abcd" "ef" "gh"
0976nobodyさん
2008/08/16(土) 10:39:24ID:8euwbT+oありがとうございます
一気に指定数に分解できればと思ったのですが、無いでしょうか?
無ければstr_splitで1文字づつ分解後に結合する関数を作るしかなさそうですね。。。
0977nobodyさん
2008/08/16(土) 11:12:59ID:???地道にsubstr()で分割したら?
$aに'20080816'とか入ってるとして
substr($a, 0, 4); // '2008'
substr($a, 4, 2); // '08'
substr($a, 6, 2); // '16'
でいいじゃん。
他には正規表現使って
preg_match('/^(.{4})(.{2})(.{2})/', $a, $m);
ってやると分割された文字列が$mに入る
0978nobodyさん
2008/08/16(土) 11:20:53ID:???他には正規表現使って
他には正規表現使って
他には正規表現使って
他には正規表現使って
0980nobodyさん
2008/08/16(土) 11:48:04ID:???何か?
何か?
何か?
何か?
0982nobodyさん
2008/08/16(土) 11:59:46ID:???たててくる
0983nobodyさん
2008/08/16(土) 12:00:37ID:???0984nobodyさん
2008/08/16(土) 12:09:38ID:???http://pc11.2ch.net/test/read.cgi/php/1218855685/
0985nobodyさん
2008/08/16(土) 12:11:55ID:8euwbT+o今、関数作りかけてたところに助け船が!
そのほうが断然簡単ですね。
無駄な事しなくて済み、本当に助かりました。
0986nobodyさん
2008/08/16(土) 12:26:19ID:A4u+7Tq3お盆休みでおもしろくない。どっか面白い本やホームページ教えて。
できれば、PHP関連で。無かったら他の言語でもいい。
もう、あきた。
0988nobodyさん
2008/08/17(日) 00:16:21ID:???0989nobodyさん
2008/08/17(日) 08:37:37ID:BvSuXUrB0990nobodyさん
2008/08/17(日) 11:23:49ID:???0991nobodyさん
2008/08/17(日) 11:51:15ID:???0992nobodyさん
2008/08/17(日) 12:10:28ID:???埋め
0995nobodyさん
2008/08/17(日) 14:51:48ID:???0996nobodyさん
2008/08/17(日) 16:07:28ID:???0997nobodyさん
2008/08/17(日) 16:41:58ID:iSRyr/QI0998nobodyさん
2008/08/17(日) 18:34:42ID:???0999nobodyさん
2008/08/17(日) 18:44:59ID:???1000nobodyさん
2008/08/17(日) 18:46:23ID:oIc5WcqC10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。