Что делать если скрипт не работает

Что делать если скрипт не работает

«Почему не работает тот или иной скрипт…» — такой вопрос довольно часто задают мне читатели рассылки и посетители сайта по электронной почте или в комментариях к некоторым Скриптам, опубликованных на сайте.

Сразу оговорюсь, что речь в данной статье пойдет только о Скриптах, которые я публикую на страницах своего сайта http://www.LuksWeb.ru/, хотя большинство советов, о которых пойдет речь ниже, справедливы и для других Скриптов, которые Вы найдете на просторах Интернета.

Чтобы нам разговаривать на «одном языке», давайте уточним некоторые понятия. Что мы вообще понимаем под понятием: СКРИПТ?

Что такое Скрипт?

Скрипт – это небольшая программка, расширяющая функциональность сайта. Скрипт внедряется в код основной web-страницы, написанной на HTML, PHP или других языках программирования. Скрипты чаще всего пишут на языках JavaScript и PHP, а также других языках. Скрипт (программа) может содержать всего несколько строк кода, но бывают и довольно объемные Скрипты, содержащие несколько страниц кода. Это может быть например вывод даты или времени на сайте, а может быть полноценная игра.

Скрипты могут внедряться (подключаться) как в код основной web-страницы, так и выносится в отдельные файлы и подключаться к web-странице с помощью специальных операторов. Если скрипт выносится в отдельный файл, то такой файл обычно имеет расширение .js , .php. Но файлы с расширением .php могут иметь и просто файлы сайта (блога).

На моем сайте Вы можете найти два раздела посвященные различным Скриптам: раздел с одноименным названием: Скрипты и раздел jQuery. Если Вам не понятно в чем разница пройдите по данным ссылкам, и Вы все поймете сами.

Зачем же изобретать велосипед.

Следующий момент, который мне хотелось бы отметить — это написание Скриптов. В настоящее время Интернет просто кишит скриптами практически всех стилей и направлений, написанных на любых языках. Поэтому не вижу смысла «изобретать велосипед» и писать Скрипты самому. Т.е. я хочу сказать, что сам пишу Скрипты полностью очень редко, чаще нахожу в Интернете Скрипт с нужным функционалом и иногда немного дорабатываю под свои задачи. Возможно, кто-то посчитает это неправильным, но поверьте все уже давно написано, нужно только найти и адаптировать нужный Скрипт под определенный проект (сайт), повторюсь: так зачем же изобретать велосипед.

Прежде чем опубликовать какой-то Скрипт на своем сайте, я его всесторонне тестирую и испытываю в различных браузерах, смотрю, как он работает в той или иной ситуации. И если обнаруживаю, что в каком–то браузере возникают проблемы, то так об этом и «говорю», публикуя каждый конкретный Скрипт.

Публикуя, какой либо скрипт у себя на сайте, стараюсь максимально подробно «разжевывать» процесс подключения каждого скрипта к web-странице, ведь далеко не все мои посетители в совершенстве знают языки программирования. Собственно говоря для того и публикую, чтобы рассказать новичкам как работают и подключаются Скрипты.

Почему не работает тот или иной скрипт?

А теперь давайте поговорим о том «Почему не работает тот или иной скрипт…».

Действительно не всегда, не у всех и не сразу Скрипты начинают работать, так как хотелось бы. Здесь можно выделить несколько основных причин.

1. Скрипт не работает в браузере …
В силу того, что между компаниями производителями программного обеспечения (в данном случае браузеров) постоянно идет конкурентная борьба, а так же не соблюдений этими компаниями требований консорциума WWW и спецификации HTML, увы, действительно один и тот же код скрипта может разными браузерами отображаться по-разному. А в некоторых случаях в одном браузере скрипт может работать прекрасно, а в другом браузере не работать вообще. Но как я уже сказал выше все эти момент я отображаю в описании скрипта, и если Вы не нашли в статье подобных ограничений или упоминаний, то это значит что скрипт работает во всех распространенных браузерах: IE, Opera, Google Chrome, Mozila Firefox.

Поэтому убедительная просьба: ВНИМАТЕЛЬНО ЧИТАЙТЕ ОПИСАНИЕ. Если Вы не нашли в описании подобных оговорок – это значит что просто Вы где то допустили ошибку. Вывод: ошибку нужно найти и устранить.

2. Скрипт не работает на Ucoz (или других конструкторах сайтов).
Сервисы подобные Ucoz, narod.ru и другие аналогичные конструкторы сайтов используют в своей работе свои собственные разработки. Как правило, подобные сервисы (конструкторы) позволяют создавать (компоновать) сайты из готовых блоков (модулей). При этом часто используют свои собственные языки программирования и разработки, которые подчас просто конфликтуют с общепринятыми языками программирования. В Интернете даже существует отдельное направление: Скрипты для Ucoz.

Читайте также:  Не отображается превью в ютубе

Кроме того подобные сервисы в большинстве случае умышленно ограничивают функционал размещенных у них сайтов. Ведь все Скрипты создают дополнительную нагрузку на сервер и отнимают ресурсы сервера. Администраторам подобных сервисов проще закрыть большинство функций и возможностей для пользователей, чем разбираться с проблемами и проводить модернизацию своего оборудования, ведь в первую очередь это ДЕНЬГИ! Они живут по принципу: не нравится наш БЕСПЛАТНЫЙ сервис – не пользуйтесь.

Если Вы столкнулись с подобной проблемой, попробуйте обратиться в службу поддержки сервиса и попросить помощи. Возможно, Вам и пойдут навстречу, но мой опыт показывает, что шансов очень мало.

3. РHP скрипт не работает на сервисе: narod.ru
Увы, но конструктор сайтов «НАРОД» (narod.ru) вообще не поддерживает PHP и Скрипты написанные на PHP здесь работать не будут. Так что не стоить даже пробовать и трать свое время и нервы.

4. Локально (под Денвером) скрипт работал без проблем, а после переноса на реальный Хостинг в Интернете Скрипт не работает, что делать?
Закачка на сервер Скриптов, как правило, осуществляется по протоколу FTP. При этом для некоторых Скриптов очень важен режим закачки файлов Скрипта (бинарный или текстовый). Если это критично, то в описании к Скрипту тоже будет указано в каком режиме необходимо закачивать скрипт, обязательно обращаете на это внимание.

Кроме того обратите внимание на права доступа файлов и папок Скрипта. Для некоторых Скриптов это тоже очень важный момент. При установке «неправильных» прав доступа Скрипт может не работать вовсе или в не полном объеме. Если подобное ограничение имеется, я обязательно указываю это в описании. Будьте внимательны читая описание!

Что делать если Скрипт не работает?

В первую очередь внимательно прочитайте описание по Скрипту, который Вы хотите развернуть на сервере в Интернете. Проверьте правильность написание кода. Обычно 80-90% проблем возникает именно из-за нашей невнимательности : закачали не в том режиме или неправильно выставили права доступа (это очень актуально для Unix ОС), потеряли какой-то знак в коде и т.д.

Обратите внимание на характеристики Хостинга. Особенно если ваш сайт размещается на бесплатном Хостинге или создан с помощью какого либо конструктора сайтов.

Если так и не удалось самостоятельно решить проблему и запустить скрипт, обращайтесь в службу техподдержки вашего Хостинга. Даже на бесплатных Хостингах такая служба существует и часто адекватно и оперативно реагирует на обращения своих клиентов.

А вообще проблемы с Хостингом можно решить очень просто – перейти на платный профессиональный Хостинг, тем более что сегодня приличный Хостинг стоит совсем не дорого. Вот один из таких Хостингов-провайдеров IPhoster . Самый ходовой тариф HOST1 стоит всего 1 дол. США в месяц! В разделе Веб-хостинг можно выбрать тариф на любой вкус.

Компания IPhoster предоставляет свои услуги по принципу «все включено» в независимости от тарифного плана, т.е. за свои деньги Вы получите полный набор профессиональных инструментов и вопрос о неработоспособности Скриптов из-за технических характеристик Хостинга отпадет сам собой.

Но о Хостингах мы поговорим подробнее в одной из следующих статей.

Всего Вам доброго.

Читайте также другие наши материалы:

https://test-proekt.ru/
На сайте не работает почему-то скрипт слайдера + никакой JS-код не срабатывает из файла common.js (например появление всплывающего окна с кнопки в шапке).

Кто-нибудь может подсказать в чем проблема?

  • Вопрос задан более двух лет назад
  • 6136 просмотров

В подключении jQuery попробуйте http на https заменить

Внешний таймаут

В первую очередь нужно установить подходящее значение параметра max_execution_time в конфиге PHP.

Если скрипт запускается веб-сервером (т.е. в ответ на HTTP-запрос от пользователя), то следует также правильно настроить параметры таймаута в конфиге веб-сервера. Для apache это параметры TimeOut и FastCgiServer… -idle-timeout . (если PHP работает через FastCGI), для nginx send_timeout и fastcgi_read_timeout (если PHP работает через FastCGI).

Веб-сервер может также проксировать запросы на другой веб-сервер, который и запустит PHP скрипт (не редкий пример, nginx — фронтенд, apache — бэкэнд). В этом случае на проксирующем веб-сервере необходимо также настраивать таймаут проксирования. Для apache ProxyTimeout, для nginx proxy_read_timeout.

Читайте также:  Что означает смайлик сердце в ватсап

Прерывание пользователем

Если скрипт запускается в ответ на HTTP-запрос, то пользователь может остановить выполнение запроса в своем браузере, в этом случае прекратит свою работу и PHP скрипт. Если же требуется, чтобы скрипт продолжил свою работу даже после остановки запроса, установите в TRUE параметр ignore_user_abort в конфиге PHP.

Потеря открытых соединений

Если в скрипте открывается соединение с каким-либо сервисом/службой (с БД, с почтовым сервером, с FTP-сервером, . ), и во время выполнения скрипта некоторое время соединение не используется, то оно может быть закрыто этим сервисом. Например, если во время работы скрипта некоторое время не выполнять запросы к MySQL, то MySQL закроет соединение через время, заданное в параметре wait_timeout. Как следствие, при попытке выполнить очередной запрос возникнет ошибка.

В таких случаях следует в первую очередь попробовать увеличить таймаут соединения. Например, для MySQL можно выполнить запрос (спасибо Snowly)

Если же такой возможности нет или этот вариант по каким то причинам не подходит, то можно проверять активность соединения, в тех местах кода, где возможны простои его использования, и переподключаться при необходимости. Например в модуле MySQLi есть полезная функция mysqli::ping для проверки активности соединения, а также параметр конфигурации mysqli.reconnect для автоматического переподключения, при разрыве соединения. При отсутствии подобных функций для других видов соединений, можно попробовать написать ее самому. В ней нужно тривиальным образом обратиться к сервису и в случае ошибки (отловить при помощи try… catch . ) переподключиться. Например

Параллельный запуск

Нередко долгие скрипты запускаются по расписанию (по cron), и ожидается, что в один момент времени будет работать только одна копия скрипта. Но может случиться так, что очередной запуск скрипта произойдет раньше, чем закончит работу предыдущий, и как правило это нежелательно (дважды импортируются одни и те же данные, затрутся данные используемые первым скриптом, . ).

В таких случаях можно использовать блокировку используемых ресурсов, но эта задача всегда решается индивидуально. Либо можно просто проверять, не запущена ли другая копия этого скрипта, и либо подождать завершения его работы, либо завершить текущий запуск. Для этого можно просматривать список запущенных процессов, либо использовать блокировку запуска самого скрипта, что то вроде:

Нагрузка на веб-сервер

В случаях, когда долгие скрипты запускаются через веб-сервер, соединение клиента с этим самым веб-сервером остается открытым до тех пор, пока не отработает скрипт. Это не есть хорошо, т.к. задача веб-сервера как можно быстрее обработать запрос и отдать результат. Если же соединение остается висеть, то один из воркеров (процессов) веб-сервера на долгое время будет занят. А если одновременно будет запущено достаточно много таких скриптов, то они могут занять все (ну или почти все) свободные воркеры (для apache см. MaxClients), и веб-сервер просто не сможет обрабатывать другие запросы.

Поэтому следует при обработке запроса пользователя, запускать скрипт в фоновом режиме через php-cli, чтобы не нагружать веб-сервер, а пользователю отвечать что его запрос обрабатывается. При необходимости можно периодически проверять состояние обработки при помощи AJAX запросов.

Вот, пожалуй, и все что я могу рассказать по этой теме. Надеюсь, для кого-то будет полезным.

Ой, у вас баннер убежал!

  • Скопировать ссылку
  • Facebook
  • Twitter
  • ВКонтакте
  • Telegram
  • Pocket

Похожие публикации

  • 18 октября 2018 в 16:39

Современная веб-разработка: выбери себе приключение

Настройка редактора Visual Studio Code для разработки на PHP

PHP Console 3.0 — важнейшее обновление за 3 года

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 34

Проблема долгих скриптов PHP в том что их пишут «программисты» которые посмотрели 3 видеоурока и приступили к написанию своей CMS.
**смайлик**

Долгие операции нужно выносить за пределы, и выполнять их, например, в кроне.

Читайте внимательно
Постоянные соединения не закрываются при завершении работы скрипта, они кэшируются и используются повторно, когда другой скрипт запрашивает соединение с теми же учетными данными

К сожалению этот параметр не решает проблему сброса соединения со стороны MySQL сервера.

Персистентные соединения вообще ничего связанного с таймаутами, отличное от обычных, неперсистентных соединений, не имеет.

Персистентные соединения это лишь пул, который, в случае с кроновскими и шелл-скриптами вообще некому будет создать и поддерживать.

Долгие операции нужно выносить за пределы, и выполнять их, например, в кроне.

To indicate explicitly that a variable is a session variable, precede its name by SESSION, @@session., or @@. Setting a session variable requires no special privilege, but a client can change only its own session variables, not those of any other client.

При необходимости можно периодически проверять состояние обработки при помощи AJAX запросов.

И опишите «нюанс» с mysql_reconnect (этим я уже не пользуюсь, как и mysqli_*) когда он переподключается с параметрами «по умолчанию», а не с теми параметрами, с которыми он подключался.

для nginx send_timeout и fastcgi_read_timeout (если PHP работает через FastCGI)

Потрудитесь объяснить причем тут вообще send_timeout.

Если скрипт запускается в ответ на HTTP-запрос, то пользователь может остановить выполнение запроса в своем браузере, в этом случае прекратит свою работу и PHP скрипт.

Потрудитесь объяснить причем тут вообще send_timeout.

Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями записями. Если по истечении этого времени клиент ничего не примет, соединение будет закрыто.

На сколько я понимаю, если скрипт отправит что-то клиенту, после чего долгое время (больше чем указано в send_timeout) будет «молчать», то соединение закроется. Поправьте если я ошибаюсь

Это, мягко говоря, не всегда так.

На сколько я понимаю, если скрипт отправит что-то клиенту, после чего долгое время (больше чем указано в send_timeout) будет «молчать», то соединение закроется. Поправьте если я ошибаюсь

Скрипт ничего клиенту не отправляет, этим в данном случае nginx занимается.

Читайте также:  Как удалить навител с андроида полностью видео

Фразу «клиент ничего не примет» следует понимать буквально: клиент не принял отправленных ему данных в течение заданного времени, nginx сделал write() в сокетный буфер, но последний так и остался в том же состоянии, нового события на запись не наступило. Ну а если все записанные данные в сокет успешно отправляются, то таймер выключается.

Ну как я и написал за это в PHP отвечает параметр ignore_user_abort. Если вам есть что добавить, то я готов это добавить в статью.

Я в том сообщении процитировал конкретное ваше заявление. Вы полагаете, что у сервера всегда есть возможность узнать о том, что клиент нажал кнопку stop в браузере и закрыл соединение (если вообще закрыл). Нет, часто это невозможно сделать, пока не начнешь писать в сокет, а писать нечего, пока ваш скрипт не вернул ответ. Более того, если вы ещё и кэш включите, то даже в случае когда закрытие соединения было четко детектировано, с точки зрения php ничего не произойдет, поскольку нам нужно заполнить ячейку кэша. Даже если кэш не используются, то могут быть включены опции: fastcgi_ignore_client_abort и proxy_ignore_client_abort. PHP не общается с клиентом напрямую, а полагается только на то, как поведет себя сервер приложений, который взаимодействует с веб-сервером, но даже у последнего не всегда есть достаточно информации о том, что проихошло на той стороне.

— Что же касается статьи в целом, то это отличный пример того, как не надо делать обработку долгих задач. Проблеск этого понимания промелькнул только в конце статьи, да и то был испорчен витиеватым и неубедительным объяснением, почему обработку следует производить в фоне. На первый абзац из «Нагрузка на веб-сервер», можно только ответить: для этого люди и используют nginx!

Обработку следует производить не просто в фоне, а последовательно, с использованием очереди заданий и менеджера, который эту очередь разгребает. Потому, что ваш сервер в принципе может быть не в состоянии обрабатывать параллельно то количество задач, которое на него поступило в данный момент. В целом он вряд ли способен обрабатывать их эффективно, если количество CPU-bound потоков привышает число имеющихся в распоряжении вычислительных ядер.

Ну и да, в статье полностью перемешаны в винегрет CPU-bound и I/O-bound, т.е. задачи, требующие разных подходов для их решения. Да и решать такие задачи на php можно наверное только если ничего больше не знать, что уже само по себе должно быть моветон.

Два чая, этому господину…

Всё ждал, кто же наконец предложит использовать очереди?

Ссылка на основную публикацию
Что делать если игры не скачиваются
Play Market — официальный магазин приложений для Андроида и главный источник загрузки новых игр и программ на смартфоны и планшеты...
Хороший принтер для школьника
Для ученика возможность распечатывать доклады, рефераты и иллюстрации для занятий в школе - совсем не лишняя. Школьнику в XXI веке...
Хороший телефон с aliexpress
Обновлено 22.10.2019 На Алиэкспресс есть много разных производителей смартфонов. Даже есть такие международные бренды, как Apple. В этой подборке мы...
Что делать если заглючил планшет
Если завис планшет леново, самсунг, асус, престижио, дигма и так далее, да еще и в самое неподходящее время радости конечно...
Adblock detector