Не скачивается файл php
Мой / etc / nginx / sites-available / default
Прочие «локации» прокомментированы .
Изменить /etc/nginx/sites-available/default
Оставьте server_name в покое
2 ответа 2
Если же это было сделано или не помогает, то стоит сделать профилирование, дабы посмотреть, сколько памяти и где ест как сам php , так и запускаемый им wget через exec() - в целом, последний можно запускать в области самого скрипта через pcntl_exec() , что подразумевает запуск через просто exec в области, отличной от области скрипта, но тем не менее - ведь если у вас работает одновременно и веб-сервер с php , и wget , то памяти съедается больше, чем если вы проверяете просто запуская wget .
Я изначально сделал ini_set('max_execution_time', 0); Так дело в том, что оно по окончанию выдает мне все эти три сайта, но ни один до конца не закачан. Если бы закончилось время, то явно мне бы не выдало три сайта
@idriverx Хм, логично, правда тогда стоило бы упомянуть про эту настройку еще в самом вопросе. Тогда я бы проверил объем памяти, который стоит в различных переменных php, а также в принципе сколько съедается памяти при работе скрипта/wget (кто его знает, сколько ему там памяти выделяется через exec, возможно, что ограничено памятью, выделяемой самому php), в общем, сделал бы профилирование всему, что работает.
блин, зашел в Apache-отладку, посмотрел логи wget, я ожидал может там будет причина почему не закачалось, error может какие то, а там даже этих файлов нет, будто бы их даже нет на том сайте. ни одного упоминания об этих файлах просто нет, не представляю с чем это может быть связано. юзал уже и функции exec(), и passthru(), и shell_exec() на крайняк. Ничего не вышло (
@idriverx возможно это из-за того, что они все в отдельной области запускают команду, а не в области скрипта? Попробуй pcntl_exec() , о котором я в ответе обсуждаемом пишу
Раскомментировать location ~ \.php$ <>
5. перезапустите службу php
Изменить /etc/nginx/sites-available/default
6. наслаждаться
Создайте любой файл php в / usr / share / nginx / html и запустите в «имя_сервера / имя_файла.php» (имя_сервера зависит от вашей конфигурации, обычно это localhost, имя_файла.php - имя файла, созданного в / usr / share / nginx / html).
Я использую Ubuntu 14.04
Приведенные выше фрагменты работали для меня в случае php7.2
Приведенный выше ответ, казалось, слишком много комментировал решение, которое я достиг. Вот как выглядел мой файл:
/ и т.д. / nginx / сайты-доступные / по умолчанию
Надеюсь, это поможет некоторым людям, которые расстроены воскресным днем (c:
Мое решение было добавить
Добавление в /etc/nginx/sites-available/default у меня не сработало.
Для тех, у кого такая же проблема с PHP 7, это то, что я сделал, чтобы nginx правильно выполнял файлы php в CentOS 7, размещенный здесь, поэтому на случай, если у кого-то возникнет такая же проблема:
Пошагово следуйте этому документу на Цифровой океан.
Откройте /etc/nginx/conf.d/default.conf (по умолчанию у меня нет сайтов с включенными или доступными сайтами, вы можете отредактировать их соответствующим образом).
Отредактируйте параметр location , как показано ниже:
Перезапустите службы Nginx и PHP sudo systemctl restart php-fpm и sudo systemctl restart nginx .
И последнее, но самое важное: очистить кеш браузера или запустить его в incognito (Chrome) или Private Browsing (Firefox) и т. Д.
Надеюсь, это полезное и счастливое кодирование
Затем перезагрузите Nginx:
Это то, что в конечном итоге сработало в моем случае как правила перезаписи, в которых виноват
Я изменил правила перезаписи nginx следующим образом.
Очевидно, без ключевого слова last запрос не был перезапущен, поэтому он не попал в сегмент местоположения .php и был просто интерпретирован как загрузка -
Теперь я решил свою проблему с помощью этого кода (измените свой IP):
Что сработало для меня с Ubuntu 16.04, а php7 удалял эту строку
После этого он перестал скачивать файлы php.
Раскомментируйте расположение .php в / etc / nginx / sites-available / default
sudo vi / etc / nginx / sites-available / default:
Если что-то еще тебе не поможет. А может быть, раньше вы установили apache2 с тестовым файлом info.php. Просто очистите данные приложения (кеш, cookie) для localhost.
Проверьте, что расширение файла конфигурации nginx - * .conf.
например: /etc/nginx/conf.d/myfoo.conf
У меня такая же ситуация. После того, как я переименовал свой файл конфигурации с myfoo в myfoo.conf, он исправился. Не забудьте перезапустить nginx после его переименования.
Сначала вам нужно Remove cache в браузере
Затем откройте терминал и выполните следующую команду:
Затем добавьте следующий код в файл default :
Если какое-либо несоответствие, просто исправьте и перезапустите Nginx с терминала с помощью следующей команды
sudo systemctl перезапустить nginx
Затем перейдите в браузер и наслаждайтесь .
Для меня это была строка: fastcgi_pass unix: /var/run/php5-fpm.sock;
Что должно было быть просто: fastcgi_pass unix: /run/php5-fpm.sock;
Решением для меня было очистить кеш Cloudflare.
У меня была та же проблема, которая решила, что этот блок сервера также имеет этот блок над другими блоками местоположения, если у вас есть проблемы с загрузкой css. Который я добавил в свой файл conf, доступный для сайтов.
Для записи, я обнаружил, что мой php-fpm не работает, и исправил это с помощью service php7.2-fpm stop
(Я настраивал этот сервер в первую очередь для электронной почты и не использовал PHP, когда впервые установил nginx, просто как способ более легкого запуска certbot.)
Редактирование файла перед скачиванием
Здравствуйте, на сайте приходится в разные темы заливать почти однотипные файлы. Я подумал, а ведь.
Непонятки со скачиванием файла
Всем привет, столкнулся с проблемой вроде бы на ровном месте. Есть проект, есть страница со списком.
Проблема со скачиванием больших файлов
В последние 2-3 месяца у меня то ли с сетью, то ли с компьютером такая проблема: Когда я скачиваю.
Для скачивания файла AJAX не нужен.
estic, зачем добавил аякс - не знаю, вдруг понадобился бы. Насчет header ('Location:") - это уже попытки безумца в поиске решения =(
Добавлено через 1 минуту
Jewbacabra, на заголовок никакой реакции все равно нет, а вот про обычную ссылку даже как-то не подумал, попробую
Решение
если я понял правильно, ТС имеет в виду такую схему:
с текущей страницы отправляются данные на сервер для формирования по ним excel файла. в случае успешного создания файла сервер должен вернуть название созданного файла и js создает на текущей странице ссылку на созданный файл. никакого перехода на другие страницы не требуется, равно как и перезагрузки страницы.
с таким подходом указанные скрипты можно настроить, только чуть изменить
-удалить header ('Location : index.php'); (кстати заголовки должны выводиться перед созданием файла, а не после)
- название файла формируется динамически, например так: otchet_2020_12_13_184044.xlsx
- в конце файла-обработчика, где формируется excel файл, надо добавить строчку
где $result - название сформированного файла, если все прошло успешно, или 0 (false) - если не получилось создать файл
- в исходном файле в ajax после type: 'post', надо добавить строчку
Jewbacabra, решение с добавлением ссылки было верным, благодарю
Добавлено через 3 минуты
vinikon, решение хоть и было в добавление ссылки(никакой перезагрузки и перехода на другую страницу не было, файл сразу загрузился), но я постараюсь реализовать и Ваше решение. Спасибо за помощь!
Счетчик перед скачиванием файла
Перед скачиванием файла нужно показать страницу со счетчиком 30 секунд и потом чтобы происходило.
Форма с полями перед скачиванием файла
Добрый день. Я в jquery, да и в javascript не очень силен, но появилась надобность сделать.
Аутентификация на веб ресурсе с последующим скачиванием файла
Просьба помочь разобраться. Требуется аутентификация на веб ресурсе, после чего скачивание с него.
Как сделать проверку памяти перед скачиванием файла
Добрый день. Сделал AsyncTask отдельным файлом.Скачиваю фаил, появляется ProgressDialog идет.
Неполадка со скачиванием с репозитория
Всем доброго времени суток. Проблема вот в чем. Работаю при помощи VirtualBox (на виртуальных.
Трабла с скачиванием файлов из интернета
И так, дамы и госопода, вот такая трабла у меня. скачиваю файл в папке его нет, скачиваю ещё раз.
Пытаюсь скачать средствами PHP обычный архив в папку tmp. И как ты его не крути, создается пустой файл весом 0 байт. По ссылке файл скачивается моментально (в браузере). Скрипт же очень долго думает, в итоге просто оставляет пустой файл. Пробовал и через fopen, и curl и file_get_contents. Хостинг от рег-ру. Может кто-нибудь знает в какой параметр в phpinfo() смотреть? На уровне php ошибок нет. Подозреваю, что проблема в php модулях. Собственно сам код:
тут есть пример, он как бы правильней в плане обработки ошибок, хоть будет видно что у Вас происходит.
Какое бы время таймаута я не выставил, все равно эта ошибка. Само собой очевидно, зависает он на 'curl_exec($ch)'. То есть проблема где-то внутри самого курла. Напишу в саппорт.
Захар Морозов: такое бывает при бесконечном редиректе, возможно необходимо использовать куки для удаленного сервера. И еще возможно проблема с днс, я бы попробовал какой-то другой метод проверки, например с другого сервера файл скачать попробовать. И/или на этом сервере попробовать забрать хтмл страничку.
Мне нужно просто после выполнения скрипта запустить в браузере скачивание файла с сервера.
Внутри файла все html теги со страницы, а внутри body содержимое файла. Я пытался вынести в отдельный файл и подключить через include но тоже самое.
Простой 11 комментариев
как понимать такое выражение? Вместо размера файла отправляете его имя и браузер пусть сам разбирается?
Content-Length:
Откройте скачиваемый файл в блокнотоподобном текстовом редакторе и посмотрите в начале файла, что там есть помимо бинарных данных. Возможно, php отдает не только тело файла, но и какое-нибудь предупреждение.
alexalexes, там есть все html теги из файла копирует туда всё что выводиться в файле, а мне нужно просто файл с сервера скачать.
Если вы пытаетесь сконструировать содержимое файла как HTML, то имейте ввиду, что чтобы Excel воспринял содержимое, нужно руководствоваться как минимум нотацией XML.
Чтобы посмотреть пример генерации такого файла, в MS Excel сохраните файл как "Таблица XML 2003".
alexalexes, файл уже есть на сервере он рабочий и нормальный, мне просто его скачать нужно. А получается что код файла внутри хтмл страницы скачивается.
такой способ как я понимаю вообще мне не подходит что ли
А как просто сделать чтоб файл в браузере скачался после выполнения php скрипта.
Если я удаляю весь echo и все хтмл теги то файл нормальный скачивается. Но на странице нужно оформление. Через include не помогает.
include предназначен для монтирования выполняемого кода php, а не для данных.
У вас скорее всего проблема развязать логику отдачи файла от штатной выдачи контента обычной страницы.
Если не получается, то выдачу файла нужно вынести в отдельный php-скрипт.
Например, в index.php у вас генерация HTML, а в download.php - отдача файлов клиенту.
Подключать download.php каким либо образом к index.php не нужно, нужно клиенту обратиться к нему по url в браузере:
имя_вашего_сайта/download.php
тоже самое, внутри файла все теги и внутри них сам файл
Nohaga, Средствами только PHP вы это не сделаете. Точнее не PHP виноват, а браузер интерпретирует контент по первым заголовкам: у вас вначале идёт вывод текста, а потом файл, браузер всё это и выводит на экран. Один из правильных способов скачать файл это используя JavaScript. Вначале грузиться страница, а потом по какому-то событию (например jQuery(document).ready(). ) JavaScript запрашивает файл на скачивание (например так window.location = 'download.php?file=result.xlsx';). Это не всегда работает, так как браузеры обычно блокируют автоматическое скачивание файлов. Для обхода этого ограничения блок с файлом встраивают в страницу используя iframe, например так:
Если использовать Wget через консоль просто, то всё скачивается правильно, а когда через скрипт в PHP хочу это сделать, то некоторые файлы не докачиваются. Например, некоторые картинки, звуки. Тут я в цикле обхожу все ссылки, и через функцию exec качаю сайты:
И во всех этих сайтах что-то по-любому не докачивается, в одном звуки, в другом картинки. Выставлял user-agent, да и вообще если эту команду ввести в командной строке, то всё скачается нормально. Может в настройках Apache, PHP надо поменять что-то?
Раскомментируйте обе строки прослушивания, чтобы nginx прослушивал порт 80 IPv4 и IPv6.
4. перезапустить службу nginx
Добавьте index.php в строку index
Перезапустите nginx и php5-fpm sudo service nginx restart && sudo service php5-fpm restart
Я начал использовать Linux только неделю назад, поэтому очень надеюсь помочь вам в этом. Я использую текстовый редактор nano для редактирования файлов. запустите apt-get install nano, если у вас его нет. Google, чтобы узнать больше.
Я долго боролся с этой проблемой, и эти шаги у меня сработали.
Шаг 1. Конфигурация блока расположения для всех файлов PHP
Шаг 2. Добавьте fastcgi_param в файл конфигурации. Нам просто нужно открыть файл / etc / nginx / fastcgi_params и добавить следующую строку в конец файла.
А затем перезапустите службы,
Вам нужно добавить это в / etc / nginx / sites-enabled / default для выполнения файлов php на сервере Nginx:
У меня была аналогичная проблема, которая была решена путем очистки кеша браузера (также отлично работала с другим браузером).
Обновите конфигурацию nginx / etc / nginx / sites-available / default или свой файл конфигурации
Если вы используете php7, используйте это
Если вы используете php5, используйте это
Посетите здесь, чтобы получить полную информацию. Подробности здесь
Я вижу много решений выше, и многие из них работали у меня правильно, но я не понимал, что они делают, и беспокоился о том, чтобы просто скопировать и вставить код, в частности, fastcgi . Итак, вот мои 2 цента,
- nginx - это веб-сервер (а не сервер приложений ), поэтому он может обслуживать только статические страницы.
- всякий раз, когда мы пытаемся отобразить / вернуть файл .php, например index.php, nginx не знает, что делать, поскольку он просто не может понять файл .php (или, если на то пошло, любое расширение, кроме нескольких избранных, таких как .html, .js и т. д., которые являются статическими файлами)
- Таким образом, для запуска других типов файлов нам нужно что-то, что находится между nginx и приложением (здесь приложение php). Именно здесь на помощь приходит общий интерфейс шлюза (CGI). Это часть программного обеспечения, которое управляет этой связью. CGI могут быть реализованы на любом возможном языке Python (uWSGI), PHP (FPM) и даже C. FastCGI - это, по сути, обновленная версия CGI, которая намного быстрее, чем CGI.
Для некоторых серверов, таких как Apache, встроена поддержка интерпретации PHP, и поэтому нет необходимости в CGI.
Эта цифровая ссылка на океан довольно хорошо объясняет шаги по установке FPM, и я не пишу шаги, необходимые для решения проблемы загрузки файлов php вместо рендеринга, поскольку другие ответы IMHO довольно хороши.
Для тестирования файла конфигурации в / etc / nginx / sites-available / default.
Это дало мне следующие ошибки:
Итак, я зашел в файл конфигурации, и в последней строке было
Я раскомментировал, снова запустил тестовую команду, и она сработала
Это сработало для меня.
1) Файл MyApp
Vi / и т. д. / nginx / сайты-доступные / myApp
2) Настройте cgi.fix_pathinfo
Установите cgi.fix_pathinfo в 0
3) Перезапустите службы
Php5 sudo service php5-fpm restart
Php7 sudo service php7.0-fpm restart
Мне помогло добавить ?$query_string в конец /index.php, как показано ниже:
listen = 127.0.0.1:9000;(delete all line contain listen= )
remove server block server<> (if exist) in block html<> because we use server<> in default (config file in etc/nginx/site-available) which was included in nginx.conf.
Отредактируйте /etc/php5/fpm/php.ini и убедитесь, что для cgi.fix_pathinfo установлено значение 0
Читайте также: