apache2.2 + resin4 的PHP解析問題, resin disable quercus

apache2.2 + resin4 的PHP解析問題,, resin disable quercus
雖然resin4包含了Quercus,能夠解析PHP5腳本,但是因為這玩意不是中國人開發的,沒有充分考慮到多字節字符的問題,全部用的latin1編碼,而且還硬編碼在源代碼中了,很是扯淡!
最近有一個PHP的項目需要發佈,於是照常發佈到了apache中,並在resin的conf/app-default.xml配置文件中將PHP相關配置給註釋掉了,以為這樣就可以將PHP的解析交給apache處理了,就像之前的resin3一樣。結果卻證明完全想錯了,經過一番折騰,解決辦法如下:
resin的conf/app-default.xml還得照改不誤,但是還得修改conf/resin.xml文件 (wadelau注: resin-4.0.35之后,需要在 conf/cluster-default.xml里找下面的高亮语句),在這個文件中找到以下位置:
<cluster-default>
<!– shared webapp jars for non-classloader-aware libraries –>
<web-app-default>
<class-loader>
<library-loader path=”${resin.home}/webapp-jars”/>
</class-loader>
</web-app-default>
    <!– standard servlet behavior, including .jsp, .php, and WEB-INF –>
   <resin:import path=”classpath:META-INF/caucho/app-default.xml”/>
 
請注意上面紅色加粗的這行,這行的意思是從classpath路徑中搜尋META-INF/caucho/app-default.xml文件,熟悉java開發的朋友應該知道classpath的搜索路徑不僅僅包括文件夾,還可以是jar包,而META-INF/caucho/app-default.xml恰恰就在resin的lib/resin.jar包中,這個包中果然也有一個app-default.xml文件,內容與conf/app-default.xml一模一樣,如果想讓resin徹底的不解析PHP,那麼將這個文件中的PHP配置也註釋掉就可以了。但在這裡我不這麼做,因為要解包,改好了還要再重新打包,很討人嫌!咱不是將conf/app-default.xml改好了嗎?那就把這行給給換掉不就行了嗎?改成下面這行即可:
        <resin:import path=”${__DIR__}/app-default.xml”/>
(注意:這行改了之後,resin-admin就不能用了,提示404文件未找到。找到resin-admin的WEB-INF目錄,查看resin-web.xml文件,發現這個文件中加載了Quercus,那麼按道理resin-admin應該還是由resin解析的,不應該不能用,折騰了好久,猛然想到是不是歡迎頁中沒有index.php呢?仔細一查看,果然如此。冤枉死了好多腦細胞。)
這個${__DIR__}在resin配置文件中是代表resin的conf目錄路徑的,這句的意思也就是導入conf目錄下的app-default.xml文件。好了,現在刷新一下瀏覽器,PHP應用果然交給apache處理了,不過問題又來了,雖然PHP的處理權是交給apache了,但頁面卻顯示源碼,為了解決這個問題,我用PHP寫了個shell腳本-test.php,內容如下:
#!/usr/bin/php -q
<?
echo “a test!~~”;
?>
保存退出,並修改為可執行權限:
chmod +x test.php
運行它:./test.php
結果發現控制台上也打印出源代碼,如下所示:
[root@www shine]# ./test.php
<?
echo “a test!~~”;
?>
於是可以肯定此問題不是因為apache不能識別php腳本,而是php本身的問題,根據以往的經驗,突然想到PHP腳本的開始/結束符可以用<? ?>,也可以用<?php ?>,前者是短風格,後者是長風格,具體可以使用哪種風格,需要修改php.ini文件中的相應配置項,於是編輯/etc/php.ini,找到 short_open_tag = Off  這一行,將Off改成On即可,保存退出,重啟apache,再刷新瀏覽器,php解析恢復正常,問題解決。
此条目发表在服务器运维, 计算机技术分类目录。将固定链接加入收藏夹。

apache2.2 + resin4 的PHP解析問題, resin disable quercus》有1条回应

  1. Wadelau说:

    真真费了一番脑子才搞定这个问题。
    同样的,还有 resin-4.0.36死活跟apache-2.2.22捆不到一起,常规安装resin之后,apache无法带着ResinCaucho的配置语句重启….

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code