Ошибки в проекте PHP при переносе с IIS на сервер Apache - PullRequest
0 голосов
/ 17 ноября 2011

Я разработал проект php в WebMatrix на IIS. В этом проекте я случайно дважды инициализировал одну и ту же «переменную сеанса».

     Example: File - a.php

     <?php
     $_Session['one'];
     include 'b.php';
     ...........
     ...........
     ...........
     ...........
     ?>

     Example: File - b.php

     <?php
     $_Session['one'];
     ...........
     ...........
     ...........
     ...........
     ?>

Когда я запускаю этот проект из Webmatrix (IIS-сервер), эта ошибка не отображается, но когда я запускал этот проект на Apache, эта ошибка отображалась, и я исправил свои недостатки.

   Warning on Apache:
   Notice: A session had already been started - ignoring session_start() in D:/path/.

Мой вопрос таков: почему эта ошибка не была показана раньше? Это что-то связано с сервером IIS или WebMatrix. Мне всегда нужно знать об ошибках или предупреждениях в коде, чтобы я мог от них избавиться и эффективность кода поддерживалась, пожалуйста, предложите мне несколько идеальных инструментов для разработки php, которые могут отлавливать даже незначительные ошибки в моем коде.

Ответы [ 4 ]

0 голосов
/ 17 ноября 2011

Трудно сказать, произошла ли ошибка в IIS или нет.Только то, что это не было отображено или зарегистрировано, не означает, что это не произошло.Пожалуйста, сравните конфигурацию об ошибках php.ini между обеими системами.

Другая вещь, которую вы должны сравнить в конфигурации, это если автозапуск сеанса был включен на старойили новая система или нет.Это может вызвать вашу ошибку, но это только предположение.Как написано, ошибка, возможно, уже была в старой системе, но просто была незамеченной.

0 голосов
/ 17 ноября 2011

Возможно, вы получили ошибки, потому что на первом сервере работал PHP 4, а на втором - PHP 5. Двойное включение файла, содержащего функции, в этих версиях даст разные результаты.См. Текст непосредственно перед примером 6 по этой ссылке: http://php.net/manual/en/function.include.php

РЕДАКТИРОВАТЬ: Я считаю, что сообщения об ошибках, сгенерированные в вашем отредактированном сообщении, указывают на что-то другое.

Для файлов, которые вы хотитечтобы убедиться, что они включены только один раз, используйте include_once().http://www.php.net/manual/en/function.include-once.php

В некоторых ситуациях вы можете на законных основаниях хотеть include() дважды из файла.Но поскольку такие ситуации редки, лучше использовать include_once().

0 голосов
/ 17 ноября 2011
Warning on Apache:
   Notice: A session had already been started - ignoring session_start() in D:/path/.

Вы не можете начать сеанс заново, который уже начался.

Вам нужно 1 запуск сеанса в a.php, когда вы включаете b.php, он может использовать запущенный сеанс.

Это предупреждение и предупреждение означает, что это не хорошо, но php может исправить эту ошибку и продолжить работу.

Все дело в уровне сообщений об ошибках.

0 голосов
/ 17 ноября 2011

Убедитесь, что отображаются ошибки, а затем попробуйте перевернуть error_reporting до конца в начале приложения.

ini_set('display_errors', 1);
error_reporting(E_ALL);


Также следует помнить, что в Windows не учитывается регистр. Вы могли бы сказать include 'A.php' или include 'a.php', и это не волновало бы. Однако, когда вы помещаете его на сервер Linux, который чувствителен к регистру, он может не найти файл A.php, если он действительно a.php.

...