使用未定义常量 CURLOPT_TCP_FASTOPEN
Use of undefined constant CURLOPT_TCP_FASTOPEN
如果我在代码中使用 CURLOPT_TCP_FASTOPEN
选项,则会出现以下错误。
Use of undefined constant CURLOPT_TCP_FASTOPEN - assumed
'CURLOPT_TCP_FASTOPEN'
CURLOPT_TCP_FASTOPEN 是 php 7.4.5 interface 中支持的选项。
php-v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies
curl -V
curl 7.70.0 (x86_64-redhat-linux-gnu) libcurl/7.70.0 NSS/3.44 zlib/1.2.7 libpsl/0.7.0 (+libicu/50.1.2) libssh2/1.9.0 nghttp2/1.31.1
Release-Date: 2020-04-29
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB PSL SPNEGO SSL UnixSockets
我做错了什么?
编辑 1:
以下是与 YouriKoeman 的概述相对应的附加信息
内核版本:3.10.0-1062.12.1.el7.x86_64
OS : unix (Centos 7.x)
curl --tcp-fastopen -L http://www.google.com
return 出现如下错误:
curl: (55) Send failure: Operation not supported for curl --tcp-fastopen -L http://www.google.com
I chose to answer in a more broad way to hopefully help more poeple when they encounter issues relating to this and google for answers
(注意:php 运行时间和加载的扩展在 CLI 和从网络服务器访问时可能不同).
此功能的系统要求是什么?
您要使用的功能 CURLOPT_TCP_FASTOPEN
有一些必须满足的系统要求
它们是:
- 你必须
Kernel version > 3.6 (linux)
- 您必须
PHP 7.0.7
或更高
- 您必须
Curl(program) AND php{your/version}-curl 7.49.0
或更高
- 您必须拥有
*nix
类型的操作系统(macos、linux、bsd)
如何调试不满足什么要求?
常量未定义这一事实是一个危险信号,表示未满足这些依赖项之一,但我如何确定是哪个?
内核版本
这个很简单,运行下面的命令:
uname -r
.
必须大于3.6
Curl 版本和构建选项
检查 curl 中功能是否可用的最佳方法是使用此选项从 cli 调用 curl,例如:
curl --tcp-fastopen -O http://google.com
如果此请求成功,则 curl 在您的系统上配置正确,因此问题出在 php
PHP 版本和扩展
对于网络服务器
使用 phpinfo()
检查 php version
是否大于 7.0.7
并且 php-curl
扩展已加载
对于 CLI
在命令行中输入 php -v
版本应大于 7.0.7
。
要检查扩展,请在您的命令行中键入以下内容 php -m | grep curl
此命令应该 return curl
,如果没有 returned,则不会加载 curl 扩展对于 php 客户端。
问题是在内核版本 3.13 之前默认情况下不启用 tcp 快速打开。
要在 Centos 7 上启用 TCP 快速打开:
1.Add tcp_fastopen 在 sysctl.d
echo "net.ipv4.tcp_fastopen=3" > /etc/sysctl.d/30-tcp_fastopen.conf
2.Restart sysctl
systemctl restart systemd-sysctl
3.Verify tcp_fastopen
的 sysctl 设置
cat /proc/sys/net/ipv4/tcp_fastopen
应该输出 3
如果我在代码中使用 CURLOPT_TCP_FASTOPEN
选项,则会出现以下错误。
Use of undefined constant CURLOPT_TCP_FASTOPEN - assumed 'CURLOPT_TCP_FASTOPEN'
CURLOPT_TCP_FASTOPEN 是 php 7.4.5 interface 中支持的选项。
php-v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies
curl -V
curl 7.70.0 (x86_64-redhat-linux-gnu) libcurl/7.70.0 NSS/3.44 zlib/1.2.7 libpsl/0.7.0 (+libicu/50.1.2) libssh2/1.9.0 nghttp2/1.31.1
Release-Date: 2020-04-29
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB PSL SPNEGO SSL UnixSockets
我做错了什么?
编辑 1:
以下是与 YouriKoeman 的概述相对应的附加信息
内核版本:3.10.0-1062.12.1.el7.x86_64
OS : unix (Centos 7.x)
curl --tcp-fastopen -L http://www.google.com
return 出现如下错误:
curl: (55) Send failure: Operation not supported for curl --tcp-fastopen -L http://www.google.com
I chose to answer in a more broad way to hopefully help more poeple when they encounter issues relating to this and google for answers
(注意:php 运行时间和加载的扩展在 CLI 和从网络服务器访问时可能不同).
此功能的系统要求是什么?
您要使用的功能 CURLOPT_TCP_FASTOPEN
有一些必须满足的系统要求
它们是:
- 你必须
Kernel version > 3.6 (linux)
- 您必须
PHP 7.0.7
或更高 - 您必须
Curl(program) AND php{your/version}-curl 7.49.0
或更高 - 您必须拥有
*nix
类型的操作系统(macos、linux、bsd)
如何调试不满足什么要求?
常量未定义这一事实是一个危险信号,表示未满足这些依赖项之一,但我如何确定是哪个?
内核版本
这个很简单,运行下面的命令:
uname -r
.
必须大于3.6
Curl 版本和构建选项
检查 curl 中功能是否可用的最佳方法是使用此选项从 cli 调用 curl,例如:
curl --tcp-fastopen -O http://google.com
如果此请求成功,则 curl 在您的系统上配置正确,因此问题出在 php
PHP 版本和扩展
对于网络服务器
使用 phpinfo()
检查 php version
是否大于 7.0.7
并且 php-curl
扩展已加载
对于 CLI
在命令行中输入 php -v
版本应大于 7.0.7
。
要检查扩展,请在您的命令行中键入以下内容 php -m | grep curl
此命令应该 return curl
,如果没有 returned,则不会加载 curl 扩展对于 php 客户端。
问题是在内核版本 3.13 之前默认情况下不启用 tcp 快速打开。
要在 Centos 7 上启用 TCP 快速打开:
1.Add tcp_fastopen 在 sysctl.d
echo "net.ipv4.tcp_fastopen=3" > /etc/sysctl.d/30-tcp_fastopen.conf
2.Restart sysctl
systemctl restart systemd-sysctl
3.Verify tcp_fastopen
的 sysctl 设置cat /proc/sys/net/ipv4/tcp_fastopen
应该输出 3