При написании сложных систем на php, количество подключаемых файлов возрастает неимоверно. Подключать в лоб, все необходимые файлы, быстро надоедает. Да и такой способ сказывается на быстродействии скрипта. Ведь не для всех операций нужны все скрипты.

На помощь приходит встроенный в php механизм автозагрузки классов при их вызове.

Раньше мы делали так:



<?php 
include 'db.php';
$db = new db();

Техника синлетонов на php

Программистам php, приходится мириться с тем, что переменная объявленная в любом месте скрипта, не видна ни в одной из функций или методов.

Конечно, есть  ключевое слово global. Но вписывать туда  все используемые переменные очень проблематично, и захламляет код программы.

Поясню на примере:

Пусть есть класс db - обертка над стандартным mysql_query. И класс read_books, который может увеличивать количество просмотров определенной кники по его id.

В большинстве случаев используют такую конструкцию:

<?php 
class read_books{
	function __construct(){
		$this->db =  new db();
		$this->db->connect();
	}
	function f($id){
		$this->db->query('update books set hits=hits+1 where id='.$id);
	}
}
$rd = new read_books();
$rd->f(122);

  Автоматическое определение мобильных браузеров на PHPВпервые в своей практике, делал мобильную версию сайта. Должен скачать, что сделать сайт, который одинаково работал бы на огромном зоопарке мобильных браузеров,  задача не из легких. Однако, в этой статье речь пойдет не об этом.

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

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

К сожалению  в PHP нет аналога Javascript-конструкции (function() {})(); т.е. самовызов анонимной функции. Но его можно эмулировать, к примеру так: 



echo call_user_func(function() use ($vars){
	return 'Привет';
}).' Мир!!!';

очень удобная конструкция, не находите!?

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

Итак, начнем.

Эта площадка для размещения объявлений крайне популярна. Количество ежедневно публикуемых объявлений исчисляется тысячами, ну и, как следствие, количество парсеров, которые ежесекундно бороздят этот сайт, соразмерно велико.

Поверхностно изучив данный ресурс видим, что cookie генерируются не только сервером, но и на клиенте. Моя любимая js капча, вновь на вооружении. Это воистину самое действенное средство против 90% горе парсописцев. В данном случае, ключ (или даже ключи) записываются в cookie, и уже так отсылаются на сервер. Очевидно, что методы типа 

 curl_setopt($ch, CURLOPT_COOKIEFILE,  dirname(__FILE__).'/cookie.txt');

нам уже не помогут. 

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

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

Подкатегории

Все о разработке на фреймворке Yii