所以很抱歉打擾大家,我是的新手PostgreSQL,但我的項目需要我建立一個自動化系統,連接到運行PostgreSQL服務器的服務器。長話短說,讓我們說我需要執行數據插入/操縱從網絡表格到服務器通過PHPpg_connect()
。 Web窗體在/var/www/html/web_form.html
位於本地,並調用執行數據插入一個PHP腳本,「PHP警告:pg_connect():無法連接到PostgreSQL服務器:致命:密碼認證失敗的用戶...」在Raspberry Pi(Stretch)
<form name="some_name" action="script.php" method="POST">
因此數據插入完成到本地服務器。
我使用的是樹莓派3模擬「服務器」(爲不使這樣的早期發展過程中,以「擾亂」的真正運行的服務器)。樹莓丕正在運行Raspbian拉伸發行。嗯,這本來是傑西,但後來我決定從
deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
與100
優先涉及拉伸回購。它也有postgresql-9.6.3
(從拉伸),php7.0.19-1
(也來自拉伸),並apache2.4.25
(官方Raspbian)。請你注意,拉伸回購做替換很多傑西的官方穩定的軟件包的,並且也被稱爲是「不太穩定」本身,因此它也可能是問題的根源。
我可以在服務器從遠程計算機訪問數據庫,無論是使用直接psql
,巨蟒(psycopg2
),或者甚至通過PHP完全相同的Web窗體(從遠程計算機試過),所以將主要贏」 t因爲PDO問題(我查過phpinfo()
,但感覺免費給這個建議,因爲我不真正理解PDO我自己)。在本地,我可以通過psql
訪問數據庫,但不能通過PHP進行本地訪問(pg_connect
)。
我這個問題插手了幾個小時,現在是徒勞的。請幫幫我。
這裏是我的樹莓派的配置:
1. 的PHP代碼片段:
$conn_str="host=localhost port=5432 dbname=my_db_name user=my_user_name password=my_password";
$db = pg_connect($conn_str);
if(!$db){
$errormessage=pg_last_error();
echo "Error 0: " . $errormessage;
exit();
}
請記住這相同的代碼已經完全另一臺計算機上工作。我成功執行時,Web窗體位於遠程計算機訪問該服務器,或當Web形式訪問遠程計算機的自己的本地PostgreSQL服務器數據的插入,而不是在它在這個特別做問題服務器。當在瀏覽器中運行,那隻能說明:
Error 0:
結果在控制檯上運行時:
PHP Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: password authentication failed for user "raspiserver"
FATAL: password authentication failed for user "raspiserver" in php shell code on line 1
我也嘗試過改變host=localhost
到host=127.0.0.1
或host=0.0.0.0
。我確信錯誤來自於該代碼塊,因爲該代碼塊已經在我的PHP代碼中的第一行,而我提供的其他錯誤報告代碼每個都有不同的Error X:
數字。
2. PostgreSQL的配置:
對於pg_hba.conf
內容:
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local my_db_name my_user_name 127.0.0.1/32 md5
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
# local replication postgres peer
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
#host all all 0.0.0.0/0 md5
host another_db_name my_user_name 192.168.52.0/24 trust
host my_db_name my_user_name 192.168.52.0/24 trust
我已經嘗試過評論/取消註釋LINE 7,或兩者LINE 7和8更改爲md5
,trust
,或password
。我也嘗試從LINE 7中刪除127.0.0.1/32
,或將其更改爲127.0.0.0/24
或0.0.0.0/0
。而且,是的,我確實執行了
sudo /etc/init.d/postgresql reload
sudo /etc/init.d/postgresql restart
(即使是sudo reboot
)我所做的每一項更改。
對於postgresql.conf
內容:
我已經設置listen_addresses = '*'
和password_encryption = on
,其餘保持不變。
3. 防火牆:
sudo iptables -L -n
不顯示任何條目:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
有什麼不對我的配置? 拉伸原因? 還是因爲PostgreSQL-9.6的實現?
我已經在這裏和那裏搜索,但大多數解決方案只是建議將pg_hba.conf
更改爲trust
,或者假定user
名稱不存在。
我很絕望,請幫忙。
(請你記住,我不知道什麼關於PHP和PostgreSQL,Apache的,或服務器,所以請不要指望我真的知道我到目前爲止已經完成。請你分析的一切 ....另外,英語不是我的本地人,所以我可能會在這裏和那裏(如果有的話)圍繞一些「行話」混合......對不起......)
好的,我會嘗試從下週一的LINE 7中刪除
ADDRESS
字段。出於好奇,不是host
意味着啓用遠程訪問?因爲我的意圖是啓用本地訪問。如果我錯了,請糾正我。 –'主機'本身並沒有啓用它,因爲它與「ADDRESS」掩碼結合在一起(AND)。當ADRESS是127.0.0.1/32時,它表示這條線上的規則僅適用於來自該地址的連接。但請記住,這是一整套規則說明所發生的事情和被拒絕的事情,不僅僅是一條線,甚至更少的一條線。 'pg_hba.conf'在整體上被解釋爲一個大的IF ... ELSIF ... ELSIF ... ENDIF –
我試圖從LINE 7中刪除'ADDRESS',腳本仍然無法工作。我也試圖將整個LINE 7評論爲無效。 –