Php 如何在yii2中使用cUrl方法发布文件

Php 如何在yii2中使用cUrl方法发布文件,php,curl,yii2,Php,Curl,Yii2,我将附加一个来自控制器的文件并完成它 $filePath = Yii::getAlias("@backend/web/uploads/".$filename); 添加此文件后,它将发布到操作url。我试着用 $request = curl_init($url_path); curl_setopt($request, CURLOPT_POST, true); curl_setopt( $request, CURLOPT_POSTFIELD

我将附加一个来自控制器的文件并完成它

 $filePath = Yii::getAlias("@backend/web/uploads/".$filename);
添加此文件后,它将发布到操作url。我试着用

    $request = curl_init($url_path);
    curl_setopt($request, CURLOPT_POST, true);
    curl_setopt(
        $request,
        CURLOPT_POSTFIELDS,
        array(
            'filedata' => $file_path
        ));


    curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 

但它不起作用。我需要Yi2的解决方案

您应该使用'file'=>'@curl\u setopt($curl\u handle,CURLOPT\u SAFE\u UPLOAD,false)

在PHP 5.6+上运行并测试的示例

服务器端(index.html):


选择要上载的文件:
服务器端(upload.php):


客户端(curl test.php),您需要:

<?php

$args['myf'] = '@/Users/Oleg/Temp/curl-test-php/example.txt';

$request = curl_init('http://domain.ru/upload/upload.php');
curl_setopt($request, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $args);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
curl_close($request);

?>


关于CURLOPT_SAFE_UPLOAD和正确使用非弃用方法的方法如果您需要安全解决方案

您应该使用'file'=>@'curl_setopt($curl_handle,CURLOPT_SAFE_UPLOAD,false)

在PHP 5.6+上运行并测试的示例

服务器端(index.html):


选择要上载的文件:
服务器端(upload.php):


客户端(curl test.php),您需要:

<?php

$args['myf'] = '@/Users/Oleg/Temp/curl-test-php/example.txt';

$request = curl_init('http://domain.ru/upload/upload.php');
curl_setopt($request, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $args);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
curl_close($request);

?>


关于CURLOPT_SAFE_UPLOAD和正确使用非弃用方法的方法如果您需要安全解决方案

如果我在文件路径的第一个位置添加@,它将不起作用。您使用数组中的“file”或“filedata”作为键做什么?在5.6中,默认情况下,@选项将关闭。因此,只需为CULLOPT_SAFE_上传添加错误设置。我敢肯定,它正在发挥作用。我为您制作了清晰的普通php示例,并在我的服务器上进行了测试。一切都好。使用“Deprecated:curl_setopt()”传输和保存文件:不推荐使用@filename API上载文件。请在第13行的/Users/oleg/Temp/curl test php/curl-test.php中使用CURLFile类。但是工作!我重新载入了我的答案。明白了如果我在文件路径的第一个位置添加@,它将不起作用。您在数组中使用“file”或“filedata”作为键是什么?在5.6中,默认情况下,@选项将被关闭。因此,只需为CULLOPT_SAFE_上传添加错误设置。我敢肯定,它正在发挥作用。我为您制作了清晰的普通php示例,并在我的服务器上进行了测试。一切都好。使用“Deprecated:curl_setopt()”传输和保存文件:不推荐使用@filename API上载文件。请在第13行的/Users/oleg/Temp/curl test php/curl-test.php中使用CURLFile类。但是工作!我重新载入了我的答案。明白了
<?php

$args['myf'] = '@/Users/Oleg/Temp/curl-test-php/example.txt';

$request = curl_init('http://domain.ru/upload/upload.php');
curl_setopt($request, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $args);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
curl_close($request);

?>