我們試圖讓我們的Apache PHP模塊使用PostgreSQL .pgpass文件查找數據庫連接的密碼。我們一直無法讓它工作。是否有某種限制或錯誤阻止了它的工作?使用Apache的.pgpass libphp5.so
這是我們有什麼,我們已經檢查。這一切都在FreeBSD 10.1上。
所有按預期從命令行運行。也就是說,測試完全一樣,除了PHP可執行文件是/ usr/local/bin/php而不是Apache PHP模塊。
我們通過phpinfo()驗證了Apache和命令行的構建方式儘可能相同,包括使用相同的共享庫和相同的php.ini文件。
Apache的版本2.2.29
- /usr/local/libexec/apache22/libphp5.so
- /usr/local/lib/php/20100525/pgsql.so
命令行版本的PHP 38年5月4日
- 在/ usr/local/bin目錄/ PHP
- 在/ usr /本地/李b/php/20100525/pgsql.so
在這兩種情況下,我們都將環境變量PGPASSFILE設置爲相同的值,並驗證它在PHP中是否正確。
在這兩種情況下,我們都使用相同的Unix用戶名('www'),所以我們確信它不是文件路徑或權限問題。
我們的系統上只有一個PostgreSQL庫,位於/usr/local/lib/libpq.so。這是應該發生.pgpass文件使用情況的二進制文件。
有其他人遇到過這個問題嗎?有什麼我們可以忽略的嗎?
是否Apache的libphp5.so以某種方式繞過PHP庫pgsql.so的使用並直接調用libpq.so,儘管它被配置爲使用相同的PHP共享庫目錄(即/ usr/local/lib/php/20100525 /)?
對於原因,我不明白,我發現我需要發出'運行putenv(「PGSOMETHING =「.getenv(」PGSOMETHING「));'讓'pg_connect'尊敬我的apache env vars,否則會被忽略。也許試試? –
會試一試。謝謝! – CXJ
奇怪,因爲這行代碼應該是一個沒有操作 - 它的工作!謝謝。將您的評論置入答案中,並將其標記爲已接受,以便您可以獲得聲望點。 – CXJ