PHP:无法从php-fpm

时间:2016-03-23 14:50:45

标签: php sockets

我有一个脚本,它在后台工作,并通过unix套接字接受连接。

所以,我写了另一个连接到第一个脚本的脚本 我已经从CLI检查了它,一切正常。
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()));
}

1 个答案:

答案 0 :(得分:1)

所以,我找到了答案:

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必须在此之后重启。