#php #download #fopen #ads #bing-api
#php #Скачать #fopen #объявления #bing-api
Вопрос:
Я был поражен этим с недели. Пожалуйста, скажите мне, может ли кто-нибудь помочь мне в этом.
Я попробовал эти примеры, которые они дали. Я пытаюсь загружать только отчеты о производительности кампании, где я могу загрузить zip-файл, содержащий csv-файл. Вот еще один прямой пример, которому я следовал для ключевых слов и сделал то же самое для эффективности кампании. Что дает мне ссылку для загрузки отчетов. Когда я пытаюсь загрузить URL вручную, я могу загрузить, но я не могу загрузить его через свой код.
function DownloadFile($reportDownloadUrl, $downloadPath) {
if (!$reader = fopen($reportDownloadUrl, 'rb')) {
throw new Exception("Failed to open URL " . $reportDownloadUrl . ".");
}
if (!$writer = fopen($downloadPath, 'wb')){
fclose($reader);
throw new Exception("Failed to create ZIP file " . $downloadPath . ".");
}
$bufferSize = 100 * 1024;
while (!feof($reader)) {
if (false === ($buffer = fread($reader, $bufferSize))) {
fclose($reader);
fclose($writer);
throw new Exception("Read operation from URL failed.");
}
if (fwrite($writer, $buffer) === false) {
fclose($reader);
fclose($writer);
$exception = new Exception("Write operation to ZIP file failed.");
}
}
fclose($reader);
fflush($writer);
fclose($writer);
}
Но я не смог загрузить файл. Я не могу двигаться дальше, поэтому я очень признателен за любую помощь, например, за загрузку отчетов в любой другой форме или за простые изменения кода в текущем методе. Заранее спасибо.
Ответ №1:
Когда я попробовал это, у меня также возникли проблемы с функцией DownloadFile, поэтому заменил ее другой версией
function DownloadFile($reportDownloadUrl, $downloadPath) {
$url = $reportDownloadUrl;
// Example for the path would be in this format
// $path = '/xxx/yyy/reports/keywordperf.zip';
// using the server path and not relative to the file
$path = $downloadPath;
$fp = fopen($path, 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_FILE, $fp);
if($result = curl_exec($ch)) {
$status = true;
}
else
{
$status = false;
}
curl_close($ch);
fclose($fp);
return status;
}