PHP - 来自本地主机的 cURL 文件不工作
PHP - cURL file from localhost not working
我从我的 PHP 服务器复制了一个工作脚本,但出于开发目的,我希望它在我的本地 XAMPP 服务器上工作。
卷曲:
$realpath_curl_file = realpath($curl_file);
$post = array(
'recipient_number' => $recipient_number,
'user_id' => $user_id,
'up_file'=> "@$realpath_curl_file"
);
//prepare data for cUrl
$target_url = "http://api.blankthis.com/curl/outgoing";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec ( $ch );
$err = curl_errno ( $ch );
$errmsg = curl_error ( $ch );
$header = curl_getinfo ( $ch );
$httpCode = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
print_r($result);
echo '------------------------';
print_r($ch);
print_r($err);
print_r($errmsg);
print_r($header);
print_r($httpCode);
当我执行 print_r($_POST) 和 print_r($_FILES) 时,没有文件被传输。这是我的结果:
POST:Array ( [recipient_number] => 2394434455 [user_id] => 2 [up_file] => @C:\Users\Sharktek\AppData\Local\Temp22046077466.zip )
FILES:Array ( )
------------------------
Resource id
#570
Array ( [url] => http://api.redfax.com/curl/outgoing [content_type] => text/html; charset=UTF-8 [http_code] => 200 [header_size] => 202 [request_size] => 196 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.499 [namelookup_time] => 0.125 [connect_time] => 0.218 [pretransfer_time] => 0.218 [size_upload] => 409 [size_download] => 168 [speed_download] => 336 [speed_upload] => 819 [download_content_length] => 168 [upload_content_length] => 409 [starttransfer_time] => 0.359 [redirect_time] => 0 [redirect_url] => [primary_ip] => 107.191.119.155 [certinfo] => Array ( ) [primary_port] => 80 [local_ip] => 192.168.0.101 [
有谁知道为什么我的文件没有通过 cURL 上传?正如我所说,这在我的服务器(非本地主机)上运行良好
- XAMPP PHP 安装已启用 cURL
- 我禁用了防火墙
如果您正在使用 XAMPP,您检查过 php.ini
在XAMPP 安装目录中打开%XAMPP_HOME%/php/php.ini
文件然后取消注释以下行extension=php_curl.dll
来自
;extension=php_curl.dll
至此
extension=php_curl.dll
如果该 dll 不存在,请检查 %XAMPP_HOME%/php/ext/php_curl.dll
是否存在,如果不存在,您可以在线获取它并将其放在那里。
完成所有操作后重启 apache
这应该是 windows 与 php 和 cURL
的唯一阻碍
检查你 php.ini,你的 apache conf 文件,重新启动,然后重复再重复再重复...
或者如果您遇到与我相同的问题,并且知道 curl 已加载,但只是不执行外部请求,请尝试将此选项添加到您的 curl
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
This option determines whether curl verifies the authenticity of the
peer's certificate
问题可能是由于证书过期所致。
特别是如果您在 Windows 上开发并使用 XAMPP 或一些类似的服务,默认情况下不会加载证书。在 Linux 上不太可能需要。
对于生产使用,您应该解决根本问题,而不是让此漏洞影响您的服务器通信。
我从我的 PHP 服务器复制了一个工作脚本,但出于开发目的,我希望它在我的本地 XAMPP 服务器上工作。
卷曲:
$realpath_curl_file = realpath($curl_file);
$post = array(
'recipient_number' => $recipient_number,
'user_id' => $user_id,
'up_file'=> "@$realpath_curl_file"
);
//prepare data for cUrl
$target_url = "http://api.blankthis.com/curl/outgoing";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec ( $ch );
$err = curl_errno ( $ch );
$errmsg = curl_error ( $ch );
$header = curl_getinfo ( $ch );
$httpCode = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
print_r($result);
echo '------------------------';
print_r($ch);
print_r($err);
print_r($errmsg);
print_r($header);
print_r($httpCode);
当我执行 print_r($_POST) 和 print_r($_FILES) 时,没有文件被传输。这是我的结果:
POST:Array ( [recipient_number] => 2394434455 [user_id] => 2 [up_file] => @C:\Users\Sharktek\AppData\Local\Temp22046077466.zip )
FILES:Array ( )
------------------------
Resource id
#570
Array ( [url] => http://api.redfax.com/curl/outgoing [content_type] => text/html; charset=UTF-8 [http_code] => 200 [header_size] => 202 [request_size] => 196 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.499 [namelookup_time] => 0.125 [connect_time] => 0.218 [pretransfer_time] => 0.218 [size_upload] => 409 [size_download] => 168 [speed_download] => 336 [speed_upload] => 819 [download_content_length] => 168 [upload_content_length] => 409 [starttransfer_time] => 0.359 [redirect_time] => 0 [redirect_url] => [primary_ip] => 107.191.119.155 [certinfo] => Array ( ) [primary_port] => 80 [local_ip] => 192.168.0.101 [
有谁知道为什么我的文件没有通过 cURL 上传?正如我所说,这在我的服务器(非本地主机)上运行良好
- XAMPP PHP 安装已启用 cURL
- 我禁用了防火墙
如果您正在使用 XAMPP,您检查过 php.ini
在XAMPP 安装目录中打开%XAMPP_HOME%/php/php.ini
文件然后取消注释以下行extension=php_curl.dll
来自
;extension=php_curl.dll
至此
extension=php_curl.dll
如果该 dll 不存在,请检查 %XAMPP_HOME%/php/ext/php_curl.dll
是否存在,如果不存在,您可以在线获取它并将其放在那里。
完成所有操作后重启 apache
这应该是 windows 与 php 和 cURL
的唯一阻碍检查你 php.ini,你的 apache conf 文件,重新启动,然后重复再重复再重复...
或者如果您遇到与我相同的问题,并且知道 curl 已加载,但只是不执行外部请求,请尝试将此选项添加到您的 curl
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
This option determines whether curl verifies the authenticity of the peer's certificate
问题可能是由于证书过期所致。 特别是如果您在 Windows 上开发并使用 XAMPP 或一些类似的服务,默认情况下不会加载证书。在 Linux 上不太可能需要。
对于生产使用,您应该解决根本问题,而不是让此漏洞影响您的服务器通信。