Моя первая страница на PHP (С чего начать?)

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Scorpion
Сообщения: 37
Благодарил (а): 7 раз
Поблагодарили: 3 раза

Re: Моя первая страница на PHP (С чего начать?)

Сообщение Scorpion » Пт авг 19, 2016 9:01 am

pessimist, есть предложение: создайте отдельную тему для Ваших шпаргалок, туда выкладывайте рисунки. Уверен так будет удобнее многим читателям.

И вот ещё одна тема про парсер: PHP Парсер сайтов со своим USER AGENT, как можно задать любые параметры.
Реклама
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

Re: Моя первая страница на PHP (С чего начать?)

Сообщение pessimist » Пт авг 19, 2016 11:47 am

Здравствуйте, Scorpion!

Большое спасибо за ссылку на тему про парсинг, уверен, что она будет мне очень полезна.
Scorpion писал(а): создайте отдельную тему для Ваших шпаргалок, туда выкладывайте рисунки. Уверен так будет удобнее многим читателям.

Читатель - это наше всё!!!

Когда я прочел про удобство читателей в моей голове, как тараканы, сразу забегали многочисленные вопросы:

1) Какое удобство в том, чтобы выложить в отдельную тему рисунки, если они привязаны к конкретным сообщениям и конкретному коду?
2) Если выносить сообщения с рисунками в отдельную тему, то как ее назвать?
3) Может, вообще создать отдельную тему, вроде "PHP Первые шаги Ученик форума и его конспект" и все обсуждение с первого моего поста вынести туда?
4) Что думает по этому поводу Slash?

В общем, с удовольствием познакомлюсь с мнением всех форумчан, желающих высказаться по этому поводу.
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Re: Моя первая страница на PHP (С чего начать?)

Сообщение Slash » Пт авг 19, 2016 12:06 pm

pessimist писал(а):Что думает по этому поводу Slash?

Ну, тогда, по порядку:
1. Картинки делаются для какого то конкретного поста и логичнее их оставить там, куда их вставили изначально. Но картинки-шпаргалки (автора pessimist) ( судя по двум картинкам ) нарисованы так, что их действительно можно выложить в отдельную тему не ссылаясь на сообщения, для каких они готовились.
2. Может Шпаргалка PHP или как то так... Идея с отдельной темой со шпаргалками, мне кажется стоящей.
3. Если хотите, я отделю и переименую тему. На Ваше усмотрение!
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

Re: Моя первая страница на PHP (С чего начать?)

Сообщение pessimist » Пт авг 19, 2016 12:40 pm

Slash писал(а):2. Может Шпаргалка PHP или как то так... Идея с отдельной темой со шпаргалками, мне кажется стоящей.

Анекдот:
Два студента в коридоре общежития:
- Слушай, побудь моим репетитором по английскому, а ?
- Ну, понимаешь... Просто помочь подучить английский - это одно, а побыть репетитором... Это подразумевает некоторую оплату.
- Пельмени???
- Согласен!!!

Проблема в том, что выделение шпаргалок в отдельную тему все-таки требует эти шпаргалки делать универсальными и не привязанными к конкретным постам. Скажу по секрету, что изготовление рисунков немного трудозатратно для меня и когда я их делаю, то в первую очередь думаю о себе любимом. Универсальные шпаргалки для меня куда менее полезны, чем те, которые я делаю. В качестве "пельменей" я разместил на фоне рисунков адрес форума, чтобы любители копипаста обеспечили форуму немного вирусной рекламы.
Slash писал(а):3. Если хотите, я отделю и переименую тему. На Ваше усмотрение!

Тут опять тараканы забегали в моей голове... В этот раз в образе "бредовых" мыслей...

А что, если сделать отдельный раздел "Ученики форума", где желающий изучать PHP форумчанин может вести свой конспект в форме отдельной темы. Ну, это я думаю о том, что у каждого своя первая страница на PHP, то есть всем интересны разные учебные задачи. Это пока даже не мысли - так, измышлизмы :)
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

Re: Моя первая страница на PHP (С чего начать?)

Сообщение pessimist » Пт авг 19, 2016 6:16 pm

Тем временем, пока измышлизмы туманят мой мозг, я продолжаю грызть гранит науки.

Сделал следующую, третью шпаргалку про мой первый условный оператор в PHP. В ней правда, нет отметок об указателе подавления вывода ошибок, но на этот указатель реально не хватило места.

Итак, третья шпаргалка:
Моя первая страница на PHP С чего начать?  - Ris_3.png
 


Повторюсь, что доступ на хостинг у меня есть только вечером. Поэтому прежде, чем приступить к испытанию кода из поста уважаемого Slash я продолжил осмысление условного оператора if.

Мне вдруг подумалось о том, что мой блог работает на движке Вордпресс и если адрес страницы указан неверно, то движок генерирует свою собственную страницу по 404 ошибке. Не будет ли эта сгенерированная страница принята функцией file_get_contents за источник для парсинга?

В общем, первое что сделал на хостинге - это наколотил код условного оператора. И запустил. В ответ получил на экране кракозябры в случае указания правильного адреса и в случае указания неправильного адреса.

Анекдот:
Обращение пользователя в службу поддержки:
- Уменясломалсяпробелчтоделать?
- Настоящему_программисту_не_нужны_пробелы!

В общем - если видишь кракозябры - значит дело в кодировке, а если дело в кодировке - пиши сообщения транслитерацией :)
Я так и сделал. Убедился, что все мои опасения напрасны. Функция file_get_contents возвращает ложь и в том случае про который я писал выше.

Набил код, запустил программу на выполнение и получил файл report.txt. Прежде, чем двигаться дальше - решил все-таки повоевать с кракозябрами. Обернул код программы тегами html страницы и в мета-теге сообщил всем браузерам, что следует использовать кодировку UTF-8.

Получилось как-то так:

Код: Выделить всё

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
$url 
'http://begomotbed.ru';
$html file_get_contents($url);
if (
$html)
{
preg_match_all('|<a(.*?)</a>|'$html$links);
$report null;
foreach (
$links[1] as $link)
{
preg_match('|\>(.*?)$|'$link$anchor);
preg_match('|href="(.*?)"|'$link$www);
if (isset(
$www[1]) && $www[1] != '#')
{
$text    strip_tags($anchor[1]);
$text    trim($text);
$text    = !empty($text) ? $text 'Без анкора';
$report .= $text ': ' $www[1] . "\n";
}
}
$fopen fopen('report.txt''w');
$write fwrite($fopen$report);
fclose($fopen);
}
else
{
    exit(
'Ничего не вышло спарсить у самого себя');
}
?>
</body>
</html>

Из кода перед функцией file_get_contents убрал собачку, чтобы посмотреть, что будет если не подавлять ошибку. Оказалось все очень даже миленько, в папке, где размещался код первой страницы на PHP, в случае задания адреса несуществующей страницы появился текстовый файлик error.log где и содержались все ругательства функции file_get_contents

Продолжаю изучать код, который написал Slash
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

Re: Моя первая страница на PHP (С чего начать?)

Сообщение pessimist » Вс авг 21, 2016 11:52 pm

Здравствуйте, уважаемые форумчане!

Продолжаю "разгрызать" код своей первой страницы на PHP. На этот раз я решил продолжить его грызть с его последних строк. Объясняю почему меня так метнуло.

Очень уж хотелось посмотреть, а что там, внутри у переменной $html? Поначалу я пробовал сделать это с помощью функции echo, которая выводит содержимое переменной. Но функция вывела содержимое переменной в окно браузера, а тот, в свою очередь, распознал HTML код и с радостью отразил содержимое как веб страницу.

Тогда я решил сохранить ее содержимое в текстовый файл с названием report_1.txt. Уважаемый Slash любезно снабдил меня куском кода, который занимается записью переменной в файл.

Когда есть переменная, содержимое которой нужно записать файл, нужно сделать три простых действия:

1) Открыть файл
2) Записать данные из переменной
3) Закрыть файл

Вроде бы на первый взгляд ничего сложного, но дьявол кроется в мелочах... Поэтому я сделал четвертую шпаргалку, посвященную первому действию "Открыть файл".
Моя первая страница на PHP С чего начать?  - Ris_4.png
 

В четвертой шпаргалке, как и, собственно, в коде рассматривается исключительно параметр W функции fopen. На всякий случай, я решил записать здесь и другие параметры, которые можно указывать для функции fopen вместо параметра W:
  1. r-существующий файл открывается только для чтения. Если файла с указанным именем не существует функция возвращает ложь false. Если файл открыт успешно, то курсор чтения устанавливается на первый байт, т.е. на самое начало файла;
  2. r+-существующий файл открывается одновременно на чтение и запись. Если файла с указанным именем не существует функция возвращает ложь false. Если файл открыт успешно, то курсор чтения устанавливается на первый байт, т.е. на самое начало файла. Но если курсор будет находится на середине файла, то данные запишутся поверх уже имеющихся, а не "раздвинут" их;
  3. w+-открывает существующий файл, тут же стирает все его содержимое и дальше позволяет работать с файлом как в режиме чтения, так и в режиме записи. Если файла с указанным именем не существует функция возвращает ложь false;
  4. а-открывает существующий файл для записи и перемещает курсор сразу в самый конец файла. Это удобно, когда нужно что-нибудь дописать в конец файла. Если файла с указанным именем не существует функция возвращает ложь false;
  5. а+-отличается от параметра a тем, что если файла с заданным именем не существует, то он создается. Если файл создать не удалось, например, когда указано недопустимое имя файла, функция возвращает ложь false;

Есть еще один очень важный момент. Файлы бывают текстовые, а бывают двоичные, или бинарные. В текстовых хранятся номера символов, подчиняющиеся определенным правилам форматирования, а в бинарных - любой двоичный (бинарный) код. Хотя, двоичный - это не совсем верно, ибо побайтное хранение информации в файлах - это уже восьмеричное что-то. Но главное в том, что если явно не указать текстовый или бинарный тип файла, то файл может быть открыт неожиданно в другом режиме.

Поэтому рекомендуется сразу указывать режим открытия файла с помощью дополнения параметра символом t, означающим текстовый или символом b, означающим бинарный.

То есть, если код со строкой открытия файла из четвертой шпаргалки написать грамотно-грамотно, то вместо параметра w следовало написать параметр wt. То есть, любой из вышеперечисленных параметров следует дополнять явным указанием режима открытия файла.

  1. wt- открыть или создать текстовый файл
  2. wb - открыть или создать бинарный файл
Следующая, пятая шпаргалка была мною сделана для шага с номером два : "Записать данные из переменной". Вот она:
Моя первая страница на PHP С чего начать?  - Ris_5.png
 

Шестая шпаргалка сделана для последнего, третьего шага: "Закрыть файл". Здесь нужно добавить, что когда программа на PHP заканчивает свою работу, то все открытые ею файлы автоматически закрываются. Однако, полагаться на это крайне не рекомендуется. При определенных обстоятельствах этот автоматизм может привести к потере части данных. В общем, стакан с водой и стакан пустой (см. анекдот постами выше) это очень даже правильно. Вот шпаргалка как закрыть файл:
Моя первая страница на PHP С чего начать?  - Ris_6.png
 

Наконец-то у меня получилось то, что я хотел сделать! Содержимое вебстраницы спарсенное в переменную $html сохранилось в текстовый файл и теперь можно посмотреть ее содержимое без браузера с помощью текстового редактора Notepad++

Вот оно, скопище HTML разметки, текста и инструкций на языке JAVA, которое содержалось в переменной $html:
Моя первая страница на PHP С чего начать?  - Ris_7.png
 

Наконец-то я вплотную подошел к методике разбора этой тарабарщины по нужным для меня полочкам. В следующий раз именно этим я и планирую заняться.
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Re: Моя первая страница на PHP (С чего начать?)

Сообщение Slash » Пн авг 22, 2016 7:37 am

pessimist писал(а):Но функция вывела содержимое переменной в окно браузера, а тот, в свою очередь, распознал HTML код и с радостью отразил содержимое как веб страницу.

Можете использовать функцию htmlspecialchars, она преобразует теги в сущности, HTML код, будет отображен, как текст. Пример:

Код: Выделить всё

echo htmlspecialchars($html); 
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

Re: Моя первая страница на PHP (С чего начать?)

Сообщение pessimist » Чт сен 15, 2016 2:40 pm

Здравствуйте, уважаемые Slash и форумчане!

Я немного отвлекся от создания своей первой страницы на PHP в сторону создания первой программы на PHP. Конечно без помощи Slash не обошлось и там.

Программа должна была из упорядоченного текстового файла выбрать цены, которые были в заданную дату. Простая вроде задачка - есть файл, в котором записаны строки вида: товар, дата торгового дня, цена утром, цена вечером, минимальная цена, максимальная цена и объем торгов. По заданной дате программе следовало выбрать цены торгового дня, а если заданная дата не является торговым днем (выходной или праздники например), то программе поручалось сообщить об этом и выбрать цены торгового дня предшествующего заданной дате. Получилась целая тема, а прочитать ее можно здесь: Выборка данных по дате из файла на PHP

Наконец-то я собрался вернуться к своей первой странице на PHP.

И сразу уперся в вопрос, на который не смог найти ответа в сети Интернет. Поэтому, уважаемые форумчане, подскажите мне, неучу:

Есть шаблон регулярного выражения из кода Slash

Код: Выделить всё

'|<a(.*?)</a>|' 

И если про его часть <a(.*?)</a> я смог найти описание метасимволов и модификаторов, то что означает заключение его в скобки из символов '|шаблон|' я так и не понял.

То есть, в сети написано, что сам по себе символ | означает логическое "ИЛИ" - это вроде как понятно, альтернатива так обозначаться может.

В официальном описании сказано скупо:
начало ветки условного выбора

Не хватило мне мозгов осознать глубокий смысл этой фразы.

То есть, вопрос для меня заключается в том, что какая разница между выражениями: '|<a(.*?)</a>|' и '<a(.*?)</a>'.
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Re: Моя первая страница на PHP (С чего начать?)

Сообщение Slash » Чт сен 15, 2016 3:12 pm

pessimist писал(а):что означает заключение его в скобки из символов '|шаблон|' я так и не понял

Верно Вы сказали, что этот символ - это логический оператор или, но когда он находится в самом регулярном выражении. А в данной регулярке:

Код: Выделить всё

'|<a(.*?)</a>|' 

Этот логический оператор означает начало и конец выражения. Вместо этого символа можно использовать любой другой символ, например: ~, #, ! и так далее:

Код: Выделить всё

'~<a(.*?)</a>~'
'#<a(.*?)</a>#'
'!<a(.*?)</a>!' 

Главное, чтобы этого символа не было в самом регулярном выражении.
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

Re: Моя первая страница на PHP (С чего начать?)

Сообщение pessimist » Чт сен 15, 2016 7:15 pm

Slash писал(а):Главное, чтобы этого символа не было в самом регулярном выражении.

А если его вообще не будет? Этого символа? То есть будет написано так:

Код: Выделить всё

'<a(.*?)</a>' 

Шаблон будет восприниматься как регулярное выражение или все символы будут приняты буквально, т.е. в тексте будет искаться точно соответствующая подстрока из символов <a(.*?)</a>? Или встретив скобку ( без экранирующего символа \ интерпретатор PHP все равно будет считать ее спецсимволом, а выражение - регулярным?

Не сердитесь за тупой вопрос, просто у меня сейчас нет возможности проверить это на PHP.

Пытаюсь продумать следующую шпаргалку и упираюсь в то, что нужно как-то подробно расписать регулярные выражения. Тупо написать в этой теме, что это регулярное выражение выбирает все ссылки, а теперь бежим дальше - наверное никому не полезно будет. Да и мне двигаться дальше без изучения этих выражений наверное не следует. Куда ни сунься - везде у народа сплошные вопросы по регуляркам, а ресурсов где язык понятен чайнику - почти и не встречается...

Может открыть отдельную тему про регулярки и попытаться "птичий" язык перевести на "человеческий" ? Ну я как прочел "жадные квантификаторы", так сразу почувствовал себя ущербным ибо прочтенного не осознал :) А в этой теме просто дать на нее перекрестную ссылку. Что Вы считаете по этому поводу, уважаемый Slash?
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Re: Моя первая страница на PHP (С чего начать?)

Сообщение Slash » Чт сен 15, 2016 10:31 pm

pessimist писал(а):А если его вообще не будет? Этого символа? То есть будет написано так:

Код: Выделить всё

'<a(.*?)</a>' 

Я не проверял, но думаю, что тут будет попытка использовать открывающею скобку от тега ссылки (<), как разделители регулярки, то есть начало и конец регулярного выражения. И очевидно, что выйдет ошибка, так как после конца регулярки, у нас еще слеш, буква а и закрывающая скобка (/a>). В регулярном выражении должны присутствовать разделители (символы начала и конца). Простой пример, после регулярного выражения, нам необходимо указать модификатор или модификаторы, а они пишутся после закрывающего разделителя. Если их указывать в самом выражении, то они будут играть, как часть шаблона.
pessimist писал(а):Может открыть отдельную тему про регулярки и попытаться "птичий" язык перевести на "человеческий" ?

Давайте попробуем!

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя