У меня есть php-скрипт, который отображает изображение (с помощью imagick) и сохраняет его в какой-то каталог "SITE_ROOT.$filePath"
, затем header('Location: ' . SITE_ROOT.$filePath)
, перенаправляемый файл является png образ.
Если я пойду прямо на путь, например, просто наберите его в строке URL-адреса, я смогу сохранить изображение, и все будет хорошо, однако, когда я полагаюсь на сценарий, чтобы перенаправить меня, и я пытаюсь щелкнуть правой кнопкой мыши и сохранить изображение, что я действительно пытаюсь сохранить изображение, он думает, что я пытаюсь сохранить его как непечатанный файл с именем «Драйвер», который является именем страницы сценария.
Я понятия не имею, что здесь не так, конечно, расположение заголовка должно просто взять меня на изображение и не иметь записи файла «Драйвер» после его перенаправления?
То же самое происходит и с redirect()
тоже.
Заранее благодарю за любую помощь!
Edit: эта проблема была решена путем размещения die()
после команды заголовка.
Вы используете пути к файлам, которые не работают с расположением заголовка. Вы должны использовать URL-адреса.
Лучше всего использовать абсолютные URL-адреса в заголовке. Документация PHP говорит:
HTTP / 1.1 требует абсолютного URI в качестве аргумента для «Location»: включая схему, имя хоста и абсолютный путь, но некоторые клиенты принимают относительные URI. ( Источник )
Также всегда выходите из сценария, потому что иначе в моем опыте в определенных обстоятельствах код, который появляется после перенаправления, может все еще выполняться. Таким образом, хороший пример будет выглядеть так:
header("location:http://www.mysite.com/path/to/myfile.php"); exit;
Часто вы должны использовать переменную сервера для этого случая:
$url = $_SERVER["HTTP_HOST"]."/path/to/myfile.php"; header("location:".$url); exit;
Ура!
header ('Location:'. $ filePath);
SITE_ROOT – это местоположение каталога htdocs на сервере; но заголовок Location должен быть путь к файлу относительно каталога htdocs