トップページphp
1001コメント318KB

【PHP】下らねぇ質問はここに書き込みやがれ 71

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2008/07/17(木) 19:42:52ID:DVaNTncw
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、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:???
956は誤爆。while内でprint $f;してみ。
0958nobodyさん2008/08/15(金) 12:47:13ID:???
>>956
関数内でprintしちゃマズくね?
最終行のprint_rはデバッグ目的だと思うが >>953よ、どうなんだ?
0959nobodyさん2008/08/15(金) 12:51:13ID:k2b6NQX0
>>957
全てのファイル名が表示されます。

>>958
その通りです。
因みに、csvファイルは2つ存在してますが
一番最後のcsvファイル名のみが出力されます
09609582008/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:???
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )

matches を指定した場合、検索結果が代入されます。 $matches[0] にはパターン全体にマッチしたテキストが代入され、 $matches[1] には 1 番目ののキャプチャ用サブパターンにマッチした 文字列が代入され、といったようになります。

つまり↑の方法では最終ループで一致したファイル名しか返さない。
>>955が正しい。

while内で$i++;して、$ret[$i] = $flist。そんでreturn $ret;とか。
0963nobodyさん2008/08/15(金) 13:12:09ID:k2b6NQX0
>>960
まだ初心者で知らない関数がいくつか含まれてますので勉強してみます;

>>961
PHP勉強し始めて3週間です。
他のプログラムの知識もないに等しいのでまだ趣味というにも程遠いのですがorz
しかし、逆に正規表現は業界標準の表記なのかと勘違いしてました。
勉強になります。

>>962
今からさっそく試してみます

>>955
すみません、読み飛ばしてました
修正してみます。
09649532008/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:zS1QTwus
SmartyとZend Framworkを組み合わせて作ったらライセンスはどうなるの?
0966nobodyさん2008/08/15(金) 15:16:46ID:6pQMDtTM
phpの環境変数って何を元にどのタイミングで決定されているのでしょう・・・
0967nobodyさん2008/08/15(金) 15:18:19ID:???
>>966
環境変数はApacheが設定するもの。
環境変数の仕様を換えたかったら、自分でApacheのモジュールを自作するしかない。
俺もスパム対策用にApacheモジュールを作って組み込んでいる。
0968nobodyさん2008/08/15(金) 15:30:26ID:6pQMDtTM
>>967
それはApacheEnvironmentにあたるものですよね?

http://www.21style.jp/
たとえば上記URLのEnvironmentにある
USERはatwなのにHOMEが/rootになる
このサイトのatwユーザのHOMEが/rootなのかもしれませんが
このような状況は自分のサイトでも起こっており何故なのかと思いました
0969nobodyさん2008/08/15(金) 15:50:08ID:???
>>968
環境変数って言うくらいだから、Apache起動時にセットされるんじゃね?
(ソース見る余裕はないから妄想)

試しにApacheを停止して、suでrootになった普通のユーザでApacheを起動したら
そのユーザの環境変数が継承されたから、正解と言えなくとも近いはず

0970nobodyさん2008/08/15(金) 16:10:55ID:6pQMDtTM
>>969
起動ユーザの環境変数だったんですね・・・
ありがとうございました
0971nobodyさん2008/08/16(土) 01:53:07ID:MsTyjZua
phpで生の画面的なものを生成しようとする場合に、
変数のスコープのレベル感が無駄になるようなのですが、
これは仕様的なのでしょうか?

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"
0975nobodyさん2008/08/16(土) 10:23:26ID:???
>>974
str_split
0976nobodyさん2008/08/16(土) 10:39:24ID:8euwbT+o
>>975

ありがとうございます
一気に指定数に分解できればと思ったのですが、無いでしょうか?

無ければstr_splitで1文字づつ分解後に結合する関数を作るしかなさそうですね。。。
0977nobodyさん2008/08/16(土) 11:12:59ID:???
>>976
地道に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:???
他には正規表現使って
他には正規表現使って
他には正規表現使って
他には正規表現使って
他には正規表現使って
0979nobodyさん2008/08/16(土) 11:46:51ID:???
>>978
何か?
0980nobodyさん2008/08/16(土) 11:48:04ID:???
何か?
何か?
何か?
何か?
何か?
0981nobodyさん2008/08/16(土) 11:48:56ID:???
>>980
次スレよろしく
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
>>977
今、関数作りかけてたところに助け船が!
そのほうが断然簡単ですね。
無駄な事しなくて済み、本当に助かりました。
0986nobodyさん2008/08/16(土) 12:26:19ID:A4u+7Tq3
次スレたったので、下らん質問を。

お盆休みでおもしろくない。どっか面白い本やホームページ教えて。
できれば、PHP関連で。無かったら他の言語でもいい。

もう、あきた。
0987nobodyさん2008/08/16(土) 12:53:03ID:???
>>986
PHP関連で面白いホームページ作ればいいじゃまいか
0988nobodyさん2008/08/17(日) 00:16:21ID:???
梅ッシュ
0989nobodyさん2008/08/17(日) 08:37:37ID:BvSuXUrB
php6アルファがでたのですが、基本的にはphp5.2系から移行するに当たり気をつけるところってありますか?
0990nobodyさん2008/08/17(日) 11:23:49ID:???
そんなのも分からない段階ならアルファ版なんか使うな
0991nobodyさん2008/08/17(日) 11:51:15ID:???
白根絵ならレスするな
0992nobodyさん2008/08/17(日) 12:10:28ID:???
アルファだし積極的に人柱推奨

埋め
0993nobodyさん2008/08/17(日) 13:48:41ID:???
>>989が試してレポートしてくれ

うめ
0994nobodyさん2008/08/17(日) 14:26:03ID:???
>>993が正しいアルファの使い方だな

うめ
0995nobodyさん2008/08/17(日) 14:51:48ID:???
0996nobodyさん2008/08/17(日) 16:07:28ID:???
産め
0997nobodyさん2008/08/17(日) 16:41:58ID:iSRyr/QI
埋め
0998nobodyさん2008/08/17(日) 18:34:42ID:???
PHPうめぇw
0999nobodyさん2008/08/17(日) 18:44:59ID:???
宇目
1000nobodyさん2008/08/17(日) 18:46:23ID:oIc5WcqC
うめ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。