自己寫的PHP擴充在命令列和瀏覽器啟動並執行結果不一樣?

來源:互聯網
上載者:User
我自己用C++寫的一個PHP擴充,編譯安裝好之後,問題來了,請君聽我慢慢道來。

1,為了測試,我寫了個測試指令碼ctp.php
";if(function_exists("helloWorld")){echo "exist\n";}else{echo "none exist\n";}echo helloWorld('baren')


2,在瀏覽器和命令列上分別運行結果如下:


3,我的問題:
1)為什麼在瀏覽器中不能列印出函數hellWorld()的值 ?
2)如何修正此錯誤,需要更改什麼設定檔嗎?
3)網上搜尋過太多的解決方案,例如改許可權,改環境變數,均不能解決。所以我最後的一個問題是,是不與開發環境有關?

4,我的開發環境:
os version :centos 7 x86_64
php version:5.4.43
webserver :Apache/2.4.16 (Unix)

請有過擴充編寫部署經驗的同行給予協助?

在下謝過!


回複討論(解決方案)

我只知道php運行cli模式下用的設定檔和執行web用的設定檔是不一樣的,你應該將你的擴充也添加到運行web的那個設定檔裡面
web用的是/usr/local/php/etc/php.ini這個設定檔
cli應該是這個/etc/php.ini

感謝你的回答,不過你的回答是錯的。
你的錯誤如下:
1,CLI 和WEB的設定檔都是一樣的。而且我在做部署時只是將我的擴充設定檔ctpextension.ini放在了Scan this dir for additional .ini files 預設的目錄下面 :/usr/local/php/php.d 當PHP載入設定檔時會自動檢查這個目錄並把ctpextension.ini 檔案裡的內容追加到php,ini裡面。

2,你說:“cli應該是這個/etc/php.ini” 我也發現我的系統裡有這個檔案目錄,於是我把這個檔案刪除 ,然後在命令列運行指令碼同樣能夠得到結果。證明你的說法有誤。

關於 additional .ini files 你可以閱讀這裡: http://php.net/manual/zh/function.php-ini-scanned-files.php

命令列是即時載入php的,而web不是,修改php配置如加擴充後,需要重啟伺服器才會生效。

命令列是即時載入php的,而web不是,修改php配置如加擴充後,需要重啟伺服器才會生效。


謝謝你的提醒,我不會犯這麼低級的錯誤

大家不要再猜測了,這個問題我請教一個國外的開發人員解決了。
其實這個問題跟配置沒有關係,我的配置是正確的,不然就不會在命令列跟瀏覽器端都顯示我的函數已經存在。

問題的原因是:我自己寫的PHP擴充庫依賴的第三方庫已經更行了,而我不知情,還是看得老版本的文檔,

所以就出現瀏覽器不輸出結果的問題。

我只需要把我的C++檔案裡面的std::cout 改成Php::out 即可

給大家看看我期待已久的結果圖吧

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.