在寫一個簡單的程序時碰到Parse error: syntax error, unexpected T_ENDWHILE in www.bKjia.c0m .php文件了,下面我給大家分析一下原因與解決方法。
問題現象:
1、同樣的代碼,在某些機器上運行正常,但在特定機器上運行報錯。
2、同一站點部分頁面顯示正常(例如<?php phpinfo();?>),但打開部分頁面時,phpxx_errors.log或者頁面顯示錯誤提示“Parse error: syntax error, unexpected T_ENDWHILE in xx.php on line xx”。
錯誤原因:
該錯誤有可能是因為編寫PHP腳本時丟失一個花括號(“}”),但更常見的原因是php.ini文件中short_open_tag值為Off導致的。
決定是否允許使用 PHP 代碼開始標志的縮寫形式(<? ?>)。如果要和 XML 結合使用 PHP,可以禁用此選項以便於嵌入使用 <?xml ?>。否則還可以通過 PHP 來輸出,例如:<?php echo '<?xml version="1.0"'; ?>。如果禁用了,必須使用 PHP 代碼開始標志的完整形式(<?php ?>)。
Note: 本指令也會影響到縮寫形式 <?= ,它和 <? echo 等價。使用此縮寫需要設置 short_open_tag 的值為 On。不推薦使用短標簽,使用<?php ?>才是規范的方法,但因為這種短標簽使用的時間比較長(歷史原因),為兼容老代碼,這種特性才被保存了下來。
解決方案:
將php.ini文件中short_open_tag值設置為On。
相關知識:PHP短標簽short_open_tag
名字
默認
可修改范圍
更新日志
short_open_tag
"1"
PHP_INI_ALL
在 PHP 4.0.0 時是 PHP_INI_ALL。 在 PHP < 5.3.0 時是 PHP_INI_PERDIR。
asp_tags
"0"
PHP_INI_PERDIR
在 PHP 4.0.0 時是 PHP_INI_ALL。
precision
"14"
PHP_INI_ALL
serialize_precision
"17"
PHP_INI_ALL
從 PHP 4.3.2 起可用。在 PHP 5.3.5以前,默認值為 100
y2k_compliance
"1"
PHP_INI_ALL
在 PHP 5.4.0 中移除該選項。
allow_call_time_pass_reference
"1"
PHP_INI_PERDIR
在 PHP 4.0.0 時是 PHP_INI_ALL。 在 PHP 5.4.0 中移除該選項。
disable_functions
""
php.ini only
從 PHP 4.0.1 起可用。
disable_classes
""
php.ini only
從 PHP 4.3.2 起可用。
exit_on_timeout
""
PHP_INI_ALL
從 PHP 5.3.0 起可用。
expose_php
"1"
php.ini only
zend.multibyte
"0"
PHP_INI_ALL
從 PHP 5.4.0 起可用
zend.script_encoding
NULL
PHP_INI_ALL
從 PHP 5.4.0 起可用
zend.signal_check
"0"
PHP_INI_SYSTEM
從 PHP 5.4.0 起可用
zend.ze1_compatibility_mode
"0"
PHP_INI_ALL
從 PHP 5.0.0起可用。 在 PHP 5.3.0 中移除該選項
detect_unicode
"1"
PHP_INI_ALL
從 PHP 5.1.0起可用。 本過時特性將肯定會在未來被移除。