当前位置:论坛首页 > Linux面板 > 求助

【已解答】关于php socket函数禁用问题

发表在 Linux面板2023-5-22 14:31 [复制链接] 6 3814

为了能快速了解并处理您的问题,请提供以下基础信息:
面板、插件版本:

最新
系统版本:

CentOS 7.0.1406 x86_64(Py3.7.4)
问题描述:

默认安装好PHP
socket功能是开的。phpinfo 也是可以使用的。
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);正常
socket_connect 报错
提示函数被禁用。
七天前的帖子https://www.bt.cn/bbs/thread-113356-1-1.html
也没有得到解决。但是也不存在被禁的函数。

测试过php 5.5,5.6皆是如此。
低版本的4.2可以使用。麻烦大家帮忙处理一下。
谢谢

相关截图(日志、错误):

使用道具 举报 只看该作者 回复
发表于 2023-5-22 15:14:09 | 显示全部楼层
您好,检查您自己的代码,测试使用PHP5.6写了一个demo模拟测试是可以正常使用的。
以下是服务器端测试代码:
  1. <?php
  2. /**
  3. * 服务端 server
  4. * User:
  5. * Date: 2019/5/29
  6. */

  7. header("Content-type: text/html; charset=utf-8"); //编码

  8. //获取tcp协议号码。
  9. $tcp = getprotobyname("tcp");

  10. // 建立server端socket ,创建并返回一个套接字,也称作一个通讯节点。一个典型的网络连接由 2 个套接字构成,一个运行在客户端,另一个运行在服务器端。
  11. $socket = socket_create(AF_INET, SOCK_STREAM, $tcp);

  12. //绑定要监听的ip和端口。
  13. //可以使用局域网ip 如果是本地的可以使用127.0.0.1
  14. socket_bind($socket, '127.0.0.1', 10001);

  15. //监听端口
  16. socket_listen($socket);

  17. //初始化一个数据,和客户端通信
  18. $buffer = "传输给客户端的数据";

  19. while (true) {
  20.     // 接受客户端请求过来的一个socket连接
  21.     $connection = socket_accept($socket);

  22.     if (!$connection) {
  23.         echo "connect faild";
  24.     } else {
  25.         echo "Socket connected\n";

  26.         // 向客户端传递一个信息数据
  27.         if ($buffer != "") {

  28.             echo "send data to client\n";
  29.             socket_write($connection, $buffer . "\n");
  30.             echo "Wrote to socket\n";

  31.         } else {
  32.             echo "no data in the buffer\n";
  33.         }
  34.         // 从客户端获取得的数据
  35.         while ($data = @socket_read($connection, 1024, PHP_NORMAL_READ)) {
  36.             printf("Buffer: " . $data . "\n");

  37.             //取得信息给客户端一个反馈, 发给客户端的回应信息。
  38.             socket_write($connection, "服务端已成功接收到消息\n");
  39.         }
  40.     }

  41.     //关闭 socket
  42.     socket_close($connection);
  43.     printf("Closed the socket\n");
  44.     echo "----------------------------------------------\n";
  45. }
复制代码
demo的客户端代码:
  1. <?php
  2. /**
  3. * 客户端代码
  4. * User:
  5. * Date: 2019/5/29
  6. */

  7. header("Content-type: text/html; charset=utf-8"); //编码

  8. // 建立客户端的socket连接
  9. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

  10. //连接服务器端socket
  11. $connection = socket_connect($socket, '127.0.0.1', 10001);

  12. //要发送到服务端的信息。
  13. $send_data = "你好,我是客户端!";

  14. //客户端去连接服务端并接受服务端返回的数据,如果返回的数据保护not connect就提示不能连接。
  15. while ($buffer = @socket_read($socket, 1024, PHP_NORMAL_READ)) {

  16.     if (preg_match("/not connect/", $buffer)) {
  17.         echo "don`t connect\n";
  18.         break;
  19.     } else {

  20.         //服务端传来的信息
  21.         echo "服务端数据: " . $buffer . "\n";
  22.         echo "Writing to Socket\n";

  23.         // 将客户的信息写到通道中,传给服务器端
  24.         if (!socket_write($socket, "$send_data\n")) {
  25.             echo "Write failed\n";
  26.         }

  27.         //服务器端收到信息后,客户端接收服务端传给客户端的回应信息。
  28.         while ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {
  29.             echo "发送的数据:$send_data\n接收的反馈:" . $buffer . "\n";
  30.         }

  31.     }
  32. }
  33. ?>
复制代码


7.png
8.png
使用道具 举报 回复 支持 反对
发表于 2023-5-22 16:04:18 | 显示全部楼层
1684742621074.jpg
Fatal error: sorry, prohibited function in /www2/w7/w756/program/tsgbm/yue_card_sorcket.php on line 15

错误,函数被禁用
使用道具 举报 回复 支持 反对
发表于 2023-5-22 16:07:24 | 显示全部楼层
1684742702839.jpg 1684742702845.jpg
1684742818264.jpg
关闭过防火墙,禁用函数也没有设置过,
使用道具 举报 回复 支持 反对
发表于 2023-5-22 16:27:01 | 显示全部楼层
服务器命令行执行php --ini看看命令的版本是否php5.6,如不是则到网站管理内调整php命令行版本
PHP没有做过这类函数的禁用设置
7.png
8.png
使用道具 举报 回复 支持 反对
发表于 2023-5-22 16:47:02 | 显示全部楼层
谢花郎 发表于 2023-5-22 15:14
您好,检查您自己的代码,测试使用PHP5.6写了一个demo模拟测试是可以正常使用的。
以下是服务器端测试代码 ...

不是代码问题。我用php4.2测试过。可以的
使用道具 举报 回复 支持 反对
发表于 2023-5-22 17:14:23 | 显示全部楼层
宝塔用户_alqdkr 发表于 2023-5-22 16:47
不是代码问题。我用php4.2测试过。可以的

我这边测试没什么问题,使用的PHP5.6进行测试的。其他设置都是未操作过的
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术免费分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表