error_log на Виртуальный Хост?

Короткие и простые: поскольку элементы, которые вы ищете, не существуют в документе (пока).


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

Возможные причины

Есть две причины, по которым элемент может не существовать:

  1. Элемент с переданным идентификатором действительно не существует в документе. Вы должны дважды проверить, что идентификатор, который вы передаете на getElementById, действительно соответствует идентификатору существующего элемента в (сгенерированном) HTML и что у вас не было с ошибкой идентификатор (идентификаторы чувствительный !). Кстати, в большинстве современных браузеров , которые реализуют методы querySelector() и querySelectorAll(), нотация стиля CSS используется для извлечения элемента его id, например: document.querySelector('#elementID'), в отличие от способа, с помощью которого элемент извлекается его id в [[16]; в первом символе # необходимо, во втором это приведет к тому, что элемент не будет извлечен.
  2. Элемент не существует в данный момент , который вы вызываете getElementById ].

Последний случай довольно распространен. Браузеры анализируют и обрабатывают HTML сверху вниз. Это означает, что любой вызов элемента DOM, который встречается до появления этого элемента DOM в HTML, не будет выполнен.

Рассмотрим следующий пример:



Появляется div после script. В настоящий момент сценарий выполняется, элемент не существует , но и getElementById вернут null.

jQuery

То же самое относится к все селекторы с jQuery. jQuery не найдет элементов, если вы ошибочно написали ваш селектор, или вы пытаетесь выбрать их , прежде чем они на самом деле существуют .

Добавленный поворот - это когда jQuery не найден потому, что вы загрузили скрипт без протокола и запускаетесь из файловой системы:


этот синтаксис используется, чтобы позволить сценарию загружаться через HTTPS на странице с протоколом https: // и для загрузки HTTP-версии на странице с протоколом http: //

У этого есть неудачный побочный эффект попытки и невозможность загрузить file://somecdn.somewhere.com...


Решения

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

Это может быть обеспечено просто добавив ваш JavaScript после к соответствующему элементу DOM

, и в этом случае вы также можете поместить код непосредственно перед тегом закрывающего тела () (все DOM элементы будут доступны в момент выполнения скрипта). [/ g3 6]

Другие решения включают прослушивание событий load [MDN] или DOMContentLoaded [MDN] . В этих случаях не имеет значения, где в документе вы помещаете код JavaScript, вам просто нужно запомнить, чтобы весь обработчик DOM обрабатывался в обработчиках событий.

Пример:

window.onload = function() {
    // process DOM elements here
};

// or

// does not work IE 8 and below
document.addEventListener('DOMContentLoaded', function() {
    // process DOM elements here
});

Более подробную информацию об обработке событий и различиях браузера см. в статьях на странице quirksmode.org .

jQuery

Сначала убедитесь, что jQuery загружен правильно , Используйте инструменты разработчика браузера , чтобы узнать, был ли найден файл jQuery и исправлен ли URL-адрес, если он не был (например, добавьте схему http: или https: в начале, отрегулируйте путь, и т. д.)

Прослушивание событий load / DOMContentLoaded - это именно то, что делает jQuery с .ready() [docs] . Весь ваш код jQuery, который влияет на элемент DOM, должен находиться внутри этого обработчика событий.

На самом деле в учебнике j8uery явно указано:

Как почти все, что мы делаем при использовании jQuery, читает или манипулирует объектной моделью документа (DOM), мы должны убедиться, что мы начинаем добавлять события и т. д., как только DOM готов.

Для этого мы регистрируем готовое событие для документа.

$(document).ready(function() {
   // do stuff when DOM is ready
});
blockquote>

В качестве альтернативы вы также можете использовать сокращенный синтаксис:

$(function() {
    // do stuff when DOM is ready
});

Оба эквивалентны.

111
задан Philip Raath 30 January 2018 в 17:47
поделиться

10 ответов

Для установки Apache ( не PHP) журнал самый легкий способ сделать, это должно было бы сделать:

<VirtualHost IP:Port>
   # Stuff,
   # More Stuff,
   ErrorLog /path/where/you/want/the/error.log
</VirtualHost>

, Если нет никакого продвижения "/", это, как предполагается, относительно.

Страница

Журнала ошибок Apache
79
ответ дан demonkoryu 24 November 2019 в 02:59
поделиться

Я обычно просто определяю это в .htaccess файл или vhost.conf на домене, я продолжаю работать. Добавьте это к одному из этих файлов:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"
12
ответ дан 7ochem 24 November 2019 в 02:59
поделиться

Поведение по умолчанию для error_log () для вывода к журналу ошибок Apache. Если этого не происходит, проверяют, что Ваши настройки php.ini для error_log директивы - оставляют его сбросом для использования файла журнала Apache для текущего vhost.

8
ответ дан Mat 24 November 2019 в 02:59
поделиться

Вы попытались добавить php_value error_log '/path/to/php_error_log к своей конфигурации VirtualHost?

5
ответ дан hoyhoy 24 November 2019 в 02:59
поделиться

Да, можно попробовать,

php_value error_log "/var/log/php_log" 

в .htaccess, или Вы можете сделать, чтобы пользователи использовали ini_set() в начале их сценариев, если они хотят иметь вход.

Другая опция состояла бы в том, чтобы позволить сценариям принять значение по умолчанию к php.ini в папке со сценарием, затем перейдите к корневой папке пользователя/хоста, затем к корню сервера или чему-то подобному. Это позволило бы хостам добавлять свое собственное php.ini значения и их собственное error_log местоположения.

5
ответ дан CoderCroc 24 November 2019 в 02:59
поделиться

Мой Apache имел что-то вроде этого в httpd.conf. Просто измените настройки ErrorLog и CustomLog

<VirtualHost myvhost:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>
4
ответ дан ejunker 24 November 2019 в 02:59
поделиться

Вы могли попробовать:

    <VirtualHost myvhost:80>
       php_value error_log "/var/log/httpd/vhost_php_error_log"
    </Virtual Host>

, Но я не уверен, собирается ли работать. Я примерил свои сайты без успеха.

3
ответ дан shilovk 24 November 2019 в 02:59
поделиться

Если вы хотите проверить условие в начале цикла, просто отмените условие в стандартном цикле while :

while(!cond) { ... }

Если вам это нужно в конце, используйте do ...

5
ответ дан 24 November 2019 в 02:59
поделиться

Не устанавливать error_log туда, куда помещается ваш системный журнал , например, / var / log / apache2 , потому что их ошибки будут перехвачены ErrorLog . Вместо этого создайте подкаталог в своей папке проекта для журналов и выполните php_value error_log «/ path / to / project / logs» . Это касается как файлов .htaccess , так и vhosts . Также убедитесь, что вы установили php_flag log_errors на

6
ответ дан 24 November 2019 в 02:59
поделиться

Если кто-то придет посмотреть, это должно выглядеть так:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/domains/example.com/html
    ErrorLog /var/www/domains/example.com/apache.error.log
    CustomLog /var/www/domains/example.com/apache.access.log common
    php_flag log_errors on
    php_flag display_errors on
    php_value error_reporting 2147483647
    php_value error_log /var/www/domains/example.com/php.error.log
</VirtualHost>

Это только для разработки, так как display_error включен. Вы заметите, что журнал ошибок Apache отделен от журнала ошибок PHP. Хорошая информация находится в php.error.log.

Посмотрите здесь ключ error_reporting http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

139
ответ дан 24 November 2019 в 02:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: