php -i |查找“extension_dir”在修改其值后不会生效

时间:2010-04-09 14:26:28

标签: php

我想在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的值。

4 个答案:

答案 0 :(得分:3)

嘿伙计们,我找到了问题的答案。 只是因为php -i和phpinfo()在web脚本中使用了不同的php.ini文件。

我认真看一下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。