簡體   English   中英

php自定義C ++模塊可以從命令行運行,而不是在Web服務器上運行

[英]php custom C++ module works from command line, not on webserver

我用C ++和Swig制作了一個自定義的PHP模塊。 它適用於命令行,但不適用於我的網絡服務器:

php index.php
php-cgi index.php

這兩個都很好。

我正在使用lighttpd和php。 我沒有以任何特殊的方式配置它們。 我剛剛使用sudo apt-get install安裝它們。

不幸的是,如果我創建一個網頁,我會得到這個:

Fatal error: Call to undefined function minikey_to_wif() in /var/www/index.php on line 6 

調用function_exists(“minikey_to_wif”)也返回False。

phpinfo()不顯示我的名為minikey的模塊,並顯示與我編輯的文件相同的配置路徑(/etc/php5/cgi/php.ini):

extension=/path/to/php-ext/minikey/minikey.so

我也嘗試將其復制到其他PHP擴展似乎已安裝的位置(/ usr / lib / php5 / 20090626 + lfs /),但這也無效。

我一直在停止,無數次啟動lighttpd。 每次,當我運行ps aux | grep php,沒有結果。 我也重新啟動了幾次沒有效果。 我不知道發生了什么事。

好的找到了答案。

擴展依賴於安裝在非標准位置的庫。 通常我在〜/ .bashrc中設置LD_LIBRARY_PATH。 但是當Web服務器運行擴展時,它沒有該環境變量。

修復是使用/ home / genjix / usr / lib在/etc/ld.so.conf.d/genjix.conf中創建一個文件,並以root身份運行ldconfig。

嘗試使用lighty運行phpinfo()。 確保它指向正確的php.ini。

如果您認為這是問題,您可以使用帶有"bin-path" => "/path/to/php-cgi -c /path/to/php.ini" lighttpd.conf內的-c開關啟動php:

例如

fastcgi.server = (
    ".php" => (
            (
                    "bin-path" => "/path/to/php-cgi -c /path/to/php.ini",
                    "socket" => "/tmp/php.socket",
                    "max-procs" => 4,
                    "idle-timeout" => 30,
                    "bin-environment" => (
                            "PHP_FCGI_CHILDREN" => "4",
                            "PHP_FCGI_MAX_REQUESTS" => "1000"
                    )
            )
    )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM