У меня есть проблема, и я не могу ее решить. Я пытаюсь удалить файл и вывести сообщение об успехе, но при этом он удаляет файл, но возвращает 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.
Я немного изменил твой код.
Сначала проверьте наличие файла, затем удалите.
$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.
Убедитесь, что файл существует, прежде чем удалять его с помощью функции «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 с перерывами для проверки вашего кода.
Я нашел решение, но оно не самое лучшее. Если у вас есть, пожалуйста, помогите мне.
Это мое решение:
$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 () запускается дважды, и в первый раз, когда он удаляет файл, и в следующий раз он возвращает ложную ошибку, потому что не может найти указанный файл.
Лука Рогович:
Похоже, что 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» дважды.