filesizeを使うとFatal errorに!

このQ&Aのポイント
  • filesizeを使うとエラーが出てしまいます。
  • filesize関数を使えるようにするためには、サーバーやPHPの設定が必要です。
  • ファイルサイズを取得する前に、ファイルが存在するかどうかを確認することも重要です。
回答を見る
  • ベストアンサー

filesizeを使うとFatal errorに!

環境:Win32/Apache2.4.0/5.3.9RC3(C:\apache\php) filesizeを使おうとするとエラーが出てしまいます。 <?php $filename = 'somefile.txt'; //もしsomefile.txtが作成されていなければファイルサイズは0バイト if(filesize($filename)=0){ echo "somefile.txtは未作成なので、たった今このファイルを作成しました。"; }else{ echo $filename . ': ' . filesize($filename) . ' bytes'; } ?> Fatal error: Can't use function return value in write context サーバーかphp側でfilesize関数を使えるよう設定しなければいけないのでしょうか。

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

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

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

= は代入演算子だから。 比較演算子は ===とか==とか filesize($filename) === 3 とかは正しいが filesize($filename) = 3 は誤り。関数の戻り値に代入できませんって言ってる(単純な変数ならできるんだろうけど)

kiseki777
質問者

お礼

すみません間違っていました。有難うございます。 直して再度試してみると Warning: filesize() [function.filesize]: stat failed for somefile.txt というエラーが出てしまいました。 手動でそのファイルを用意するとエラーは出ませんが、自動で作ってくれないのですね。 ファイルが存在するかどうかを調べるために if(filesize($filename)==0){ としましたが、この調べ方自体がよろしくないのでしょうか。

その他の回答 (1)

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.2

ファイルの存在チェックなら「file_exists」で。 http://php.net/manual/ja/function.file-exists.php

kiseki777
質問者

お礼

ちゃんとできました。ありがとうございます。

関連するQ&A

  • preg_matchの使い方

    選択した画像ファイルをgifフォルダにアップロード保存して 同入力画面にも出力するサンプルの勉強をしています。 「preg_match」を使ってアップロードできるファイルを gif,jpg,pngに限定するというようにしたいのですが 使い方が間違っているようで上手く行きません。 どこが間違っているのでしょうか? よろしくお願いいたします。 ---------------------------------------------------------- <html> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="data"> <input type="submit" value="表示"> </form> <?php $updir = "./gif/"; $filename = $_FILES["data"]["name"]; if(file_exists($_FILES["data"]["tmp_name"])){ $filesize = filesize($_FILES["data"]["tmp_name"]); if($filesize <= 100000){ if(preg_match("/\.gif$ | \.jpg$ | \.png$/", $filename)){ ←←※※※ move_uploaded_file($_FILES["data"]["tmp_name"], $updir.$filename); echo "ファイル名".$filename."アップロード成功!"; echo "<br><br>"; echo "<img src='./gif/$filename'>"; }else{ echo "jpg,pngもしくはgifのファイルしかアップできません。"; } }else{ echo "$filesize バイト。ファイルサイズが大きすぎます。"; } } ?> </body> </html> ----------------------------------------------------------

    • ベストアンサー
    • PHP
  • テキストファイルのアップロードについての質問です

    現在テキストファイルのアップローダーのページを表示し、アップロードされたテキストファイルの文章を表示するプログラムを作っております。 プログラムは以下です。 //省略 <form method="post" enctype="multipart/form-data" action="testup.php"> <input type="file" name="data" size="30"> <input type="submit" value="upload"> </form> <?php $updir = "./up/"; $filename = $_FILES['data']['name']; if(file_exists($_FILES['data']['tmp_name'])){ $filesize = filesize($_FILES['data']['tmp_name']); if($filesize <= 700000){ if(ereg("(^[a-zA-Z0-9_-]+)\.(txt)",$filename)){ move_uploaded_file($_FILES['data']['tmp_name'], $updir.$filename); echo "File : " . $filename . " Upload Suceeded!!"; echo $_FILES['data']['error']; echo "<br><br>"; include("./$updir/$filename"); } else { } }else { echo "$filesize Byte too large size。<br>File must be less than 700000 Byte"; } } if ($handle = opendir($updir)) { while (false !== ($file = readdir($handle))) { if ($file != "." and $file != "..") { include("./$updir/$file"); } } closedir($handle); //以下省略 このプログラムを実行すると問題なく動くのですが、今回お聞きしたいのは、アップロードされた文章をこのページだけでなくほかのページにも表示させるにはどうすればいいのかということです。 例えば <form method="post" enctype="multipart/form-data" action="testup.php">の[action = " "]のところに表示したいページのアドレスを入れればいいのかと思ったのですが、そうすると、テキストファイルの内容だけでなく、アップロード完了後のUpload Suceeded!!";まで表示されてしまうのであまり好ましくないと思います。また if ($handle = opendir($updir)) { からclosedir($handle);の部分を別に保存して include(-----);としたのですが、 Warning: include(.//ete.txt) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\inc2.php on line 8 Warning: include() [function.include]: Failed opening './/ete.txt' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\inc2.php on line 8 というようなエラーメッセージが出てしまいました。 長い文章になってしまいましたが、今まで書いてきたとおり、アップロードされたファイルを別のページでも表示させるにはどうすればいいのでしょうか?お分かりになる方がいらっしゃいましたら教えていただけないでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの syntax error について

    PHPのコードを書いて、添付のスクリーンショットのようなエラーが出てきます。 コードは次のようなもので、HTML文書のフォームから送られてきた名前のファイルを消去するものです。 <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\xampp\htdocs\".$FileName; echo $FileName ; unlink($FileName); //echo "<form id='next' method='post' action='QAgmeOver.php' >"; //echo "<input type='submit' value='call QAgameOver' >"; //echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> 問題の line 18 というのは次の行です。 //echo "<form id='next' method='post' action='QAgmeOver.php' >"; unexpected T_STRING というのは、何か文字列の書き方に問題があるということらしいのですが、何をどうやって見てもエラーが消えないのでコメントアウトしてみましたが、それでも同じエラーメッセージが出てきます。 どうすればこのエラーが出なくなるのか、詳しい方がいらっしゃいましたら教えてください。お願いいたします。

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

    私は以下のスクリプトを実行しましたがエラーが出ました。誰か教えてください。 --------------------------------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>ファイルアップローダー2</title> </head> <body> <form method="post" enctype="multipart/form-data" action="09_03_fileup.php"> <input type="file" name="data" size="30"> <input type="submit" value="表示!"> </form> <!--ここからPHPが始まります。--> <?php $updir = "./updir/";            //ファイルを保存するフォルダ $filename = $_FILES['data']['name']; if(file_exists($_FILES['data']['tmp_name'])){         //ファイルの存在を確認 tempの状態で確認  $filesize = filesize($_FILES['data']['tmp_name']);     //ファイルサイズを取得 tempの状態で取得  if($filesize <= 100000){   if(ereg("(^[a-zA-Z0-9_-]+)\.(jpg)|(^[a-zA-Z0-9_-]+)\.(gif)",$filename)){ //jpgかgifしかアップできない    move_uploaded_file($_FILES['data']['tmp_name'], $updir.$filename); //ファイルをuploadフォルダに保存     echo "ファイル名 " . $filename . " アップロード成功!";     echo $_FILES['data']['error'];     echo "<br><br>";     echo "<img src='./$updir/$filename'>";   } else {     echo "jpg かgif のファイルしかアップできません。或いはハイフン以外の記号があります。";   }  } else {     echo "$filesize Byte ファイルサイズが大きすぎます。<br>100000 Byte 以下にしてください。";  } } else {    echo "ファイルをアップした順にテーブルに並べていきます。20枚でお終い。<br>"; } //ここから保存されたファイルの表示部分の記述です。 if ($handle = opendir($updir)) {    //フォルダを開きます。  echo "<table border='1'>";  $cnt = 1;     //カウント用の数字です。   while (false !== ($file = readdir($handle))) {      //ファイルがあればすべて順に読みこむ    if ($file != "." and $file != "..") {     //.と..を読まないようにします。      if($cnt % 5 == 0){    //カウントが5で割って0なら右端なので</tr>を付ける       echo "<td><img src='$updir/$file' width='112'></td></tr>";      } else if($cnt % 5 == 1){   //5で割って1なら左端なので<tr>を付ける       echo "<tr><td><img src='$updir/$file' width='112'></td>";      } else {       echo "<td><img src='$updir/$file' width='112'></td>";      }    $cnt++;    }    if($cnt > 20){   //カウントが20を超えたら終了      break;    }   }  closedir($handle);      //フォルダを閉じます }    //ここからテーブルがぴったり右端で終わらなかった時の処理 if(!(($cnt-1) % 5 == 0)){  //右端ぴったりで終わらなかったら  $cvr = 5-($cnt-1) % 5;   for($a=1;$a<=$cvr;$a++){  //足りない分だけ補う    echo "<td width='112'> </td>";   } echo "</tr>"; } echo "</table>"; ?> <!--これでPHPは終わりです。--> </body> </html> --------------------------------------------------------------- エラーが以下の通りです --------------------------------------------------------------- Parse error: parse error, unexpected T_VARIABLE in /home/wwwbest/public_html/09_03_fileup.php on line 20 --------------------------------------------------------------

  • RedHatでのシェルスクリプトについて

    こんにちは。また質問させて下さい。 redhat7.0のシェルスクリプトで、 サンプルコード片手に以下のコードを記述しました。 やりたい事は、もしaaa.txtというファイルが存在したら その内容を表示させ、存在しなければその旨のメッセージを 表示させる、という単純なものです。 この時、ファイルが存在しない時に ./test.sh: /tmp/aaa.txt: No such file or directry というエラーになってしまいます。 エラーを抜けてメッセージを表示させるには どうしたらいいでしょうか。 アドバイスよろしくお願いいたします。 *********記述したコードです。************* #!/bin/bash fileName=/tmp/aaa.txt read varStr1 varStr2 <fileName if [ -a fileName ]; then echo {$varStr1} else echo{$fileName}{$varStr2} fi

  • PHP getimagesize();

    プログラミング初心者です。 現在、PHPにてブラウザに画像の表示をしようとしているのですが 上手く行きません。ソースコードを張るのでダメなところがありましたら 手ほどきの程お願い致します。 ーーーーー <?php $fileName = "test.jpg"; //ファイル名 if (file_exists($fileName)) { header('Content-type: image/jpeg'); header('Content-Length: '.filesize($fileName)); //あった方が良い readfile($fileName); //ファイルを読み込んで標準出力に書き出し ★getimagesize(test.jpg); exit; }else{ echo "b"; } ?> ーーーー 目的 - phpにてブラウザに画像の表示 状況 - 最初は★のある行はなしでやっていたが 画像が映るも、かなり小さかったので大きくしようと ★のある行を追加。 - 画像の小ささはスクリーンショットを参考

    • ベストアンサー
    • PHP
  • PHPのPHP_SELFに絡む設定を教えてください

    PHPを勉強中なのですが、以下のソースをSubmit(value=更新)処理すると 結果がURLが見つからない「ページを表示できません」がでます。 恐らく、「PHP_SELF」に絡む設定か、「localhost」のPathに問題があると思うのです。 何かの設定が抜けていると思うのですが、色々調べても分かりません。 どこの設定を直せばいいか教えてください。(^^ 【書籍】 ホンキで学ぼう!PHPのキホン 【環境】 OS:WindowsXPHomeEdition Apapche:1.3.26 PHP:4.2.3 【URL結果】 最初にPHPにアクセスしたときのURL:http://localhost/tmp/php/fileedit.php SubmitしたときのURL:http://tmp/php/fileedit.php 【ソース】書籍の抜粋 <? $filename = "todo01.txt"; if ( $submit ) { $backupfile = $filename.".bak"; echo $backupfile; if ( copy($filename, $backupfile) ) { $fp = fopen($filename, "w"); if(flock($fp, 2)){ fputs($fp, $contents); flock($fp, 3); }else{ echo "ERROR: file lock is failed.<BR>\n"; exit; } fclose($fp); }else{ echo "ERROR: backup failed.<BR>"; exit; } } // ファイル書き換え部終わり ?> <HTML> <HEAD> <TITLE> <? echo $filename ?> </TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=euc-jp"> </HEAD> <BODY> <FORM ACTION="<? echo $PHP_SELF; ?>" METHOD="POST"> <TEXTAREA NAME="contents" ROWS="25" COLS="100"> <? require ( $filename ); phpinfo(); ?> </TEXTAREA> <INPUT TYPE="submit" NAME="submit" VALUE="更新"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • PHPのエラーメッセージ

    HTML文書からPHPに送ったファイル名のついたファイルをunlink()関数で削除しようとしているのですが、添付したスクリーンショットのようなエアーメッセージが出てきて進めません。 PHPのコードは下のようなものです。 <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title> QAdeleteFile.php</title> </head> <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\\xampp\\htdocs\\".$FileName; echo $FileName ; unlink($FileName); echo "<form id='next' method='POST' action='QAgmeOver.php' >"; echo "<input type='submit' value='call QAgameOver' >"; echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> </html> エラーメッセージで言っているQAgameOver.phpというのは上に挙げたコードのプログラムです。このメッセージでは、PHP はそのファイルをこのプログラムの中で探そうとしているように見えますが、そのファイルは当然ローカルサーバーのルートであるhtdocs の中に置いてあります。 なぜこうなるのでしょうか?詳しい方、どうか教えてください。

    • ベストアンサー
    • PHP
  • CodeIgniterでエラー

    CodeIgniterというフレームワークを利用してサイトを作成しようとしているのですが、うまく行きません。 index.phpというファイルに class Index extends CI_Controller { public function index() { $this->load->view('index'); } } としてviewフォルダにindex.phpというHTML主体のファイルを格納しました。 意図したページの表示が出ません。 色々調べたのですが、URLを簡素化する .htaccessの内容も RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?$1 [L] (A PHP Error was encountered Severity: Notice Message: Undefined property: Index::$load Filename: controllers/index.php Line Number: 7 というエラーが出ます) という例と RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L] (No input file specified.というエラーが出ます) という例があり2パターンがありますが、どちらが正解でしょうか? まだはじめたばかりでわからない事ばかりで教えて下さい。

    • ベストアンサー
    • PHP
  • headerのContent-Typeの出力制御

    お世話になります。 PHPの問題なのか、Apacheの問題なのか分かりかねましたので、とりあえずPHPのカテゴリーに質問させて頂きます。 ■問題点 mmfファイルにアクセスしているように見せかけてPHPを実行するプログラムにおいて、Headerの出力として"Content-Type:application/x-smaf" だけ出力したいのだが、"Content-Type: text/html; charset=Shift_JIS" も同時に出力されてしまう。 ■出力されるHeader(一部修正しています) HTTP/1.1 200 OK Date: Wed, 25 May 2005 01:46:37 GMT Server: Apache/1.3.27 (Unix) X-Powered-By: PHP/4.3.6 Accept-Ranges: bytes Content-Type:application/x-smaf Content-length:11212 Connection: close Content-Type: text/html; charset=Shift_JIS (↑この一行が邪魔) ■PHPプログラム 拡張子mmf(smafファイル)でphpを実行し、smafファイルを出力する。 <?php $melody_file = "hoge.mmf"; $melody_filesize = @filesize( $melody_file ); $fd = fopen ($melody_file, "rb"); $contents = fread ($fd, $melody_filesize ); fclose ($fd); header("Content-Type:application/x-smaf\nContent-length:${melody_filesize}\n\n"); echo $contents; ?> ■Apache設定 AddType application/x-httpd-php .php .php4 .php3 .phtml .mmf ■動作環境 ReadHat7.2 Apache 1.3.27 PHP 4.3.6 上記の件につきまして、対応方法をご存知の方がいらっしゃいましたら宜しくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう