• ベストアンサー

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> ---------------------------------------------------------------- 宜しくお願いします。

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

  • ベストアンサー
  • Ceren
  • ベストアンサー率49% (90/183)
回答No.1

原因は > No such file or directory ではないのですか? 見たところ、PHPスクリプトは C:\xampp\htdocs\schedule\schedule_edit.php で、開こうとしているファイルは C:\Program Files\xampp\htdocs\schedule\samplefile.txt と、パスが異なっているのが気になります。 推測ですが、本当は C:\xampp\htdocs\schedule\samplefile.txt を開きたい、ということではありませんか?

nicoko
質問者

お礼

回答ありがとうございます。 Cerenさんに言われたとおりでした。スペルミスだろうと一生懸命 間違ったところを探していました。 恥ずかしいです。 指摘されて気がついた次第です。 ありがとうございました。

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

その他の回答 (1)

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.2

エラーメッセージに書いてあるようにファイルかフォルダが無いからでは? もし、ファイルもフォルダもある場合は、アクセス権が無いかも知れませんので、それも確認して下さい。 残りのエラーは、ファイルオープンが失敗しているのにファイル処理をしているからです。 エラー処理も正しく行いましょう!

nicoko
質問者

お礼

回答ありがとうございました。 間違っていたところは $filename = "C:\\Program Files\\xampp\\htdocs\\schedule\\samplefile.txt"; でした。初歩的なミスで恥ずかしいです。 教えていただいて感謝しています。ありがとうございました。

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

関連するQ&A

  • $_POSTのものを$_GETとして使うのはなぜ?

    http://www.phppro.jp/school/phpschool/vol19/2 こちらの講座にあるサンプルコードで分からないところがあります。 schedule_edit.phpのサンプルでは if (isset($_POST["year"]) && is_numeric($_POST["year"]) && $_POST["year"] > 2000) { $year = $_POST["year"]; <form action="schedule_edit.php" method="post"> <input type="text" name="year" id="schedule-year" value="<?php print(htmlspecialchars($year, ENT_QUOTES)); ?>" /> <label for="schedule-year" id="label-year">年</label> formで入力されたデータはhtmlspecialchars($year, ENT_QUOTES)の$yearに格納され、 $_POST["year"]としてデータが渡り、 php側で$year = $_POST["year"];のように$_POST["year"]のデータが$yearに格納し直されています。わざわざ格納し直す理由も分からないのですが、一番知りたいところは schedule_list.phpのサンプル内ではPOSTでなくGETで渡されているところです。 if ($schedule_date == date("Ymd", mktime(0, 0, 0, $_GET["month"], $_GET["day"], $_GET["year"]))) $_POST["day"]ではなぜだめなのか分かりません。 この$_GET["year"]はschedule_edit.phpの$_POST["year"]を見ているわけではないのでしょうか。

    • ベストアンサー
    • PHP
  • リセットボタンとエラー画面

    PHPを始めて1週間ほどのド初心者です。 本を買って勉強中ですが、本やネットでも調べてもわからないので 質問させて頂いています。 あるところからサンプルを引っ張ってきてフォームを作るところです。↓ session_start(); $errors = 0; if(!isset($_SESSION["form1"])){ $_SESSION["form1"] = "input"; $error["name"]["message"] = "<br><font color=\"#FF9900\">《必須》</font>"; $error["birt"]["message"] = ""; $error["sexx"]["message"] = "<br><font color=\"#FF9900\">《必須》</font>"; $name1 = ""; $name2 = ""; $sex = ""; $year = ""; $mon = ""; $day = ""; }else{ $name1 = stripslashes( $_POST["name1"] ); $name2 = stripslashes( $_POST["name2"] ); if((0==strlen($name1))&&(0==strlen($name2))) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《名前が未入力です》</font>"; $errors++; } elseif(0==strlen($name1)) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《性が未入力です》</font>"; $errors++; } elseif(0==strlen($name2)) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《名が未入力です》</font>"; $errors++; } else { $error["name"]["message"] = ""; } $year = $_POST["year"]; $mon = $_POST["mon"]; $day = $_POST["day"]; if( (($year<1900)||(date("Y")<$year)) || (($mon<1)||(12<$mon))|| (($day<1)||(31<$day)) ) { $error["birt"]["message"] = "<br><font color=\"#FF0000\">《生年月日が無効です》</font>"; $errors++; } else { $error["birt"]["message"] = ""; } $sex = $_POST["sex"]; if(!isset($_POST["sex"])) { $error["sexx"]["message"] = "<br><font color=\"#FF0000\">《性別が未選択です》</font>"; $errors++; } else { $error["sexx"]["message"] = ""; } if(0 == $errors){ $_SESSION["form1"] = "checked"; } } ?> ~~~~~~~中略~~~~~~~~ echo "<tr><td colspan=2 align=center><input type=submit name=submit value=\"申 込\">  \n". "<input type=reset name=cancel value=\"クリア\"></td></tr>\n". "</table> ~~~~~~~以降略~~~~~~~ 配布されているサンプルなのでこのままUPすれば正常に動きます。 フォームに何も入力しないで送信ボタンを押すとエラー表示されます。 何か入力をしてリセットを押すと、入力された値はリセットされて消えますが、 エラー表示がそのままになってしまいます。 つまり、エラー表示されたままなので、これをリセットボタンを押すことにより 初期の(エラー表示されていない)状態に戻したいのです。 $reset = true; などの例文を拝見しても難しくて解決できません(T-T) 何か良い方法があったら教えて下さい。 宜しくお願いします。

    • 締切済み
    • PHP
  • 何故unexpected ';'が出るのでしょうか

    お尋ねします。以下のスクリプトを書いてブラウザで表示しようとすると Parse error: syntax error, unexpected ';' in C:\xxx om\test.php on line 11   とエラーが出ます。 11行目は ?> と書いてあります。 <?php ~ ?> の対応関係も合っていると思います。 何故、unexpected ';' エラーが出るのでしょうか? どこが間違っているのでしょうか? 不具合修正はどのようにすれば良いか、ご教示いただければ有難いです。よろしくお願いいたします。 <html> <body> <?php if ( $_REQUEST[ "SUBMIT" ] != "" ){ $month=$_POST['month']; $day=$_POST['day']; $memo=$_POST['memo']; if( ($month=='') | ($day=='')){ echo                  ?>      ←ここでsyntax エラー <HTML><BODY> <FONT COLOR="RED"><B>空欄です</B><BR><BR> </FONT><BR></BODY></HTML> <?php exit(); } } ?> </body></html>

    • ベストアンサー
    • PHP
  • <?php

    <?php if (isset($_POST['reg']) && isset($_POST['reg'])) { $ErrFlg = false; // 氏名欄をチェック $first_name = $_REQUEST['first_name']; $last_name = $_REQUEST['last_name']; if (!trim($first_name) || trim($last_name) == '') { $_POST['err_name_req'] = '氏名が入力されておりません。<br />'; $error = TRUE; } else { unset($_POST['err_name_req']); } // 生年月日欄をチェック $b_year = $_REQUEST['b_year']; $b_month = $_REQUEST['b_month']; $b_day = $_REQUEST['b_day']; if (!trim($b_year) || trim($b_month) || trim($b_day) == '') { $_POST['err_birthday_req'] = '生年月日が入力されておりません。<br />'; $error = TRUE; } else { unset($_POST['err_birthday_req']); } if (checkdate($b_month, $b_day, $b_year) === false) { $_POST['err_birth_ereg'] = '生年月日が正しくありません。<br />'; $error = TRUE; } else { unset($_POST['err_birth_ereg']); } } ?> <html> <body> <form action="<?php $_SERVER["PHP_SELF"]; ?>" method="POST"> 氏名<br /> <?php print $_POST['err_name_req']; ?><br /> <input type="text" name="first_name" value="<?php print $first_name; ?>" /><input type="text" name="last_name" value="<?php print $last_name; ?>" /><br /> 生年月日<br /> <?php print $_POST['err_birth_req'].$_POST['err_birth_ereg']; ?><br /> <input type="text" name="b_year" value="<?php print $b_year; ?>" size="5" />年 <input type="text" name="b_month" value="<?php print $b_month; ?>" size="2" />月 <input type="text" name="b_day" value="<?php print $b_day; ?>" size="2" />日 <br /> <input type="submit" name="reg" value="登録" /> </form> </body> </html> としています。 登録ボタンを押した際に入力チェックされることがなければデータベースに登録したいのですが、どこに記述してよいのか困っています。 また、どのように記述したらよろしいでしょうか? イメージとしては登録ボタンを押したら、「登録しました。」というコメントだけが表示されるようにしたいのですが・・・ javascriptの使用は考えておりませんので、できればPHPでお願いいたします。 もしお分かりの方がいらっしゃいましたらご教授いただけないでしょうか? また上記の内容でおかしいところがありましたらご指摘いただけないでしょうか?

    • ベストアンサー
    • PHP
  • PHP初心者です。何処がエラーなのかさっぱり解りません。

    超初心者です。 PHPの勉強を始めたばかりで、いきなりつまずいています。 下記の表示になりエラーになっているのですが、何処がエラーなのか意味が解りません。 Parse error: syntax error, unexpected $end in C:\xampp\htdocs\phplesson\03\login.php on line 31 どなたか教えてください。 よろしくお願いします。 ----------------- <?php session_start(); $error_message = ""; //ログインボタンが押されたかを判定 if (isset($_POST["login"])) { if ($_POST["member_name"] == "php" && $_POST["password"] == "password") { //ログインが成功した証拠をセッションに保持 $_SESSION["login_name"] = $_POST["member_name"]; //管理者専用画面へWebブラウザをリダイレクトさせる $login_url = "http://{$_SERVER["HTTP_HOST"]}/phplesson/03/anq_result.php"; header("Location: {$login_url}"); exit; } $error_message ="メンバー名かパスワードを間違えています。"; } ?> <html> <body> <?php if ($error_message) { print '<font color="red">' .$error_message. '</font>'; } ?> <form action="/phplesson/03/login.php" method="post"> メンバー名:<input type="text" name="member_name" value="" /><br /> パスワード:<input type="password" name="password" value="" /><br /> <input type="submit" name="login" value="ログイン" /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • $_POST["year"]の”が unexpected といわれる。

    下記はある入門書の説明用サンプルコードの一部です。 これをインプットし(勿論、半角です)、ブラウザで開こうとしたところ、下から3行目で Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\***\htdocs\***\****\xxx.php on line 32 というエラーが出てしまいます。(yearの“”を取ると次の“mon”で、また、同じく ”day” でも出ます。) $name1=$_POST["name1"]; のname1ではエラーが出ていないのに、何故 $year = $_POST["year"];で unexpected '"', のエラーが出るのでしょうか。 この本のサポートサイトに問い合わせましたが、ナシのつぶてで大変困っています。 どなたか、心当たりがおありましたらヒントやご教示頂ければ有難いです。 環境はWinXP H/E、apache_2.0.50-win32-x86、PHP5.0.1、MSIE6.0 です。 <?php ・・・・・・・・ session_start(); ・・・・・・・・ if(!isset($_SESSION["form1"])){ $_SESSION["form1"]="input"; ・・・・・・・ $name1=""; $name2=""; $year=""; $mon=""; $day=""; }else{ $name1=$_POST["name1"]; $name2=$_POST["name2"]; if((0==strlen($name1))&&(0==strlen($name2))){ $error["name"]["message"]="<br><font color=\"#FF0000\"><名前が未入力です></font>"; $errors++; }else{    $error["name"]["message"]="; } $year = $_POST["year"]; $mon=$_POST["mon"]; $day=$_POST["day"];

    • ベストアンサー
    • PHP
  • PHPのフォームでエラーが出ます

    どなたかお力添えをお願いします。 【全体の流れ】 step1.php ラジオボタンで、商品を3種類選択する template.php 選択した商品名を表示し、金額を計算して表示する step2.php 「template.php」を表示し、規約に同意する step3.php 個人情報入力画面へ ・ ・ ・ という流れでフォームを作っていますが、step1.phpでつまずいています(涙)。 step1.phpのコード(html部分は省略してます)は以下のとおりです。 商品を3つ選んだ場合は、問題なく実行できるのですが、1つ、または2つ選択 した場合、画面上部に Notice: Undefined index: plan in C:\xampp\htdocs\step1_1.php on line 10 Notice: Undefined index: uq in C:\xampp\htdocs\step1_1.php on line 11 などとエラーメッセージが出ます。 ほかは正常に動いています。このメッセージを出なくさせる方法をぜひ、教えてください! よろしくお願いいたします。 <?php session_start(); $error = ""; if(isset($_POST["submit"])==TRUE){ $_SESSION["product1"]=$_POST["product1"]; $_SESSION["product2"]=$_POST["product2"]; $_SESSION["product3"]=$_POST["product3"]; $choice1 = $_SESSION["product1"]; $choice2 = $_SESSION["product2"]; $choice3= $_SESSION["product3"]; //未入力チェック if($choice1== null){ $error .="端末を選択してください<br />"; } if($choice2== null){ $error .="プランを選択してください<br />"; } if($choice3== null){ $error .="UQ Wi-Fiサービスの利用有無を選択してください<br />"; } if($error == null){ $url = "step2.php"; header("Location: ".$url); exit(); } } ?>

    • ベストアンサー
    • PHP
  • GETを使わずにPOSTで送信…したいのですが。

    いつもお世話になっております。 また教えて欲しい事がありまして、投稿させて頂きました。 どなた様かご教授宜しくお願い致します。 今現在、GETを使ってのデータ送信は行える用にはなっているのですが、色々調べていった結果GET送信では様々な危険性(POST送信でも 危険性があるのは変わりないみたいですが…)が伴うという事 でしたので、どうにかPOST送信に変更したいと思っています。 今後、更なる重要なデータを送るようなプログラムを書いていく際に 役立てていけるようになればと思っています。 以下ソースです。 ↓↓↓↓ <html> <head> <meta http-tquiv="Content-Type" content="text/html;charset=EUC-JP"> <title>calendar</title> </head> <body> <form name="form1" action="yotei.php" method="post"> <?php  $year = date("Y");  $month = date("n");  $day = date("j");  $year2=$_GET["year"];  $month2=$_GET["month"];  $day2=$_GET["day"]; //先月、来月をクリックした場合の処理  if($year2!="" || $month2!="" || $day2!="") {   if($year2!="") {    $year = $year2;   }   if($month2!="") {    $month = $month2;   }   if($day2!="") {    $day = $day2;   }else {    $day = 1;   }  } // カレンダー表示(先月の場合)  if($month==1) {   $year3 = $year-1;   $month3 = 12;  }else {   $year3 = $year;   $month3 = $month-1;  } // カレンダー表示(来月の場合)  if($month==12) {   $year4 = $year+1;   $month4 = 1;  }else {   $year4 = $year;   $month4 = $month+1;  }  print "<table border='1' align='center'><tr>"; print "<td width='250' align='center' bgcolor='yellowgreen' colspan='7'>"; print "<a href=\"?year=$year3&month=$month3\"><</a>"; print " ".$year."年".$month."月のカレンダー "; print "<a href=\"?year=$year4&month=$month4\">></a></td></tr>"; print "<tr><td align='center' bgcolor='pink'>日</td>"; print "<td align='center' bgcolor='silver'>月</td>"; print "<td align='center' bgcolor='silver'>火</td>"; print "<td align='center' bgcolor='silver'>水</td>"; print "<td align='center' bgcolor='silver'>木</td>"; print "<td align='center' bgcolor='silver'>金</td>"; print "<td align='center' bgcolor='skyblue'>土</td></tr>"; $week = date(w,mktime(0,0,0,$month,1,$year)); for ($ix1 = 0 ; $ix1 < $week ; $ix1++) { print "<td align='center'>-</td>"; } // ファイルの読み込み $data = './data.CSV'; $file = fopen($data,"r"); while(!feof($file)){ $csv = fgets($file); $csv = mb_convert_encoding($csv, "EUC-JP", "SHIFT-JIS"); //csvファイルを配列に格納 $str = explode(",", $csv); for($day = 1 ; checkdate ($month,$day,$year) ; $day++) { if($str[1] == "$year/$month/$day") { $ymd[] = $str[1]; $all[] = "<br>予定=$str[0] <br>開始日=$str[1] <br>終了日=$str[2] <br>"; } } } if(($day+$week)%7 == 1 ) { print "bgcolor='pink'><font color='red'>"; }else if(($day+$week)%7 == 0 ) { print "bgcolor='skyblue'><font color='blue'>"; }else { print "bgcolor='wheat'>"; } $enc = ''; for($i=0 ; $i<count($ymd) ; $i++) { if($ymd[$i] == "$year/$month/$day") { $enc = $enc.urlencode($all[$i]); print "<a href=yotei.php?yotei=$enc>"; } } print "$day</a></td>"; if(($day+$week)%7 == 0 ) { print "</tr>"; } } fclose($file); $weekend = date(w,mktime(0,0,0,$month,$day,$year)); for ($ix2=0 ; $ix2<(7-$weekend) ; $ix2++) { if ($weekend != 0) { print "<td align='center'>-</td>"; } } print "</tr>"; print "</table>"; ?> <table border='0' align='center'> <tr> <td width="250"> <div align="center"> <input type="button" value="戻る" onClick="location.href='data.php'" name="button"> </div> </td> </tr> </table> <br><br> </form> </body> </html>

    • ベストアンサー
    • PHP
  • エラーメッセージがうまく表示されません。

    フォームから年月日を取得し、フォーム入力がなかった場合、 エラー表示がされるようにしたいと思っています。 下記のようにif文とサブルーチンで処理しようとしていますが、 何か問題になる点はありますでしょうか? ご教授お願いします。 ### 入力チェック ##### if($in{'year'} eq "" || $in{'mon'} eq "" || $in{'day'} eq ""){ &errer(100,"日にちを指定してください"); } ### エラーチェック ##### sub errer{ ($num,$word) = @_; print <<EOF; <html> <head> <title>エラー</title> </head> <body> Error $num<br> $word<br> <br> <br> <br> <a href="JavaScript:history.back()">戻る</a> </body> </html> EOF }

    • ベストアンサー
    • CGI
  • php メールフォーム プルダウンメニュー

    現在PHPにてメールフォームを作成しております。 フォーム→確認画面→送信という順に作成しています。 フォームの段階でプルダウンを作成していますが、確認画面でフォームの内容(プルダウンの項目)を表示させようとしたときに、そのまま表示されず、1年4月1日などと表示されます。 例→フォームでは1990年04月10日としたら確認画面では1年4月1日。 1990年04月10日のように表示させたい。 確認画面でどのように記述したらよろしいでしょうか? フォームの記述は <?php if (count($_POST) > 0) { $year = @$_POST['year']; $month = @$_POST['month']; $day = @$_POST['day']; } print '<select name="year">' . "\n"; $start = date('Y') -20; $end = date('Y') -10; for ($i = $start; $i <= $end; $i++) { print '<option value="' . $i . '">' . $i . '</option>' . "\n"; } print '</select>年' . "\n"; print '<select name="month">' . "\n"; for ($i = 1; $i <= 12; $i++) { print '<option value="' . $i . '">' . $i . '</option>' . "\n"; } print '</select>月' . "\n"; print '<select name="day">' . "\n"; for ($i = 1; $i <= 31; $i++) { print '<option value="' . $i . '">' . $i . '</option>' . "\n"; } print '</select>日' . "\n"; ?> です。 確認画面のスクリプトは $year = isset($_POST['year']) ? $_POST['year'][0] : NULL; $month = isset($_POST['month']) ? $_POST['month'][0] : NULL; $day = isset($_POST['day']) ? $_POST['day'][0] : NULL; と<?php print h($year[0]) ;?>年<?php print h($month[0]) ;?>月<?php print h($day[0]) ;?>日 です。 またセッションも使用しております。 $_SESSION['year'] = $year; $_SESSION['month'] = $month; $_SESSION['day'] = $day; です。 ご教授お願いします。

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • 家族は銀行にお金を預けることが安全だと言っていますが、他の広告では投資が良いと聞きます。では、お金を貯めるならどちらが良いのでしょうか?
  • また、投資をする場合、どの方法が簡単で安全にお金を増やすことができるのでしょうか?
  • この記事では、貯金と投資の違いやメリット、リスクについて説明し、それぞれの選択肢がどのような状況に適しているのかを解説します。
回答を見る

専門家に質問してみよう