Навигация
Главная
Поиск
Форум
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
Эмулятор микроп... 65535
Приложение «Про... 64054
Организация зап... 62734
Оператор выбора... 62495
Invision Power ... 62148
Подключение Mic... 60897
Модуль Forms 59874
Создание отчето... 59792
ТЕХНОЛОГИИ ДОСТ... 55979
Программируемая... 55414
Пример работы с... 53075
Имитационное мо... 51361
21 ошибка прогр... 46353
Реклама
Сейчас на сайте
Гостей: 14
На сайте нет зарегистрированных пользователей

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

Моделирование системы управления качеством производственного процесса на...
База данных междугородних телефонных разговоров на Delphi
База данных студентов на Delphi (файл записей) + Блок схемы

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
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 Комментариев · 46353 Прочтений · Для печати

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


Страница 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...
Шаблон для новост...

Случайные загрузки
Apollovcl61
Delphi 2005 Секре...
Программирование ...
Abbrevia
Run
Delphi 7 Enterpri...
CS:Source - монит...
Srinilist
Java 2. Наиболее ...
KOL & MCK v1.69
ActiveX в Delphi
Geo-Whois
Разработка интерн...
Измерение тактово...
Мод "проверочный ...
Разработка Web-пр...
База Allsubmitter...
Размещение элемен...
Синтаксический ан...
Программа предназ...

Топ загрузок
Приложение Клие... 100366
Delphi 7 Enterp... 82051
Converter AMR<-... 20046
Borland C++Buil... 11039
GPSS World Stud... 10372
Borland Delphi ... 8030
Turbo Pascal fo... 6957
Visual Studio 2... 4961
Калькулятор [Ис... 4250
FreeSMS v1.3.1 3508
Случайные статьи
Интерфейс доступа ...
Несколько мелких х...
Переработка
telling (X)
Invalid subrange b...
«Умный» массив
Аргументы переменн...
Новинка планшетов ...
Курс информатики д...
Презентации Prezi
Объекты Range и Cells
Другие реализации ...
Авторизуйте только...
Добавление и измен...
Модификации лэптопов
Средства отладки -...
Профессиональный с...
Сканирование фотог...
Обзор ассоциативны...
Для постоянных при...
Руки прочь от PHP!
Замечание по повод...
• доступ к архивны...
Сам механизм RTTI ...
Слияние двух списков
Статистика



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


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