-3

以下のような PHP 関数があるとします。

関数.php

<?php
function getDataInFile($PMTA_FILE){
    $PMTA_DATE = date("Y-m-d");
    $lineFromText = explode("\n", $PMTA_FILE);
    $number_bar_charts = 13;
    $row = 0;
    $cate = "";
    $total ="";
    $fail = "";
    $mailSuc = "";
    $title = "";
       foreach($lineFromText as $line){
            if($row < $number_bar_charts){
              $words = explode(";",$line);
              $dateTime .= ','.$words[0];
                if($title == ""){
                   $title = $words[0];
                }
                $cate .= ','."'$words[5]'";
                $total .= ','.$words[6];
                $fail .= ','.$words[7];
                $mailSuc .= ','.((int)$words[6] - (int)$words[7]);                          
            $row++;
      }   
     }

}


?>

これは、 で使用する関数を呼び出す以下のコードですgetFile.php

<?php 
include("include/function.php");
$PMTA_DATE = date("Y-m-d");
getDataInFile("../stats_domain_recepteur.affinitead.net.".$PMTA_DATE.".txt");

?>

実際、ファイルからデータを読み取ることができず、エラーメッセージが表示されましUndefined variable: dateTime in C:\wamp\www\chat\include\function.php on line 15Notice: Undefined offset: 5 in C:\wamp\www\chat\include\function.php on line 19....

これを修正する方法がわかりません。どなたか助けてください。よろしくお願いします。

4

3 に答える 3

0

これらは通知のみです。それらはあなたのコードを爆破するようなひどいエラーではありませんが、一部のコードレビューアはあなたにそれらを修正させるでしょう。PHPは丁寧なナッジを提供しているだけですが、とにかく機能します。致命的なエラーは、PHPを軌道に乗せないようにする大きな悪い問題です。

PHPが見つけた問題は次のとおりです...

  1. 反復ごとに文字列$dateTimeにデータを追加します。最初のパススルーでは、変数はまだ存在していません。PHPは実際には気にしませんが、警告を発行します。この問題を取り除くには、使用する前に$dateTimeを定義してください。

    $dateTime = null;

  2. 2番目の問題は、配列の範囲外の例外です。その配列インデックスが存在しないときに$words[5]で何かをしようとしています。一般に、配列インデックス、変数、およびその他の楽しいものが実際に存在することを確認してから、それらを使用する必要があります。

    $cate .= sprintf(",'%s'", isset($word[5]) ? $word[5] : '');

エラーログに報告された通知と警告を表示したくない場合は、ログに表示するエラーレベルを設定する方法について、 PHPエラー処理を参照してください。

そもそも実際にファイルを取得するには、 file_get_contents関数についてもすべて読む必要があります。

于 2012-12-14T05:02:30.073 に答える
0

$ dateTime=''を追加します; foreach($ lineFromText as $ line){の前

これは問題なく動作します。

于 2012-12-14T05:03:01.500 に答える
0

エラーメッセージは100%正当です。以前に初期化されていない変数を使用しようとしています。このコードをループの上に置くと、このエラーがなくなります。

$dateTime = '';

2番目のエラーについて-配列に6番目の要素がないことを示しているので、そのコードをチェックに置き換えた方がよいでしょう。

$cate .= sprintf(",'%s'", isset($word[5]) ? $word[5] : '');

このチェックを他のインデックスアクセスにも外挿します。

于 2012-12-14T05:04:29.887 に答える