Как я понял, сайт будет создаваться без использования фреймворка? А то мне знакомые разработчики все уши прожужжали что нужно изучать фреймворк Yii .

2) Я вот и хотел спросить.. Пример создания интернет магазина, который рассматривается в курсе, он скорее академический? Реальные коммерческие проекты, наверное, создаются с использованием фреймворков, т.к. это сильно оптимизирует процесс разработки благодаря использованию типовых шаблонов кода. Ответ на этот вопрос помог бы внести ясность в происходящее... PHP Start | Практика всё таки стоит пройти с целью понимания общей логики?

Ответ:

1) Знакомые дело правильно, я тоже так считаю. Но любой фреймворк требует подготовки, например, знаний . Когда я строил систему MVC в практике, то старался следовать подходам, которые используются во фреймворках. Потому PHP Start (теория и практика) поможет с подготовкой, после него можно смело начинать учить yii2 (или что-нибудь похожее).

Адрес репозитория проекта:

Вопрос #1:

Не могу избавиться от ошибки:

Notice: Use of undefined constant _FILE_ - assumed "_FILE_" in /Users/Elios/Sites/Test/index.php on line 10

Подскажите, что это может быть?

Ответ:

Перед и после FILE нужно писать по 2 знака _

__FILE__ принадлежит к "волшебным" константам PHP. Здесь подробнее.

Привет, Хабр!

Сегодня я бы хотел познакомить начинающих вебмастеров с разнообразными изящными способами использования буферизации вывода в php. Опытные вебмастера для себя здесь врят ли найдут что-то полезное. Хотя - кто знает?

Как вы все знаете, буферизацией вывода в php управляет набор функций, начинающихся на «ob_». Самая главная из них - ob_start. При запуске она собирает последующий вывод, то есть всевозможные print(), echo и прочее, что потом отдастся посетителю в форме html-странички. И если перед тем, как выводить, мы запустили буферизацию, то с этой, почти готовой уже, страничкой, можно будет напоследок что-нибудь сотворить.


Например, мы хотим отфильтровать все ссылки на посторонние сайты.

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

"http://blackjack-hookers.com" => "http://myoldforum.ru/redirect.php?url=blackjack-hookers.com"

Способ может быть и не самый эффективный, но действенный. Мы написали redirect.php с фильтром и черным листом, и теперь нам надо преобразовывать все ссылки на тысячах страниц форума. С помощью ob_start и парочки регулярных выражений мы сделаем это всего в несколько строк:

Function f_callback($buffer){ $buffer = preg_replace("#http://(www.)?myoldforum\.ru/#","/",$buffer); $buffer = preg_replace("#href="http://([^"]*)"#","#href="/redirect\.php\?url=$1",$buffer); return $buffer; } ob_start(f_callback);

Теперь, подключив этот код в начале index.php, или другого файла, к которому обращается сервер при просмотре страниц, мы получим то, что нам нужно.

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

Function generate_plugin(){ /*что-то генерируем*/ } function f_callback($buffer){ /*...*/ $buffer = str_replace ("",generate_plugin(),$buffer); /*...*/ return $buffer; } ob_start("f_callback");

Теперь, там, где мы добавили в контент появится то, что мы хотели получить. Одно из применений - вставка виджета js на страницу сайта. Например, яндекс-карты. Обычно это не составляет никакого труда, но иногда криво написанный редактор страниц сайта экранирует кавычки и фигурные скобки, ломая виджет. Как видим, эта проблема легко решается.

Набор инструментов php для работы с буффером вывода богат, и не ограничивается одним лишь ob_start. Вышеописанные приемы в некоторых случаях излишне ресурсоемки и громоздки, поскольку оперируют со всей страницей. Мы можем обработать только ее часть, создав в шаблоне оболочку вокруг генерации чего-то, в дебри чего нам не хочется лезть, но что обязательно нужно поправить:

{GENERATE BIG CRAZY THING}

Должно быть, вы уже заметили все эти обороты: «не хочется лезть», «древний, как стул тиранозавра», «криво написанный редактор»… В идеальном мире оболочки вокруг буфера вывода не нужны. Все что можно сделать с помощью ob_start, теоретически можно было бы сделать и без него. Этот прием иной раз вносит путанницу в код проекта, многие видят его смысл лишь в том, что бы отдать вывод в ob_gzhandler для сжатия, и считают его применение в иных случаях опасным. Но часто без управления выводом просто не обойтись.

Особенно если не хочется копать вглубь.

Вирусы, которые захватывают браузеры пользователей с целью показа рекламы, уже давно не редкость. Это один из наиболее распространенных видов вредоносного программного обеспечения, который может быть встречен в сети. Очередным подобным вирусом является Searchstart.ru. На первый взгляд он не делает ничего опасного – просто запускает сторонний поиск при старте браузера, но на деле вирус Searchstart.ru может привести к серьезным проблемам, вплоть до передачи злоумышленникам информации о банковских карточках пользователя компьютера.

В том, что вирус Searchstart.ru оказался на компьютере чаще всего виноват сам пользователь. Подобные вредоносные программы устанавливаются вместе с приложениями, загруженными из интернета. При этом в пользовательском соглашении или на этапе установки всегда указано, какие программы будут инсталлированы совместно с основной. Не прочитав подобное соглашение или не сняв галочки с пункта об установке дополнительных программ, пользователь рискует занести себе на компьютер не один, а сразу несколько вирусов. Именно поэтому, чтобы избежать заражения Searchstart.ru или другим подобным вирусом, лучше загружать бесплатные программы с официальных сайтов разработчиков.

Вирусная программа Searchstart.ru действует на компьютере в несколько этапов:

  1. Проникает на компьютер и устанавливается во все браузеры. При этом пользователь может заметить, что при запуске браузера у него будет открываться стартовая страница Searchstart.ru:
  2. Далее вся информация, вводимая пользователем в поисковую строку браузера, будет передаваться на сервера злоумышленников;
  3. Через несколько дней пользователь заметит, что на сайтах стало больше рекламных баннеров, и они являются максимально релевантными его запросам за последнее время.

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

Чем дольше вредоносная программа Searchstart.ru находится на компьютере, тем больше вреда она нанесет. Со временем у пользователя будут открываться самопроизвольно страницы с рекламой, всплывать окна с партнерскими ссылками на сайтах магазинов и происходить другие неприятности, которые не позволят с комфортом пользоваться браузером.

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

Чтобы удалить Searchstart.ru с компьютера проделайте следующее:

  1. Очистите папку с временными файлами. Для этого на диске, на котором установлена операционная система, перейдите в папку:
  • Для Windows 10: {Системный жесткий диск}\Users\Администратор\AppData\Local\Temp
  • Для более ранних версий Windows: {Системный жесткий диск}\Users\Имя пользователя\AppData\Local\Temp

Удалите из этих папок все содержимое.


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

PHP provides several functions that search for one string within another. Some return the location of the found string (strpos , strrpos and related), and return part of the original string (strstr and strrchr). The search functions return false if the string you are searching for is not found within the original.

If your goal is simply to determine whether one string exists within another, the most efficient option is strpos .

strpos

The strpos function searches its first string argument for its second and returns the zero-based index location of the first match within the string, or false if it is not found. The following example demonstrates:

$str = ; // search for the first occurrence of "need" within $str $pos = strpos ($str , "need" ) ; // display type and value of $pos var_dump ($pos ) ; // int(3)

Although we demonstrated the result using var_dump above, a typical examination of the return value for strpos is performed as follows:

// how to inspect strpos return value ($pos) if ( $pos !== false ) { // if search string found echo "found it at location $pos" ; } else { echo "not found." ; }

Be sure to use the === or !== operators to compare the strpos function"s return value to false . If the substring is found at the start of the string, strpos will return 0 , which the == or != operators would convert to false .

You can specify an offset to begin the search a specified number of characters from the start of the string, as this example demonstrates:

/* strpos arguments: * subject string (aka haystack), search string (needle), offset (optional) */ // start search for "need" from character 10 in $str $pos = strpos ($str , "need" , 10 ) ; // 20

When starting the search from character 10 , the result is 20 , the index location of the start of the word needle .

strrpos

The strrpos function finds the position of the last occurrence of a substring in a string:

// example string to use for searches $str = "We need to find the needle in the haystack." ; // find location of last occurrence of "need" in $str $pos = strrpos ($str , "need" ) ; // 20

The strrpos function also provides an optional offset parameter which can be either positive or negative. If the offset is positive, that number of characters at the beginning of the string will be excluded from the search. Consider the following example:

// search from right for "We" excluding first 3 characters $pos = strrpos ($str , "We" , 3 ) ; var_dump ($pos ) ; // bool(false)

The result is false since "We" is not found when the search excludes the first three characters.

If the offset is negative, that many characters at the end of the string are excluded from the search. We demonstrate with two searches specifying a negative offset:

// search from right for "hay" excluding last 5 characters $pos = strrpos ($str , "hay" , - 5 ) ; // int(34) // search from right excluding last 10 characters $pos = strrpos ($str , "hay" , - 10 ) ; // bool(false)

The last result above is false since "hay" is not found when the search excludes the last 10 characters.

Notice that the return value of the strrpos function gives the location from the start of the string, even though the search commences from the right.

stripos and strripos

The strpos and strrpos functions perform case-sensitive searches. PHP provides stripos and strripos functions to perform case-insensitive searches. They work just like their case-sensitive equivalents:

// example string to use for searches $str = "We need to find the needle in the haystack." ; // do case-insensitive search for "we" $pos = stripos ($str , "we" ) ; // int(0) // do case-insensitive search from right for "Need" $pos = strripos ($str , "Need" ) ; // int(20)

The case-insensitive search for "we" results in 0 , indicating it was found at the beginning of the string we are searching in. The case-insensitive search for "Need" from the right (using strripos), finds it at location 20 .

strstr

The strstr function searches the first string argument for the second. If the second is found within the first, strstr returns the portion of the original string starting from the first found occurrence to the end of the string.

// example string $str = "We need to find the needle in the haystack." ; // search for "the" in $str $newstr = strstr ($str , "the" ) ; var_dump ($newstr ) ; // string(27) "the needle in the haystack."

The strstr function returns the first "the" it finds, along with the rest of the original string.

If you pass true as the third argument to strstr , the portion of the original string before the found string is returned:

// pass true to return the part of $str before "the" $newstr = strstr ($str , "the" , true ) ; var_dump ($newstr ) ; // string(16) "We need to find "

This time the strstr function returns everything before the first "the" in the string.

PHP also provides the stristr function which works exactly the same as strstr except that it performs a case-insensitive search.

strrchr

The strrchr function searches the first string argument from the right for the character we specify in the second argument. The function returns the portion of the string from the location of the found instance of that character to the end of the string:

// example string $str = "We need to find the needle in the haystack." ; // search from right for "s" in $str $newstr = strstr ($str , "s" ) ; var_dump ($newstr ) ; // string(6) "stack."

Notice that unlike strstr , if the second argument consists of multiple characters, only the first is used:

// test with multi-character second argument $newstr = strrchr ($str , "the" ) ; var_dump ($newstr ) ; // string(5) "tack."

Instead of returning "the haystack" , the strrchr function returns "tack" , applying only the first letter of the second argument to the search.