为什么curl在我的PHP脚本中发布到Twitter失败?

时间:2016-06-22 08:22:33

标签: php curl

我有一个使用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以查看是否有人已经解决了这个问题,我看到的所有答案(例如herehere)只说我需要安装卷曲和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

不幸的是,这并没有解决问题。

2 个答案:

答案 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的路径