PHP ayrıştırma hataları ile dosyaları içerir

7 Cevap php

Ben diğer PHP komut dosyası (dahil yoluyla) dahil bir dinamik olarak oluşturulan PHP dosyası var. (Bazı anlaşılmaz bir sebeple) ilk ayrıştırma hataları ile oluşturulduğunda, ana komut dosyası ayrıştırma hatası neden olan bir yürütme durdurma.

Bir dosyayı dahil olduğunda ayrıştırma hatalarını algılamak için herhangi bir şekilde bu yüzden dinamik olarak dosya yeniden var mı?

7 Cevap

Sen sözdizimini kontrol etmek için PHP komut satırı sürümünü çalıştırabilirsiniz:

php -l filename

Eğer PHP komut dosyası içinde sözdizimi kontrol etmek gerekiyorsa, komut satırı programı aramak için exec() işlevini kullanın.

Ayrıca kalktı işlevine bakın php_check_syntax()

SYNTAX.php? Filename.php

NEREDE SYNTAX.php olduğunu:

<?php 
error_reporting(E_ALL);
ini_set('display_errors','On');

include($_SERVER['QUERY_STRING']);
?>

Sen (exec() veya benzeri kullanarak) yürütmek php -l file.php ve sonuç bakmak olabilir. Ben her kapsamaktadır bunu düşünürdüm yavaş olacaktır.

Eğer bazen geçersiz PHP dosyalarını oluşturmak için neden ne olursa olsun düzeltmek için daha iyi olmaz mıydı?

Ben kodu ağacına geçmesi ve sözdizimi hataları arayacaktır bir komut dosyası var. Onun çok gelişmiş, ama bunun temelleri değil

 $cmd="php -l " . $basedir . $dir . "/" . $file;
 $s=exec($cmd,$k);
 if( strstr($s,"No syntax errors detected") ) { include($basedir.$dir."/".$file); }

Bu eklemek üzeresiniz senaryo üzerinde php-l çalışır ve hiçbir yanlışlıkları varsa bunu yükler.

Eğer komut satırı üzerinden bu dosyayı idam sanki shell_exec () yürüterek, çıktıyı görebilirsiniz. Bir hata burada varsa sadece görebilirsiniz.

<?php
if (strpos(shell_exec('php -l file.php'), 'Syntax Error')) {
    die('An error!');
}

Eğer her zaman doğru parseable kodu (ki doğru kaçması, vs ile ulaşmak kolay olmalı) oluşturmak olduğunu garanti ederseniz dosya yazma işlemi dışında (örneğin bir elektrik kesintisi, kesilirse, o zaman yanlış gidebilir tek yoldur bellek durumu, süreç), vb öldürdü. Bu durumda kısmi bir dosya ile sona erecek.

Dosyanın sonunda bir imza ekleyerek ve çağırmadan önce kendi varlığı için kontrol ederek bu kısmi yazma karşı koruyabilirsiniz include ().

Eğer sonunda <?php $complete=1; ?> yazarsanız Örneğin, daha sonra onun varlığını kontrol edebilirsiniz:

$contents = file_get_contents($path);
if (strpos($contents, '<?php $complete=1; ?>')) {
    include($path);
}

Bir file_get_contents yapmak ve daha sonra herhangi bir ayrıştırma hataları olup olmadığını görmek için tarama olabilir.

$contents = file_get_contents($path);
if (stripos($contents, 'Parse error:') !== 0)
{
  // There was a parse error.
} else {
  // There were no parse errors.
}