• ベストアンサー

windows環境でphpのfopenが使用できない

rimyと申します。 windowsでapacheを使用していて、PHP5をインストールしています。 PHPは作動していて、スプリクトは実行できます。 しかしfopen関数を使ってファイルをロードしようとしたところ なぜかエラーが起きます。 fopen関数は fopen('ファイルパス','モード'); でやれるので やってみましたが、 Warning: fpassthru(): supplied argument is not a valid stream resource in C:\Apache\htdocs\test\reading.php on line 6 という表示が出ます。 ちなみにスプリクトは <html> <head><title>ファイルの読み出し</title></head> <body> <?php $text = fopen("test.txt","b""r"); fpassthru($text); ?> </body> </html> と書いてあります。 あるサイトで windows環境では モードにbを入れろ と書いてありましたがどういうことでしょうか。 まだ最近 勉強し初めでわかりませんのでよろしくお願いします。

  • rimy
  • お礼率87% (7/8)
  • PHP
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

> 以上のエラーが出ます > どうしてでしょうか? もしここに投稿するときにミスしたのでなければ、 $text = fopen("test.txt","rb"); fpassthru($test); fopen の戻り値を受け取った変数と、fpassthruに渡している変数の名前が違っているからでしょう。

rimy
質問者

お礼

ありがとうございました!! ついに成功しました。初歩的なミスで本当に申し訳ありません。 これからもたびたびお聞きしますがよろしくお願いします。

その他の回答 (4)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

#3の回答で解決してます? > 正しく $text =fopen("test.txt","b""r");でやると "b""r" と並べても、それはひとつの文字列とはみなされません。 そしてこれら二つの間に何の演算子もないので、エラーになっているというわけです。 "rb" か "br" という形でまとめてやれば、「読み込みモードかつバイナリモード」 でオープンするはずです。 今回はオープンしようとしている対象の拡張子が '.txt'なので、 バイナリモードにする必要は多分ありません。

rimy
質問者

お礼

ご回答ありがとうございました みなさんの言うとおり <html> <head><title>ファイルの読み出し(1行)</title></head> <body> <?php $text = fopen("test.txt","rb"); fpassthru($test); ?> </body> </html> で実行してみると Warning: fpassthru(): supplied argument is not a valid stream resource in C:\Apache\htdocs\test\reading.php on line 6 以上のエラーが出ます どうしてでしょうか?

  • wish46
  • ベストアンサー率78% (29/37)
回答No.3

こういうことかな $text = fopen("test.txt","rb"); fpassthru($test); ↓参考:fpassthru

参考URL:
http://jp.php.net/manual/ja/function.fpassthru.php
rimy
質問者

お礼

早速参考URLを見ました ご意見どうもありがとうございました

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> $text = fopen("test.txt","b""r"); このfopenの引数ですが、本当にこれですか? Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in o.php on line 2 てなエラーになるんですが。 仮にカンマを忘れていたのなら、 resource fopen ( string $filename, string $mode [, bool $use_include_path [, resource $context]] ) にあるように、"r" は第三引数になります。 そのせいで fopenが成功していないとかじゃないですか? モードに'b'を含めるかどうかという話は 以下のリンクにある記述を参考にするとよいでしょう。 PHP: fopen - Manual http://jp.php.net/fopen

rimy
質問者

補足

失礼しました コードの書き換えで失敗していて もとのコードが $text ='fopen("test.txt","b""r")'; になっていました 正しく $text =fopen("test.txt","b""r");でやると Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\Apache\htdocs\test\reading.php on line 5 になります。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

> windows環境では モードにbを入れろ  これは聞いたことがありませんね。改行コード関係かな? > fopen関数を使ってファイルをロードしようとしたところ エラーは fpassthru でおきていて、fopenではないようですけど。

rimy
質問者

お礼

そうですか それでもなぜエラーが起きているかわかりません ありがとうございました

関連するQ&A

  • phpでfopen()やfputs()が使えない

    CGIを使ってやりたいことがあり、PHPを独学で学び、レンタルサーバーで実験をしているのですが、fopen()やfputs()をつかうとエラーのようになります。 これがそれです。 http://pgc.sub.jp/form.php サーバーはlolipopというところを使っているのですが、こちらのほうが許可していないということでしょうか。 ソースは以下のようになります。 <html> <head> <title>実験掲示板</title> </head> <body> <h1>実験掲示板</h1> 書き込む内容を入力してください。<hr> <form name="form" action="./sample01.php" method="POST"> <input name="body" type="text" size="40"> <input type="submit" value="書込"><hr> </form> <?php $data = file("./data.txt"); for($i=0; $i<sizeof($data); $i++){ print "記事NO.${i}:${data[$i]}<br>\n<hr>"; } ?> </body> </html> <?php $body = $_REQUEST["body"]; $body = $body."\n"; ?><html> <head> <title>Sample01</title> </head> <body> <?php $fp = fopen("./data.txt","a"); fputs($fp,$body); fclose($fp); echo "書き込み完了<br>", "<a href=\"./form.php\">戻る</a>"; ?> </body> </html> プラス空のdata.txtファイル また、大学のPCを使用しているのですが、 http://localhost/ をすると 「Connection Failed」となってしまい、localhostでの実験ができません。これは大学側が禁止しているためでしょうか?研究室のものですので、IPアドレスはそれぞれに割り当てられているのですが。

    • ベストアンサー
    • PHP
  • PHP

    PHPで、 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>テストのページ</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <p>これはテストです</p><p>本日は 晴天なり</p> </body> </html> と、簡単なプログラムを打ったんですが、ブラウザで表示されません。ちゃんとApacheも設定したのですが・・・ どうすれば、ブラウザで表示できるようになるのでしょうか?

    • 締切済み
    • PHP
  • サーバーにPHPを拒否されてしまう

    無料HPでPHPの練習をしている初心者です。 PHPファイルをサーバーにアップしてブラウザでみてみると・・・ ------------------------------------------------------------- 今日は、2008/07/26 です☆ Warning: fopen() [function.fopen]: Unable to access count.txt in /home/freeuser/ameyuki/htdocs/test.php on line 19 Warning: fopen(count.txt) [function.fopen]: failed to open stream: No such file or directory in /home/freeuser/ameyuki/htdocs/test.php on line 19 Warning: fgets(): supplied argument is not a valid stream resource in /home/freeuser/ameyuki/htdocs/test.php on line 20 Warning: fseek(): supplied argument is not a valid stream resource in /home/freeuser/ameyuki/htdocs/test.php on line 22 Warning: fputs(): supplied argument is not a valid stream resource in /home/freeuser/ameyuki/htdocs/test.php on line 23 Warning: fclose(): supplied argument is not a valid stream resource in /home/freeuser/ameyuki/htdocs/test.php on line 24 あなたは 1 人目のお客様です。 -------------------------------------------------------------- このような警告ばかりでて、PHPのコマンドが働いていないようなのです。日付は表示されますし、お客様の人数も一応1となっていますが、TOPへ戻ってから再度きても1人なのです。だから働いていないと思うのです。どうしたらPHPのコマンドを受け入れてもらえますか?無料HP、PHP可のところでは無理なのでしょうか? お願いします!

    • ベストアンサー
    • PHP
  • PHPのfopen関数について質問です。

    PHPマニュアル http://www.php.net/manual/ja/function.fopen.php 上記ページの >> Windows ベースのシステムでは \r\n を使用します。 マッキントッシュベースのシステムでは \r を使用します。 間違った改行コードでファイルに書き込むと、 他のアプリケーション上でそのファイルを開いた際に変な風に見えてしまいます。 Windows上では、\nを\r\nに透過的に変換する text-mode変換フラグ('t')が提供されます。 それに対し、'b'を使って強制的にバイナリモードにすることもできます。 その場合データの変換はされません。 このフラグを使用するには、'b' または 't'を mode引数の最後に追加してください。 とある様にPHPにおいてfopen関数の第二引数のモードに付加する場合のバイナリモードとは windows系プラットフォームにおいて書き込む文字列内に[¥n]というバイトがあった場合、プラットフォームにあわせて 自動的に書き出す際に¥r¥nに変換されるから・・・・。 という意味ですよね。 例えば、あるバイナリファイルに奇跡的に[¥n]というバイトがなかった場合、fopen("test.jpg","rw");でもよいということですよね?

    • ベストアンサー
    • PHP
  • PHP拡張子としてHTML型を使用したいのですが

    タイトルにも書いたように、 PHP拡張子としてHTML型を使用したいのですが、うまくいきません。 .htaccessファイルに AddType application/x-httpd-php .htm .html を記述し、転送の上、パミッションを644に設定しました。 ---- test.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"> </head> <body> <?php print "hello"; ?> </body> </html> ------------------------------------------------- 上記 test.phpを.htaccessファイルと同じディレクトリに転送して実行すると正常に動くのですが、test.htmlにリネームすると、何も表示されません。 尚、.htaccess でベーシック認証はできますの、.htaccess自体は無効にはなっていないようです。 サーバーの環境は Apache 2.0.50 Fedora Core 1 kernel 2.4.22 よろしく、お願いいたします。

  • fopenのエラー

    [schdule_edit.php] Warning: fopen(C:\Program Files\xampp\htdocs\schedule\samplefile.txt) [function.fopen]: failed to open stream: No such file or directory in C:\xampp\htdocs\schedule\schedule_edit.php on line 55 Warning: fwrite(): supplied argument is not a valid stream resource in C:\xampp\htdocs\schedule\schedule_edit.php on line 56 Warning: fclose(): supplied argument is not a valid stream resource in C:\xampp\htdocs\schedule\schedule_edit.php on line 57 ---------------------------------------------------------------- 上記のようなエラーがでます。何が原因でこのエラーが出るのか、 色々調べたのですが自分では答えを見つ ける事ができませんでしたので、教えてください。 ---------------------------------------------------------------- [schdule_edit.php] <? if(isset($_POST["regist"])){ //全角→半角 $year=mb_convert_kana($_POST["year"],"a","UTF-8"); $month=mb_convert_kana($_POST["month"],"a","UTF-8"); $day=mb_convert_kana($_POST["day"],"a","UTF-8"); //入力チェック $error_message=array(); if(isset($_POST["year"]) && is_numeric($_POST["year"]) && $_POST["year"] > 2007){ $year=$_POST["year"]; }else{ $error_message[]="年を正しく入力してください"; } if(isset($_POST["month"]) && is_numeric($_POST["month"]) && $_POST["month"] > 0 && $_POST["month"] < 13){ $month=$_POST["month"]; }else{ $error_message[]="月を正しく入力してください"; } if(isset($_POST["day"]) && is_numeric($_POST["day"]) && $_POST["day"]>0 && $_POST["day"]<32){ $day=$_POST["day"]; }else{ $error_message[]="日を正しく入力してください"; } if(isset($_POST["title"])){ if(strstr($_POST["title"],"|")){ $error_message[]="タイトルに|は使えません"; }else{ } $error_message[]="タイトルを入力してください"; } } if(isset($_POST["body"])){ if(strstr($_POST["body"],"|")){ $error_message[]="内容に|は使えません"; }else{ } $error_message[]="内容を入力してください"; } if(!count($error_message)){ //内容の改行を<br>に変換 $body=str_replace(array("\r","\n","\r\n"),"<br>",$body); $filename = "C:\\Program Files\\xampp\\htdocs\\schedule\\samplefile.txt"; $schedule_date =sprintf("%04d%02d%02d",$year,$month,$day); $line=$schedule_dare."|".$title."|".$body; $fp = fopen($filename, "w"); fwrite($fp, $line); fclose($fp); if(count($error_message)){ foreach ($error_message as $value){ print($value); } } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>スケジュール</title> </head> <body> <form action="schedule_edit.php" method="post"> <input type="text" size="4" name="year">年 <input type="text" size="4" name="month">月 <input type="text" size="4" name="day">日 <br><br> タイトル:<input type="text" size="31" name="title"> <br><br> 内容:<br> <textarea name="body"></textarea> <br><br> <input type="submit" name="regist" value="登録"> </form> </body> </html> ---------------------------------------------------------------- [schedule_list.php] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>スケジュール</title> </head> <body> <?php $filename = "C:\\Program Files\\xampp\\htdocs\\schedule\\samplefile.txt"; $schedule_list = file($filename); foreach ($schedule_list as $line) { // (1) 取得したファイルの各行について、日付、タイトル、本文に分ける list($schedule_date, $title, $body) = explode("|", $line); // 分けた変数を$schedule_date、$title、$bodyに print("日付:$schedule_date タイトル:$title 内容:$body <br>"); } ?> </body> </html> ---------------------------------------------------------------- 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPでFopenモードを「a」で開きたいのですが、

    PHPでFopenモードを「a」で開きたいのですが、 パーミッションを「777」でしか受け付けてくれません。 コードは、 $fp = @fopen("test.txt","a") or die("Error"); echo "ok"; fclose($fp); です。 サーバーはxreaでPHPのバージョンは5です。

    • 締切済み
    • PHP
  • phpのincludeで表示を変化させたい

    includeでHTMLの表示を変えられるように したいのですが、どうもうまくいきません。 (ブラウザ表示が真っ白になる。) 以下のようなソースを書いてみました。(php4.3.11,apache) (1) test01.php <?php $param = $_GET['param']; include ("./includes/datapack01.php"); ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=EUC-JP"> <TITLE>COMPANY A - <?php echo $title; ?></TITLE> </HEAD> <BODY> <span> test </span> </BODY> </HTML> (2) datapack01.php <? if($param == "8") { $title = "お問い合わせ : オーダー申し込み"; } ?> 意図としては、http://hoge.com/test01.php?param=8 とアクセスすれば、ブラウザのタイトル欄に 「COMPANY A お問い合わせ : オーダー申し込み」 と表示させたいところですが、 実際は、ブラウザ表示は真っ白となってしまいます。 http://hoge.com/test01.php とすれば、「test」とのみ表示されるのですが・・・

    • ベストアンサー
    • PHP
  • PHPについて教えてください

    下記のindex.htmlとcheck.phpを別々にURLに入力すると正しく表示されるのですが 横の送信ボタンを押したときにcheck.phpにジャンプしてくれません どうしてでしょうか? index.html <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <from method="post" action="check.php"> <input name="nickname" type="text" style="width:100px"> <input type="submit" value="送信"> </from> </body> </html> check.php <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php print'ようこそ'; ?> </body> </html>

    • 締切済み
    • PHP
  • PHPの「こんにちは」の部分は表示できません

    環境はxp、apache2、php5です。 ただ今PHPの勉強をしています。 ローカル上で以下のようなsampleを作りました。 タイトルは表示できるのですが PHPの「こんにちは」の部分は表示できません。 これはPHPがうまくインストールされていない ということでしょうか? --------------------- <html> <head> <title>Sample</title> </head> <body> <?php print "こんにちは"; ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう