我有一个使用Oauth发布到Twitter的PHP脚本。每当我使用它时,我都会收到以下错误:
PHP Notice: Use of undefined constant CURLOPT_CAINFO - assumed 'CURLOPT_CAINFO' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 353
PHP Notice: Use of undefined constant CURLOPT_CONNECTTIMEOUT - assumed 'CURLOPT_CONNECTTIMEOUT' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 354
PHP Notice: Use of undefined constant CURLOPT_HEADER - assumed 'CURLOPT_HEADER' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 355
PHP Notice: Use of undefined constant CURLOPT_HTTPHEADER - assumed 'CURLOPT_HTTPHEADER' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 356
PHP Notice: Use of undefined constant CURLOPT_RETURNTRANSFER - assumed 'CURLOPT_RETURNTRANSFER' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 357
PHP Notice: Use of undefined constant CURLOPT_SSL_VERIFYHOST - assumed 'CURLOPT_SSL_VERIFYHOST' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 358
PHP Notice: Use of undefined constant CURLOPT_SSL_VERIFYPEER - assumed 'CURLOPT_SSL_VERIFYPEER' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 359
PHP Notice: Use of undefined constant CURLOPT_TIMEOUT - assumed 'CURLOPT_TIMEOUT' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 360
PHP Notice: Use of undefined constant CURLOPT_URL - assumed 'CURLOPT_URL' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 361
PHP Notice: Use of undefined constant CURLOPT_USERAGENT - assumed 'CURLOPT_USERAGENT' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 362
PHP Notice: Use of undefined constant CURLOPT_ENCODING - assumed 'CURLOPT_ENCODING' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 366
PHP Notice: Use of undefined constant CURLOPT_POST - assumed 'CURLOPT_POST' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 381
PHP Notice: Use of undefined constant CURLOPT_POSTFIELDS - assumed 'CURLOPT_POSTFIELDS' in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 382
PHP Fatal error: Call to undefined function Abraham\TwitterOAuth\curl_init() in /var/www/example.com/myWebApp/vendor/abraham/twitteroauth/src/TwitterOAuth.php on line 397
我在这里搜索Stack Overflow以查看是否有人已经解决了这个问题,我看到的所有答案(例如here和here)只说我需要安装卷曲和php5卷曲。但是,我已经安装了curl和php5-curl:
# apt-get install php5-curl
Reading package lists... Done
Building dependency tree
Reading state information... Done
php5-curl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# apt-get install curl
Reading package lists... Done
Building dependency tree
Reading state information... Done
curl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# php -v
PHP 5.5.36-4+deb.sury.org~precise+1 (cli)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
另一个答案(here)说我需要确保在我的ini
文件中启用curl,方法是确保引用curl的行没有被注释掉。好像我确实启用了curl而没有注释掉:
# grep -n 'extension=curl.so' /etc/php5/conf.d/curl.ini
2:extension=curl.so
据我所知,我拥有所需的一切,为什么curl会失败呢?
更新: 我想知道这是否有影响 - 我的服务器默认运行PHP 5.3,但我需要PHP 5.5。我使用命令apt-add-repository ppa:ondrej/php
然后升级到PHP 5.5。是否有可能在我升级PHP时丢失了一些卷曲配置?
更新2: 我尝试将此代码放在我的服务器上:
echo 'Curl: ', function_exists('curl_init') ? 'Enabled' : 'Disabled';
...当我运行它时,我得到了这个输出:
卷曲:已启用
似乎可以激活Curl并在我的服务器上运行,问题更具体的是Twitter Oauth代码。大多数Twitter代码来自在线来源 - 它不是我的 - 所以我不知道我能做些什么来解决它。
更新3: 我有一个本地测试服务器,PHP脚本运行正常。因此,目前的情况是PHP代码在一台服务器上运行而在另一台服务器上运行,但两台服务器报告都安装了Curl。那么一个服务器如何能够安装curl而不运行这个脚本,但是另一个服务器不能?
更新4: 根据信息I saw on other sites,我尝试按如下方式安装更多相关库:
apt-get install curl libcurl3 libcurl3-dev php5-curl php-curl
不幸的是,这并没有解决问题。
答案 0 :(得分:4)
似乎没有加载扩展程序。
您需要做什么:
php --info | grep -i curl
检查CLI是否知道扩展名。 php -m
还会向您显示php-cli知道的模块。
php --info
<?php phpinfo(); ?>
检查网络应用是否知道该信息并搜索“CURL”
service apache2 restart
或/etc/init.d/apache2 restart
。真的取决于您的发行版/ Web服务器。答案 1 :(得分:1)
仍然没有加载卷曲。
php -m
并查看是否弹出curl
。以下代码:
if (!extension_loaded('curl')) {
die('Curl not loaded');
}
如果确实如此,请检查phpinfo
中php.ini的路径