• strict warning: Non-static method view::load() should not be called statically in /home/s/serka1/devlib.ru/public_html/modules/views/views.module on line 879.
  • strict warning: Declaration of views_handler_filter::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) in /home/s/serka1/devlib.ru/public_html/modules/views/handlers/views_handler_filter.inc on line 0.
  • strict warning: Declaration of views_handler_filter::options_submit() should be compatible with views_handler::options_submit($form, &$form_state) in /home/s/serka1/devlib.ru/public_html/modules/views/handlers/views_handler_filter.inc on line 0.
  • strict warning: Declaration of views_plugin_row::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /home/s/serka1/devlib.ru/public_html/modules/views/plugins/views_plugin_row.inc on line 0.
  • strict warning: Declaration of views_plugin_row::options_submit() should be compatible with views_plugin::options_submit(&$form, &$form_state) in /home/s/serka1/devlib.ru/public_html/modules/views/plugins/views_plugin_row.inc on line 0.

Как правильно писать php скрипты

Недавно нашел в сети интересную статейку на тему «как правильно писать php скрипты». Решил поделиться своими наблюдениями по этому поводу.

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

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

  1. Разница в настройке PHP на сервере и на локальной машине.
  2. Закрытые «@»
  3. Директива register_globals
  4. На последок

 

1. Разница в настройке PHP на сервере и на локальной машине.

В основном программисты пишут свои PHP скрипты на локально машине и переносят их в конце работ на сервер. Первая ошибка заключается в том, что на локальной машине многие отключают показ ошибок. Зачем они это делают не понятно! Если Вы забыли, где то закрыть «;», Вам придется искать во всем скрипте свою ошибку. Поэтому не отключайте функцию уведомления об ошибках.

Как включить это отображение ошибок? Перейдите в каталог с установленным PHP (часто C:\PHP\), и найдите там файлик php.ini. Установите следующие директивы со значениями:

error_reporting  = E_ALL
display_errors = On
display_startup_errors = On

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

Так же, желательно выключить следующую директиву:

short_open_tag = Off

Она запрещает использовать короткий тег для открытия PHP кода «<?». Разрешено использовать только «<?php». Это делается для того, чтобы избежать ошибок, если в тексте будет попадаться «<?».

Следующая директива определяет время, за которое определяется «зацикленность» скрипта.
max_execution_time = 10

Стандартно директива max_execution_time равна 30, но чтобы ускорить работу, мы ставим её меньше. Думаю, за 10 секунд можно понять что программа «зациклилась».

register_globals = Off
register_argc_argv = Off

Об этих переменных мы поговорим ниже.

 

2. Закрытие «@».

Одна из самых больших ошибок начинающих программистов – это использование символа «@» в своих скриптах. Размещенный перед каким-либо оператором он запрещает вывод возникающих ошибок. Вы просто не сможете понять где у Вас возникла ошибка и почему программа не работает.

Часто символ «@» используют перед операторами fopen и fwrite. Настоятельно рекомендуем Вам не использовать их, хотя бы на стадии создания скрипта.

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

 

3. Директива register_globals.

Данная проблема часто возникает при переносе скрипта на сервер. Многие программисты сталкивались с этой проблемой. И долго потом от этого отучивались.

Поэтому устанавливайте сразу register_globals = Off

Существует два способа передачи данных скриптами – GET и POST. Метод GET позволяет передавать данные в адресной строке браузера после символа «?».

Например: http://site.ru/index.php?name=sergey

 

Таким образом, если включена директива register_globals, можно передавать данные при помощи адресной строки, даже если в форме мы передаем методом POST. Следовательно, возможна подмена данных. Это очень большая дыра для злоумышленников, поскольку появляется куча возможностей для взлома вашего скрипта.

 

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

Рассмотрим пример, приведенный автором с включенным register_globals:

<?php

function my()
{
$a = 7;
}

$a = 2;
my();
print $a;

?>

Результатом будет $a = 7. То есть переменные доступны как внутри, так и вне функции, что не очень хорошо. Ведь если у нас может быть большое количество функций, то мы не сможем точно предсказывать результаты операций.

Если наша директива отключена, мы получим 2. Здесь изменение переменной $a  в функции не меняет $a  в теле скрипта.

Чтобы получить значение 7, нам необходимо возвращать переменную:

<?php

function my()
{
$a = 7;
return $a;
}

$a = 2;
$a = my();
print $a;

?>

 

4. На последок

Две разные записи $_POST[‘box’] и $_POST[box]. Первая запись верна синтаксически, а вторая нет. Вместо элемента box, он будет искать элемент с именем, хранящимся в константе box.
Кавычки нужны для обрамления литералов (строк). Разницы между " и ' нет.

В общем, постарался рассказать основные ошибки начинающих программистов и методы их решения.

Статья подготовлена: DevLib.ru
Автор: Mаl Hасk