ファイル情報取得エラーの解決方法

このQ&Aのポイント
  • ファイルの情報を取得しようとする際に、filesize()やfilemtime()などの関数が上手く動かず、エラーメッセージが表示される問題が発生しています。
  • エラーメッセージによると、容量が2GB以上のファイルの情報を取得する場合に、このようなエラーが発生する可能性があるとのことです。
  • 質問者の環境はPHP5.3.2およびApache2.2であり、ファイルがphpファイルの場合には正常に動作していることが確認されています。
回答を見る
  • ベストアンサー

stat failed

ディレクトリ上にあるファイルの情報を取得し表示しようとするのですが、以下のようなエラーメッセージが出てfilesize()やfilemtime()が上手く動きません。 Warning: filesize() [function.filesize]: stat failed for 1_1-2.c in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\uploaded.php on line 14 Warning: fileatime() [function.fileatime]: stat failed for 1_1-2.c in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\uploaded.php on line 15 Warning: filemtime() [function.filemtime]: stat failed for 1_1-2.c in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\uploaded.php on line 16 ファイルがphpファイルの時は何故かエラーメッセージは出ず、ちゃんと動いているようです。 調べてみたら容量2GB以上のファイルの情報を取得しようとするとこうなる場合があるとのことですが、どのファイルも100バイト程度のものです。 以下コードです。 <table border = "1"> <tr> <th>ファイル名</th><th>サイズ</th><th>最終アクセス日</th><th>最終更新日</th> </tr> <?php clearstatcache(); $dir = opendir('./files'); while($file = readdir($dir)) { if($file != '..' && $file != '.') { print('<tr>'); print('<td><a href = "files/'.$file.'">'.$file.'</a></td>'); print('<td>'.filesize($file).'バイト</td>'); print('<td>'.date('Y/m/d H:i:s', fileatime($file)).'</td>'); print('<td>'.date('Y/m/d H:i:s', filemtime($file)).'</td>'); print('</tr>'); } } closedir($dir); ?> </table> 環境はPHP5.3.2, Apache2.2です。ご教授お願いします。m(__)m

  • PHP
  • 回答数1
  • ありがとう数1

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

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

対象がシンボリックファイルでリンク先も存在しないと起こるようですが、 windowsなのでショートカットであるとか?ですかね。 環境が無いので試せていませんが、実ファイルでない場合にもファイル情報を取得できずにwarningを起すのではないでしょうか。

wiles4416
質問者

補足

対象は普通の実ファイルで、シンボリックファイルではないです。

関連するQ&A

  • PHPでのファイルアップロードについて

    初めて質問させていただきます。 PHPの勉強をはじめたばかりの初心者です。教本をもとに勉強を進めています。すべて教本どおりに設定し進めてきましたが、ファイルアップロードの箇所でどうしてもうまくいきません。いろいろ、php.iniを修正したり、PHPを修正したりしましたが本どおりの結果になりません。ご指導お願いします。 以下2種類のhtmlファイルとphpファイルを使用 (1)upform.htmlの内容 <HTML><BODY> <FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA" ACTION="upload.php"> <INPUT TYPE="FILE" NAME="upfile"><br> <INPUT TYPE="SUBMIT" VALUE="アップロード"> </FORM> </BODY></HTML> (2)upload.phpの内容 <html><body> <?php if(move_uploaded_file ($_FILES['upfile']['tmp_name'], "./htdocs/phpbook/" ) == FALSE) { print "失敗しました。"; }else{ print ($_FILES['upfile']['name']); print "をアップロードしました。"; } ?> </BODY></HTML> 上記内容でhtmlファイルを呼び出し、abc.txt(デスクトップに保存している)をアップロードしようとすると、以下のエラーが返されます。 ↓↓エラー内容 Warning: move_uploaded_file(./htdocs/phpbook/) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpB.tmp' to './htdocs/phpbook/' in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 失敗しました。 ↑↑エラー内容 いろいろ思考錯誤し、upload.phpファイルの6行目"./htdocs/phpbook/"の箇所を、"abc.txt"としてみると、『アップロードしました』とアップロードに成功(?)し、abc.txtはC:\Program Files\Apache Group\Apache2\htdocs\phpbook内にアップロードされました。 教本では、"./htdocs/phpbook/"はファイルの保存先と注記されていますが、エラーになります。"abc.txt"に書き換えることでアップロードに成功しています。また、なぜ、アップロード先がC:\Program Files\Apache Group\Apache2\htdocs\phpbook内になるのかもわかりません。php.iniファイルの設定でしょうか。質問が長くなり、また、内容に足りない面もあるかもしれないですが、どうかよろしくお願いします。 【参考】 php.iniのFile Uploadsを抜きました。 ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M

    • ベストアンサー
    • PHP
  • ファイルアップロードが出来ません。

    phpとApacheを利用して、ファイルのアップロードしたいのですが以下のようなエラーが出て上手くいきません。 エラー文 Warning: move_uploaded_file(C:\Program File\Apache Group\Apache2\htdocs\image\200708090925000.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\view.php on line 12 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\php11.tmp' to 'C:\Program File\Apache Group\Apache2\htdocs\image\200708090925000.jpg' in C:\Program Files\Apache Group\Apache2\htdocs\view.php on line 12 正常にアップロード処理されませんでした。 php.iniの設定はfile_upload=On upload_tmp_dir=NULL upload_max_size=2M です。 phpinfo()で確認したところ、upload_tmp_dirがno valueになっているのですが、設定が反映されていないのでしょうか? 参考までに作成したプログラムを載せておきます。 <HTML> <HEAD> <TITLE>PHPのテキスト</TITLE> </HEAD> <BODY> <?php $file_dir = 'C:\Program File\Apache Group\Apache2\htdocs\image\\'; $file_path = $file_dir.$_FILES["uploadfile"]["name"]; if(move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $file_path)){ $img_dir ="/image/"; $img_path = $img_dir.$_FILES["uploadfile"]["name"]; $size = getimagesize($file_path); ?> ファイルアップロードを完了しました。<BR> <IMG src="<?=$img_path?>"<?=$size[3]?>><BR> <B><?=mb_convert_encoding($_POST["comment"], "EUC-JP","SJIS")?></B><BR> <?php }else{ ?> 正常にアップロード処理されませんでした。<BR> <?php } ?> </BODY> </HTML> 原因が分かる方、ご意見よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHP 画像アップローダー作成について

    PHPの勉強をしている者です。 ローカル環境(XAMPP1.7.3)にて、画像アップローダーを動かそうと試みています。 が、一時ファイル名が取得できず、失敗に終わります。初歩的なミスかもしれません。 -------------------- 【upload.html】 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>画像ファイルアップロード</title> </head> <body> <h1>画像ファイルアップロード</h1> <p>アップロードする画像ファイル(JPEG形式)を選択して「アップロード」ボタンを押してください。</p> <form action="upload_image.php" method="POST" enctype="multipart/form-data"> <table> <tr> <th>画像ファイル選択</th> <td><input type="file" name="filename" size="50"></td> </tr> <tr> <td colspan="2"> <input type="submit" value="アップロード"> </td> </tr> </table> </form> </body> </html> -------------------- 【upload_image.php】 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>画像ファイルアップロード</title> </head> <body> <h1>アップロードファイル情報</h1> <p> <?php // ファイル名の取り出し $file_name = $_FILES['filename']['name']; // ファイル(MIME)タイプの取り出し $file_type = $_FILES['filename']['type']; // 一時ファイル名の取り出し $temp_name = $_FILES['filename']['temp_name']; // エラーコードの取り出し $upload_error = $_FILES["filename"]["error"]; // 保存先のディレクトリ $dir = 'uploads/'; // 保存先のファイル名 $upload_name = $dir . $file_name; // JPEG形式のファイルをアップロードする if (($file_type == "image/jpeg") || ($file_type == 'image/pjpeg')) { // アップロード(移動) $result = move_uploaded_file($temp_name,$upload_name); if ($result) { // アップロード成功時 echo '■アップロード成功'; } else { // アップロード失敗時 echo '■アップロード失敗'; } } else { // JPEG形式以外のファイルはアップロードしない echo '■JPEG形式の画像をアップロードしてください。'; } ?> </p> <table> <tr> <td colspan="2"><img src="<?php echo $upload_name; ?>" alt=""></td> </tr> <tr> <th>エラーコード</th> <td><?php echo $upload_error; ?></td> </tr> <tr> <th>画像ファイル名</th> <td><?php echo $file_name; ?></td> </tr> <tr> <th>MIMEタイプ</th> <td><?php echo $file_type; ?></td> </tr> <tr> <th>一時ファイル名</th> <td><?php echo $temp_name; ?></td> </tr> </table> </body> </html> -------------------- 【php.iniの一部】 ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. ; http://php.net/file-uploads file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ; http://php.net/upload-tmp-dir upload_tmp_dir = "C:\xampp\tmp" ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize = 128M -------------------- このように作っております。 結果は エラーコード→0 画像ファイル名→正常取得 MIMEタイプ→正常取得 一時ファイル名→空 どのような原因が考えられるか、教えて頂ければ幸いです。

    • ベストアンサー
    • PHP
  • エラーについて

    Warning: main(DB.php): failed to open stream: No such file or directory in c:\program files\apache group\apache\htdocs\f-board-0.3.2\ini\common.php on line 14 Fatal error: main(): Failed opening required 'DB.php' (include_path='.;c:\php4\pear') in c:\program files\apache group\apache\htdocs\f-board-0.3.2\ini\common.php on line 14 このエラーはいったい何を意味しているのでしょうか? どなたか教えてください

    • ベストアンサー
    • PHP
  • ファイルのアップロードに関して

    PHPでファイルのアップロードをしようと考えていますが、単純に1画面でファイルの選択し、 その画面上のボタンを押した際にアップロードするという事は可能ですが、ボタンを押した後、 次画面(プレビュー)でファイル名を確認し、2画面目のボタンを押した時にアップロードしたい と考えております。 どのように記述したら良いか教えて下さい。 《現状 このままでは正しく動作します》 1画面目 <FORM method="post" name="frm" id="frmid" enctype="multipart/form-data"> <TABLE> <TR><TD width="200">【登録画面】</TD></TR> <?php print("<TR>\n"); print("<TD width='200'>ファイルを選択:</TD>\n"); print("<TD><input type='file' name='upfile'></TD>\n"); print("</TR>\n"); ?> </TABLE> </FORM> 2画面目 <?php $updir = "//192.168.999.999/doc/"; $filename = $_FILES['upfile']['name']; if(move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename)==FALSE){ print("Upload failed"); print($_FILES['upfile']['error']); }else { print("<b> $filename </b> uploaded"); } ?> 実際は2画面目ではファイル名だけを表示させ、2画面目のボタンを押した際に 取り込み処理を行いたい。 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpのエラーについてです

    mysql上のデータをphpでブラウザに表示するコードを書いています。 下記のプログラムを実行した所 Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampplite\htdocs\shop\index.php on line 18 というようなエラーが表示されます。 本の通りに進めているので間違っていないはずなんですが・・ どこが成立していないのでしょうか??? <?php mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('mydb'); mysql_query('SET NAMES UTF8'); $recordSet = mysql_query('SELECT m.name, i.* FROM makers m, my_ items i WHERE m.id=i.maker_id ORDER BY id DESC'); ?> <table width="100%"> <tr> <th scope="col">ID</th> <th scope="col">メーカー</th> <th scope="col">商品名</th> <th scope="col">価格</th> </tr> <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td><?php print(htmlspecialchars($table['id'])); ?></tb> <td><?php print(htmlspecialchars($table['name'])); ?></tb> <td><?php print(htmlspecialchars($table['item'])); ?></tb> <td><?php print(htmlspecialchars($table['price'])); ?></tb> </tr> <?php } ?> </table>

    • ベストアンサー
    • PHP
  • Wordpress のPHPファイルをIEで開く

    WordPress のテーマを変更したいと思い、PHPファイルをいじったのですが PHPファイルをそのままIEで開けないんですね。 ディレクトリはこんな感じなんですが、 C:\Program Files\Apache\Apache24\htdocs\wordpress\wp-content\themes http://localhost/wordpress\wp-content\themes\twentytwelve\index.php では開けませんでした。間違ってますか? It works と表示されるファイル(C:\Program Files\Apache\Apache24\htdocsにあります。)はhttp://localhost/で開けます。

    • ベストアンサー
    • PHP
  • データの受け渡し(表内に収めたいのですが)

    phpで表から表へデータを飛ばし表示させようとしています。 例 ___________________ |_A___|__B___|___C__| |_____|______|_______| ↓ ___________________ |_A___|__B___|___C__| |_____|______|_______| 例えば、下記のようなソースsample.php→sample4.php を作りました。 データは飛ばすことが出来ますが、表内に収める場合 どのようにすればよいですか? ちなみに、YPHPSampleは、ソースがおいてあるディレクトリです。 (1)sample.php <html> <head> <title>サンプル</title> <head> <body> <table border="2"> <tr bgcolor="#AAAAAA"> <td><th>都市名</th></td> <td><th>最高気温</th></td> <td><th>最低気温</th></td> </tr> <tr bgcolor="#AAAAAA"> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="aut"/> </th></td> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="soft"/> </th></td> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="hard"/> </th></td> </tr> </table> <input type="submit" value="送信"/> </form> </body> </html> (2)sample4.php <html> <head> <title>サンプル</title> </head> <body> <table border="2"> <tr bgcolor="#AAAAAA"> <td><th>都市名</th></td> <td><th>最高気温</th></td> <td><th>最低気温</th></td> </tr> </table> <?php if($_POST["aut"]) print"{$_POST["aut"]}<br/>\n"; if($_POST["soft"]) print"{$_POST["soft"]}<br/>\n"; if($_POST["hard"]) print"{$_POST["hard"]}<br/>\n"; ?> </body> </html>

    • 締切済み
    • PHP
  • PEARのインストール

    初めまして。今日からphpの勉強を始めた超・初心者です。 PEARのインストールがうまくいかず、下記のエラーが出ます。他の回答も試してみましたが、うまくいきません。 Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\pear_info.php on line 2 Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.;c:\php\includes;c:\php\PEAR;') in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\pear_info.php on line 2 apache2.0.63 php5.1.6 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Linuxで画像がアップロードできない

    いつもお世話になっております。 PHP初心者です。 現在、Linuxでサーバー構築をしているのですがWindowsでは問題の無かった画像のアップロードができません。 WindowsではXAMPP1.7.3を使用していました。 LinuxはCentOS5.4でXAMPP for Linux1.7.4を使用しています。 Windowsでは出ない以下のエラーが出ます。 ●Warning: move_uploaded_file(./book_picture/digi.jpg) [function.move-uploaded-file]: failed to open stream: 許可がありません in /opt/lampp/htdocs/sample23.php on line 24 ●Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpGDHAL8' to './book_picture/digi.jpg' in /opt/lampp/htdocs/sample23.php on line 24 php.iniのfile_uploadsはOnになっています。 php.iniのupload_max_filesize とpost_max_sizeは2Mと8Mになっています。 php.iniのupload_tmp_dirは設定されていないのでデフォルトの場所になっていると思います。 apacheを実行しているユーザで書き込みできなくなっているのでしょうか?一般ユーザではなく rootで入っていっるのですが。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう