Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Много вопросов по PHP 
:(
    Опции темы
m1kle
Дата 22.10.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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.
Код

    $ip=$_SERVER['REMOTE_ADDR'];
    $site=@ $_SERVER['HTTP_REFERER'];
    $comp=$_SERVER['HTTP_USER_AGENT'];
    $time=date("Y-m-j, H:i:s");
    $where=$_SERVER['SCRIPT_FILENAME'];

    if(!$site)$site="n";

    $ins_enter="insert into `enters` (`ip`,`site`,`time`,`comp`,`where`) values ('$ip','$site','$time','$comp','$where')";
    $q_ins_enter=mysql_query($ins_enter); 
 
Как обезопасить эту запись?

Вопросы будут пополняться, попытаюсь писать только важные для меня..

Добавлено через 1 минуту и 40 секунд
7.
Какие перспективы развития у PHP? Будет ли он обновляться, т.е. есть ли смысл базировать свои проекты на нём.
PM MAIL WWW MSN   Вверх
Fally
Дата 22.10.2007, 22:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



1.Какая функция быстрее работает print() или echo()?
echo()
2.Как работает функция rand()?
Так реализовано в системе, в РНР по-моему принцип тот же...
Код

/* (в модуле stdlib.h) */
#define RAND_MAX 32767

/* "пример" от комитета ANSI-C */
unsigned long next=1;

int rand(void) {
 next=next*1103515245+12345;
 return((unsigned int)(next/65536)%32768);
}

void srand(unsigned int seed) {
 next=seed;
}

3.Почему говорят, что функцию htmlspecialchars лучше писать не перед записью в БД, а перед выводом на экран?
Потому, что данные в БД меньше места занимсать будут, а значит и запросы выполняться быстрее...
4.$a=(int)$_POST['a'];
Код



и
$a=$_POST['a'];
Чем различаются эти две записи?
Если предполагается, что $a - целочисленная переменная, то первый вариант тебя обезопасит и принудительно приведёт переменную к типу int, если же переменная не целочисленная, то второй вариант самое-то (если переменная должна быть строкой и т.д.)
5.Как реализовать функцию wget через PHP?
Всмысле? Скачивать\заливать файлы? Инфы в нете полно, юзай гугл.
6.
Код

$ins_enter="insert into `enters` (`ip`,`site`,`time`,`comp`,`where`) values ('$ip','$site','$time','$comp','$where')";

Все переменные($ip, $site,...) обрами вызовом mysql_real_escape_string(), от SQL-injection защитишся...

7. Какие перспективы развития у PHP? Будет ли он обновляться, т.е. есть ли смысл базировать свои проекты на нём.

Есть... скоро РНР6 выйдет + Зенд вроде как сотрудничать с майкрософт собираются.

Это сообщение отредактировал(а) Fally - 22.10.2007, 22:36


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
SelenIT
Дата 22.10.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(m1kle @  22.10.2007,  20:55 Найти цитируемый пост)
1.Какая функция быстрее работает print() или echo()?

По скорости одинаковы (в пределах погрешности измерения), а вот функцией из них является только одна - print(). smile
Цитата(m1kle @  22.10.2007,  20:55 Найти цитируемый пост)
3.Почему говорят, что функцию htmlspecialchars лучше писать не перед записью в БД, а перед выводом на экран?

Потому что, кроме вывода на экран, с информацией приходится делать еще много всего (парсить, делать поиск, переводить из формата в формат и т.д.). Если там нормальный HTML, с ним можно работать ф-цией strip_tags, модулем Tidy, простейшими регулярками (в т.ч. прямо в запросе) и т.п., а если результат htmlspecialchars - придется извращаться. А вот пользы от htmlspecialchars, кроме как при выводе на экран, нет никакой.
Цитата(m1kle @  22.10.2007,  20:55 Найти цитируемый пост)
4.$a=(int)$_POST['a'];
и
$a=$_POST['a'];
Чем различаются эти две записи?

См. здесь.
Цитата(m1kle @  22.10.2007,  20:55 Найти цитируемый пост)
6.

    $ip=$_SERVER['REMOTE_ADDR'];
    $site=@ $_SERVER['HTTP_REFERER'];
    $comp=$_SERVER['HTTP_USER_AGENT'];
    $time=date("Y-m-j, H:i:s");
    $where=$_SERVER['SCRIPT_FILENAME'];
    if(!$site)$site="n";
    $ins_enter="insert into `enters` (`ip`,`site`,`time`,`comp`,`where`) values ('$ip','$site','$time','$comp','$where')";
    $q_ins_enter=mysql_query($ins_enter); 
 
Как обезопасить эту запись?

Не стоит злоупотреблять "собакой", лучше явно проверять переменные на isset/empty. Нельзя доверять ничему, что приходит от юзера (в частности, HTTP-заголовкам запроса), HTTP_USER_AGENT-а тоже может не оказаться (при тестовом запросе телнетом, к примеру), поэтому надо бы тоже предусмотреть дефолтное значение (по аналогии с реферером). Нужно также ограничить максимальную длину этих строк (чтобы туда не впихнули несколько мегабайт мусора). И, как верно заметил Fally, нужно прослешить $site, $comp и (на всякий пожарный;) $where с помощью mysql_real_escape_string(), причем сделать это правильно.

А ip лучше перевести в числовой вид (ip2long в PHP либо INET_ATON в MySQL) - это не связано напрямую с безопасностью, но упростит и ускорит дальнейшую работу (выборки, сортировки и т.п.), да и место на диске сэкономит.
Цитата(m1kle @  22.10.2007,  20:55 Найти цитируемый пост)
7.
Какие перспективы развития у PHP? Будет ли он обновляться, т.е. есть ли смысл базировать свои проекты на нём.

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


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
m1kle
Дата 23.10.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



2 и 3. Большое спасибо за ответ.
Есстественно, есть ещё вопросы smile. Сначало вопросы к вопросам.

2.
4. Понял значит (int) даст мне более защишенный, быстроработающий скрипт, если будет данная в формате, (int), а имеет ли смысл писать $a=(string)$_POST['a']; даст ли это более быструю работу с строковой переменной.
5. Как залить сервер на файл-знаю. А вот как скачать из всемирной паутины какой то скрипт, например как Google делает своё индексирование страниц?
6. Зенд это как я понял компания, разрабатывающая PHP? А какие значительные обновления будут в 6-й версии?

3.
6. Насчет собаки понял.
Цитата

А ip лучше перевести в числовой вид (ip2long в PHP либо INET_ATON в MySQL) - это не связано напрямую с безопасностью, но упростит и ускорит дальнейшую работу (выборки, сортировки и т.п.), да и место на диске сэкономит.

В PHP понятно как сделать переменную тип ip2long ( помойму $ip=(ip2long)$_SERVER['REMOTE_ADDR']; ), а вот в MySQL я типа данных INET_ATON  не нашёл.
PM MAIL WWW MSN   Вверх
SelenIT
Дата 23.10.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 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 smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
m1kle
Дата 25.10.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Вот такой ещё вопрос: В PHP принято начинать код символоми "<?php", я всегда начинал символами "<?". Всё работало отлично, в чем различие между первым началом и второв ( в работе программы ).
PM MAIL WWW MSN   Вверх
flashaa
Дата 25.10.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Использование коротких тегов зависит от директивы php.ini enable_short_tags - следовательно может не работать там, где она выключена.
К тому же XML-файлы содержат такой же тег и может возникнуть путаница.
PM MAIL   Вверх
Fally
Дата 25.10.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Цитата(flashaa @  25.10.2007,  20:57 Найти цитируемый пост)
может возникнуть путаница. 

ну скажем не путаница а фатал еррор -) интерпритатор содержимое ХМЛа может принять за PHP-код.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
m1kle
Дата 3.11.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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() ограничение на размер файла?
PM MAIL WWW MSN   Вверх
m1kle
Дата 3.11.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



ой, ошибку пишет не в fopen, а в stream_get_contents()

PM MAIL WWW MSN   Вверх
SelenIT
Дата 3.11.2007, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



m1kle, это значит, что превышен лимит памяти на скрипт (задается параметром memory_limit в php.ini, по умолчанию 8 МБ).

Не надо считывать большие файлы откуда бы то ни было в память целиком. Лучше читать их построчно либо "покусочно" (fgets, fread) в цикле и так же сохранять у себя (fwrite)...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
m1kle
Дата 3.11.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Попытался реализовать построчную запись файла.
Код

if ($stream = fopen('http://www.vedomosti.ru/podcast/files/2007/11/02/vedomosti.mp3', 'r')) {
    $text=(string)stream_get_contents($stream);
    fclose($stream);
    $handle=fopen("/home/httpd/m1kle.ru/test/1.mp3", "w+!#");
    while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    fwrite($handle, $buffer);
    }
 }

Пишет ту же ошибку.
PM MAIL WWW MSN   Вверх
Fally
Дата 6.11.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Код

$text=(string)stream_get_contents($stream);

Вот из-за этого и ошибка... ты файл целиком запрашиваешь... кстати, время работы скрипта тоже ограничено, так что не пытайся большие файлы качать)


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
flashaa
Дата 6.11.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Скачивайте не сразу весь контент, а порциями.

Это сообщение отредактировал(а) flashaa - 6.11.2007, 17:54
PM MAIL   Вверх
m1kle
Дата 6.11.2007, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



А как мне скачивать порциями, где найти алгоритм. А вообще я и могу В PHP.ini изменить, но мне надо первую строку отдельно считать, там храниться дата создания mp3 файла.
PM MAIL WWW MSN   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1131 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.