致命错误:调用未定义的函数socket_create()

65

我的代码是这样的:

if( ($this->master=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0 )

    {
    die("socket_create() failed, reason: ".socket_strerror($this->master));
    }

当我运行与Web套接字建立连接的PHP文件时,我遇到了错误:致命错误:在以下行中未定义函数socket_create()

因此,我无法连接Web套接字,也无法从套接字获取响应消息,因为当运行客户端页面时,浏览器中显示套接字状态为3(已关闭)。

你有什么想法是缺少什么吗?

谢谢您提前。


1
您的配置中是否启用了套接字? - martynthewolf
你的php.ini文件中是否启用了该扩展?(可以通过查看phpinfo()来确认) - Wesley van Opdorp
是的,套接字支持已启用,并且浏览器也支持Web套接字。 - Sanjeev Kumar Jha
4
在官方的Docker镜像中,只需运行命令 docker-php-ext-install sockets 即可安装sockets扩展。 - Francesco Casula
7个回答

72

2
我只需要在我的php.ini文件中取消注释。我还不得不将它从另一个目录复制到PHP目录中,但它随着安装一起提供。 - Jane Panda
谢谢Bob。我正在使用WAMP服务器。首先,我在Apache的php.ini中进行了更改,但没有效果。然后,我也更改了PHP的php.ini。最终,WebSocket服务器启动了。 :) - balamurugan
我已经在php.ini中启用了socket扩展,但仍然出现相同的错误。你们有任何想法为什么会发生这种情况吗? - karmicdice

39

对于 Windows 上典型的 XAMPP 安装,您可能已经在 C:\xampp\php\ext 目录中拥有了 php_sockets.dll 文件。您只需要前往 C:\xampp\php 目录下的 php.ini 文件,将 ;extension=php_sockets.dll 修改为 extension=php_sockets.dll 即可。


1
我目录中唯一的php.ini是php.ini-production和php.ini-development,我在这些文件中找不到;extension=php_sockets.dll的任何内容,所以我只是在两个文件中写入了extension=php_sockets.dll并保存。然而,我仍然遇到未定义函数socket_create()的错误,有什么想法吗?我正在使用Windows。 - 2316354654
@2316354654 确保你的 php.ini 文件包含以下行 extension_dir="C:\xampp\php\ext" - Shashank Mishra
在我的情况下,缺少 ;extension=php_sockets.dll。我添加了它,现在它可以工作了。 - log0

11

如果您正在使用xampp 7.3.9版本,那么已经安装了socket。您可以检查xampp\php\ext文件夹,找到php_socket.dll文件。如果您找到了该文件,请打开xampp控制面板中的php.ini文件并将extension=sockets前面的分号(;)去掉。


5

在您的服务器环境中打开php.ini文件,从;extension=sockets中删除;。如果这样无法解决问题,您需要下载PHP的socket扩展并将其放到php安装路径下的ext目录中。重启HTTP服务器,一切应该正常工作。


1
如果您使用的是 openSuse 或 SUSE,请按照以下步骤操作。
如果尚未安装,请安装 php7。
zypper in php7

如果您已经安装了php7,请使用以下命令进行更新:
zypper update php7

安装php7-sockets
zypper in php7-sockets

0
有时候您的XAMPP(WAMP或其他版本)与CLI的版本不同。我建议首先使用php --ini来查找并使用正确的版本。
此外,为了解决这个问题,您可以打开XAMPP并使用shell。

-2

当我的.env文件设置不正确时,我遇到了这个错误。请确保您有一个具有有效数据库登录凭据的.env文件。


这似乎是针对特定情况的解决方案,而不是通用解决方案。.env文件并不一定是PHP应用程序的标准... - JoSSte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接