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のメモリ制限を増やしてみました...それでも何が起こっているのかわかりません。

4

1 に答える 1

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エンジンは、算術演算「$ lineマイナス1」ではなく、のプロパティである$error->line-1かのように解釈していました。$line-1$error

于 2012-08-08T13:08:20.457 に答える