我想在php脚本中使用curl并在命令行模式下运行它。
这是脚本
<?php
//enable_dl("php_curl.dll");
$ch = curl_init();
$options=array(
CURLOPT_URL=>"http://test.com/wp-content/themes/bluefocus/images/desc_img.jpg",
CURLOPT_BINARYTRANSFER=>true,
CURLOPT_VERBOSE=>true
);
curl_setopt_array($ch,$options);
$data = curl_exec($ch);
$fp=fopen("test.jpg","w");
fwrite($fp,$data);
curl_close($ch);
?>
我使用命令 php get.php
在cmd中运行它错误消息:
D:\project>php get.php
Fatal error: Call to undefined function curl_init() in D:\project\gals_curl_batch_download\get.php on line 3
网页输出中的phpinfo()显示curl已启用
cURL support enabled
cURL Information libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3
这是奇怪的事情 phpinfo()int网页输出显示,实际上php.ini中启用的扩展可以在网页中运行。扩展名的确切目录位于./ext
下extension_dir ./ext ./ext
但是php -i | find“extension_dir”始终显示此内容,无法在php.ini文件中修改
extension_dir => C:\php5 => C:\php5
多次重启apache,保持相同的错误。 所以我想知道为什么不能修改extension_dir的值。
答案 0 :(得分:3)
我认真看一下php -i和phpinfo()的不同输出。
差异在于:
phpinfo():
服务器API Apache 2.0处理程序
配置文件(php.ini)路径 C:\视窗
加载的配置文件 d:\ phpnow \ PHP-5.2.10-的Win32 \ PHP-apache2handler.ini
php -i
服务器API =&gt;命令行界面
配置文件(php.ini)Path =&gt; C:\ Windows
已加载的配置文件=&gt; (无)
关键问题是php -i只能加载php.ini。
答案 1 :(得分:3)
尝试在c:\ windows目录中复制php.ini文件。我使用的是PHP 5.3.5。我在Windows中遇到了同样的问题。当我在c:\ windows中复制php.ini文件时,extension_dir已正确设置,我的图形程序开始工作。
答案 2 :(得分:0)
您是否尝试将extension=php_curl.dll
添加到php.ini?
FWIW,检查CLI的phpinfo的最佳方法可能是:
$ php -i | fgrep -i curl
Configure Command => '/SourceCache/apache_mod_php/apache_mod_php-44.4/php/configure' '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-dependency-tracking' '--with-apxs2=/usr/sbin/apxs' '--with-ldap=/usr' '--with-kerberos=/usr' '--enable-cli' '--with-zlib-dir=/usr' '--enable-trans-sid' '--with-xml' '--enable-exif' '--enable-ftp' '--enable-mbstring' '--enable-mbregex' '--enable-dbx' '--enable-sockets' '--with-iodbc=/usr' '--with-curl=/usr' '--with-config-file-path=/etc' '--sysconfdir=/private/etc' '--with-mysql-sock=/var/mysql' '--with-mysqli=/usr/bin/mysql_config' '--with-mysql=/usr' '--with-openssl' '--with-xmlrpc' '--with-xsl=/usr' '--without-pear'
curl
cURL support => enabled
cURL Information => libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
$
php -i
基本上是CLI等效于phpinfo()
另外,请仔细检查PHP CLI是否配置为使用相同的php.ini(或者如果它使用不同的文件,请确保您也编辑过该文件)。有时PHP可以使用不同的php.inis进行设置,具体取决于PHP的调用方式 - 我相信debian和Ubuntu会这样做,特别是。
确定正在使用的php.ini文件:
$ php -i | fgrep Configuration
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
$
或
$ php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File: /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed: /etc/php.d/apc.ini,
/etc/php.d/dbase.ini,
/etc/php.d/dom.ini,
/etc/php.d/gd.ini,
/etc/php.d/imagick.ini,
/etc/php.d/json.ini,
/etc/php.d/mbstring.ini,
/etc/php.d/memcache.ini,
/etc/php.d/mysql.ini,
/etc/php.d/mysqli.ini,
/etc/php.d/pdo.ini,
/etc/php.d/pdo_mysql.ini,
/etc/php.d/pdo_pgsql.ini,
/etc/php.d/pdo_sqlite.ini,
/etc/php.d/pgsql.ini,
/etc/php.d/tidy.ini,
/etc/php.d/xdebug.ini,
/etc/php.d/xmlreader.ini,
/etc/php.d/xmlwriter.ini,
/etc/php.d/xsl.ini,
/etc/php.d/zip.ini
答案 3 :(得分:0)
使用php 5.4.4。使用Windows 7和Apache 2.2。
运行phpinfo()显示分配给extension_dir
的值与php.ini中的设置不匹配
但是php.ini 当然正在阅读。
我怀疑是extension_dir需要在Windows和PATH设置中重新启动。 php.ini中的其他设置只需要重启Apache。