RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 487
от 14.10.2006, 06:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 376, Экспертов: 50
В номере:Вопросов: 5, Ответов: 10


Вопрос № 58108: Подскажите ссылочку на парсер для работы с XML на PHP, если можно с примером и хелпом по функциям, т.к. дело это для меня новое. Заранее спасибо...
Вопрос № 58114: Доброго времени суток. 1 Написал код, и не могу понять в чем причина, в приложении код и что выводит, код уже сильно поправлен в сторону отладки, но совет приму. Что происходит: лишнее присваивается переменной $topics, почему не могу понять. ...
Вопрос № 58128: Уважаемые эксперты! Вот такой вопрос как извлечь из Mysql-базы текст (longtext) не целиком, а например с какой либо позиции "а" по "б". PS Для лучшего представления: делаю архив статей, и нужна разбивка по страницам (...
Вопрос № 58129: Как проверить тип переданного на сервер файла? Я умею проверять тип только по расширению, а как проверить настоящий тип? (ведь можно картинку переименовать в *.txt и передать) ...
Вопрос № 58131: Здравствуйте! Если информация, полученная пользователем, выводится на экран - это ведь дыра в безопасности? А как с этим бороться? Ну там символы всякие изменять/заменять/удалятЬ? Расскажите об этом подробней!...

Вопрос № 58.108
Подскажите ссылочку на парсер для работы с XML на PHP, если можно с примером и хелпом по функциям, т.к. дело это для меня новое. Заранее спасибо
Отправлен: 08.10.2006, 11:08
Вопрос задал: Бабин Виктор Васильевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Н.В.
Здравствуйте, Бабин Виктор Васильевич!
Нашёл следующие статьи:
http://providerz.ru/articles/php/xml-sax-dom-intro.html
http://web-support.ru/articles/2/159_1.shtml
http://www.sdteam.com/?tid=631

И ещё несколько страниц со скриптами (может, пригодятся)
http://www.creater.ru/index.php?tid=83&gid=4&topic_id=4
http://www.vanta.ru/script/catalog.php?cat=48&clas=0

Удачи!
---------
http://TheDelphi.Ru
Ответ отправил: Н.В. (статус: 6-ой класс)
Ответ отправлен: 08.10.2006, 11:22


Вопрос № 58.114
Доброго времени суток.
1 Написал код, и не могу понять в чем причина, в приложении код и что выводит, код уже сильно поправлен в сторону отладки, но совет приму.
Что происходит: лишнее присваивается переменной $topics, почему не могу понять. Об'ясните почему (где ошибка) и как исправить.

2 Читал справочник по php (This file was generated: Thu May 25 0:51:15 2006 Go to http://www.php.net/docs.php to get the actual version.) который частично русский. Читая понял возможность создания двухмерных массивов.
Вопрос: Как создать и использовать.

Приложение:

Отправлен: 08.10.2006, 12:06
Вопрос задал: Алексеенко С.Ю. (статус: 8-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Игорь Елизаров
Здравствуйте, Алексеенко С.Ю.!
То что вывели эхи
<!-- 0 !--><!-- 1 !--><!-- # !--><!-- 0 !--><!-- 1 !-->
----------
значение $topics

<hr><b>SOFT, Программы для Вашего компьютера</b><br>0<hr><b>SOFT, Программы для Вашего компьютера</b><br>0<hr><b>Hard, Все о компьютерном железе.</b><br>1
Из того, что получилось, видно, что данные в таблице Topics для поля 2 не уникальны, даже в индексах есть повторы 0 1 крокозябля 0 1 . Это говорит о том, что в исходной таблице есть записи с одинаковыми значениями поля Topics.так и задумано или это баг ?
Если хотите добиться уникальности надо изменить запрос, оставив там только те поля. которые нужны и сделав группировку по полю topics.

с уважением, Игорь
Ответ отправил: Игорь Елизаров (статус: 6-ой класс)
Ответ отправлен: 09.10.2006, 00:09
Оценка за ответ: 4
Комментарий оценки:
Загляните пожалуйста в мини-форум.
Спасибо.

Отвечает: HookEst
Здравствуйте, Алексеенко С.Ю.!
По второму вопросу привожу цитату из руководства по PHP (http://ru.php.net/download-docs.php)

Поскольку значение массива может быть чем угодно, им также может быть другой массив. Таким образом вы можете создавать рекурсивные и многомерные массивы.

Пример 6-10. Рекурсивные и многомерные массивы

<?php
$fruits = array ( "фрукты" => array ( "a" => "апельсин",
"b" => "банан",
"c" => "яблоко"
),
"числа" => array ( 1,
2,
3,
4,
5,
6
),
"дырки" => array ( "первая",
5 => "вторая",
"третья"
)
);

// Несколько примеров доступа к значениям предыдущего массива
echo $fruits["дырки"][5]; // напечатает "вторая"
echo $fruits["фрукты"]["a"]; // напечатает "апельсин"
unset($fruits["дырки"][0]); // удалит "первая"

// Создаст новый многомерный массив
$juices["яблоко"]["зеленое"] = "хорошее";
?>

Ответ отправил: HookEst (статус: 4-ый класс)
Ответ отправлен: 09.10.2006, 07:56


Вопрос № 58.128
Уважаемые эксперты!
Вот такой вопрос как извлечь из Mysql-базы текст (longtext) не целиком, а например с какой либо позиции "а" по "б".

PS Для лучшего представления: делаю архив статей, и нужна разбивка по страницам (На конце каждой страницы установливаю маркер --end page--).
Отправлен: 08.10.2006, 14:37
Вопрос задал: Golden Spider (статус: 5-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Загиров Рустам
Здравствуйте, Golden Spider!
Для этого существует функция SUBSTRING в MySQL:

$nach=1;
$kon=100;
mysql_query("SELECT SUBSTRING(text,$nach,$kon) FROM articles")

Этот запрос выберет 100 первых символов из поля text таблицы articles.
P.S. Надо заметить, что первый символ имеет индекс не 0, как в PHP, а 1.
---------
Этот мир обречён на нас
©Сергей Маврин
Ответ отправил: Загиров Рустам (статус: Практикант)
Ответ отправлен: 08.10.2006, 15:02
Оценка за ответ: 5
Комментарий оценки:
Thank you very much!

Отвечает: Samum
Здравствуйте, Golden Spider!
MySQL богата различными функциями для обработки строк на стороне сервера. Для ваших целей подойдет такой запрос:

mysql_query("
SELECT REPLACE(
SUBSTRING(SUBSTRING_INDEX(txt,'--end page--',$page_num),
LENGTH(SUBSTRING_INDEX(txt,'--end page--',$page_num-1))+1),
'--end page--',
'')
FROM qwer");

где $page_num - номер страницы. Это, конечно, не истина в последней инстанции, но общее направление движения уже видно :)
Кстати, если маркер новой страницы оформить в качестве html комментария, то от использования функции replace можно будет отказаться.
---------
Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Ответ отправлен: 08.10.2006, 15:46
Оценка за ответ: 5
Комментарий оценки:
Круто! Каждый день работаю с Mysql и каждый нахожу новые фичи! Спасибо!


Вопрос № 58.129
Как проверить тип переданного на сервер файла? Я умею проверять тип только по расширению, а как проверить настоящий тип? (ведь можно картинку переименовать в *.txt и передать)
Отправлен: 08.10.2006, 14:54
Вопрос задал: Бобровский Сергей Сергеевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Загиров Рустам
Здравствуйте, Бобровский Сергей Сергеевич!
Можно попытаться узнать при загрузке файла через глобальный массив $_FILES.
$_FILES['imja_polya']['type']
---------
Этот мир обречён на нас
©Сергей Маврин
Ответ отправил: Загиров Рустам (статус: Практикант)
Ответ отправлен: 08.10.2006, 15:16

Отвечает: Евгений Крюков
Здравствуйте, Бобровский Сергей Сергеевич!
Такой функции нет, мы можем проверять лишь некоторые типы файлов. Например, с картинками все просто - при устанновленном расширении GD есть функция getimagesize, которая возвращает массив, в котором 3 элементом идет тип графического файла. Вот функция:

function GetImgType($filename) {
$size = getimagesize($filename);
if($size[2]==2) return "jpg";
elseif($size[2]==3) return "png";
elseif($size[2]==1) return "gif";

} показывающая, как работает getimagesize
---------
Большинство ответов на вопросы в рассылках находиться через Яндекс за 1 мин.
Ответ отправил: Евгений Крюков (статус: Студент)
Ответ отправлен: 08.10.2006, 15:16
Оценка за ответ: 5
Комментарий оценки:
спасибо, как раз то, что нужно

Отвечает: Cimus
Здравствуйте, Бобровский Сергей Сергеевич!
После загрузки файлов на сервер, данные можно получить из массива $HTTP_POST_FILES или $_FILES.
Этот массив является двумерным. Первый уровень определяет имена полей, в которых находятся параметры файла. Одна форма может отправлять несколько файлов, поэтому $HTTP_POST_FILES['поле'] - указывает на нужный файл. Для формы из примера это будет $HTTP_POST_FILES['file1'] и $HTTP_POST_FILES['file2'] соответственно.
Второй уровень определяет свойства загруженного файла. Здесь есть следующие элементы:
1)name - имя файла источника на машине клиента
2)type - тип файла
3)tmp_name - имя временного файла, куда был загружен файл пользователя
4)size - размер файла
5)error - номер ошибки
Если на сервер закачать файл в формате GIF то в поле type будет содержаться текст imagegif. До знака слэш находиться тип image, а после слэша стоит расширение файла. Для JPEG-файлов после слэша можно увидеть одно из расширений jpg, ipeg или pjpeg, а для PNG-файла будет png.
Если передать на сервер простой текстовый файл с расширением gif в переменной type будет text/plain. Хотя судя по расширению, этот файл должен быть графическим, программа «видит», что тип файла текстовый. Получается, что нельзя верить расширению, а вот типу фала можно.

Вот пример проверки файла.
<?
preg_match(“’([a-z]+)/[x-]*([a-z]+)’”, $_FILE[‘file1’][‘type’],$ext);
print ‘<p>’. $ext[1];
print ‘<p>’. $ext[2];

switch($ext[2])
{
Case “jpg”:
Case “jpeg”:
Case “pjpeg”:
Case “gif”:
Case “png”:
Break;
Default:
Die(‘<p>Это не картинка’);

}

?>



Но этого недостаточно. Нелишне проверить размер картинки. Даже если у Вас нет ограничения на размер файла, полезно вызвать функцию getimagesize().
Этой фукции передаётся путь до файла, а в результате мы получаем размеры картинки.
Функция getimagesize() возвражает массив из свойст графического файла. В этом массиве элементы нумеруются с нуля и содержат следующее:
0) ширина картинки
1) высота
2) тип, где 1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP, 7=TIFF (формат intel), 8=TIFF (формат motorola), 9=JPC, 10=JP2, 11=JPX
3) строка вида height=yyy width=xxx.
Таким образом файл можно признать правильным только в случае, когда значения нулевого и первого элемента больше нуля. Картинка не должна иметь ширину или высоту равной нулю, иначе она бессмысленна или содержит некорректные данные.
P.S.
Недавно была найдена ошибка в функциях определения размера в PHP. Да, функций несколько. Для каждого типа файла есть своя функция, но все они объединены в в одну getimagesize() . Если сценарию передать графический файл TIFF, в котором будет указан размер -8, то сценарий попадает в бесконечный цикл.

Приложение:

---------
Достичь можно любых высот !

Ответ отправил: Cimus (статус: 8-ой класс)
Ответ отправлен: 08.10.2006, 18:31
Оценка за ответ: 5
Комментарий оценки:
preg_match("'([a-z]+)/[x-]*([a-z]+)'", $_FILES['file1']['type'],$ext); - а можно узнать, что это такое?


Вопрос № 58.131
Здравствуйте! Если информация, полученная пользователем, выводится на экран - это ведь дыра в безопасности? А как с этим бороться? Ну там символы всякие изменять/заменять/удалятЬ? Расскажите об этом подробней!
Отправлен: 08.10.2006, 14:55
Вопрос задал: Бобровский Сергей Сергеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Загиров Рустам
Здравствуйте, Бобровский Сергей Сергеевич!
Обычно, надо отменять тэги в тексте. Для отмены преобразования введённого текста в тэги есть функция htmlspecialchars, которая преобразует символы открытия и закрытия тэгов в знаки меньше и больше, соответственно.
---------
Этот мир обречён на нас
©Сергей Маврин
Ответ отправил: Загиров Рустам (статус: Практикант)
Ответ отправлен: 08.10.2006, 15:16

Отвечает: Евгений Крюков
Здравствуйте, Бобровский Сергей Сергеевич!
Вам помогут две функции: htmlspecialchars заменить знаки тегов в HTML сущности:
$new = htmlspecialchars("Test", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>
, а strip_tags просто вырежет все HTML и PHP теги из строки.

---------
Большинство ответов на вопросы в рассылках находиться через Яндекс за 1 мин.
Ответ отправил: Евгений Крюков (статус: Студент)
Ответ отправлен: 08.10.2006, 15:21


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное