[英]PHP: Can't connect to socket from php-fpm
我有一個腳本,該腳本在后台運行並接受通過unix套接字的連接。
因此,我編寫了另一個腳本,該腳本連接到第一個腳本。
我已經從CLI進行了檢查,一切正常。
但是,當我嘗試使用網絡上的第二個腳本(php-fpm)時,出現異常No such file or directory
。
調用socket_connect
函數時,拋出此異常。
聽起來好像沒有套接字文件。 但是它確實存在。 我當時可以使用此腳本連接到此套接字,但只能從CLI連接。
有任何想法嗎?
更新:
這是代碼:
$filepath = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'checkerd.sock';
$socket = socket_create(AF_UNIX, SOCK_STREAM, null);
$result = socket_connect($socket, $filepath, 0);
if ($result === false) {
print_r(socket_strerror(socket_last_error()));
}
因此,我找到了答案:
systemd
具有“專用tmp”功能。 它為每個進程將/ tmp(和/ var / tmp)掛載為專用文件系統。
我的套接字服務器是從控制台運行的(代表php cli)。 這就是為什么當我將客戶端作為控制台腳本運行時能夠連接到它的原因。 這就是為什么從php-fpm(另一個過程)運行時同一腳本沒有看到套接字文件的原因。
解決方案是禁用php-fpm的私有tmp:
我用以下內容創建了/etc/systemd/system/php-fpm.service.d/private-tmp.conf
:
[Service]
PrivateTmp=false
此后必須重新啟動php-fpm。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.