![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Я программирую на PHP уже больше года. Опыта пребавляется, но всё же остались пару вопросов по PHP.
1.Какая функция быстрее работает print() или echo()? 2.Как работает функция rand()? 3.Почему говорят, что функцию htmlspecialchars лучше писать не перед записью в БД, а перед выводом на экран? 4.$a=(int)$_POST['a']; и $a=$_POST['a']; Чем различаются эти две записи? 5.Как реализовать функцию wget через PHP? 6.
Как обезопасить эту запись? Вопросы будут пополняться, попытаюсь писать только важные для меня.. Добавлено через 1 минуту и 40 секунд 7. Какие перспективы развития у PHP? Будет ли он обновляться, т.е. есть ли смысл базировать свои проекты на нём. |
|||
|
||||
| Fally |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: 3 Всего: 4 |
1.Какая функция быстрее работает print() или echo()?
echo() 2.Как работает функция rand()? Так реализовано в системе, в РНР по-моему принцип тот же...
3.Почему говорят, что функцию htmlspecialchars лучше писать не перед записью в БД, а перед выводом на экран? Потому, что данные в БД меньше места занимсать будут, а значит и запросы выполняться быстрее... 4.$a=(int)$_POST['a'];
и $a=$_POST['a']; Чем различаются эти две записи? Если предполагается, что $a - целочисленная переменная, то первый вариант тебя обезопасит и принудительно приведёт переменную к типу int, если же переменная не целочисленная, то второй вариант самое-то (если переменная должна быть строкой и т.д.) 5.Как реализовать функцию wget через PHP? Всмысле? Скачивать\заливать файлы? Инфы в нете полно, юзай гугл. 6.
Все переменные($ip, $site,...) обрами вызовом mysql_real_escape_string(), от SQL-injection защитишся... 7. Какие перспективы развития у PHP? Будет ли он обновляться, т.е. есть ли смысл базировать свои проекты на нём. Есть... скоро РНР6 выйдет + Зенд вроде как сотрудничать с майкрософт собираются. Это сообщение отредактировал(а) Fally - 22.10.2007, 22:36 |
||||||
|
|||||||
| SelenIT |
|
||||||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
По скорости одинаковы (в пределах погрешности измерения), а вот функцией из них является только одна - print().
Потому что, кроме вывода на экран, с информацией приходится делать еще много всего (парсить, делать поиск, переводить из формата в формат и т.д.). Если там нормальный HTML, с ним можно работать ф-цией strip_tags, модулем Tidy, простейшими регулярками (в т.ч. прямо в запросе) и т.п., а если результат htmlspecialchars - придется извращаться. А вот пользы от htmlspecialchars, кроме как при выводе на экран, нет никакой.
См. здесь. Не стоит злоупотреблять "собакой", лучше явно проверять переменные на isset/empty. Нельзя доверять ничему, что приходит от юзера (в частности, HTTP-заголовкам запроса), HTTP_USER_AGENT-а тоже может не оказаться (при тестовом запросе телнетом, к примеру), поэтому надо бы тоже предусмотреть дефолтное значение (по аналогии с реферером). Нужно также ограничить максимальную длину этих строк (чтобы туда не впихнули несколько мегабайт мусора). И, как верно заметил Fally, нужно прослешить $site, $comp и (на всякий пожарный;) $where с помощью mysql_real_escape_string(), причем сделать это правильно. А ip лучше перевести в числовой вид (ip2long в PHP либо INET_ATON в MySQL) - это не связано напрямую с безопасностью, но упростит и ускорит дальнейшую работу (выборки, сортировки и т.п.), да и место на диске сэкономит.
Свою сегодняшнюю нишу PHP в любом случае в ближайшее время не потеряет, имхо можно не беспокоиться. -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
||||||
|
|||||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
2 и 3. Большое спасибо за ответ.
Есстественно, есть ещё вопросы 2. 4. Понял значит (int) даст мне более защишенный, быстроработающий скрипт, если будет данная в формате, (int), а имеет ли смысл писать $a=(string)$_POST['a']; даст ли это более быструю работу с строковой переменной. 5. Как залить сервер на файл-знаю. А вот как скачать из всемирной паутины какой то скрипт, например как Google делает своё индексирование страниц? 6. Зенд это как я понял компания, разрабатывающая PHP? А какие значительные обновления будут в 6-й версии? 3. 6. Насчет собаки понял.
В PHP понятно как сделать переменную тип ip2long ( помойму $ip=(ip2long)$_SERVER['REMOTE_ADDR']; ), а вот в MySQL я типа данных INET_ATON не нашёл. |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
m1kle,
4. Использование (int) действительно улучшает безопасность, на скорость практически не влияет (если злоупотреблять преобразованием типов в особо крупных размерах, напр. в больших циклах - может даже слегка тормозить, но безопасность тут важнее). Использовать (string) для данных, пришедших от пользователя ($_GET, $_POST, $_COOKIE) нет смысла - они и так всегда имеют строковый тип. 5. Простейший способ - file_get_contents при включенной настройке allow_url_fopen. Более универсальные средства - сокеты (fsockopen "со товарищи") и CURL. Примеры использования есть в мануале по ним. 6. INET_ATON - это не тип данных, это встроенная функция, которая переводит привычное представление IP "числа с точками" в UNSIGNED INT (аналог PHP-шной функции ip2long). 7. На этом форуме есть большая тема про PHP6 -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Вот такой ещё вопрос: В PHP принято начинать код символоми "<?php", я всегда начинал символами "<?". Всё работало отлично, в чем различие между первым началом и второв ( в работе программы ).
|
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Использование коротких тегов зависит от директивы php.ini enable_short_tags - следовательно может не работать там, где она выключена.
К тому же XML-файлы содержат такой же тег и может возникнуть путаница. |
|||
|
||||
| Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: 3 Всего: 4 |
ну скажем не путаница а фатал еррор -) интерпритатор содержимое ХМЛа может принять за PHP-код. |
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Появился вопрос. Точнее проблемы, сейчас пишу программу, которая будет скачивать файлы с сервера ( большие ). Пишет Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 5216185 bytes) in /home/httpd/m1kle.ru/test/a.php on line 3
Использовал fopen(). Как убрать из fopen() ограничение на размер файла? |
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
ой, ошибку пишет не в fopen, а в stream_get_contents()
|
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
m1kle, это значит, что превышен лимит памяти на скрипт (задается параметром memory_limit в php.ini, по умолчанию 8 МБ).
Не надо считывать большие файлы откуда бы то ни было в память целиком. Лучше читать их построчно либо "покусочно" (fgets, fread) в цикле и так же сохранять у себя (fwrite)... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Попытался реализовать построчную запись файла.
Пишет ту же ошибку. |
|||
|
||||
| Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: 3 Всего: 4 |
Вот из-за этого и ошибка... ты файл целиком запрашиваешь... кстати, время работы скрипта тоже ограничено, так что не пытайся большие файлы качать) |
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Скачивайте не сразу весь контент, а порциями.
Это сообщение отредактировал(а) flashaa - 6.11.2007, 17:54 |
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
А как мне скачивать порциями, где найти алгоритм. А вообще я и могу В PHP.ini изменить, но мне надо первую строку отдельно считать, там храниться дата создания mp3 файла.
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |