PHP socket_send() 标志是一个未定义的常量 MSG_OOB、MSG_EOR、MSG_EOF、MSG_DONTROUTE

问题描述

当我使用官方 docker 镜像 php:7.3-cli-buster 时,我收到如下警告:

警告:未捕获的错误PHP shell 中未定义的常量“MSG_OOB” 代码:1 堆栈跟踪: #0 {main} 在第 1 行的 PHP shell 代码中抛出

对于每个常量:

<?PHP

echo "MSG_OOB: " . \MSG_OOB;
echo "MSG_EOR: " . \MSG_EOR;
echo "MSG_EOF: " . \MSG_EOF;
echo "MSG_DONTROUTE: " . \MSG_DONTROUTE;

socket_send 的文档中 flags

部分下列出的

但是当我使用安装在 Windows 上的 PHP 7.0.10 (cli) 时(不是作为 docker 镜像) 定义了这两个

MSG_OOB: 1
MSG_DONTROUTE: 4

另外两个生成相同的警告。

我在网上看到很多例子都使用 int = 0 作为

的强制标志

socket_send ( 套接字 $socket,字符串 $data,int $length,int $flags ) : int|false

但还没有看到任何带有标志及其解释的示例。

我想问一下

  1. 我做错了什么吗?所有这些标志都应该在 PHP 的 cli 版本下可用吗?
  2. 如果任何标志不可用,例如由于系统缺乏对某个选项的支持,它是否仍应在 PHP 中预先定义?除非文档中另有明确说明,否则我希望在启动脚本时定义所有常量,尽管它们的目的是定义。
  3. 这是 PHP错误还是文档不是最新的?
  4. 如果您使用 int = 0 代替标志参数,那么它代表什么标志? (当然不是 MSG_OOB,MSG_DONTROUTE)
  5. 实际上标志参数是否会影响函数调用,在我看来它现在可能只是一个存根?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)