环境:php7.3 mysql5.6 nginx1.22
伪静态--thinkphp
搭建来客在线客服,在开启推送服务的时候报错
Workerman[start.php] start in DAEMON mode
stream_socket_server() has been disabled for security reasons in file /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php on line 2178
PHP
Fatal error: Uncaught Exception in /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php:2180
Stack trace:
#0 /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php(619): Workerman\Worker->listen()
#1 /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php(503): Workerman\Worker::initWorkers()
#2 /www/wwwroot/114.55.126.31/ymwl_pusher/start.php(45): Workerman\Worker::runAll()
#3 {main}
thrown in /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php on line 2180
Fatal error: Uncaught Exception in /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php:2180
Stack trace:
#0 /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php(619): Workerman\Worker->listen()
#1 /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php(503): Workerman\Worker::initWorkers()
#2 /www/wwwroot/114.55.126.31/ymwl_pusher/start.php(45): Workerman\Worker::runAll()
#3 {main}
thrown in /www/wwwroot/114.55.126.31/ymwl_pusher/vendor/workerman/workerman/Worker.php on line 2180
宝塔面板中的PHP禁用函数中找不到stream_socket_server() ,并且已经全部解除禁用函数
; disable_functions = passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority
重新开启推送,仍然报告同样的错误
一般来说解决方法有下面几种
(注:修改后记得重启php服务, nginx服务)
1、修改php.ini配置文件
2、权限问题
如有问题及时沟通。
🟢 你换换其他函数试试呢,比如socket_create()或者fsockopen()函数
参考GPT回答:
根据报错信息,问题出在使用了被禁用的函数 stream_socket_server()
上。你提到已经将 PHP 的禁用函数中删除了该函数,但仍然报错。
可能是因为你修改了 php.ini
文件后没有重启 PHP-FPM 或 Nginx 服务。请确保你在修改完 php.ini
后执行重启操作,使配置生效。
另外,请确保修改的 php.ini
文件是用于当前 PHP 版本的配置文件,并且确认修改正确的文件路径。你可以通过 phpinfo()
函数查看当前 PHP 配置文件的路径。
如果依然遇到问题,请检查其他可能的原因:
/etc/php/php.ini
或 /etc/php-fpm.d/www.conf
)中都将 disable_functions
设置为空,或者注释掉该行。参考gpt:
结合自己分析给你如下建议:
1.错误信息中显示,stream_socket_server()函数被禁用了,这个函数是Workerman框架用来创建socket服务器的核心函数,如果被禁用了,就无法启动推送服务。
2.你说你已经在宝塔面板中解除了PHP禁用函数,但是仍然报错。这可能是因为你没有重启nginx服务器,导致PHP配置没有生效。
3.另外,你也可以检查一下你的nginx配置文件中是否有禁用stream_socket_server()函数的设置,如果有的话,也需要删除或注释掉。
4.如果以上方法都不能解决你的问题,你可以尝试使用其他的PHP版本或者其他的socket框架,比如Swoole或者Ratchet,看看是否能够正常启动推送服务。
这篇csdn文章中的报错和你的基本一样,里面有详细的解决办法,你看一下:
具体的解决办法是:
找到php.ini文件,查找disable_functions 这个一项中是否禁用了stream_socket_server()这个函数
find / -name php.ini # 查找php.ini所在位置
vim /usr/local/php/etc/php.ini # 打开编辑php.ini
按esc键,输入:/stream_socket_server,按n开始查找
检查函数是不是在 disable_functions 这个一项里面,这一项是禁用方法的意思
如果有这个函数,则删除掉,按esc键,输入wq保存退出
重启php-fpm
service php-fpm restart
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
这可能是由于以下原因导致的:
PHP配置文件错误:请确保您编辑的是正确的PHP配置文件(php.ini)。您可以通过在PHP代码中使用phpinfo()
函数来查看当前正在使用的配置文件路径。
PHP版本问题:stream_socket_server()
函数是在PHP 5.4.0及以上版本中引入的。请确保您的PHP版本高于或等于5.4.0。
编译选项问题:在某些情况下,PHP可能没有编译安装所需的选项。您可以尝试重新编译PHP并确保启用了--enable-sockets
选项。
其他限制:某些主机提供商可能会限制特定函数的使用。您可以联系您的主机提供商以获取更多信息。
请注意,修改PHP配置文件后,您需要重新启动Web服务器(如Nginx)以使更改生效。
另外,您提到您正在使用ThinkPHP框架和伪静态。请确保您的Nginx配置正确,并且伪静态规则已正确设置。
检查你的php.ini文件中是否有多个disable_functions设置给覆盖掉了,或者你多了逗号分号啥的,还不行的话,重装下吧
尝试以root用户运行
记得给文件夹 /www/wwwroot/114.55.126.31/ 最大的 777的开放权限
stream_socket_server() 是 PHP 提供的一个用于创建服务器端 Socket 的函数。它的作用就是在本地端创建一个 Socket 并绑定在指定的 IP 地址和端口上,同时监听客户端的连接请求。当客户端请求连接时,服务器端就会接受连接,并返回一个新的 Socket 用于与客户端通信。
在实际开发中,使用 stream_socket_server() 函数可以方便地创建各种类型的服务器,如 Web 服务器、聊天服务器、文件服务器等等。这个函数的使用方法非常简单,只需要传入一个包含 IP 地址和端口号的参数,就可以创建一个服务器端的 Socket。
然而,在某些情况下,stream_socket_server() 函数可能会被禁用或不可用。这种情况通常是由于 PHP 的安全设置或服务器的限制导致的。在 PHP 中,可以通过禁用函数来增强安全性,以避免应用程序被滥用或攻击。在禁用函数的列表中,可能会出现 stream_socket_server() 函数,从而导致该函数无法使用。
如果遇到 stream_socket_server() 函数被禁用的情况,可以考虑使用以下替代方案:
使用 socket_create() 函数创建 Socket,并使用 socket_bind() 和 socket_listen() 函数分别绑定 IP 地址和端口号,并监听客户端连接请求。这种方式虽然比较繁琐,但可以避免被禁用函数的限制。
使用第三方库,如 ReactPHP、Swoole 等,这些库提供了更为高级的 Socket 服务器实现,可以大幅度简化服务器端的开发,同时也可以避免被禁用函数的限制。
值得注意的是,如果遇到 stream_socket_server() 函数被禁用的情况,可以先尝试联系服务器管理员或者修改 PHP 配置文件中的相关设置,以允许使用该函数。另外,在使用 Socket 服务器时,也要注意安全性,并对输入和输出数据进行严格的过滤和验证,以防止恶意攻击和非法操作。
根据您提供的信息,可能是 PHP 没有加载 stream_socket_server() 函数或者被禁用了。您可以通过以下步骤来解决这个问题:
确认 PHP 是否加载了 stream 模块。可以在 PHP.ini 中搜索“stream”,检查是否注释掉了相关配置项。
确认 PHP 是否允许了 socket 连接。可以在 PHP.ini 中搜索“socket”,检查是否注释掉了相关配置项。
确认是否有安全软件或者防火墙禁止了这个函数的调用。可以关闭相关软件或者防火墙,然后再试一下。
如果以上步骤都没有解决问题,可以尝试使用其他函数替代 stream_socket_server(),比如 socket_create()。
另外,您提到的是使用 Workerman 搭建在线客服服务,如果您使用的是官方推荐的 Workerman 版本,应该不会出现 stream_socket_server() 被禁用的问题。您可以检查一下 Workerman 的版本和相关配置,或者在 Workerman 官网的社区中寻求帮助。
php streamsocketserver,workerman启动报错stream_socket_server() has been disabled for security reasons...的原因以及解决方法
找到php.ini
检索disable_functions 一项 ,把后面的stream_socket_server() 删除掉
重启php fpm
service php-fpm restart
再来一次 php http_test.php start 成功了
找到php.ini。检索disable_functions 一项 ,把后面的stream_socket_server() 删除掉
重启php fpm
service php-fpm restart
再来一次 php http_test.php start
PHP 的 socket 扩展没有启用或配置吧
在 php.ini 配置文件中看下 extension=sockets 这一行有没有被注释掉,这是启用 PHP Socket 扩展的配置
另外再看下版本支不支持stream_socket_server()
在php.ini里面修改设置
版本不一样,换个版本试试