Иногда необходимо подсчитать сколько раз слово встречается в тексте. Вот функция, которая может за вас посчитать частоту вхождения слова в текст:

function str_word_freq($text='')
{
	$freqData = array();
	foreach( str_word_count( $text, 1 ) as $word )
	{
		array_key_exists( $word, $freqData ) ? $freqData[ $word ]++ : $freqData[ $word ] = 0;
	}
	return $freqData;
}
Tagged with:
 

Весь день сегодня провел за созданием граббера.

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

Для этого я использовал cURL+regexp (сам реджексп не помню где именно нашел - но оказался кстати)

// определяем сам реджексп
$regex = '/(<a\s*'; // Start of anchor tag
$regex .= '(.*?)\s*'; // Any attributes or spaces that may or may not exist
$regex .= 'href=[\'"]+?\s*(?P<link>\S+)\s*[\'"]+?'; // Grab the link
$regex .= '\s*(.*?)\s*>\s*'; // Any attributes or spaces that may or may not exist before closing tag
$regex .= '(?P<name>\S+)'; // Grab the name
$regex .= '\s*<\/a>)/i'; // Any number of spaces between the closing anchor tag (case insensitive)
// Инициализируем курл
$ch = curl_init('Тут пишем необходимый URL');
// Задаем параметры для курла
$headers = array('Content-type: text/html; charset=utf-8');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Получаем html
$result = curl_exec($ch);
// закрываем курл
curl_close($ch);
// получаем ссылки
preg_match_all($regex,$result,$matches);
// дальше мы разбираем ссылки, проверяем на уникальность, отбираем только внутренние ссылки, заносим в базу и т.п.

Второй шаг: необходимо вытащить нужные нам данные из вытащенного контента. Для этого я воспользовался наработкой PHP Simple HTML DOM Parser. Очень удобна, но кушает много памяти. У меня с первого раза вылетело из-за недостатка памяти. Для этого я обрезал контент после получения (убрал сайдбары, хедер). В итоге все нормально.
Синтаксис очень схожий с jQuery, по-этому многим будет легко начать.

$html = str_get_html($result);// где результат - это полученный с помощью курла контент
foreach($html->find('div[class=post-header] span') as $element) {
echo $element->innertext.'<br>';
}

Дальше уже дело техники и проработки. Можно совершенствовать под свои потребности сколько угодно, чем я и собираюсь завтра заняться :)

Tagged with:
 

Если мы запускаем наш сценарий из консоли (например, если мы используем cron) и нам нужно передать какой-либо параметр в наш скрипт, и результат записать в файл лога - то делаем это так

50 * * * * /usr/bin/php -f /my_script.php param1 param2 > /logs/mylog.txt

Каждую 50-ую минуту часа будет запускаться php-скрипт под именем my_script.php, внутри которого можно использовать переданные в него параметры, а именно $argv[0] - имя запущенного сценария (в данном случае my_script.php), $argv[1] == "param1", $argv[2] == "param2". При этом все что скрипт будет выводить на экран (с помощью есho, например) - будет записываться в файл, путь к которому указан после знака ">".

Tagged with:
 

Ранее никогда не задумывался в разнице между этими функциями. Не было нужды в этом.
Но все же:

include 'file.php'; // динамически подключает файл во время выполнения сценария

require 'file.php'; // подключает файл до начала выполнения сценария, что дает выигрыш в скорости работы

Так же есть соответствующие конструкции одноразового включения файла: include_once и require_once. Они сначала проверяют не был ли подключен уже файл к сценарию ранее и только потом подключают его по мере необходимости.

Tagged with: