Например, для перевода целой строки в заглавные буквы, новичок в PHP мог бы
написать следующее:
$URL = "http://www.php.net";
$fp = @fopen ($URL, "r");
if (!$fp) {
die ("Сбой при открытии $URL!");
}
while ($line = @fgets ($fp, 1024)){
$data .= $line;
}
@fclose ($fp) or warn ("Сбой при закрытии дескриптора $URL");
$data = ereg_replace ("[a-z]", "[A-Z]", $data);
print $data;
?>
Однако, в этом случае, используя тяжеловесный и медленный ereg_replace(), он
потратил бы кучу драгоценного времени выполнения на задачу, с которой более
лёгкая функция strtoupper() справилась бы намного быстрее
$data = strtoupper ($data);
В общем, всегда следует искать более "лёгкую" замену регулярным выражениям,
поскольку скорость выполнения вашего скрипта в таких случаях резко возрастает.
Эти функции должен знать каждый
Здесь будут перечислены несколько жизненно необходимых функций, сокращающих
время выполнения вашего скрипта:
При успешной замене замену регулярного выражения одной из этих функций вы можете
рассчитывать на резкое повышение скорости, особенно если анализу подвергаются
строки больших размеров.
9. Программирование на php как на другом языке
Многие приходят в PHP уже с большим опытом программирования в другом языке, как
PERL, C, Java или (ну это ещё куда ни шло) ASP. И частенько "импортируют"
техники и подходы, которые не всегда хорошо сочетаются с методиками PHP.
К сожалению, некоторые программисты как-то не удосуживаются поучиться
PHP-программированию в стиле именно PHP. Вместо этого они обзаводятся
минимальным набором новых для них концепций и "насилуют" PHP.
При таком подходе очень часто на выходе мы получаем медленный и трудно
поддерживаемый код. И такие случаи не редкость:
• "однострочники" PERL. PHP - язык мало приспособленный к так называемому методу
- "всё в одной строке". Рекомендуем разбивать сложные хитросплетения
комбинированных функций и представлять их в более структурированном виде.
Perl
• while () {
• @_ = split /:/;
• $quotes{shift} = shift;
• }
• print map { "$_: ", reverse split //,$quotes->{$_},"\n"; } keys %quotes;
PHP
$fp = @fopen('php://stdin', 'r');
if (!$fp) {
die ('Сбой при открытии STDIN');
}
@fclose ($fp);
?>
• Уклонение от встроенных функций: Многие PHP-программисты, пришедшие из C,
кажется, не понимают того, что PHP содержит целую армию встроенных функций. Их
цель - избавить вас от километровых скриптов. Если вы раньше писали на C, вам
настоятельно рекомендуется изучить техническое описание PHP и узнать, какие
функции PHP вам может предложить и тем самым облегчить вам жизнь.
• Переименование стандартных функций PHP: некоторые программисты переименовывают
стандартные функции PHP только для того, чтобы легче их запоминать. Это не
только снижает скорость выполнения скрипта, но и затрудняет чтение кода.
• Неоправданное использование ООП: PHP - не объектно-ориентированный язык, хотя
некоторая поддержка объектов всё-таки имеется. И всегда стоит помнить, что
использование функций поддержки ООП значительно снижает скорость выполнения
скрипта.
Где можно почитать об "изящном стиле" программирования на PHP
На ваше счастье Инет просто забит статьями о том, как правильно программировать
на PHP, вот лучшие из них:
• РАЗДЕЛ КНИГИ на PHPCLub.NET:
• Professional PHP: одна из лучших книг по PHP; годится как для настоящих профи,
так и начинающих.
• Web Application Development with PHP: замечательная книга; в ней описаны как
концепции web-программирования в целом, так и самые продвинутые функции PHP.
Кроме всего прочего, содержит официальную информацию по Zend API.
• The PHP Developer's Cookbook: книга рассчитана на помощь в решении конкретных
задач, с которыми PHP-программисты сталкиваются чаще всего (Время издания:
ноябрь 2000; авторы: ваш покорный слуга и Андрей Змиевский).
8. Недостаточное внимание к вопросам безопасности
Пользователи никогда не будут работать по нашим правилам. Поэтому создание
системы устойчивой и терпимой к ошибкам - целиком и полностью ответственность
разработчиков, то есть нас.
При разработке приложения вы должны влезть в шкуру обычного юзера. Внимательно
изучите все места, где пользовательская ошибка может вскрыть брешь в
безопасности. Затем исправьте код так, чтобы программа сама нейтрализовала все
ошибки и тем самым избавилась от потенциальных "дыр". Также важно запомнить, что
хотя все ошибки и атаки - вина пользователей, за "дыры" или за непроверенные
данные на каком-либо уровне отвечаете только вы.
Пример: многие скрипты не используют встроенную PHP-функцию mail(), которая
обеспечивает безопасную отправку почты. Вместо этого почта отправляется через
программу sendmail с помощью popen(). Это делает код весьма неустойчивым к
искажению данных и представляет собой "дыру" в безопасности системы (получателю
можно отправить /etc/passwd).
Перечислим наиболее распространённые "дыры", позволяющие искажать данные:
• системные вызовы. Никогда нелишне повторить. Каждый раз нужно убедиться, сто
пользователь отправляет вам "безопасные" данные для системного вызова. НИКОГДА
НЕ ДОВЕРЯЙТЕ ДАННЫМ, ПОЛУЧЕННЫМ ОТ ПОЛЬЗОВАТЕЛЯ. И ПРЕЖДЕ ЧЕМ ПОДСТАВИТЬ ИХ В
СИСТЕМНЫЙ ВЫЗОВ ПРОВЕРЬТЕ ИХ.
• регистрация пользователей. Если вы желаете получить корректные результаты,
обязательно проверяйте полученные данные, причём, лучше если проверка будет
состоять из нескольких этапов. Прежде всего, это проверка адреса электронной
почты: убедитесь, что пользователь предоставил вам работающий аккаунт. Кроме
того, стоит убедиться, что указанный возраст находится в определённых пределах.
Вы можете быть совершенно уверены, что на нашей планете нет двухсотлетних
товарищей, которые ещё способны сесть за компьютер.
• Приём номеров кредитных карточек. Некоторые программисты ограничиваются самыми
простыми алгоритмами; их легко обмануть. Существуют крупные специализированные
организации для проверки кредитных карточек; рекомендуем прибегать к их помощи
или ресурсам и только потом решать, принята карточка или нет. НИКОГДА НЕ
ПОЛАГАЙТЕСЬ ТОЛЬКО НА АЛГОРИТМЫ.
Безопасность системных вызовов.
Если возникает необходимость поместить полученные от пользователя данные в
системный вызов, обязательно проверьте и перепроверьте их. Убедитесь, что
данные, которые пользователь предоставил системе, не содержат "опасных"
элементов и не взломают систему нежелательными командами. Для этого PHP
предлагает специальную функцию EscapeShellCmd().
Каждый раз при системном вызове с потенциально небезопасными данными,
дезактивируйте их с помощью EscapeShellCmd():
Примечание: дезактивация проходит путём подстановки бэкслэша ("\") перед
потенциально небезопасными для системы символами (а именно:
#&;?'\"|*?~<>^()[]{}$\\\x0A\xFF).
Поиск аккаунта
if ($name) {
system (EscapeShellCmd ("lookup $name"));
print "
\n\n";
}
?>
print $PHP_SELF; ?>" method="GET">
Введите аккаунт для поиска:
Примечание: хотя EscapeShellCmd() - функция чрезвычайно полезная, когда вам
нужно убедиться в безопасности полученных данных, всегда стоит проводить
специальные проверки в зависимости от вида данных. EscapeShellCmd() не проверит
данные на корректность, она лишь предотвратит неавторизованны
Опубликовал Kest
October 26 2008 12:46:29 ·
1 Комментариев ·
65535 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •