| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Скачать файл? |
| Автор: mad_doc 11.5.2005, 02:29 |
| Помогите разобраться с такой проблемой, из БД грузятся ссылки на разные файлы (.doc, .xls, pdf, chm ........) Все это отображается в броузере ИЕ на странице .cgi Выдает 500 ошибку, в логе [Wed May 11 02:00:32 2005] [error] [client 127.0.0.1] /home/site/cgi-bin/materials/p1010876.jpg is not executable; ensure interpreted scripts have "#!" first line [Wed May 11 02:00:32 2005] [error] [client 127.0.0.1] (2)No such file or directory: couldn't spawn child process: /home/site/cgi-bin/materials/p1010876.jpg |
| Автор: CPLUSPLUS 11.5.2005, 05:03 |
| Нужен код.... |
| Автор: korob2001 11.5.2005, 06:10 | ||
Наверное у тебя графический файл лежит в рабочем каталоге, вот он и говорит тебе о том, что не может запустить файл на выполнение, так как в нём, в первой строке не указан путь к Perl интерпретатору, потому как его там и не должно быть. Вобщем вынеси все файлы .xls, .pdf, .jpg, .gif и т.д. из каталога /cgi-bin, затем измени пути к ним в БД. Удачи. |
| Автор: Guest 11.5.2005, 13:14 |
| Спасибо, но после перенесения в другую папку запускаются только картинки, да и то, только в текущем окне? |
| Автор: mad_doc 11.5.2005, 13:15 |
| это сверху я был |
| Автор: korob2001 11.5.2005, 15:58 |
| А что значит запускается???? Покажи часть кода, где ты запускаешь один из этих файлов. |
| Автор: Guest 11.5.2005, 16:02 |
| Код как код <a href=$data_path$arc[5] target=_blank>Файл</a> |
| Автор: korob2001 11.5.2005, 16:25 | ||||||||
Вообще-то всё верно и не может быть, что бы такая ссылка открывала документ в текущем окне. Скорее всего скорее всего проблема в путях. Попробуй создай в корне ( рядом с /cgi-bin ), каталог /files, т.е. у тебя должна получиться такая структура:
Теперь измени значения переменных:
Насколько я понял, то елеменит массива $arc[5] инициализируется из БД, если да и в БД указанны только имена файлов, то ничего менять не нужно. И последнее, захвати весь генерируемый путь в двойные кавычки и выдели имена пременных фигурными скобками, так будет более наглядно:
Просто если у тебя в пути будет присутствовать хоть один пробел, то браузер тебя может не понять, если путь не будет захвачен в кавычки. Если все вышесказанное не поможет, то попробуй изменить путь в переменной $data_path, на полный:
|
| Автор: Guest 11.5.2005, 19:19 |
| Спасибо, справился! Проблема была действительно в путях. |
| Автор: maddoc 14.5.2005, 01:35 |
| Опять проблема Закачиваю файл, данный код имеется в 4 местах, в трех все ок, а в четвертом не работает, проблема с тем, что while не отрабатывает Передаю $path как и везде это обычная форма type=file Везде ок, а тут? while($bytesread=read($path, $buffer, 512)) {$binfile.=$buffer;} $pathname = $path; $position = rindex($pathname, "\\") + 1; $filename = substr($pathname, $position); open F,">$data_pic_path$filename"; binmode F; print F $binfile; close F; |
| Автор: korob2001 14.5.2005, 02:34 | ||
А в переменной $pathname путь точно указан с обратными слешами??? ЗЫ: А зачем ты читаешь весь файл в пременную ( в память ), а затем эту переменную загоняешь в файл. Записывай всё в файл в течении цикла, много памяти сэкономишь. |
| Автор: maddoc 14.5.2005, 10:29 |
| Так вот в этом то и проблема, цикл не выполняется (while) , а position = rindex($pathname, "\\") + 1; выполняется правильно(она извлекает название файла и его расширение из строки $pathname, при то удачно) |
| Автор: korob2001 14.5.2005, 12:39 | ||||
Попробуй так.
Много памяти сэкономишь. Зы: проблема в этой строке:
Для чего тут переменная $bytesread ???? |
| Автор: maddoc 14.5.2005, 20:59 |
| да, проблема именно в этой строке, а именно в том что переменная $buffer остается пустой, и сам цикл while($bytesread=read($path, $buffer, 512)) не срабатывает, хотя переменная $path не пустая, и там все ок с путями |
| Автор: maddoc 15.5.2005, 01:26 |
| Добавлено @ 01:34 |