2009-07-30 68 views
11

我使用自動加載動態加載PHP類文件。 由於某種原因,這些文件可能會丟失或損壞。是否可以從PHP檢查PHP文件語法?

自動加載將成功報告丟失的文件,以便應用程序邏輯可以處理該文件。但是,如果這些文件已損壞,那麼整個處理過程將停止,並顯示用戶空白屏幕,並在錯誤日誌中顯示「PHP解析錯誤:語法錯誤」。

是否可以從PHP代碼檢查PHP文件的語法?

我在這裏看過:http://us.php.net/manual/en/function.php-check-syntax.php - 已棄用。

而且

exec("php -l $file"); 

似乎是一個錯誤的方式(http://bugs.php.net/bug.php?id=46339

的思考?

+4

您是否真的考慮檢查每個腳本執行時要包含的每個文件的語法? – Gumbo 2009-07-30 17:51:34

+0

不完全。我有特殊的類可能會被破壞,而不是所有的類。 – 2009-07-30 18:06:43

回答

6

你真的不應該去檢查非正確執行時PHP文件:它會殺死你的應用程序的響應時間!

A「更好的方式」是使用PHP -l命令行大功告成修改PHP腳本時;或者如果你使用的話,將它包含在你的構建過程中;或者如果您使用SVN並且可以定義SVN hooks,則將其作爲SVN預提交掛鉤。

在我看來,幾乎任何給定的解決方案是不是檢查自己在執行時更好!


像你想避免將可能不會經常發生的那些考慮的錯誤,它可能是更好的...只是讓他們發生。
唯一的一點是:啓動日誌,並監視他們來說,能夠快速檢測時泰雷是:-)


當然是一個問題,這並不妨礙你處理丟失的文件的情況下, ;但是這是一個不同的問題...

0

總之:我看不出有辦法做到這一點,但有一個想法可能是足夠的。

有日誌監控程序或可以過濾通過標準工具日誌與解析錯誤文件。如果出現文件,則將惡棍文件名放在黑名單中,並且在自動加載器在加載之前檢查該列表。

使用這種方法,在第一次,你會成爲一個空白屏幕(assumig錯誤輸出報告是在生產服務器上打開),但第二個將有一個頁面,而故障部件。

在自動加載,你應該有一個列表或命名方案總是試圖強制加載類(其他方式您的應用程序可能是不一致的狀態)

+0

我認爲他(他的系統)在構建時無法控制這些文件。 – 2009-07-30 18:10:40

2

另一種方法可以讓一個PHP文件在你所謂的 checkSyntax.php

<?php 
for($i=1; $i < count($argv); $i++){ 
     $temp = "php -l " . $argv[$i]; 
     $output = exec($temp); 
     echo "\n$output"; 
} 
?> 

現在根目錄,打開你的.bashrc文件,以建立一個快捷方式來運行這個文件。 添加以下行以運行checkSyntax。php

alias checkSyntaxErrors='php /root/checkSyntax.php' 

現在goto你的源碼目錄做svn st。

它顯示你的文件列表,現在很容易運行命令。

checkSyntaxErrors file1.php file2.php ....... 

這將檢查所有文件傳遞作爲參數。

享受:)

0

你也可以做一些單元測試,在這裏裝載你動態地執行PHP和斷言EXEC(「PHP -l $文件名」)是有效的。如果你這樣做了,你可以在你的測試中驗證一次,用適當的變量生成它,並且有一個合理的信心水平,你的PHP是好的。