2012-08-08 87 views
0

我完成了代碼和它是這樣的:注意:未定義抵消:

<?php 
ini_set('memory_limit', '128M'); 

    function validate_xml(&$filename) 
    { 
    libxml_use_internal_errors(true); 
    $doc = new DOMDocument('1.0', 'utf-8'); 
    $xml = file_get_contents($filename); 
    $doc->loadXML($xml); 

    $errors = libxml_get_errors(); 


    $lines = file($filename); 
    $output = fopen('errors.txt', 'a'); 

    $distinctErrors = array(); 
    foreach ($errors as $error) 
    { 
     if (!array_key_exists($error->line, $distinctErrors)) 
     { 
      $distinctErrors[$error->line] = $error->message; 
      fwrite($output, "Filename: {$filename}. Error on line: {$error->line}. {$lines[$error->line-1]}\n"); 

     } 
    } 

    fclose($output); 

} 


if(isset($_POST['SubmitCheck'])) { 


     $directory = $_POST['Path']; 

     if (! is_dir($directory)) { 
       exit('Invalid diretory path'); 
       } 
       else 
       { 
        echo "The dir is: $directory". '<br />'; 
         chdir($directory); 

         foreach (glob("*.xml") as $filename) { 
         validate_xml($filename);       
         } 
       } 
     } 

     else { 

     ?> 
     <form id="Form1" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
      Path: <input type="text" name="Path"><br> 
      <input type="hidden" name="SubmitCheck" value="sent"> 
      <input type="Submit" name="Form1_Submit" value="Path"> 
     </form> 
     <?php 
     } 
?> 

,這讓我

Notice: Undefined offset: 16032 in C:\xampp\htdocs\www\php-xml\nou.php on line 23 

Notice: Undefined offset: 16051 in C:\xampp\htdocs\www\php-xml\nou.php on line 23 

Notice: Undefined offset: 16060 in C:\xampp\htdocs\www\php-xml\nou.php on line 23 

Notice: Undefined offset: 16075 in C:\xampp\htdocs\www\php-xml\nou.php on line 23 

Notice: Undefined offset: 16078 in C:\xampp\htdocs\www\php-xml\nou.php on line 23 

Notice: Undefined offset: 16101 in C:\xampp\htdocs\www\php-xml\nou.php on line 23 

Notice: Undefined offset: 16110 in C:\xampp\htdocs\www\php-xml\nou.php on line 23 

Notice: Undefined offset: 16167 in C:\xampp\htdocs\www\php-xml\nou.php on line 23 

的事情是我有3首大個XML(每個11MB)。 當我嘗試3小xml它的工作腳本。也爲每個大XML分別工作。 我不知道該怎麼做,我試圖增加php_ini的內存限制...仍然不知道發生了什麼。

+1

哪一個是23號線? – 2012-08-08 12:29:52

+0

fwrite($ output,「Filename:{$ filename}。Error line on:{$ error-> line}。{$ lines [$ error-> line-1]} \ n」); – Mickey 2012-08-08 12:31:27

回答

0

第23行中的代碼有一個無效的偏移引用(`{$ lines [$ error-> line-1})。 您寫道:

fwrite($output, "Filename: {$filename}. Error on line: {$error->line}. {$lines[$error->line-1]}\n"); 

我想你想做的事:

$line_text = $lines[ $error->line - 1 ]; 
fwrite($output, "Filename: {$filename}. Error on line: {$error->line}. $line_text \n"); 

你在做的方式,PHP引擎解釋$error->line-1彷彿$line-1是的$error一個屬性,而不是作爲一個算術運算「$ line減1」。

+0

那麼,如果是像你說的那樣,這個腳本就不能在單個文件上工作。 我從3個xmls(32Mb)製作了一個大xml,該腳本適用於它,以及3個較小的xmls – Mickey 2012-08-08 13:12:16

+0

您是否嘗試過我的解決方案? – 2012-08-08 13:18:04

+0

是的,仍然不起作用。 – Mickey 2012-08-08 13:19:20