php-i“查找”;扩展目录;don';修改其值后不生效

php-i“查找”;扩展目录;don';修改其值后不生效,php,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=>

我想在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);
?>
网页输出中的phpinfo()显示已启用curl

cURL support  enabled
cURL Information  libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3 
这就是奇怪的事情 phpinfo()在网页输出中显示,实际上php.ini中启用的扩展可以在网页中运行。扩展名的确切目录在./ext下

extension_dir ./ext ./ext
但是php-i | find“extension_dir”总是显示这一点,并且不能在php.ini文件中修改

extension_dir => C:\php5 => C:\php5
多次重新启动apache,保留相同的错误。
所以我想知道为什么不能修改extension\u dir的值。

您是否尝试将
extension=php\u curl.dll
添加到php.ini中

FWIW,检查phpinfo for CLI的最佳方法可能是:

$ 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
基本上等同于
phpinfo()

另外,再次检查PHP CLI是否配置为使用相同的PHP.ini(或者如果它使用的是不同的文件,请确保您也编辑了该文件)。有时,PHP可以使用不同的PHP.ini来设置,具体取决于PHP的调用方式——我相信debian和Ubuntu是这样做的

确定正在使用的php.ini文件:

$ php -i | fgrep Configuration
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
$


我找到了问题的答案

只是因为web脚本中的php-i和phpinfo()使用了不同的php.ini文件

我认真研究了php-I和phpinfo()的不同输出

区别就在这里:

phpinfo()

服务器API Apache 2.0处理程序

配置文件(php.ini)路径 C:\Windows

加载的配置文件 D:\phpnow\php-5.2.10-Win32\php-apache2handler.ini

php-i

服务器API=>命令行界面

配置文件(php.ini)路径=>C:\Windows

已加载的配置文件=>(无)


关键问题是php-我什么都不加载,但需要一个php.ini。

尝试复制c:\windows目录中的php.ini文件。我使用的是PHP5.3.5。我在Windows中也遇到了同样的问题。当我在c:\windows中复制php.ini文件时,扩展名\u dir设置正确,我的图形程序开始工作。

使用PHP5.4.4。使用Windows7和Apache2.2。 运行phpinfo()表明分配给
extension\u dir
的值与php.ini中的设置不匹配

但是php.ini肯定会被阅读

我怀疑extension_dir需要在Windows中重新启动并设置路径。
php.ini中的其他设置只需要重新启动Apache。

FYI,命令行上的php与Apache模块运行完全独立的二进制文件,因此重新启动Apache是不相关的。我相信浏览器中
phpinfo()
的输出可能也与CLI PHP的功能无关。我已经删除了行中的分号“;”extension=PHP_curl.dll,我可以清楚地说curl extension确实在PHP.ini.dll中启用了,我如何知道使用了php-i命令的php.ini?在我的回答中添加了一个注释:确定正在使用的php.ini文件。
php-cd:\phpnow\php-5.2.10-Win32\php-apache2handler.ini get.php
可能会起作用。和/或您可以
cpd:\phpnow\php-5.2.10-Win32\php-apache2handler.ini C:\Windows\php.ini
。我不会真正考虑这些生产级解决方案中的任何一个,但是它至少应该让您开始。在Linux上,而不是复制,您可以在CLI目录上创建与PHPINI的主链接的Syrink。
$ 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