Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Бип из системно... 58767
Invision Power ... 57732
Организация зап... 57528
Модуль Forms 56557
Создание отчето... 55176
Приложение «Про... 54931
Подключение Mic... 54713
Оператор выбора... 54511
ТЕХНОЛОГИИ ДОСТ... 51235
Программируемая... 47880
Пример работы с... 46994
Имитационное мо... 46927
21 ошибка прогр... 41967
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

Пользователей: 13,008
новичок: pelageya
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Обработка задач на ЭВМ на GPSS + Пояснительная записка
Обучающая и тестирующая программа по здаче экзамена ПДД на Turbo Pascal ...
База данных междугородних телефонных разговоров на Delphi

Реклама

21 ошибка программиста PHP
Например, для перевода целой строки в заглавные буквы, новичок в 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);
В общем, всегда следует искать более "лёгкую" замену регулярным выражениям, поскольку скорость выполнения вашего скрипта в таких случаях резко возрастает.
Эти функции должен знать каждый
Здесь будут перечислены несколько жизненно необходимых функций, сокращающих время выполнения вашего скрипта:

strtoupper(); strtolower(); ucfirst(); strtr(); str_replace(); trim(); explode(); implode(); substr(); strcmp()

При успешной замене замену регулярного выражения одной из этих функций вы можете рассчитывать на резкое повышение скорости, особенно если анализу подвергаются строки больших размеров.
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');
}

while ($line = @fgets ($fp, 1024)){
list($name, $quote) = explode (':', $line);
$quotes[ $name ] = $quote;
}

foreach ($quotes as $name => $quote){
print "$name: ";
print implode (" ", array_reverse (preg_split ('//', $quote)));
print "\n";
}

@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 15:46:29 · 1 Комментариев · 41967 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Страница 4 из 4 < 1 2 3 4
Комментарии
Михаил November 24 2010 16:20:09
По-моему статья не закончена.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Отлично! Отлично! 50% [1 Голос]
Очень хорошо Очень хорошо 0% [Нет голосов]
Хорошо Хорошо 50% [1 Голос]
Удовлетворительно Удовлетворительно 0% [Нет голосов]
Плохо Плохо 0% [Нет голосов]
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере!
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Plasma
Библиотека програ...
Калькулятор [Исхо...
Программа "AutoRu...
ATComponents
Microsoft SQL Ser...
Prolog Interprete...
Распознавание тек...
Run
Rotolabel
Язык программиров...
Java 2. Наиболее ...
Архив программ
Создание меню на ...
Dbgridpack
SynEdit
PBFoldder
Delphi. Учимся на...
Определние размер...
Иллюстрированный ...

Топ загрузок
Приложение Клие... 100276
Delphi 7 Enterp... 75339
Converter AMR<-... 20017
Borland C++Buil... 10492
GPSS World Stud... 8868
Borland Delphi ... 7496
Turbo Pascal fo... 6868
Visual Studio 2... 4869
Калькулятор [Ис... 3852
FreeSMS v1.3.1 3482
Случайные статьи
Основные понятия с...
Рекурсивное вычисл...
Другая трактовка с...
Доступ к объектной...
Рассмотрим теперь ...
Одномерные массивы
Продвижение сайта SEO
Создание, выделени...
Универсальный клей
Пароль на страницу
Иногда поддерживаю...
Арифметика с плава...
Иногда хорошая спе...
Драйвер ip
Проектирование про...
Как работает проек...
на попытки сканиро...
Объектные модели M...
Ключевые слова
Реляционные отноше...
Введение
Мой отец вбил это ...
Немного о прерываниях
Импорт статических...
СGІ-запрос
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?