所以我尝试使用cURL和其他POST变量将文件发送到另一个页面。除文件发送外,其中大部分都有效。但它只能在我的localhost上运行。当它上传到托管的Web服务器时,它的工作方式与它应该完全一样。
我也不想使用CURLFile,因为网络服务器不支持它。
以下是代码:
// Output the image
imagejpeg($fileData['imageBackground'], $newFileName, 75);
// Get Old Background
$query['getBackground'] = $this->PDO->prepare("SELECT backgroundImage FROM accounts WHERE token = :token");
$query['getBackground']->execute(array(':token' => $token));
$queryData = $query['getBackground']->fetch(PDO::FETCH_ASSOC);
$verificationKey = self::newVerificationKey($token);
// Send the file to the remote
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uploadURL);
curl_setopt($ch, CURLOPT_POST, true);
$postArgs = array(
'action' => 'updateBackground',
'verificationKey' => $verificationKey,
'file' => '@' . realpath($newFileName),
'oldBackground' => $queryData['backgroundImage']
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postArgs);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
unlink($newFileName);
提前致谢!
答案 0 :(得分:0)
您的网络服务器很可能正在运行支持“@”的旧版本,但不支持curlfile。您的本地计算机支持curlfile - 但不支持“@”(在默认配置中)...
您可以使用
if (class_exists("CurlFile")){
$postArgs = array(
'action' => 'updateBackground',
'verificationKey' => $verificationKey,
'file' => new CurlFile($newFileName),
'oldBackground' => $queryData['backgroundImage']
);
}else{
$postArgs = array(
'action' => 'updateBackground',
'verificationKey' => $verificationKey,
'file' => '@' . realpath($newFileName),
'oldBackground' => $queryData['backgroundImage']
);
}
建议使用,因为@
- 方式被认为是不安全的,因此请在可用时使用CurlFile
。
然而,要让@
- 方式工作lokaly,你可以使用
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
在PHP 5.5之前默认为false
,但对于更高版本,默认为true
。
注意,使用“订单”播放arround。 CURLOPT_POSTFIELDS
似乎存在一个问题,即对现有选项有些敏感。所以
curl_setopt($ch, CURLOPT_POSTFIELDS, $postArgs);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
可能不起作用,而
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postArgs);
可能。