ранее я мог скачать wav-файл в php и IIS. Но теперь файл не загружается. Я не знаю, что происходит не так. После установки и изменения php 5.3 в php 5.4 с помощью php-менеджера в IIS файл не может быть загружен. У меня есть ссылка на файл, чтобы загрузить его, который выглядит так:
<a href="download.php?voice='$filename'"> Download </a>
скрипты download.php
<?php $filename = $_GET['voice']; $dir = 'd:/temp_file/voice/'; if(is_file($dir.$filename)) { header('Content-type: audio/wav'); header('Content-Disposition: attachment; filename='".$filename.'"'); echo file_get_contents($dir.$filename); } ?>
в то время как я пытался найти ошибку, почему файл не загружаем, я удаляю инструкцию if и запускаю программу, она запрашивает файл загрузки окна с аудио-плеером пустого wav-файла. Итак, я пришел к выводу, что в пути есть ошибка, которая не позволяет получить доступ к файлу другого диска. У меня есть php-код в c: \ inetpub \ wwwroot \, но wav-файл, который будет загружаться, находится в пути d: \ temp_file \ voice. Что мне нужно делать?
Возможно, PHP open_basedir ограничение.
Попробуйте добавить d:/temp_file/voice/
в свой контент в php.ini
.
Обновить
Я никогда не использовал IIS, но еще одна вещь, которую вы должны проверить, – это если у пользователя IIS есть разрешение на чтение этого каталога. Попробуйте добавить, просто для теста, Everyone
со всеми разрешениями на d:\temp_file\voice
.
Я не знаю, что происходит
Затем включите отчет об ошибках , для чего мне кажется, что это синтаксическая ошибка в header('Content-Disposition: attachment; filename='".$filename.'"')
, Вам не хватает цитаты ( '
) после filename='"
. Но так как вы говорите, что это сработало (и работает без if
), я бы сказал, что это ошибка копирования.
Затем выполните var_dump($filename)
, который может содержать кавычки, поскольку вы помещаете их вокруг URL-адреса в ссылку ( <a href="download.php?voice='$filename'">
). Файл D:/temp_file/voice/'foo.wav'
не может существовать.