• ベストアンサー

htmltemplateのBBS│レンサバ→XP宅鯖移設でエラー

htmltemplateのBBS│レンサバ→XP宅鯖移設でエラー HTMLTEMPLATEをベースに作られた、 『写メールBBS』 ttp://php.s3.to/bbs/bbs7.php というケータイ用の掲示板を使っているのですが、 レンサバから、自宅XPサーバーに環境を移したとたん、ブラウザ表示の際に下記のエラーが出るようになりました。 Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING in C:\xampp\htdocs\htmltemplate.inc on line 174 ********該当行*************** $str2=str_replace("[loop $m]", "<?php for(\$cnt[\"$n\"]=0;\$cnt[\"$n\"]<count(\$val$ind);\$cnt[\"$n\"]++){ ?>", $str2); ***************************** XAMPPforWINDOWS 1.7.2 PHP5.3.0 です。 ■1: レンサバでは予め整っている基本的な環境設定が、 XAMPPでできていない ■2: 写メールBBSのマニュアルに.cgiファイルのパーミッションを変更してくれ云々と書いてあるのに、 XPサーバではパーミッション操作ができない事が影響している ■3: その他 ttp://memo.17n.info/log/eid26.html ■4: EOM;の後の半角、改行やTABを無くす、などの書式の問題 諸々試行錯誤しているのですが、 はまっています(涙 えらいかた、ご意見ください。

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

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

PHP5.3.0で、ダブルクォーテーション内の文字列の解析機(パーサ)が変更されたのかもしれません。 エラー自体は、構文エラーですので、うまく処理出来ていないことが考えられます。 なので、該当箇所を、 $replacement = '<?php for($cnt["'.$n.'"]=0;$cnt["'.$n.'"]<count($val'.$ind.');$cnt["'.$n.'"]++){ ?>'; $str2=str_replace("[loop $m]",$replacement,$str2); このような感じで、シングルクォーテーション+結合演算子「.(ドット)」で先に変数に渡してやって それをstr_replaceに入れてやるということで回避できるのではないでしょうか。 ただ、似たような記述が結構たくさんあるので、それらを全て修正素る必要があるかもしれません。

diveman
質問者

お礼

ケータイから失礼します。 ダブルクォートの解釈の問題とのご回答ありがとうございましたm(__)m 試してはいませんが、QAをみにきた全ての皆さんのヒントになるものと思います。 私の場合は、xamppのバージョンが新しいと、逆に動かなくなる機能があるから、xampp(やperl)のバージョンを下げたら直った、という記事を見て、実際に下げたら直りました。 スミマセン出先なので、確か1.6.3だったかと思います。自宅で作るxamppxpサーバーの参考書についてきたcdのデータです。 phpバージョンが下がったことにより、hogehogeさんの言うとおり、ダブルクォート解釈が変わったのかも知れません。 ちなみに xamppの再インストールは意外に短時間で終わり、 perlも参考書通り.plを、パスをどこから呼び出しても同じプログラムを呼びに行くようファイルの関連付けもついでに行ったのも良かった可能性があります。 xamppではまっている方がいらしたら、バージョンダウンはオススメです。 特に私のような初心者で、参考書をたよりにしている方は、新しいバージョンになるとフォルダ構成やあるはずの記述が別物になっていたりするので、参考書についてるバージョンでガイド通りが良いかと痛感しました。 いずれにしても、新しければ良い機能やセキュリティが高いんじゃないか、という考え方は捨てます。 hogehogeさん改めてありがとうございましたm(__)m

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

関連するQ&A

  • 1行BBS auだけ403エラー

    1行BBSのような簡単な機能を自分のwebシステムにつけようと考えています。 普段開発につかっているCentOSのサーバでは何事もなく動くのに、実際に利用した環境のサーバではauのに使えません。 具体的には、ページ上でテキストを入力し、送信をする際に、 「このページへのアクセスは拒否されました (403)」 の様なエラーがでるようです。(エラー文は機種によるかも) 開発用のサーバではエラーがでずにうまく動いているので、ソースというよりは、運用サーバのネットワーク環境or運用サーバのphp.iniの設定orその他設定が影響しているように思います。 docomo、ソフトバンクは問題なく使えます。auだけ403エラーです。 考えられる原因を教えてください。 参考のためにシンプルなソースを貼っておきます。 これでもauだけエラーになってしまいます。 <html> <head> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <meta http-equiv="content-style-type" content="text/css"> <meta name="robots" content="NOINDEX, NOFOLLOW"> <title>test</title> </head> <body> <?php $path = "test.txt"; if (isset($_POST["mg"])) { $fp = fopen($path, "a+"); $str = $_POST["mg"]."\n"; fwrite($fp, $str); } $data = file($path); foreach($data as $key => $value){ echo $value."<br>"; } ?> <form action="./test.php" method="POST"> message:<input type="text" name="mg" value="" size="30" /><br /> <input type="submit" value="send" /> </form> <br> <a href="test.php">reload</a> </body> </html>

    • 締切済み
    • PHP
  • 助けてください><CLELVER BBSがエラーに・・・。

    私の質問に目をとめていただいてありがとうございます。 写真付掲示板を使用したくって、solo designさんからCLEVER SKIN 4.2と素材屋さんからCLEVER用のBBSをダウンロードしました。 設定方法はSimple Skyさんを見ながらしております。 まずCLEVERSKINをダウンロードして解凍してフォルダ名はCLEVERのままです。デスクトップに貼り付けてあります。そして編集したのはbbsini.cgiとclever.cgiのみです。clever.cgiはパールの変更はなかったのでそのままで問題はbbb.cgiです。 # 送信先メールアドレス ____.01 # 管理者用マスタパスワード (英数字で8文字以内) ____.03 # アップロードディレクトリのURLパス ____.07 とあってアップロードディレクトリのパスを $ImgUrl = "HP名/clever/img/";としました。 そしてFFTTPで転送しパーミッションの変更をしました。ここはあってると思います。 そしてclever.cgi?mode=checkでチェックしてみたのですが、404エラーになって接続できないのです。。 どうしてでしょう。本当に困っています。助けてください>< サーバーはロリポップです。

  • 1行目の#! "C:\xampp\php\php-cgi.exe"について

    XAMPP for windowsをXPで利用しています。 phpファイルの1行目に、「#! "C:\xampp\php\php-cgi.exe"」を記述しないとphpが実行されません。 1行目の「#! "C:\xampp\php\php-cgi.exe"」を記述せず、「<?php~ ?>」の記述でファイルを呼び出すと、「Server error! サーバ内部で障害が発生し、 リクエストに応えることができませんでした。 サーバが過負荷であるか、 CGI スクリプトにエラーがあります。」の表示になります。 apacheのconfに、「AddType application/x-httpd-php .php」を追記してみましたが、結果は同じでした。 「C:\xampp\php」でpathを通しています。 超初級な質問かと思いますが、お助けください。

    • 締切済み
    • PHP
  • ローカルでは動くのにサーバーにアップするとエラーがでる

    最近PHPを勉強を始めました。 とりあえず、参考書の通りに作っていくことから始めています。 アクセスカウンタを設置したく、参考書の通りに記述しました。 <?php $cnt_file = "count.dat"; $cnt_len = 10000; if (file_exists($cnt_file)) { $file = fopen($cnt_file, "r+"); $count = fgets($file, $cnt_len); $count = $count + 1; } else { $file = fopen($cnt_file, "w"); $count = 1; } rewind($file); flock($file, LOCK_EX); fputs($file, $count, $cnt_len); flock($file, LOCK_UN); fclose($file); echo $count; ?> という感じです。 ローカルでは動くのですが、サーバーにアップするとエラーがでて困っています。 ローカルではXAMPPをインストールしていてPHP5なようです。 サーバーはPHP4.4らしいですが、調べても対応している命令をだしているようなのですが、何故かエラーがでています。 問題を解決したいのですが、何分初心者で行き詰まっている状況です。 わかるかたよろしくお願いします。

    • ベストアンサー
    • PHP
  • xampp php コマンドライン入力

    標準入力を受け付けるプログラムの動作がおかしいのですが、原因を教えてください。 単体でインストールしたphp5.5では正常に動作します。 windows7 xampp_portableのphp5.4 c:\xampp\php 実行結果 a Input->:Print->a c:\php 実行結果 Input->:a Print->a ソース <?php $str; print "Input->:"; $str = trim(fgets(STDIN)); print "Print->$str\n"; ?> 以上、どなたかお願いいたします。 phpの勉強を始めたばかりなので、初歩的な質問に なっているかもしれません。

    • ベストアンサー
    • PHP
  • 連続するecho関数の手間を省く方法

    現在、PHPとCGIを平行して勉強しているのですが、 CGIは printf EOM<< ~ EOM<< のような形で関数1つだけで~の内容を出力できるのに、同様にPHPでやるとエラーになります。 こんな感じです。。。 <?php print EOM<< Content-Type:text/html\n\n; <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>ハロー!PHP!!</TITLE> </HEAD> <BODY> ハロー!PHP!! </BODY> </HTML> EOM<< ?>

    • ベストアンサー
    • PHP
  • C言語 この記述のどこが間違っているのでしょうか?

    最大10文字の文字列入力を受け付け、 10回入力するか、「OK」が入力された時に 文字列を出力するプログラムを作ろうと思い、 その中で、1回目に『OK』が入力された時には、エラーメッセージを表示して終了するようにしたいのですが、 以下を入力したところ、うまく動作しませんでした。(見づらいのはご容赦ください) 制御文と配列を使って動作させるには、どう修正するべきでしょうか。 初心者ですが、ご教授お願い致します。 #include <stdio.h> #define MAX_INP 10 /* 入力最大回数 */ #define MAX_LGTH 5 /* 入力可能最大文字数 */ int main(void) { char str[MAX_INP][MAX_LGTH]; int cnt; /* 入力用カウンタ */ printf("\n"); for(cnt = 0 ; cnt < MAX_INP ; cnt++) /* 入力ループ */ { printf("Input String. -> "); /* 文字列入力メッセージ */ scanf("%s",&str[cnt][0]); /* 文字列入力 */ if(str[cnt][0]=='O' && str[cnt][1]=='K' && str[cnt][2]=='\0') { /* OKと入力された場合 */ break; /* ループから抜ける */ } if(cnt == 0) /*「OK」入力が1回目の場合 */ { printf("Error."); /* エラーメッセージ */ return 0; } } printf("\n"); for(cnt = 0 ; cnt < MAX_INPUT ; cnt++) /* 出力ループ */ { printf("%s\n",&str[cnt][0]); /* 文字列出力 */ } printf("\n"); return 0; } 【動作結果1】 Input string. -> abc Error. > 【動作結果2】 Input string. -> OK OK Uウ@ @ ■p 『 『 >

  • phpのカレンダー式日記帳について

    お世話になります 現在こちら http://www.kenjiweb.com/?mode=diary のカレンダー式日記帳をレンサバでテストしているのですが「書き込みエラー」になります。 phpのバージョンは4.3.0です。 パーミッションも606、666と変えて見ましたがうまく行きません。(他のphpプログラムはうまく作動しています。)掲示板にも情報がありません。どうしたらうまく行くのでしょうか? ご教授頂ければ幸いです。

    • ベストアンサー
    • PHP
  • 文法エラーが解決出来ません・・

    phpでパースエラーが出るのですが、ドコが間違っているのかが解りません。 ============エラー文========================================= Parse error: syntax error, unexpected T_CHARACTER, expecting T_STRING or T_VARIABLE or T_NUM_STRING on line 296 ============================================================= ============エラーのソース(左の数字が行番号)================= 295|$str = " 296|//<form method=\"post\" action=\"$SERVER[\"PHP_SELF\"]\" enctype=\"multipart/form-data\" > ・ ・ 472|</html>"; 473|$str = mb_convert_encoding($str, "SJIS", "EUC-JP"); 474|echo $str; ============================================================= 295行目の$strに296行目から472行目までのHTML記述を代入して最後の行で出力しようとしているものです。 ちなみに、296行目のエスケープ(//)は、エスケープしてもしなくても296行目にエラーが出ます。 どなたか心当たりありましたらご意見宜しくお願いします!

    • ベストアンサー
    • PHP
  • 明解C言語 入門編 P219 について

    以下のプログラムの理解について、質問です。 入力した文字列に、0 ~ 9 の数字がそれぞれ何度含まれていたかをカウントするプログラムです。 (明解C言語 入門編 P219) ========== プログラム ========== #include <stdio.h> void str_dcount(const char str[], int cnt[]) { unsigned i = 0; while(str[i]) { // str に '\0' が現れるまで繰り返し if(str[i] >= '0' && str[i] <= '9') cnt[str[i] - '0']++; // !!!! ココです !!!! i++; } } int main(void) { int i; int dcnt[10] = {0}; char str[100]; printf("文字列を入力してください : " ); scanf("%s", str); // 文字列を str へ str_dcount(str, dcnt); // 引数  str = 入力した文字列, dcnt = すべて '0' puts("数字文字の出現回数 "); for(i = 0; i < 10; i++) printf("'%d' : %d\n", i, dcnt[i]); return 0; } ========= 実行結果 ========= 文字列を入力してください : 3.14159 数字文字の出現回数 '0' : 0 '1' : 2 '2' : 0 '3' : 1 '4' : 1 '5' : 1 '6' : 0 '7' : 0 '8' : 0 '9' : 1 ========== 質問内容 ========== 関数 str_dcount 内の 『 cnt[str[i] - '0']++; 』 がどのような処理を行っているのか、理解ができません。 以下のように考えたのですが、それでは上手く動かないとの結論に至りました。 たとえば、i = 0 で、str[100] = 3.14159 であるとき、 /* ループ1回目 */ cnt[0] = str[0] - 0; /* 3 - 0 で cnt[0] には 3 が入る。 */ cnt[0++]; /* ループ2回目 */ cnt[1] = str[1] - 1; /* "." - 1 となる。 数字ではないので減算できずエラーになるのでは? */ cnt[1++]; /* ループ3回目 */ cnt[2] = str[2] - 2; /* 1 - 2 なので、なぜか負の数になってしまう。。 */ cnt[2++]; 配列の添え字が、配列になっている cnt[str[i]] までは理解できますが、 以下の2点が解っていないために理解ができていないようです。 1) cnt[str[i] - '0']++ ; の - '0' が何を行っているのか 配列には数字が入っており、そこから文字 '0' を減算しているのでしょうか? 数字から文字を減算できるのでしょうか? 2)  ++  はどの値を増加させているのでしょうか? 宜しくお願いします。

このQ&Aのポイント
  • MacOS VenturaでPX-S270Tのプリンタドライバをインストールしようとすると、添付画像のエラーが発生します。
  • PX-S270TのDLページにあるアンインストーラーを使用してもドライバをアンインストールすることはできず、同じエラーが発生します。
  • EPSONのサポートに問い合わせたページからダウンロードしたインストーラーでもインストールができません。
回答を見る