我正试图连接到linux机器上的一个php unix套接字。它是一个微控制器,所以我决定使用lighttpd来启动和运行服务器。连接到另一个应用程序正在侦听的套接字时遇到问题。
在PHP中,我使用socket_create()创建一个套接字,将AF_UNIX作为第一个参数,然后尝试使用socket_connect()连接到该套接字,这是一个被拒绝的权限错误,我使用socket_last_error()找到了该错误。
另一个应用程序正在监听套接字以获取新连接,我可以通过套接字与另一个应用程序连接,但在php中被拒绝了权限。
代码如下所示:

$socket = socket_create(AF_UNIX, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_connect($socket, $sockaddr);
echo socket_last_error();

lighttpd在用户“www data”下运行,用户“www data”位于sudo、adm和www data组中。
说实话,即使我在网上搜了很多遍,我也不知道该怎么办。
没有selinux,因此提到使用setebool的答案将不起作用,因为没有setebool命令
lighttpd不使用apache,因此与apache相关的任何答案都不能工作,因为没有apache。
如何授予lighttpd或php5连接到套接字的权限?
如果重要的话,php5正在使用fastcgi

最佳答案

访问/tmp/socketname时遇到权限问题。我发现的解决方法是让php在创建套接字之前对文件执行chmod命令:

$sockaddr = "/tmp/socketname";
$command = "sudo chmod go+w ".$sockaddr;
exec($command);

关于php - lighttpd php5 socket_connect()权限被拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35132992/

10-11 04:51