我正在编写一个类,用于检测cURL是否可用,如果是,则执行一项操作,如果不是,则执行另一项操作。因此,我需要知道如何暂时禁用cURL来测试这个类。我不想更改PHP INI文件。任何想法都非常赞赏。
只是想知道,我正在写一个替代方案,如果cURL是不可用的,这有多大可能?我在浪费时间吗? cURL通常可用吗?
答案 0 :(得分:4)
在php.ini
中启用/禁用卷曲。您无法以其他方式启用和禁用它。
打开php.ini
找到下面的内容并在它前面放一个半冒号来评论它:
extension=php_curl.dll
答案 1 :(得分:3)
AFAIK在运行时无法执行此操作,因为在执行任何代码之前,在PHP启动期间会加载模块。唯一的方法是在php.ini中禁用(或者更确切地说,不启用)扩展。您可能甚至无法使用cURL执行此操作,因为它可能会被编译,而不是动态加载。
话虽如此 - 为什么不改变支票来测试你的“if not available”代码 - 大概你有一个像这样的块:
if (curl_exists()) { //obviously there is no such function, but you must have some condition that determines this
// Do stuff using curl
} else {
// Do something horrible
}
好吧,暂时将其改为:
if (!curl_exists()) {
// etc etc
答案 2 :(得分:0)
我认为最好的选择是更改检测脚本以允许通过手动配置禁用它。
您无法动态禁用功能。你需要更改php.ini。
答案 3 :(得分:0)
http://www.php.net/manual/en/function.dl.php
dl - 在运行时加载PHP扩展
bool dl(string $ library)
加载参数库给出的PHP扩展名。
使用extension_loaded()来测试给定的扩展是否已经可用。这适用于内置扩展和动态加载(通过php.ini或dl())。
警告强>: 此函数已从PHP 5.3中的某些SAPI中删除。
<?php
// Example loading an extension based on OS
if (!extension_loaded('sqlite')) {
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
dl('php_sqlite.dll');
} else {
dl('sqlite.so');
}
}
//this deals with sqlite but would be easy to figure out how to use it for cURL :)
?>
所以你可以在php.ini中注释掉cURL扩展的加载,然后在需要时“动态加载”它。
HTH
答案 4 :(得分:0)
可能最简单的方法是打开文件curl.ini,我使用ubuntu 12.04和文件位于
/etc/php5/apache2/conf.d/curl.ini
在extension=curl.so
之前添加分号发表评论
您可以通过phpinfo();
别忘了重启Apache
sudo service apache2 restart
答案 5 :(得分:-1)
只要加载了它的扩展名(主要是默认情况下),就可以使用Curl。
您可以通过以下命令检查curl
扩展名提供的内容:
php --re curl
给出了函数,类及其方法的列表。
要临时禁用curl扩展,您可以使用-n
运行PHP,只是忽略您的php.ini
,例如:
$ php -n -r "print_r(curl_version());"
Fatal error: Call to undefined function curl_version() in Command line code on line 1
以下是工作示例:
$ php -r "print_r(curl_version());"
Array
(
[version_number] => 463623
...