『壹』 使用php程序檢查PHP文件是否有語法錯誤
在網上找了一下。剛開始以為 token_get_all()函數能處理語法錯誤的問題,結果發現,它只是做簡單的詞法分析。沒有辦法。後來到論壇上去問了一下
之前在當當的時候的一個項目中用到了一個簡單的模板引擎,其實也是借鑒discuz來做的模板引擎,很簡單,它所作的事情就是把一些自定義的標簽編譯成php代碼。已經說了很簡單了,所以編譯的時候也名優進行模板語法的檢查,那麼在開發過程中就會出現編譯出來的php文件有語法問題,有語法問題沒有關系,我修改重新編譯一下就好了。首先不能在每次請求的時候都把php模板重新編譯一下,會嚴重影響性能,折中的處理時在每個編譯好的php文件末尾檢查一下該模板文件是否已經修改過,根據設定的更新頻率,如果又需要則重新編譯模板文件,現在的問題是編譯出來的php文件自己有語法錯誤,根本執行不到模板檢查那一步,所以即使修改了模板文件中的問題也不會重新編譯。 所以我想尋找一種簡單的方法來檢查生成的php文件是否合法。不合法就重新編譯,這樣開發過程中就不用出現錯誤就得手動刪除緩存文件了。
在網上找了一下。剛開始以為 token_get_all()函數能處理語法錯誤的問題,結果發現,它只是做簡單的詞法分析。沒有辦法。後來到論壇上去問了一下
有人告訴我有這樣一個函數 php_check_syntax() 我想問題就這么堅決了。。我真應該rtf(read the fuck mannual). 仔細一看。這個函數已近被棄用了:
note: for technical reasons, this function is deprecated and removed from php. instead, use php -l somefile.php from the commandline.
這個technical reason 到底是什麼呢? 先不管了,以後再慢慢研究,反正不能使用這個方法就對了。
他們的建議是使用命令行$php -l filename.php 來檢查語法。
gary every給了我一個代碼片段參考:
在命令行下檢查問題也不大。如果我要放在在線應用呢? 這就涉及到可移植性的問題了。首先是操作系統,然後就是環境變數。這樣的話就會依賴於伺服器端的配置。在http://www.php.net/manual/en/function.php-check-syntax.php 上有人貼出了自己的php_check_syntax()函數實現。
有的採用的就是上面的命令行的方法。
後面有提到使用eval的方法來驗證。eval方法會執行傳入的代碼, 如果代碼有語法錯誤則會拋出parser error, 可以使用'@'錯誤抑制符去掉錯誤信息,eval和echo一樣並不是函數,不能使用變數函數的方法調用比如:
$func = 『eval'
$func()這樣的調用就是無效的。它會提示沒有eval函數,如果你自己定義這么一個函數也是有問題的。因為eval是一個關鍵字。
eval調用和include差不多,如果被包含文件中沒有明確return就返回null。如果直接eval我們需要檢查的文件會造成被檢查的文件內代碼被執行,這可不是我們想要的,我們只需要檢查一下這個文件的語法是否正確。 我們可以在要檢查的文件之前添加return 語句,讓代碼提前跳出,那麼後面的代碼就不會執行了。好的,就這么干。
checker.php
if(!function_exists('php_check_syntax')) {
function php_check_syntax($file_name, &$error_message = null) {
$file_content = file_get_contents($file_name);
$check_code = "return true; ?>";
$file_content = $check_code . $file_content . "<?php ";
if(!@eval($file_content)) {
$error_message = "file: " . realpath($file_name) . " have syntax error";
return false;
}
return true;
}
}
if(!php_check_syntax("file.php", $msg)) {
echo $msg;
}
else {
echo "woohoo, ok!";
}
file.php
<?php
foreach:: a => b
?>
因為parse error 是沒法被 set_error_handler處理函數處理的。這個異常沒辦法catch到。所以才使用了@來抑制錯誤。這帶來的問題就是我們無法得到詳細的錯誤信息。 不過目前我需要的功能也只是檢查語法是否正確。不正確的話重新編譯模板文件,就這么簡單,至於語法錯誤,在顯示網頁的時候自然會看得到。
『貳』 如何查看php代碼語法錯誤
錯誤抑制符去掉錯誤信息,eval和echo一樣並不是函數,不能使用變數函數的方法調用比如:$func = 『eval』$func()這樣的調用就是無效的。它會提示沒有eval函數,如果你自己定義這么一個函數也是有問
錯誤抑制符去掉錯誤信息,eval和echo一樣並不是函數,不能使用變數函數的方法調用比如:
$func = 『eval』
$func()這樣的調用就是無效的。它會提示沒有eval函數,如果你自己定義這么一個函數也是有問題的。因為eval是一個關鍵字。
eval調用和include差不多,如果被包含文件中沒有明確return就返回null。如果直接eval我們需要檢查的文件會造成被檢查的文件內代碼被執行,這可不是我們想要的,我們只需要檢查一下這個文件的語法是否正確。 我們可以在要檢查的文件之前添加return 語句,讓代碼提前跳出,那麼後面的代碼就不會執行了。好的,就這么干。代碼如下:
< ?PHP
if(!function_exists('PHP_check_syntax')) {
function PHP_check_syntax($file_name,
&$error_message = null) {
$file_content = file_get_contents($file_name);
$check_code = "return true; ?>";
$file_content = $check_code .
$file_content . "< ?PHP ";
if(!@eval($file_content)) {
$error_message = "file: " .
realpath($file_name) . " have syntax error";
return false;
}
return true;
}
}
if(!PHP_check_syntax("file.PHP", $msg)) {
echo $msg;
}
else {
echo "Woohoo, OK!";
}
< ?PHP
foreach:: a => b
?>
因為Parse error 是沒法被 set_error_handler處理函數處理的。這個異常沒辦法catch到。所以才使用了@來抑制錯誤。這帶來的問題就是我們無法得到詳細的錯誤信息。 不過目前我需要的功能也只是檢查語法是否正確。不正確的話重新編譯模板文件,就這么簡單,至於語法錯誤,在顯示網頁的時候自然會看得到。
PHP檢查語法錯誤最好的辦法就是這個被遺棄的PHP_check_syntax這個方法回到PHP中。下次再研究下他們是出於什麼原因把這個函數去掉的。
『叄』 php命令行工具檢測php文件語法格式是否正確的方法是
使用PHP命令行,如果你是Windows下,需要先設置環境變數
1.右鍵我的電腦->屬性->高級設置
2.點高級->環境變數
『肆』 Atom編輯器如何自動檢查PHP的語法錯誤
linter-php插件
安裝這3個:linter、linter-ui-default、linter-php
安裝之後,在linter-php插件設置里指定你的php.exe文件位置。
在你語法出錯的時候,前面會有一個紅點
『伍』 在PHP中檢查PHP文件是否有語法錯誤的方法
PHP中try{}catch{}語句,任何調用 可能拋出異常的方法的代碼都可以使用try語句。Catch語句用來處理可能拋出的異常。.另外檢測PHP語法一般編輯器都已經有語法檢測功能,比如
Zend Studio(PHP集成開發環境),也自帶調試功能
『陸』 常用的php開發工具有哪些
1、EditPlus
EditPlus是一套功能強大,可取代記事本的文字編輯器,擁有無限制的Undo/Redo、英文拼字檢查、自動換行、列數標記、搜尋取代、同時編輯多文件、全屏幕瀏覽功能。對於很多php程序來說,EditPlus 非常簡單好用。同時EditPlus也是一款好用的HTML編輯器,除了可以顏色標記HTML Tag (同時支持C/C++、Perl、java)外,還內建完整的HTML和CSS1指令功能,對於習慣用記事本編輯網頁的朋友,它可幫你節省一半以上的網頁製作時間,若你有安裝IE 3.0以上版本,它還會結合IE瀏覽器於EditPlus窗口中,讓你可以直接預覽編輯好的網頁(若沒安裝IE,也可指定瀏覽器路徑)。
2、 PHPDesigner 7
PHPDesigner 7不僅適用於php開發 ,也支持其他編程語言,例如:html 、xhtml、xml、css和javascript 、vbscript、java、c#、perl、python等!PHPDesigner 7主要針對 PHP 網頁的編寫所設計的程序,它內建一系列的指令碼、PHP4 原始碼資料庫、語法高亮度顯示功能、FTP 客戶端等,無論您是 PHP 網頁設計高手,或者是剛入門的新手,您都可以使用PHPDesigner 7來設計網頁程序。
3、Norepad++
Notepad++是一款台灣人開發的一款非常有特色的編輯器,屬於開源軟體,支持C、C++、Java、C#、XML、HTML、PHP、Javas cript編程語言,而且可以免費使用。
主要功能有:
①內置支持多達27種語法高亮度顯示(囊括各種常見的源代碼、腳本,值得一提的是,完美支持.nfo文件查看),也支持自定義語言;
②可自動檢測文件類型,根據關鍵字顯示節點,節點可自由折疊/打開,代碼顯示得非常有層次感!這是此軟體特色的體現之一;
③可打開雙窗口,在分窗口中又可打開多個子窗口,允許快捷切換全屏顯示模式(F11),支持滑鼠滾輪改變文檔顯示比例等等。
4、PHP Coder
PHPCoder用於快速開發和調試PHP應用程序,它很容易擴展和定製,完全能夠符合PHP開發者的個性要求 主要功能為:
1. 結合了PHP編譯器和參考文檔,可以對編輯中的PHP腳本進行即時預覽;
2. 支持高亮顯示HTML和PHP代碼;
3. 自動完成功能,可以自動完成用戶自定義代碼片斷;
4. 標准函數提示;
5. 有專門的工程項目管理器;
6. 對象瀏覽器搜尋編輯中文件的包含信息,自定義函數,並以樹形顯示;
7. 支持查找對稱的語句標記符;
8. 支持高級搜索和替換;
9. 自帶FTP功能;
10. 支持運行和斷點調試;
總之,PHPCoder是一個非常實用的,功能強大的編程環境,而且它是免費的!
5、Zend Studio
zend Studio 是專業開發人員在使用PHP整個開發周期中的集成開發環境 (IDE),它包括了PHP所有必須的開發部件。通過一整套編輯、調試、分析、優化和資料庫工具,Zend Studio 加速開發周期,並簡化復雜的應用方案。
Zend Studio主要組件
1 專業的集成開發環境 內置 編輯器, 調試器, 以及 幫助文檔
2 Windows, Linux, Mac 等多個操作系統版本
3 多語言支持
4 專業的編輯器
5 關鍵字、語法加亮顯示 (PHP, HTML, XHTML, and JavaScript)
6 XML & CSS 的關鍵字、語法加亮顯示
7 代碼模板
8 支持 PHP 4 and PHP 5
9 代碼自動完成功能
10 PHP Code (+PHPDoc) 分析功能
11 內部調試器
12 代碼摘錄
13 PHP 代碼分析
14 遠程調試器
15 Remote Profiler
16 資料庫連接以及集成查詢,適用於MySQL、Oracle 、SQL Server、SQLite、 PostgreSQL
17CVS 集成,方便團隊開發
『柒』 大家給推薦一個php開發工具 哦 !
開發工具要看你的需要,如果偏後台推薦使用Zend Studio,唯一貫穿整個項目的IDE,如果偏前台的話,Dreamweaver之類的所見所得工具更方便一些。
『捌』 想用軟體直接查看php代碼,什麼軟體更好
當然是zend studio咯,php的專業編碼工具。
Zend Studio是當今最偉大的PHP集成開發環境
Zend Studio包括了PHP開發所有必須的部件,通過一整套編輯、調試、分析、優化和資料庫工具,使用Zend Studio 縮短了開發周期,並簡化了復雜的應用方案,無容置疑,其已經是當今世上最強大的PHP集成開發環境。
Zend Studio的強大之處,除了一般編輯器所具有的代碼高亮,語法自動縮進,書簽功能外,它內置的調試器更是無可挑剔,支持本地和遠程(debug server)兩種調試模式,支持諸如跟蹤變數、單步運行、斷點、堆棧信息、函數調用、查看實時輸出等多種高級調試功能。另外,最新版(Zend Studio 5.5.1)對中文的支持也是非常穩定的。
本系列教程將通過搜集整理資源,結合筆者的一些個人見解,帶您領略ZDE的震撼魅力。
更詳細的教程請看參考資料。