• ベストアンサー

初歩的な質問だと思います。IFの条件文

よろしくお願いします。 PHPリファレンスに,以下のように書いてありました。 <?php if ($handle = opendir('.')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo "$file\n"; } } closedir($handle); } ?> 2行目のifの条件文なのですが,=は代入することを表すから, ()の部分は条件文にならないと思ったのですが,どう解釈すれば良いのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

if ($handle = opendir('.')) { は"."(カレントディレクトリ)をopendir()した結果を $handleに代入したうえで、そのopendirの結果が正常かを if分岐させています。 $handle = opendir('.'); if ($handle ) { を1行で書いていたのと同等です。 つまり、カレントディレクトリが、オープンできればifが成り立ち オープンできなかったら、ifが不成立となります。

x_crimson
質問者

お礼

一番しっくり来ました。 回答ありがとうございます。 まだ分からない点もあるので,また質問するやもしれません。 助かりました!ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

マニュアルより if (式) 文 式が TRUE と評価された場合、 PHP は文を実行します。 どのような値が FALSE と評価されるかについては論理値への変換を参照してください。 ざっくり言うと式の結果がFALSEぽいのでなければ文は実行されます。(ざっくりですよ) print ( $a = 'aaa' ); これは aaa が表示されるので FALSE ではないですよね。 また、 $a; これも式です。 opendir は成功時にはFALSEを返しません。まぁつまり $handle = opendir('.'); if ($handle == true) { ということですがどうでしょう。 ちなみに ! = = や = = = は型も同じかどうか評価します。

参考URL:
http://jp.php.net/manual/ja/control-structures.if.php
x_crimson
質問者

お礼

回答ありがとうございます。 やっと理解することができました。。 いま見るとほんと簡単な問題ですね。恥ずかしい限りです(汗)

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

true/falseとは、readdir関数の戻り値$fileを論理値に変換した値です。 よって、「0」という名前のディレクトリーがあると、 $fileの中身そのものは"0"という(正しい)名前なのに $fileの論理値はfalseとなってしまい、 おそらく本来の意図とは異なるであろう動きをします。

全文を見る
すると、全ての回答が全文表示されます。
  • ESE_SE
  • ベストアンサー率34% (157/458)
回答No.1

その命令文が正常に処理されればTrueが、異常終了すればFalseが返ります。

x_crimson
質問者

補足

早速の回答ありがとうございます。 申し訳ありませんが,もう少し詳しく説明して頂けないでしょうか。 どこにtrue, falseの値が返るんでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラム

    PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラムで「test」というディレクトリ内のファイル一覧(ディレクトリ名とファイル名)を表示するようにしているのですが、この中からディレクトリ名のみ表示させたいのですがどのようにすればいいのでしょうか? よろしくお願いします。 <?php if ($dir = opendir("test/")) { while (($file = readdir($dir)) !== false) { if ($file != "." && $file != "..") { echo "$file<br>\n"; } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • フォルダ内のファイル名を取得して配列にぶち込みたいです

    こんにちは。 フォルダ内ファイル名を一覧にして表示させることまでは出来ますが、 この一覧表示されたファイル名を配列に入れるにはどうしたらよいでしょうか。 <?php $dir = "sample/"; // ディレクトリの内容を読み込みます。 if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: " . $file . "<br />\n"; } closedir($dh); } ?> ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • ファイル一覧表(LAN内の別PC)

    PHPのあるサーバ(A)、ファイルサーバ(B) サーバ(B)の特定フォルダに画像ファイルが複数存在します。そちらを一覧表示するページを作成したいと思っています。 現在、ファイル取得を行う過程において、サーバ(B)のディレクトリオープンに失敗している状況です。 ---------------<< 以下ソース >>--------------- $target = dirname("./"); if ($dir = opendir($target)) { while (($file = readdir($dir)) !== false) { if ($file != "." && $file != "..") { echo "<A href=\"$file\">$file</A><br>"; } } closedir($dir); } ---------------------------------------------- 上記のように自サーバのディレクトリ指定はいけますが 別サーバの指定がわかりません。 簡単っぽいのですが、宜しくお願いします。

    • ベストアンサー
    • PHP
  • if文の使い方

    自分では解決できない為、質問させていただきます。 Webサイトの任意の場所に下のスクリプトを埋め込み、 ./testディレクトリに7日以内に更新ファイルがあり、かつファイル名にrrrという文字列がなければWEBサイトの埋め込んだ場所にABCDEFGHIJKと表示させることを考えています。 よって7日以内に更新があってもファイル名にrrrが含まれる場合や、 7日以内に更新がない場合はwebサイトにABCDEFGHIJKと表示させたくありません。 自分で書いてみた下記スクリプトではいつでもABCDEFGHIJKと表示されてしまいます。 ※下記9行目の$latestfilenameをechoするとちゃんと最終更新ファイル名を表示してくれます。(ここまでは上手くいっています) <? $dir = opendir("./test"); $latestfile=0; while (($fnm = readdir($dir)) !== false) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("./test/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; } } if($fnm == "." || $fnm == "..") continue; if(preg_match("/rrr/",$latestfilename)){ printf(""); break; } else if($nowdate - $fftime < 604800) { printf("ABCDEFGHIJK"); } else if($nowdate - $fftime > 604800) { printf(""); } closedir($dir); ?> 何がおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • 条件分岐~同じファイル名がある場合は実行せず

    下記スクリプトにてカレントディレクトリにaaaaおよびbbbbという文字列が存在するファイルを./ccc/dddディレクトリに移行するということを行っています。 下記スクリプトでコピーの処理がありますが、 同じファイル名が./ccc/dddディレクトリに存在する場合、そのファイルについてのみコピーを行わないようにするスクリプトを考えております(同じファイルを何度も./ccc/dddディレクトリにコピーするという事を無くしたいため)。 どなたかお分かりでしたらご教授ください。 実際にスクリプトに追加していただけると助かります。 php4.3.2です。 ======== <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/aaaa/",$file)) { if(preg_match("/bbbb/",$file)) { copy("./".$file,"./ccc/ddd/".$file); } } } closedir($dir); } ?> ========

    • ベストアンサー
    • PHP
  • 同一ディレクトリの連番ファイルの一番大きな数字のものをindex.phpに表示する

    お手上げで、困っています。 ご教教授いただければ幸いです。 現在、以下のような連番のファイルとindex.phpが1つのディレクトリに格納されている状態で、 この中から、数字の一番大きなものをphpで表示させたいのですが、 どうすれば良いか、ご教授お願い致します。 index.php 01.jpg 02.jpg 03.jpg 04.jpg 05.jpg 06.jpg 07.jpg 08.jpg 09.jpg 10.jpg . . . more 今の状態は、ディレクトリ内のファイルを見るまでです。 その先がお手上げ状態です。 <?php define("dirfile", "."); header("Content-Type: text/plain; charset=utf-8"); $handle = opendir(dirfile); while (($entry = readdir($handle))) { if(is_file(dirfile . "/" . $entry)) { echo $entry . "\n"; } } closedir($handle); ?> よろしくお願い致します。

    • ベストアンサー
    • PHP
  • フォルダ内のファイル名取得の仕方が分かりません

    Apache2.0.47、PHP4.3.2で使用しています。 フォルダ内のファイル名の取得を以下のように書いています。 (scandirは使えませんでした) <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } sort($files); print_r($files); ?> "."と".."も取得されるので、以下のように変更したのですが同じ結果でした。 <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { if(filename!=". "){ if(filename!=".. "){ $file[] = $filename; } } } sort($files); print_r($files); ?> "."と".."をはぶいたファイル名だけを取得したい場合にはどうすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • php単体では表示されるが他のページから呼ぶと文字化けをします。

    /img/のフォルダーの中から画像を取得し他のページで表示させようと思ったのですがphp単体では画像が表示されるのですが、require、include もしくは直接そのソースを貼って表示させると画像が文字化けし表示されません。 書いたソース define("TEST_READDIR", "./img/"); $handle = opendir(TEST_READDIR); rewinddir($handle); while (($entry = readdir($handle))) { $file = TEST_READDIR . $entry; if(is_file($file)) { $key = filemtime($file); $keys[] = $key; $data[$key] = $file; } } closedir($handle); if ( isset($keys) ) { rsort($keys); $fp = fopen($data[$keys[0]], "rb") or die(); print fread($fp, filesize($data[$keys[0]])); fclose($fp); } exit(0); なぜ他から呼び出すと表示されないのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • unlink が余計に働いてエラーメッセージ

    お世話になります。 PHPを学んでいるものです。 開発環境は、Pleiades3.5のPHPを使っています。 やりたいことは、画像データのアップロード後の仮置きファルダの掃除です。 しかし、以下のコードでやると、「Warning: unlink(images/upload/.) [function.unlink]: Permission denied in C:\xampp\htdocs\root\manager_item_edit03.php on line 530」が2つ出てきます。 if( $handle = opendir(PRE_IMAGE_DIR) ){ while( ($file=readdir($handle)) == true ): if( file_exists(PRE_IMAGE_DIR.$file) ){ unlink(PRE_IMAGE_DIR.$file); } endwhile; closedir($handle); } ただ、目に見えるファイル(事前に無駄なファイルをいくつか置いてみました)はすべて削除されています。つまり、私から見ると、unlinkが余計に働いたことでエラーが出ている状況です。 念のため、unlinkの前に下記のコードを挿入して、何のファイルか見てみたところ、「.」、「..」というピリオド(!?)だけのファイル名があるようです。 ?> <pre> <?php echo $file; ?> </pre> <?php 皆様で、このエラーを回避する方法や、そもそも何のファイルなのか、ご存知であればご教示をください。お願いします。

    • ベストアンサー
    • PHP
  • ディレクトリ内の最新の画像のみ表示したい。

    ディレクトリファイルから画像ファイルの更新日時を取得して、 拡張子を問わず、最新の画像のみ表示させたいのですが、 うまく出来ません。ご教授お願いします。 ~・~・~・~・~・~・~ <?php $dir = @opendir("****"); while($file = readdir($dir)) { $kaku = substr($file, -3, 3); if($kaku=="jpg" || $kaku=="gif" || $kaku=="png"){ $cnt++; $last = date("ymdHis", filemtime($file)); $img="$last$file"; $filename[$cnt]=$file; } } closedir($dir); } arsort($img); $img_file= substr($img, 12); $cnt=0; foreach($img_file as $value){ $cnt++; if ($cnt<=1){ echo "<img src=\"$value\">"; } } ?>

    • ベストアンサー
    • PHP