• ベストアンサー

たまにエラーになる現象

特定のWEBサーバでPHPがたまにエラーになります。 よく見かけるPHPのエラーが表示されるのです。 リロードすれば直りますし、一回のリロードではまた同じエラーが表示されて、2度目のリロードで直ることもよくあります。 GETやPOSTに関係ないPHPファイルでもそうです。 エラーはPHPのファイルにより様々です。 例えば、katatumuriという文字を使った行でエラーが起きた時、katttumuriのように文字が変化してエラー表示されたこともありました。 その一例から、このエラーの原因は、たまに内部処理でデータが一部壊れて解釈されることがあって、その時にエラーになるようなんですが、同じようなことになった方はいませんか?

  • nearn
  • お礼率36% (25/69)
  • PHP
  • 回答数5
  • ありがとう数13

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

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

私の方の補足です。 私の場合、VineLinux3.1に「Apache1.3.33」「PHP5.0.3」の組み合わせ以外に、 「WindowsXP Pro」「Apache1.3」「PHP4」の組み合わせ、「VineLinux2.6」「Apache1.3」「PHP4」の組み合わせの環境も持ち合わせていますが、この二つではこの奇妙な現象はみられません。(もちろん同じプログラムを作動させても) VineLinux3.1だからなるようでもないし、Apache1.3だからって訳でもないのでPHP5が不安定なのか、php.iniの設定かのどちらかかもしれないですね。 一時私も色々原因追及をしてたんですが、最近は「別にいいや」という気に。(^ ^ ;ゞ(趣味で立ち上げているだけなので) それと、PHPにこだわるつもりもないし、JAVAかCで自分でApacheのようなWebサーバをつくってもいいかな。なんて思ってるので。 ので、あまり原因はわからないままでしたが、php.iniのmbstring の部分とエラー関係の項目で確か変化ありましたよ。 おっと、あと私はPHPプログラムもデータも「UTF-8」で扱っています。もしかしたら、その辺も・・・。

その他の回答 (4)

回答No.5

APACHE 2とPHP5の環境で 同様のリロードすると直る 現象に悩まされていまして PHP5.0.3→PHP5.0.4に変えたら 調子が良くなりました。 本当に安定したか様子を観察中です。 (今のところ500回表示させてもエラーが  でなくなったので、O.Kと判断してます) 参考まで。

参考URL:
http://www.php.net/downloads.php
nearn
質問者

お礼

ありがとうございます。

回答No.3

すいません、いろいろと書き忘れました。 win2000では、もちろんローカルテスト用です。 それと、気になったいたのは、あなたの質問で、 なんの情報も持っていません。^^; ローカルでユーザーも制限しているので、PHPの セキュリティやHPも環境が整ってしまえば、あまり 気にしません。 少なくとも、私はPHP環境による問題は発生して いないので。 少しでも原因の範囲を狭められればと思い、 この環境なら問題ないですよー。と、提示した かっただけです。^^; ご期待にそえずに、申し訳ない。^^

nearn
質問者

お礼

ありがとうございます。

回答No.2

 実は当初から気になっていた話題だったのですが、 No1の人の用に実例があるのかが、疑問だったので、 保留していていました。 私はwin2000、Apache2とPHP Version 4.3.xで ローカル環境を整えていますが、その手のエラーは ありませんでした。 一応、redhat7.3でも、似たような環境を整えていますが、 あまり使っていないので。^^; Apache2は正式にはPHPに対応していないとの事ですが、 (私的に)奇跡的に成功。 もしかしたらApache1.3.xも入れて、削除しているので、 そのおかげで成功しているのかも? ですが、特に問題らしい問題もなく、作業出来ています。 ただ、PHPは勉強の最中なので、cookieやセッションは まだ使っていません。 また、宣言していない変数を使うと、  Notice: Undefined variable: の注意を出すようにしていて、できるだけ変数は宣言して から使うようにしています。 配布されているPHPでも、この手の注意がばかばかでるので、 気にしなくてもいいのかな?とは思いますが、Perlは適当に 作ってきたので、PHPは正しく理解しようと思って、悪戦苦闘 しています。 php.iniも最低限の事しか変更していないと思います。 そのおかげなのか、Versionのおかげなのか、あまり高度な 作業をしていないのかは、わかりませんが。^^; また、ネットでは、あまりPHPを意識して見ている事も 少ないですが、Unexpected characterのエラーはなかったと 思います。 少しでも参考になればと思い、力及ばずですが書き込みを した次第です。

nearn
質問者

補足

当初から気になっていた話題ということは、これについての情報が他にもあったんですか? あれから全てのソースの改行コードを変更しましたが、相変わらずエラーは出ます。 500アクセスに1回ぐらいはエラーになります。 今は Parse error: parse error, unexpected T_LNUMBER のエラーが出ました。 やっぱり、phpの実行ファイルがphpソースの内容を正確に読み取ることに失敗しているんだと思います。

回答No.1

こんにちは。 残念ながら実は私の立ち上げているサーバも同じ現象が見られます。私の場合は、VineLinux3.1に「Apache1.3.33」「PHP5.0.3」をインストールして使用しているのですが、正常に動作するPHPプログラムを実行させていると、更新ボタンを何度か押すと、同じPHPプログラムであるにもかかわらず、エラーが出たりでなかったりします。エラーの場所も、違ったり・・・。 エラーで指定された行を見ても、特にまずい部分はありません。 私がよく出くわすエラーは、使っちゃいけない文字を使ってます。みたいな感じのエラーです。 PHP5がまだ安定していないせいかもしれませんが、「php.ini」の設定が関与しているっぽいのもあるようです。 VineLinux3.1では、PHPは標準でインストールされていないので、apt-getでインストールすることになるのですが、そのとき一緒に、作成されるphp.iniのままだと動かなく(うまく作動しなく)なるPHPプログラムもありました。 php.iniをいじって多少改善はしてきましたが、完全に。と、いうわけではありませんでした。 PHP5のせいなのか、php.iniの設定のせいか、私もわかりかねないでいます。

nearn
質問者

補足

こんにちは。 同じ症状はやっぱりあるんですね。 僕も一番多いエラーは使ってはいけない文字だったと思います。Unexpected characterとかというエラーが多いです。

関連するQ&A

  • PHP エラーだけどリロードすると元通りになる件

    質問させてください。 PHPを自作で作成して設置しているのですが、度々下記のエラーに悩まされております。 Call to undefined function ファンクション名 とか syntax error, unexpected '}' など。それぞれこの後にファイル名と行数が表示される。 このエラーが出た後に、一度もしくは数回リロード(更新)すると問題なく表示されるのですが、どうも気になります。 エラーの意味はインターネットで見て分かったのですが、 示している行を見ても、どこも間違っているところはないようです。 実際、数回ブラウザのリロードを押すと普通に表示されるようになります。 またこれと関係あるのか分かりませんが、稀に文字化けのように、 「..../TD>」な感じで、いち部分がおかしく表示されることがあり、 これもリロードをすると戻ります。 文字コードもファイルのエンコードもEUCを使用しているのですが。。。 先月サーバーを変えて、PHPのバージョンが変わり、 PHP 5.* (忘れました・・・)からPHP 5.2.6になってから、 このような現象が増えたような気がしますが、定かではありません。 また以前のサーバーは専用サーバーを使用していたのですが、 今は共有サーバーでスペックは以前よりは良くないのですが、 その辺りも関係するのでしょうか? 同じような経験をお持ちの方いらっしゃいませんか? 原因・解決方法があれば教えてください。

    • ベストアンサー
    • PHP
  • 送信すると403エラーが出る

    <?php //サーバ内のファイルの絶対パス $path = $_GET[path]; $source = file_get_contents($path); //$source = "ダミー"; ?> <html> <body> <?php print<<<END <form method="POST" action="$_SERVER[PHP_SELF]?path=$_GET[path]"> <textarea name="source">$source</textarea> <input type="submit" name="exe" value="実行" /> </form> END; ?> </body> </html> 大きめのデータを送信すると403エラーが出ます。 5行目のコメントを外すと正常に動きます。 簡略のためエンコードやHTMLエンティティの処理は省略してあります。 どうすれば解決できるでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • headerでエラー

    お世話になります。 行き詰まってしまいどうにもならないので質問させて下さい。 フォームのテキストボックスが未入力状態で「更新」ボタンを押したとき 更新処理を行わずエラーメッセージの表示等を行うだけで同一画面に留まりたいプログラム「input.php」があります。 <?php require_once("mysql.php"); GET処理 POST処理(※入力チェック OK:更新処理、NG:header使用し別モードで再読込) ?> <html> <head> (中略) フォーム(action="<?=$_SERVER["PHP_SELF"]?>") </html> エラーチェックを<html>より前の部分で行い、不正なら「input.php?err=1」という形でheaderを使った再読込で項目の上にエラーメッセージを表示させたいのですが、うまくいきません。 (※やり方に関してどうしてもこうする必要があるのでご理解下さい) 試しに以下のように書き換えて実行するとこのように表示されます。 「..xxx/mysql.php の 1 行目でヘッダがすでに送信されています。リダイレクトできません。 」 if (!headers_sent($filename, $linenum)) { header("Location: http://$host/input.php?err=1"); exit; } else { echo "$filename の $linenum 行目でヘッダがすでに送信されています。"; exit; } メッセージにある「mysql.php」の1行目は「<?php」だけなので何がいけないのか見当がつきません。 「header」の使用については  ・すべての出力の前でなければならない  ・読み込みファイルや空白行などにも注意 ということまでは知っているので注意しているつもりなのですが... 何かお気づきの点でもあればご指摘下さい。 よろしくお願いします。

    • 締切済み
    • PHP
  • 【PHP】index.phpの実行エラー

    themeという関数エラーと思いますが、どのようにしたらindex.phpを正常に実行できるでしょうか。 この(ダミー?)関数の意味と、宣言はどうすればよいでしょうか。 今日初めてPHPを触り、何もわからず恐縮です。よろしくお願いします。 状況: 1)WinXPに、PHP phpdevで、Apache/PHP(Version 4.2.3)/MySQLをインストール。 2)Apache、PHP、MySQLはRun状態。 3)以下のソースのindex.phpを C:\phpdev\www\MagPress というフォルダに配置 4)http://localhost/MagPress を実行すると、以下のエラーが出る。 Fatal error: Call to undefined function: get_header() in c:\phpdev\www\magpress\index.php on line 1 index.phpのソース: ------------------------------------ <?php global $theme; get_header(); ?> <div id="main"> <?php $theme->hook('main_before'); ?> <div id="content"> <?php $theme->hook('content_before'); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); /** * The default post formatting from the post.php template file will be used. * If you want to customize the post formatting for your homepage: * * - Create a new file: post-homepage.php * - Copy/Paste the content of post.php to post-homepage.php * - Edit and customize the post-homepage.php file for your needs. * * Learn more about the get_template_part() function: http://codex.wordpress.org/Function_Reference/get_template_part */ get_template_part('post', 'homepage'); endwhile; else : get_template_part('post', 'noresults'); endif; get_template_part('navigation'); ?> <?php $theme->hook('content_after'); ?> </div><!-- #content --> <?php get_sidebars(); ?> <?php $theme->hook('main_after'); ?> </div><!-- #main --> <?php get_footer(); ?>

  • PHPでのエラーチェックについて

    PHP 初心者デス。よろしくお願いします。 勉強のため、PHPにてメールフォームを作成してます。 PHPでのエラーチェックについて教えていただきたいのですが、 よろしくお願いします。 メールフォーム自体は下記のような流れで作成しております。 ------------------------------------------- 入力フォーム(index.php) ↓(check.php エラーチェック用ファイルとおる) 確認画面表示(confirm.php) ↓(send.php 送信処理がかかれたファイルとおる) 完了画面表示(thanks.html) ------------------------------------------- エラーチェックはindex.phpで必須項目などが、未入力、空白があれば、 送信ボタンを押した際に、index.php自体の入力フォームの下などに 「未入力です」などのエラー表示をさせたいのですが、うまくいきません。 ご教授お願いいたします。 できればSESSIONなどを使用せず行いたいですが可能でしょうか? とりあえず自力でやって、うまくいかなかったのは以下内容です。 --------------------------------------------------- check.phpにエラーチェック用処理を記載しており、index.phpのフォームには <form method="post" action="check.php"> としてます。 ですが、これだともちろんエラー表示はchek.phpに表示されてしまい、 うまくindex.phpにエラー表示ができません。 またindex.phpに入力した内容をconfirm.phpにPOSTで渡せなかったりします。 index.phpにincludeなどでchek.phpを読み込ませて、 <form method="post" action="confirm.php"> としてみても、 うまくエラーチェックが動作しなかったり、 index.phpに入力した内容をconfirm.phpにPOSTで渡せなかったり、 苦労してます。 どうかご教授のほど、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP T_STRINGエラー?

    新しくPHPのサイトを作成しようとしたんですが、 syntax error, unexpected '{', expecting T_STRING in と表示されてどうにも使用がありません。 どこが原因でエラーが出てるのでしょうか? エラー行は7行と表示されていますが、いまいちわかりません スクリプトは以下の記述の通りです <?php require './Request.php'; require './Cookie.php'; final class SystemMain extends { private static $instance; private $modeName; public static function getInstance() { if (self::$instance === null) { self::$instance = new SytemMain(); } return self::$instance; } public function setMode() { if (file_exists('./maintenance')) { $this->modeName = 'Maintenance'; } else { $str = Request::both('mode'); if (!$str) { $this->modeName = 'Top'; } else if (file_exists('./script/mode/' . $str . '.php')) { $this->modeName = $str; } else { $this->modeName = 'NotFound'; } } require_once './script/mode/' . $this->modeName . '.php'; } public function getMode() { return $this->modeName; } } ?> Request.php <? class Request extends { public static function get($str) { return isset($_GET[$str]) ? $_GET[$str] : null; } public static function post($str) { return isset($_POST[$str]) ? $_POST[$str] : null; } public static function both($str) { $post = self::post($str); return $post ? $post : self::get($str); } } ?> Cookie.php <? class Cookie extends { public static function set($name, $value, $expire = 0) { return setcookie($name, $value, $expire); } public static function get($str) { return isset($_COOKIE[$str]) ? $_COOKIE[$str] : null; } public static function clear($str) { $_COOKIE[$str] = ""; return setcookie($str, ""); } } ?>

    • ベストアンサー
    • PHP
  • コンパイルエラー???

    どなたか分かる方いらっしゃいましたら ご助言宜しくお願いします。 PHPソース自体には何も問題は無いのですが、たまにParse errorが出てしまいます。 「Parse error: syntax error, unexpected T_STRING, expecting ')' 」 エラーが出ても、何度かリロードを繰り返すと正しく表示されます。 なぜこのような現象がおきてしまうのか、調べても分からない状態です。 どなたか解決策をご存知の方宜しくお願いします。 動作環境 CentOS3.8 apache2.2.4 php4.4.8 Mysql5.0.27 文字コードはeuc-jpで統一

    • 締切済み
    • PHP
  • postやgetで得られたパラメタのエンコードを変換したい

    Phpの内部エンコードとhtmlの表示文字コードが異なる場合、 そのformから送られる変数をphpで受けた場合、当然文字化けしてしまいます。 これを回避したいので、 $_POST や $_GET の文字列のエンコードを変換したいのですが(変数名の予想はできない) 受ける変数の文字コードを指定する方法が分かりません。 ご存知の方はご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 特定文字列で囲まれた範囲を抜き書きするためには?

    特定の文字列で開始され、特定の文字列で終了するテキストの一部を抜き出すためには、コマンドラインからは perl -ne 'print if /開始文字列/ .. /終了文字列/' file.txt でできると思うのですが、これがたとえば $page 変数に入ったテキストで同様の処理を Perl 内部のスクリプトで行う時にはどうすればいいのでしょうか? while(<$page>){ ... } とかやって1行1行処理してみようと思ったのだけど、できません。

    • ベストアンサー
    • Perl
  • Smartyのエラーが2つずつ出ます

    PHP5+Smartyでサイトを作っています。 「$smarty->display("hoge.tpl");」としてテンプレートファイルを呼び出します。 そのテンプレートファイル「hoge.tpl」が存在しない時に、以下のエラー文が必ず2つ表示されます。 Warning: Smarty error: unable to read resource: "hoge.tpl" in /root/.../smarty/Smarty.class.php on line 1092 一度しか呼び出していないのにエラーが2つ表示されるので、コードの記述ミスかと考えたのですがわかりませんでした。 テンプレートファイルがある場合は、テンプレートが二度呼び出されることはありません。 エラー文にある1092行目からコードを追って見たのですがわかりませんでした。 どうすればエラー表示を1つにできるのでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう