• 締切済み

phpでファイルの読み込みができません

phpを使って掲示板のコードを書いたのですが、ファイルの読み込みができないとエラーがでます。 なぜ読み込みが出来ないのでしょうか。サーバにアップした際に、権限の変更などが必要なのでしょうか。 以下が問題のコードの部分になります。 function load_data( $file_name, &$data_array ){ global $sys_mes; if( is_readable ( $file_name ) ){ $data_array = @file( $file_name ); return true; }else{ $sys_mes = "ErrorFile open for load<br> データファイルが開けませんでした<br>\n"; return false; } } このコードを実行するとelse文を実行します。なぜでしょうか

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

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>ファイルのパーミションを変更する場合、どうすればよいのでしょうか? 質問者さんがお使いのサーバで「phpスクリプトから読める」パーミッションが必要です。サーバの設定依存なので、詳しくはサーバ管理者にお尋ねください。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

is_readable ( $file_name ) がfalseになっているのですから、まずはis_fileでどうなるかを確認してください。is_fileでもfalseになるんだったら、「ファイル名が間違っている」。is_fileでOK(でも$data_arrayがfalseになる)なら、「ファイルのパーミッションがおかしい」ことになります。 まとめて書くなら、こう書いた方がいいんじゃないですかね。もちろんdieで止めたくないなら例外を投げてもいいです。 function load_data($file_name) { if(is_readable ( $file_name)) { return file($file_name); }else{ if (!is_file($file_name)) { die('<span style="color:red">データファイル' . $file_name . 'が存在しません</span>'); } die('<span style="color:red">データファイル' . $file_name . ''が開けません</span>'); return false; } } 使う側は、$data = load_data(ファイル名); で。

yuki_e_21
質問者

補足

ファイルのパーミションを変更する場合、どうすればよいのでしょうか?

関連するQ&A

  • PHPのテキストファイルを使った簡素な掲示板

    テキストファイルを使って 簡単な掲示板での書き込み、読み出しのサンプルを練習しています。 書き込み、書き出しは何とかできるようなのですが フォームに何も記入していない状態で送信ボタンを押したり 再読み込みをすると 「さん」の部分だけファイルに書き込まれ、 そして出力されてしまいます。 ------------------------------------------------------------- <div class="obi">このページに関するコメントをどうぞ</div> <div id="form"> <form method="post" action=""> <p><input type="text" name="name">【名前】</br> <textarea name="kakikomi" cols="60" rows="5"></textarea></br> <input type="submit" value="送信"></p> </form> </div> <?php $data = file_get_contents("keiji.txt"); $name = htmlspecialchars(@$_POST["name"]); $kakikomi = htmlspecialchars(@$_POST["kakikomi"]); if(isset($name)){ $name = "$name さん"; $data = '<strong>'.$name.'</strong>&nbsp&nbsp'.$kakikomi.'<hr><p>'.$data.'</p>'; file_put_contents("keiji.txt", $data); echo "<p>$data</p>"; }else{ exit; } ------------------------------------------------------------- フォームに何も記入しなかった場合 テキストファイルになにも書き込みされないようにするには どこを修正したらよいのでしょうか? 難しい構文ではなく初心者でも分かりやすい方法があれば お教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでXMLファイルを読み込みたい

    PHPを使ってxmlファイルを読み込んで、タグの中のデータなどを読み込んだりしたいです。 ですが、自作のxmlファイルだと simplexml_load_file()で読み込めません。xmlファイルの文字コードを色々と変えて試してみましたが、できませんでした。 ちなみに以下のコードは正常に動きました。Yahoo!のxmlファイルです。 $url = "http://rss.weather.yahoo.co.jp/rss/days/5710.xml"; $rss = simplexml_load_file($url); 出力は「【 25日(金) 嶺北(福井) 】 晴れ - 23℃/8℃ - Yahoo!天気・災害」でした。 何度かやるうちにアルファベットは表示できても日本語が表示できないということもありました。 また、xmlファイルをphpのプログラムに作らせたいです。そのときに、simplexml_load_file()で読み込める日本語も含むxmlファイルをphpで作成するプログラムを教えていただけると嬉しいです。 お願いします。

    • ベストアンサー
    • PHP
  • ファイル読み込みについて

    ファイル読み込みについてなのですが、 文字コードがUNICODEの場合は出来たのですが、 UTF-8の場合、正しく読み込めないようなのですが、 何か原因があるのでしょうか? ちなみに、読み込むファイルの文字コードはUTF-8にしています。 _wfopen_s(&fp, file_name, L"rt,ccs=UTF-8")でファイルを開いて、 fgetwcで読み込んでいるのですが、正しく読み込めません。 ちなみに、アクセス許可の種類をL"r"にしたら読み込めました。 原因(これが原因かもしれないでも構いません)とどのようにすればいいかを 教えて頂ければと思っています。 開発環境は、XP、Visual C++ 2010 Expressです。

  • PHP で動的ファイル出力

    PHP 猛勉強中です、またお世話になりますm( __ __ )m ドキュメントルート外に置いたイメージファイルを HP からリンクして表示できるように readfile 関数を使った PHP ファイルを作成しようと思っています。 readfile.php に対して URL クエリーでhttp://hoge/readfile.php?name=hage&ext=jpg のような感じで呼び出したいと思っています。 ※ name はファイル名、 ext は拡張子です。 [readfile.php] <?php $_name = ""; $_ext = ""; if(isset($_GET["name"]) === true && isset($_GET["ext"]) === true){ // null byte 対策 $_name = delete_nullbyte($_GET["name"]); $_ext = delete_nullbyte($_GET["ext"]); // ディレクトリトラバーサル対策 $_name = str_replace(".", "", @htmlspecialchars($_name, ENT_QUOTES, "UTF-8")); $_ext = str_replace(".", "", @htmlspecialchars($_ext, ENT_QUOTES, "UTF-8")); }else{ exit(); } $_file_path = "/home/xxx/img/" . $_name . "." . $_ext; // ファイル存在確認 if(file_exists($_file_path) === false){ exit(); } // MimeType 取得 $_ext_type = substr($_file_path, -3); $_mime_type = ""; if(strcasecmp($_ext_type, "jpg") === 0){ $_mime_type = "image/jpeg"; _out_file($_file_path, $_mime_type); }else{ exit(); } ///////////////////////////////////////////////// // ファイル出力 function _out_file($file_path, $mime_type) { // ファイル名取得 $_fname = @basename($file_path); // ファイルストリーム取得 header('Content-Type: ' . $mime_type); header("Content-Disposition: inline; filename='" . $_fname . "'"); readfile($file_path); } ///////////////////////////////////////////////// // null byte 除去メソッド function delete_nullbyte($str) { if(is_array($str) === true){ return ""; } return str_replace("\0", "", $str); } ?> 色々作業を進めるうちに「null byte 攻撃」や「ディレクトリトラバーサル攻撃」などの言葉が耳に入ってきてセキュリティ的に不安を感じています。 自分なりに調べて上記のようなコーディングをしましたが、果たして問題が無いのか、それとももっとたくさん考えなくてはならないのか、先輩方の意見が聞きたく質問させていただきました。 よろしくお願いしますm( __ __ )m

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

    OSはLinuxのfedoraを利用しており、WebサーバーソフトはApacheを利用しています。 PHPを使って、クライアントからサーバーにファイルのアップロードをしたいのですが、プログラミングがあまり理解できておらず、アップロードができません。ちなみにphp.iniファイルの設定に関しては、アップロードは受け付けるようにしていますし、設定にミスはないと思います。 sample.phpというファイル名で下記のファイルを作ってみたのですが、アップロードすることができませんでした。まだPHPは初心者で間違いだらけだと思うのですが、こうすればアップロードできるようになるといった指摘をお願い致します。 <html> <head> <title> </title> </head> <body> <form enctype="multipart/form-data" action="sample.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> <?php if(isset($uploadfile) and is_uploaded_file($uploadfile)) { if(move_uploaded_file($uploadfile, $path . "/var/www/html/test/" . $uploadfile_name)){ print("<br>Uploaded file saved."); }else{ print("<br>Uploaded file save failed."); } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPファイルとテンプレートファイルの書き方

    <?php // ファイル名 $fname = "test.csv"; // ファイルを開く $file = fopen($fname, "r"); // 全データを出力する while (list($id, $name, $add) = fgetcsv($file, 1000, ",")) { echo "<hr>"; echo "<br>ID:".$id; echo "<br>名前:".$name; echo "<br>住所:".$add; } // ファイルを閉じる fclose($file); ?> <質問> 上の内容をSmartyを使ってPHPファイルとテンプレートファイルに分離したい。 テーブルにCSVファイルのデータが入るようにしたい。 PHPファイルとテンプレートファイルの書き方を教えてください。

    • 締切済み
    • 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 --------------------------------------------------------------

  • PHPでファイルのダウンロードについて

    お世話になります。ダウンロードボタンを付けてファイルのダウンロードを行う処理で困った事になってます。 (DL.php) $file_name=htmlspecialchars(@$_POST['file_name']); $file_name=addslashes($file_name); mb_convert_variables("SJIS-WIN","EUC-JP",$file_name); $file_to=htmlspecialchars(@$_POST['file_to']); $file_to=addslashes(@$_POST['file_to']); header ("Content-Disposition: attachment; filename=".$file_name); header ("Content-type: application/octet-stream"); require_once("dl_config.php"); readfile ($data_pas.$file_to); dl_config.php <?PHP $data_pas="/data/"; ?> この状態でテキストファイルをダウンロードすると、DLしたファイルの中に不要な改行ファイルが挿入されています。 またrequire_once("dl_config.php");を削除し readfile ($data_pas.$file_to);を readfile ("/data/".$file_to);とすると、改行は入らなくて、正常なファイルがダウンロードされます。 よろしくお願いします。

    • 締切済み
    • PHP
  • テキストファイルの内容を配列に読みとは

    この場合、どこでどのようにテキストファイルの内容を配列に読込んでいるのでしょうか?LoadTextFile、file_existsとは?array_convert_encodingとは?それ以外も総合的に解説お願いいたします。 この間、PHPの勉強を始めたばかりのど素人です。他の言語経験もないです。是非、素人目線でわかりやすくお願い致します。 function LoadTextFile( $FilePath, $encoding = "EUC_JP", $s_encoding = "SJIS" ) { if ( file_exists( $FilePath ) == false ) { return false; } $data = file( $FilePath ); if ( sizeof( $data ) < 1 ) { return false; } else { array_convert_encoding( $data, $encoding ); return $data; }

    • ベストアンサー
    • PHP
  • phpのwhileで希望通りの動作ができない

    以下のようにしてみたのですが「データはありません」という文章が何度も(何行も)表示されてしまいました。 while($test = mysql_fetch_array($sql, MYSQL_ASSOC)){ $name = $test[name]; if($cnt > 0){ echo "データはありません"; echo '<br>'; } elseif(empty($name)){ echo "データはありません"; echo '<br>'; } else{ $name = $name.'<br>'; } } whileで繰り返した結果、すべての$nameが「$cnt > 0」か「empty」の場合だけ、「データはありません」と一回だけ表示したいのですが、どのようにしたらいいでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう