php warning fclose () ожидает, что параметр 1 будет ресурсным, логическое значение указано в /web/htdocs/www.mysite.org/home/DDL/download.php в строке 60

Я взял и изменил код загрузки PHP, но всегда получаю эту ошибку:

Предупреждение: fclose () ожидает, что параметр 1 будет ресурсом, логическое значение указано в /web/htdocs/www.mysite.org/home/DDL/download.php в строке 60

Где, очевидно, «www.mysite.org» изменяется с URL моего сайта.

Я искал другие вопросы, но были только похожие проблемы, не идентичные, с разными случаями.

Сценарий таков:

<?php

ignore_user_abort(true);
set_time_limit(0);

$path = "/DDL/FILES/";

$dl_file = preg_replace("([^\w\s\d\-_~,;:\[\]\(\).]|[\.]{2,})", '', $_GET['download_file']);
$dl_file2 = filter_var($dl_file, FILTER_SANITIZE_URL);
$fullPath = $path.$dl_file2;

if ($fd = fopen ($fullPath, "r")) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "pdf":
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
case "zip":
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
case "mkv-video":
header("Content-type: video/x-matroska");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
case "mp4-video":
header("Content-type: video/mp4");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
case "aac":
header("Content-type: audio/aac");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
case "flac":
header("Content-type: audio/x-flac");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
case "mp3":
header("Content-type: audio/mpeg");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;

default;
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
break;
}
header("Content-length: $fsize");
header("Cache-control: private");
while(!feof($fd)) {
$buffer = fread($fd, 2048);
echo $buffer;
}
ob_clean();
flush();
fclose ($fd);
} else {
echo 'something wrong with the file?';
}
exit;

Я провел некоторые исследования и поговорил с некоторыми людьми, и мы пришли к выводу, что это может быть ошибка БД, потому что все, что мы пробовали, не решало проблему.

Может кто-нибудь помочь мне исправить эту ошибку?

Заранее спасибо.

0

Решение

Давайте начнем со следующей строки:

if ($fd = fopen ($fullPath, "r")) {

«Что с этим не так?» Вы можете спросить. Ну если fopen возвращается FALSEВаше выражение не оценивается, и вы в конечном итоге пропускаете выполнение

ob_clean();
flush();
fclose ($fd);

И с тех пор $fd не определен в этой области … Вы должны были уже догадаться.

Переместите свой код после if заявление внутри if заявление:

if ($fd = fopen ($fullPath, "r")) {
// the rest of the code that could have been cropped
ob_clean();
flush();
fclose ($fd);
} else {
echo 'something wrong with the file?';
}
exit;
1

Другие решения

попробуйте что-нибудь более простое, как показано ниже:

if (($fd = fopen($file, "a")) !== false) {
fwrite($fd, 'message to be written' . "\n");
fclose($fd);
}

затем попробуйте интегрировать его в свой скрипт.

1

По вопросам рекламы [email protected]