unlink () удаляет файл, но возвращает false

У меня есть проблема, и я не могу ее решить. Я пытаюсь удалить файл и вывести сообщение об успехе, но при этом он удаляет файл, но возвращает false. Вот мой код:

if(unlink(".".MEDIA_PATH."/$av")){
exit(header("Location: page.php?&msg=success"));
}
else{
exit(header("Location: page.php?msg=fail"));
}

DanFromGermany помог мне! Решение: не используйте Windows для программирования, используйте Linux 🙂 Ошибка была в том, что я использую localhost в ОС Windows.

1

Решение

Я немного изменил твой код.

Сначала проверьте наличие файла, затем удалите.

$file = '.' . MEDIA_PATH . '/' . $av;

if (file_exists($file)) {
if (unlink($file)) {
header("Location: page.php?msg=success");
} else {
header("Location: page.php?msg=fail&reason=cannot-delete");
}
} else {
header("Location: page.php?msg=fail&reason=file-not-exists");
}

exit;

Обновить:

unlink() Известно, что иногда происходит сбой в системах Windows.

1

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

Убедитесь, что файл существует, прежде чем удалять его с помощью функции «file_exists» («unlink» может быть вызван с двумя экземплярами, вызываемыми одновременно, но это не имеет значения для тестирования).

$filePath = "." . MEDIA_PATH . "/$av";
if( !file_exists($filePath) ) {
echo "File does not exist: $filePath";
exit(1);
} else if( unlink($filePath) ) {
exit(header("Location: page.php?&msg=success"));
} else{
exit(header("Location: page.php?msg=fail"));
}

Если рабочий процесс неисправен и функция отмены связи вызывается дважды, вы легко это заметите.

Вы также можете использовать xdebug с перерывами для проверки вашего кода.

0

Я нашел решение, но оно не самое лучшее. Если у вас есть, пожалуйста, помогите мне.

Это мое решение:

$del_file=".".MEDIA_PATH."/$av";

// Deleting file from server
@unlink($del_file);

if(!file_exists($del_file)){
exit(header("Location: page.php?&msg=success"));
}
else{
exit(header("Location: page.php?&msg=fail"));
}

Он по-прежнему выдает ошибку false в unlink (), поэтому я добавил оператор @ в unlink (), чтобы замаскировать его, но это не то, что я хочу. Это имеет значение, потому что я на локальном хосте (windows), а не на живом сервере?

Похоже, что func unlink () запускается дважды, и в первый раз, когда он удаляет файл, и в следующий раз он возвращает ложную ошибку, потому что не может найти указанный файл.

0

Лука Рогович:

Похоже, что func unlink () запускается дважды и при первом удалении
время файла и секунда возвращает ложную ошибку, потому что не может найти
указанный файл.

Попробуй это:

$filePath = "." . MEDIA_PATH . "/$av";

if( !filter_has_var(INPUT_GET, 'msg') ) {
if( !file_exists ) {
exit(header("Location: page.php?msg=fail&reason=file-does-not-exist"));
} else if( unlink($filePath) ) {
exit(header("Location: page.php?&msg=success"));
} else{
exit(header("Location: page.php?msg=fail&reason=cannot-delete"));
}
}

Я считаю, что «page.php» вызывается дважды, а «unlink» вызывается дважды.

Условие «! Filter_has_var (INPUT_GET, ‘msg’)» предотвращает это.

Тем не менее, вы должны понимать, почему «решения» работают:
используйте «Inspect element» из вашего браузера для анализа перенаправлений и используйте xdebug, чтобы увидеть, вызывается ли «unlink» дважды.

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