• 締切済み

PHPの設定 エラー処理について

当方PHPの初心者です。 現在HTML上でPHPの動作をさせているのですが 一部の処理で【Fatal error: Call to undefined function】というエラーがでて処理が途中で止まってしまいます。 エラー文自体は正しく、元々テスト環境でPHPを動作させているので、本番のDBや該当ファイルが無い為にエラーとなっています。 ただ、ステージングという扱いにしてソースをそのままでアップさせたいので、エラーが必ず出る箇所を無視して先に進めたいと考えています。 エラーが起こる部分をコメントアウトする事は二度手間になり、本番化の場合にヒューマンエラーが発生するのを防ぐ為です。 そこでご相談なのですが、PHP処理の時に該当ファイルが無い等のエラーを無視してそのまま続行する。 方法はありますでしょうか。 通常の処理は動作確認済みです。 <?php echo date('Y年m月d日'); ?>等 エラーが発生するのは下記のような場合です。 <?php e($this->renderElement("サーバーが違うので存在しない")); ?> 色々情報を探ったのですが中々解決策をつかめず・・ どなたかお力添えを頂ければありがたいです。

  • PHP
  • 回答数4
  • ありがとう数3

みんなの回答

回答No.4

> そして、ステージング、本番ではDBへの接続が正しく行われる為 > エラーは発生しません。 テスト用サーバでもDBを構築すればいい話では。 環境が整っていないにも関わらず、そのテスト用サーバでの検証を行うが為に コードを改変することは、到底正しいアプローチとは思えません。 きっちりしたコードであれば、むしろDBに接続できないからシステムを利用することは できない旨の表示が行われ、それが試験の一部になると思います。 見た目の試験と言えど、DBの抽出結果に応じて『見た目』が変化する場面は 往々にして存在すると思います。 もし、テスト用サーバ上で本当に単調な見た目だけを確認するだけならば、 コードを破棄する前提で、コードが改変されても良しとした上で、処理部分を 全部コメントアウトして都合のいいデータが渡されるようにすればいいのでは ないでしょうか。 『見た目』だけを求めて、処理部分は注視しないのですから。 しかし、それが『試験』として妥当な方法かどうかは別です。 そういうことをやるのは、せいぜい、画面レイアウトをキャプチャして資料化 する際でしょうか。

noname#244856
noname#244856
回答No.3

>> 本番のDBや該当ファイルが無い為にエラーとなっています。 同じ環境をローカルに作るべきじゃないでしょうか?ホストや使用DBの違いなどにはPDOを用いればDSNの書き換えだけで対応することができ、使用DBが違えど同じようなスキーマを作成すれば本番環境と同様に動かすことは十分可能だと思います。 PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 むしろリダイレクト中などに発生するいかなるエラーも見逃さないように、 set_error_handler(function ($errno, $errstr, $errfile, $errline) { throw new ErrorException($errstr, $errno, 0, $errfile, $errline); }); を最初に実行してエラーを例外に変換するぐらいしてもいいと思います。「動けばいい」って考え方は間違っていると思うんで。

plazmangreen8
質問者

補足

補足が足りず申し訳ありませんでした。 そして補足に入力したのに消えてしまっており、回答されていない形となってしまい申し訳ありません。 詳しくは 1.テスト用サーバー ↓ 2.ステージングサーバー ↓ 3.本番サーバー という流れで動作チェック、見た目のチェックを行おうと 考えています。 そして、ステージング、本番ではDBへの接続が正しく行われる為 エラーは発生しません。 記述として正しいのです。 その部分を生きにしたまま、テスト用サーバーで見た目の部分を 色々検証したいというのが現状です。 色々試行錯誤した結果、try&catch?というのがエラー処理が行えそうと 推測しています。 そもそもの設定の仕方すらわからないのですが・・これを試してみよう という段階です。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

エラーを強制的にぶっちぎると、その後の処理はまったく信頼性に欠けますが よろしいのでしょうか? とりあえずPHPのエラー処理を試してみることをおすすめします http://www.php.net/manual/ja/book.errorfunc.php

plazmangreen8
質問者

補足

補足が足りず申し訳ありませんでした。 そして補足に入力したのに消えてしまっており、回答されていない形となってしまい申し訳ありません。 詳しくは 1.テスト用サーバー ↓ 2.ステージングサーバー ↓ 3.本番サーバー という流れで動作チェック、見た目のチェックを行おうと 考えています。 そして、ステージング、本番ではDBへの接続が正しく行われる為 エラーは発生しません。 記述として正しいのです。 その部分を生きにしたまま、テスト用サーバーで見た目の部分を 色々検証したいというのが現状です。 色々試行錯誤した結果、try&catch?というのがエラー処理が行えそうと 推測しています。 そもそもの設定の仕方すらわからないのですが・・これを試してみよう という段階です。

回答No.1

> エラー文自体は正しく、元々テスト環境でPHPを動作させているので、本番のDBや該当ファイルが無い為に > エラーとなっています。 本当にそうでしょうか? 仰っているエラーは、呼び出そうとしている命令は定義されていないとした際に発生するエラーです。 そもそも何かがおかしいのではないでしょうか? また、小手先の対応を行うのではなく、それを考慮した上でロジックを組めば、そもそもエラーを発生させることなく処理を完結させることが可能でしょう。 こんな情報がありますが、CakePHPを利用してコードしているのでしょうか? http://blog.maesan.jp/1254060.html

plazmangreen8
質問者

補足

補足が足りず申し訳ありませんでした。 そして補足に入力したのに消えてしまっており、回答されていない形となってしまい申し訳ありません。 詳しくは 1.テスト用サーバー ↓ 2.ステージングサーバー ↓ 3.本番サーバー という流れで動作チェック、見た目のチェックを行おうと 考えています。 そして、ステージング、本番ではDBへの接続が正しく行われる為 エラーは発生しません。 記述として正しいのです。 その部分を生きにしたまま、テスト用サーバーで見た目の部分を 色々検証したいというのが現状です。 色々試行錯誤した結果、try&catch?というのがエラー処理が行えそうと 推測しています。 そもそもの設定の仕方すらわからないのですが・・これを試してみよう という段階です。

関連するQ&A

  • PHPでエラーが出る

    PHPでNotice: Undefined indexとエラーが出ます。 <?php $data1=$_POST["data1"]; echo $data1; ?> でエラーが出ます。  @$_POSTでやるとエラーは消えるのですが、これでは解決してないので他のやりかたを教えてください。

    • ベストアンサー
    • PHP
  • PHPの設定で、 エラーが発生してしまします。。 エラーメッセージは

    PHPの設定で、 エラーが発生してしまします。。 エラーメッセージは Fatal error: Call to undefined function mb_internal_encoding() in C:\WEB\HTTP\dura.php on line 40   です、 40行目に何かあるのは確かなんですが、何が起こってるかわかりません、わかる方いませんでしょうか。。。。?

    • ベストアンサー
    • PHP
  • phpのパス指定

    初めてphpを触っています。 いくつかの処理を外部ファイルにしたいのですが パスの指定が悪いのか、同じ階層に置いたり、いろいろ試してもfatal error ばかりです。 どこが悪いのか、教えていただけないでしょうか? サンプルとして、moto.phpのなかのincludeフォルダー内の外部ファイル:func.phpを実行することとします。 moto.php <?php require "./include/func.php"); $a = 2; $b = 1; $c = $a - $b * $a; echo return_word($a); echo "<br>"; //改行 echo return_word($b); echo "<br>"; //改行 echo return_word($c); ?> func.php <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> コマンドラインから php moto.php を実行すると <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> Fatal error: Call to undefined function return_word() in C:\xxxxxx\php\moto.php on line 9 となってしまいます。 外部ファイルは見えているようなのに、どうして関数がundefined になってしまうのでしょうか? phpの基本的なことなのかもしれませんが よろしくアドバイスお願いできればと思います。

    • ベストアンサー
    • PHP
  • タイムアウト処理?となる

    ローカルのシステムでデータベースからCSVファイルを作成して、公開用WEBサーバへFTPアップロード。その後CSVファイルをWEB用データベースに登録する処理を開発しているんのですが、開発用WEBサーバでは正常に完了するのですが、本番用WEBサーバで行うと最初の数万件は登録できているのですが、途中でエラーというか真っ白になって処理がSTOPしてしまいます。 開発、本番用共に同じPHPのファイルを使用しており、データベース構成も同じです。 【相違点】 開発(正常):PHP4.4.2(Apacheモジュールにて動作) 本番(異常):PHP4.4.1(CGI動作) エラーとなるのも、CSVのファイルの容量によって違います。 ちなみにFTPでのアップロードは開発・運用供正常にできています。 どなたかご教授お願いします。

    • ベストアンサー
    • PHP
  • phpでエラー

    とあるphpプログラムでデータがあれば正常に動き、数値が表示されます。 しかしデータがないとファイルを開くとなり、アプリケーションを選択させられます。 if($price == NULL) echo "なし";としても同じ現象です。 どうしたらファイルを開くとならず、正常に動作させられますか? お手数おかけしますが、ご回答いただけましたら幸いです。

    • 締切済み
    • PHP
  • php 処理が長い時の動作

    php5で、外部からファイルをダウンロードするモノを作っています。 htmlでフォームからPOSTでコードを送り、それをもとにダウンロードしています。 フォームからコードを送信すると、サーバー側でのダウンロード処理が終わるまでの時間、フォームの画面のまま読み込み中になってしまいます。 そこで、ダウンロード処理が始まる前に待機するように促すメッセージを出そうと、ダウンロード処理をしているphpの最初にechoでメッセージを出そうと試みたのですが、画面が切り替わるのはすべての処理が終わってからのようで、変わらずでした。 理想は、フォームから送信すると待機ページに切り替わり、ダウンロード中と書かれた部分がダウンロード終了と同時にダウンロードボタンになる、といった動作をさせたいです。 不可能であれば、ダウンロード処理を開始する前に時間がかかることを知らせるメッセージを出すだけでも構いません。 お力を貸していただけると幸いです。長文失礼しました。

    • ベストアンサー
    • PHP
  • PHP 下記エラーメッセージの解消について

    下記PHP エラーメッセージの解消方法と、正常にプログラムが動くための簡単なスクリプトも添えていただければ幸いです。よろしくお願い申し上げます。 ■エラーメッセージ (1)Notice: Undefined variable: error in C:\xampp on line 66 (2)Notice: Undefined variable: error in C:\xampp on line 69 ■スクリプト <body> <h1>ログインする</h1> <form action="" method="post"> <dl> <dt>メールアドレス</dt> <dd> ⇒(ここからPHP文です) <input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email']); ?>" /> <?php if ($error['login'] == 'blank'): ?> <p class="error">* メールアドレスとパスワードをご記入ください</p> <?php endif; ?> <?php if ($error['login'] == 'failed'): ?> <p class="error">* ログインに失敗しました。正しくご記入ください。</p> <?php endif; ?> ⇒(ここまでPHP文です) </dd> <dt>パスワード</dt> <dd> <input type="password" name="password" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['password']); ?>" /> </dd> ......省略 </form> なのですが、 下記エラーメッセージが出てしまいます。 (1)Notice: Undefined variable: error in C:\xampp on line 66 (2)Notice: Undefined variable: error in C:\xampp on line 69 これは、上記スクリプトのPHP文を指しております。 どのように初期化をすればよいかわからず、ここで立ち止まっておりました。 ☆どうすればこのエラーメッセージを解消でき、また、本スクリプトが正常に作動しますでしょうか? ☆初期化のためのスクリプトを添えて頂ければ嬉しく思います。 みなさまのお力を貸して頂ければ幸いでございます。 よろしくお願い申し上げます。

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

    こんにちは。質問させてください。 今、PHPの勉強をしています。 ApacheとPHP4.1.2を使用しようとしています。 今つかっているPCから別のPCに作成したソースを移動して 移動したPCで動作確認を行っているのですが、 プログラム中にオラクル関連の関数ocilogonを使用しようと したのでが、Undefined function ... というエラーが 出てしまいます。 以前も同じエラーが発生したときに INIファイルかDLLをC:¥WINNTに入れて PHP.iniの設定も変えたと記憶しているのですが 現在しようしているPCの設定をどうかえたか忘れてしまいました(泣) ご存知の方いらっしゃいますでしょうか?

    • ベストアンサー
    • PHP
  • PHPの syntax error について

    PHPのコードを書いて、添付のスクリーンショットのようなエラーが出てきます。 コードは次のようなもので、HTML文書のフォームから送られてきた名前のファイルを消去するものです。 <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\xampp\htdocs\".$FileName; echo $FileName ; unlink($FileName); //echo "<form id='next' method='post' action='QAgmeOver.php' >"; //echo "<input type='submit' value='call QAgameOver' >"; //echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> 問題の line 18 というのは次の行です。 //echo "<form id='next' method='post' action='QAgmeOver.php' >"; unexpected T_STRING というのは、何か文字列の書き方に問題があるということらしいのですが、何をどうやって見てもエラーが消えないのでコメントアウトしてみましたが、それでも同じエラーメッセージが出てきます。 どうすればこのエラーが出なくなるのか、詳しい方がいらっしゃいましたら教えてください。お願いいたします。

    • ベストアンサー
    • PHP
  • 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

専門家に質問してみよう