php - CURL 警告:curl_file_create() 期望参数 1 是有效路径,给定字符串
问题描述
我不知道为什么这不起作用。我正在尝试从 URL 下载图像,然后通过 CURL 发送。POST 请求路径var_dump
正在工作,但使用 CURL 它不起作用
错误是
警告:curl_file_create() 期望参数 1 是有效路径,给定字符串
// define('TMP', __DIR__ . DIRECTORY_SEPARATOR . 'tmp');
/**
* @param $url
* @return string
*/
function dlImage($url) {
$save_dir = TMP . DIRECTORY_SEPARATOR;
$filename = basename($url);
$save = $save_dir.$filename;
file_put_contents($save,file_get_contents($url));
return $save;
}
function upload( $body, $title, $type, $type_real, $subCat, $poster = null, $imdbUrl = null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'xxxx');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
$data = [
'key' => 'xxxx',
'type' => $type,
'subtype' => $subCat,
'type_real' => $type_real,
'title' => $title,
'posterUpload' => curl_file_create(realpath(dlImage($poster)),'image/jpeg'),
'imdbUrl' => $imdbUrl,
];
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
}
// path is working fine
dlimage output (var_dump) : string(113)
"C:\laragon\www\api\tmp\MV5BNDliY2E1MjUtNzZkOS00MzJlLTgyOGEtZDg4MTI1NzZkMTBhXkEyXkFqcGdeQXVyNjMwMzc3MjE@.jpg"
解决方案
添加更多错误检查,替换
file_put_contents($save,file_get_contents($url));
和
$content=file_get_contents($url);
if(!is_string($content)){
throw new \RuntimeException("failed to fetch url {$url}");
}
if(($len=strlen($content))!==($written=file_put_contents($save,$content))){
throw new \RuntimeException("could only write {$written}/{$len} bytes to file {$save}");
}
那么你可能应该得到一个错误日志来解释哪里出了问题,我最好的猜测是 file_get_contents() 和/或 file_put_contents() 出了问题。
推荐阅读
- java - 在打开文件之前如何知道编码方案?
- c++ - C++ 警告:在一个声明中将截断从 double 初始化为 float,但在另一个声明中没有
- javascript - 数据表不显示 JSON 数据
- php - 在 config.php 中包含文件
- angular - Angular canActivate Guard 使用 API
- amazon-web-services - 如何在 CloudFormation 中将字符串列表作为参数传递?
- android - Android 多语言支持:由于占位符计数不同导致的字符串格式问题
- django - django paypal ipn - 我怎么知道付款流程已经开始?
- c++ - 在方法定义中显式指定命名空间
- maven - 为什么没有用于扩展的 maven extensionManagement 元素?