【问题标题】:Installing curl to PHP cli将 curl 安装到 PHP cli
【发布时间】:2013-11-19 19:31:28
【问题描述】:

我正在尝试设置一个需要 curl 的 cronjob,并且我正在使用

直接从 crontab 中调用它
* * * * * /usr/bin/php myurl/my_cron.php

问题是,我的 phpcli 似乎没有安装 curl 模块。

当我从浏览器点击 url 时它工作得很好,但是当我运行时

php -q myfile.php

从命令行返回

PHP Fatal error:  Call to undefined function curl_init() in my_cron.php on line 20

当我运行php -m 时,curl 模块没有出现。但是,当我转到浏览器并转储 php_info() 时,模块会显示并显示它已正确安装。

另一个问题是我一直在尝试将带有 apt-get 的 curl 安装到服务器上(Ubuntu 12.04 php 5.4),它似乎关闭了我的 PHP,因为它开始尝试在任何地方下载 index.php 文件我尝试浏览到。

以下是我为安装 curl 所做的尝试,这些尝试已经取消了 PHP:

sudo apt-get install php-curl
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

在每个这些之后,我重新启动了 apache2 服务器,但仍然没有骰子,它试图下载文件而不是打开页面。

如何将php5-curl 安装到 cli,以便我的服务器可以运行它而无需通过浏览器?

另一种可能性是我可以通过 crontab 文件中的 wget 运行 cronjobs,但我听说这不是最佳选择并且可能不可靠。

非常感谢任何帮助。谢谢!

【问题讨论】:

标签: php ubuntu curl cron command-line-interface


【解决方案1】:

首先找到你的 php cli 的版本:

php -v

例如,如果是第 7 版,则:

sudo apt-cache search php7

这将为您提供当前版本的正确模块名称:

php7.0-curl - CURL module for PHP     <---- the name of curl module. 
php7.0-dev - Files for PHP7.0 module development
php7.0-gd - GD module for PHP
php7.0-gmp - GMP module for PHP
php7.0-json - JSON module for PHP
php7.0-ldap - LDAP module for PHP
php7.0-mysql - MySQL module for PHP
.
.
so on

所以要添加 curl 支持,从上面的列表中复制 curl 模块的名称,然后执行以下操作:

sudo apt-get install php7.0-curl

【讨论】:

    【解决方案2】:

    我有同样的问题。但是,最后我通过运行以下命令解决了它。

    sudo apt-get install php7.0-curl
    

    安装后重启服务器。这个答案可能对两个月前问过的用户没有用。但是,这可能对将来阅读本文的用户有用。

    【讨论】:

    • 很奇怪,我在初始安装时已完成此操作,但可能需要单独完成?随便。
    • 更新,因为这仍然是一个热门问题:sudo apt install php7.0-curl
    【解决方案3】:

    我使用 ubuntu 14.04 和 php 5.3。升级到 php 5.6.29 后,我也遇到了 php curl 的问题。我更新到 php 5.6.29 后的目录结构:

    /etc/php5 - 旧版本 (5.3)

    /etc/php/5.6 - 新版本

    下一条命令

    sudo apt-get install php5-curl
    

    没有帮助(看起来它连接到旧的 php 版本 - 5.3)。

    我找到了下一篇:php 5.6 for magento

    建议使用命令

    apt-get -y install php5.6-curl

    而不是

    apt-get -y install php5-curl

    它对我有用!

    【讨论】:

    • 也为我工作!谢谢!
    【解决方案4】:

    如果有人到这里来找到运行 curl 的 windows 版本。

    打开php.ini 并删除 ;在extension=php_curl.dll 656 行之前。

    我很确定 Apache 加载的是 C:\wamp\bin\apache\Apache2.2.17\bin\php.ini,因此您可能会发现 curl 在浏览器中工作。

    但是当 php 从命令行运行时,它可能会显示未知函数curl_init();

    在命令行中运行php -r "echo php_ini_loaded_file();"查看正在加载的ini文件。

    通常它在C:\wamp\bin\php\php5.3.5\php.ini 中找到,它与 Apache 使用的文件不同。所以打开它,然后删除 ;在第 656 行附近的 extension=php_curl.dll 之前。

    希望它对某人有所帮助。

    【讨论】:

      【解决方案5】:

      当 curl 在通过 apache 运行的 php 文件中工作时,我在 ubuntu 14.04 上解决了这个问题,但从 cli 调用时却没有。

      ssh 到你的服务器和 cd 到 /

      find / -name 'curl.so'
      

      运行上面的 find 命令来定位 curl 二进制文件所在的位置。如果找不到该文件,可能需要安装 curl 并再次运行 find 命令。

      apt-get install php5-curl
      

      您现在需要编辑用于从 cli 运行的 php 文件的 php.ini(它与 apache 使用的不同),并且可能位于 /etc/php5/cli/php.ini

      nano /etc/php5/cli/php.ini
      

      你也可以跑

      php -i | grep 'php.ini'
      

      获取文件路径,只是为了确定。

      在您的 php.ini 文件中按 ctrl + w 搜索 [curl]

      您现在想要将扩展名添加到文件中,它应该如下所示,尽管您的 curl.so 文件的路径可能会有所不同:

      [curl]
      ; A default value for the CURLOPT_CAINFO option. This is required to be an
      ; absolute path.
      ;curl.cainfo =
      extension=/usr/lib/php5/20131226/curl.so
      

      完成上述操作后,我可以在从 cli 运行的 php 脚本中使用 curl。

      【讨论】:

      • +1 upvote 非常好的信息逐步回答,@mmoul。我将做出的贡献是 apt-get install php5-curlsudo apt-get install php5-curl 的替代方案,如果在 VM 中运行 Ubuntu,则确保将 curl 添加到 VM 的配置中,例如如果使用基于 puphpet.com 的配置通过 Vagrant 创建 VM,则通过 puphpet.com Web 配置器添加 curl 或编辑 config.yaml 以在从 puphpet 下载的结果 .zip 中列出 curl。在此编辑之后重新配置或重建 VM(评论第 1 部分,共 2 部分)
      • (评论第 2 部分,共 2 部分)另请参阅我的笔记,显示 curl 在此处的 config.yaml 中的位置:github.com/guzzle/guzzle/issues/1586#issuecomment-247286744。在我的情况下,我需要按照我在此处描述的那样将 curl 添加到 VM 的配置中,以获得 curl。所以再次感谢您的出色回答,希望我的贡献进一步增强它。
      【解决方案6】:

      如果您使用php5 的命令行界面 ('cli'),而不是

      php -q myfile.php
      

      请使用:

      php5 -q myfile.php
      

      php5-curl 似乎为 cli php5 而不是 php 启用了 curl 模块,并且两者都(可以)加载不同的配置和模块。

      【讨论】:

        【解决方案7】:

        您应该始终检查的第一件事是您的 php.ini 文件。您的 Web 根目录中应该有一个 php.ini 文件。大多数 Web 服务器上默认安装 Curl;我还没有找到一个尚未安装 curl 的带有 PHP 的 Web 服务器。不过,它并不总是启用。

        检查您的 php.ini 文件并搜索 php_curl.dll,它应该如下所示:

        ;extension=php_curl.dll

        只需从“扩展名”前删除分号 (;) 并保存文件。它应该立即工作。根据您的 phpinfo.php 它已经安装,所以它可能只需要启用。

        如果您有兴趣,可以在这里找到类似的问题:Call to undefined function curl_init()

        【讨论】:

        • 1) 第一句话属于评论。 2) 文档根目录中没有php.ini(上帝保佑!)
        • 所以我在我的 php.ini 文件中进行了搜索,没有一行 ;extension=php_curl.dll
        • 文件位于/etc/php5/cli/php.ini
        • geomagas,不知道你在做什么。文档根目录是您的公共网站文件的根目录。许多服务器在文档根目录中都有一个 php.ini 文件,或者生成一个并将其放在文档根目录中。
        • 还有一个更新,就是 cli 的 php.ini,浏览器运行的 ini 文件位于 /usr/local/zend/etc/php.ini,并且确实有 @ 987654324@ 线。我删除了分号,php -q 仍然返回相同的错误
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2013-11-30
        • 2014-03-15
        • 2011-04-14
        • 2020-12-11
        • 1970-01-01
        • 2015-02-20
        相关资源
        最近更新 更多