[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Новое тестовое задание
Страницы: 1, 2
Razzwan
Цитата (chee @ 2.12.2015 - 21:11)
Правда, то есть там не нужно создавать скилетоны и прочие вещи, можно запустить консольную команду и она сама подключит классы с тестированием?
Без понятия, что значит "скилетоны".
Делаю так:
1. composer require-dev phpunit/phpunit 4.8.* (не обновился до php5.6)
2. composer update
3. создаю файл phpunit.xml
заготовка
<phpunit bootstrap="vendor/autoload.php">
<testsuite
name="all">
<directory>
./tests</directory>
</testsuite>
</phpunit>

4. создаю класс-тест при помощи PhpStorm
5. пишу тест

Написал вот хрень какую-то. Не могу понять, почему не хочет тянуть остальные ссылки. Вытягивает только с первого ресурса - и все (
Вот и сам говнокод
<?php

namespace Razzwan;

class ImagesHandler
{
/**
* Массив ссылок найденных на странице
*
@var array
*/

protected $links = [];

/**
* Домен с протоколом
*
@var bool|mixed
*/

protected $domain = false;

/**
* счетчик
*
@var Int
*/

protected $count;

/**
* Обрабатываемый ресурс
*
@var string
*/

protected $resource;

/**
* Сохраняет в $this->resource обрабатываемую страниц
*
@param $url - Url ресурса, который собираемся обработать
*
@return bool
*/

public function getResource($url)
{
$url = $this->makeUrl($url);

if(!$this->domain){
$this->domain = $this->getDomain($url);
}

$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);

if($this->resource = curl_exec($ch)){
return true;
}
return false;
}

/**
* Добавляем протокол
http://, если передан url без протокола
*
@param $url - Url либо с протоколом либо без
*
@return string
*/

public function makeUrl($url)
{
if(substr($url, 0, 7) == 'http://' || substr($url, 0, 8) == 'https://'){
return $url;
} else {
return'http://' . $url;
}
}


/**
* Ищет все ссылки с тегом href
*
@param $resource - страница
*
@return array
*/

public function findLinks($resource)
{
$match = [];
preg_match_all(
"/< *a *href *= *[\"|\'] *(.*?) *[\"|\']/is",
$resource,
$match
);

return $this->clearLinks(array_unique($match[1]), $this->domain);
}

/**
* Добавляет все ссылки в массив ссылок
*
@param $resource
*
@return array
*/

public function addLinks($resource)
{
$links = $this->findLinks($resource);
$this->links = array_merge($this->links, $links);
return $this->links = array_unique($this->links);
}

/**
* Выделяет и сохраняет домен вместе с протоколом
*
@param $url
*
@return bool|mixed
*/

public function getDomain($url)
{
if($this->domain){
return $this->domain;
}
$math = [];
preg_match("/https?:\/\/[0-9a-z\.]*/i", $url, $math);
return $this->domain = array_shift($math);
}

/**
* Очищает адреса от нежелательных символов
*
@param array $arr
*
@param $domain
*
@return array
*/

public function clearLinks(array $arr = [], $domain)
{
$links = [];
foreach($arr as $key => $val){
$links[$key] = trim(str_replace($domain, '', $val));
if(preg_match('/^http/', $links[$key]) || strlen($links[$key]) == 1){
unset($links[$key]);
}
}

return array_unique($links);
}

/**
* Вытягивает все ссылки с сайта
*
@param $url
*
@throws \Exception
*
@return array - массив всех найденных ссылок на сайте
*/

public function getAllLinks($url)
{
if($this->getResource($url)){
$this->addLinks($this->resource);
if($this->links[$this->count]){
$this->getAllLinks($this->domain . $this->links[$this->count]);
}
return $this->links;

} else {
throw new \Exception(
sprintf(
"Ресурс %s недоступен",
$this->resource
)
);

}
}

}



_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.