Web

Веб-класс (и его производные, Geo и Pingback ) содержит несколько помощников для взаимодействия с HTTP-клиентами и серверами.

Пространство имен: \

Расположение файла:lib/web.php

Инициализация

Вернуть экземпляр класса

$web = \Web::instance();

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

mime

Определить тип MIME с помощью расширения файла

string mime ( string $file )

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

$web = \Web::instance();
$file = 'ui/images/south-park.jpg';
$mime = $web->mime($file); // returns 'image/jpeg'
 
header('Content-Type: '.$mime);
echo $f3->read($file);

Если этому методу неизвестно расширение, он вернет application / octet-stream.

acceptable

Возвращает список допустимых типов MIME браузера.

array|string|false acceptable ( [ string|array $list = NULL ] )

Он возвращает типы MIME, указанные браузером в заголовке HTTP Accept, в виде массива.

print_r(Web::instance()->acceptable());
 
/*
Returns for example:
 
Array
(
    [text/html] => 1
    [application/xhtml+xml] => 1
    [application/xml] => 0.9
)
*/

Если указан список типов MIME, он возвращает наилучшее совпадение или FALSE, если ничего не найдено.

$web->acceptable(array('application/xml','application/xhtml+xml')); // returns application/xhtml+xml

send

Передает файл клиенту и в случае успеха возвращает размер файла.

int|false send ( string $file [, string $mime = NULL [, int $kbps = 0 [, bool $force = TRUE [, $name = NULL [, $flush = TRUE ]]]]] )
 

Аргумеент $file - это имя файла, которое должно соответствовать функции PHP is_file($file).

С помощью аргумента $mime вы можете явно указать MIME тип. Пропустите это значение, чтобы позволить фреймворку определять тип MIME с использованием расширения файла $file.

Третий аргумент $kbps указывает скорость потока, измеряемый в килобитах\секунду. Это позволяет вам ограничивать скорость загрузки пользователей, чтобы избежать перегрузки вашего сервера, например, при отправке больших мультимедийных файлов.

Используется $force для добавления Content-Disposition: attachment;заголовка HTTP, который заставит браузер загружать файл вместо попытки его отображения (как это часто бывает с хорошо поддерживаемыми типами файлов, такими как .txt, .jpg, .png, .git, .css, .js, .pdf, .mp3 и т. д.).

Если в $force установлено значение TRUE, используйте $name для указания имени загруженного файла (в противном случае $file будет использоваться).

Когда в $flush установлено значение TRUE, вывод сбрасывается каждые 1 КiБ. В большинстве случаев вам не нужно отключать это. Однако это может пригодиться при запуске тестов.

Пример использования:

$throttle = 2048; // throttle to around 256 KB /s
$sent = $web->send('data/documents.zip', NULL, $throttle);
if ( !$sent)  { /*error*/ }

Пример отправки / получения:

$file=$f3->get('UI').'images/wallpaper.jpg';
ob_start();
// send the file without any download dialog
$web->send($file,NULL,512,FALSE);
$out=ob_get_clean();
 
// setup a route and its associated handler
$f3->set('UPLOADS',$f3->get('TEMP'));
$f3->route('PUT /upload/@filename',
	function() use($web) { $web->receive(); }
);
// mock a request that will actually upload the file
$f3->mock('PUT /upload/'.basename($file),NULL,NULL,$f3->read($file));
 
if (is_file($target=$f3->get('UPLOADS').basename($file)))
	echo 'Uploaded file done via PUT';
 
@unlink($target);

receive

Получать и обрабатывать файлы от клиента, отправленные через PUT или POST.

array|bool receive ( [ callback $func = NULL [, bool $overwrite = FALSE [, callback|bool $slug = TRUE ]]] )
 

Эта функция может весте себя двумя способами:

  1. по запросу POST он извлекает файлы, загруженные с помощью входных файлов HTML, и перемещает их в каталог, указанный в системной переменной UPLOADS . Возвращаемое значение представляет собой массив, содержащий статус загрузки для каждого загруженного файла.
  2. по запросу PUT он записывает содержимое тела запроса в целевой файл, расположенный в каталоге, указанном в системной переменной UPLOADS .

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

$f3->set('UPLOADS','uploads/'); // don't forget to set an Upload directory, and make it writable!
 
$overwrite = false; // set to true, to overwrite an existing file; Default: false
$slug = true; // rename file to filesystem-friendly version
 
$files = $web->receive(function($file,$formFieldName){
        var_dump($file);
        /* looks like:
          array(5) {
              ["name"] =>     string(19) "csshat_quittung.png"
              ["type"] =>     string(9) "image/png"
              ["tmp_name"] => string(14) "/tmp/php2YS85Q"
              ["error"] =>    int(0)
              ["size"] =>     int(172245)
            }
        */
        // $file['name'] already contains the slugged name now
 
        // maybe you want to check the file size
        if($file['size'] > (2 * 1024 * 1024)) // if bigger than 2 MB
            return false; // this file is not valid, return false will skip moving it
 
        // everything went fine, hurray!
        return true; // allows the file to be moved from php tmp dir to your defined upload dir
    },
    $overwrite,
    $slug
);
 
var_dump($files);
/* looks like:
  array(3) {
      ["uploads/csshat_quittung.png"] => bool(true)
      ["uploads/foo.pdf"] => bool(false)
      ["uploads/my.pdf"] => bool(true)
    }
  foo.pdf was not uploaded...
*/

Примечание: Этот код не работает? Не забудьте установить атрибут enctype = «multipart / form-data» в теге <form> .

Обратный вызов также может быть другой функцией или методом класса. Взгляните на описание функции call(), чтобы увидеть все возможности.

function callback() {
    echo 'file uploaded!';
}
 
Web::instance()->receive('callback', false, true);

Примечание: функция обратного вызова будет вызываться для каждой успешной загрузки, если она указана.

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

$files = $web->receive(function($file,$formFieldName){
		// ...
	},true,function($fileBaseName, $formFieldName){
		// build new file name from base name or input field name
		return "custom_filename.jpg";
	}
);

progress

Возвращает ход выполнения загрузки файла , если session.upload_progress.enabled задано значением 1 в php.ini

int|false Web::instance()->progress ( string $session_id )
 

$session_id это «ключ» массива $_SESSION, он необходим для получения статуса конкретного пользователя. Пожалуйста, прочтите документацию PHP для получения дополнительной информации.

_curl

Выполнить HTTP-запросы через cURL. Этот метод, с областью видимости protected, используется Web→request().

Возвращает массив, содержащий контент и заголовок.

_stream

Выполнить HTTP-запросы через оболочку потока PHP. Этот метод, с областью видимости protected, используется Web→request().

Возвращает массив, содержащий контент и заголовок.

_socket

Выполните HTTP-запрос на низком уровне через сокеты TCP / IP. Этот метод, с областью видимости protected, используется Web→request().

Возвращает массив, содержащий контент и заголовок.

engine

Укажите механизм HTTP-запросов для использования

string engine ( [ string $arg = 'curl' ] )
 

Устанавливает двигатель, который будет использовать Web→request(). Если выбранный двигатель недоступен, он возвращается к подходящей замене. Возможные значения:

  • curl (по умолчанию)
  • stream
  • socket

Примечание. Для правильной работы движков cURL и stream-wrapper необходимо установить и активировать соответствующее расширение php. В противном случае будут использоваться sockets.

subst

Замените старые заголовки новыми элементами

NULL subst ( array &$old, string|array $new )
 

request

Выполнить HTTP-запрос

array|false request ( string $url [, array $options = NULL ] )
 

Отправляет HTTP-запрос на сервер и возвращает массив, содержащий контент и заголовок. Запрошенная страница будет кэширована в соответствии с инструкциями удаленного сервера. Вот пример простого запроса GET для загрузки удаленного файла:

var_dump( \Web::instance()->request('http://www.golem.de/1303/98339-55766-i_rc.jpg' ));
/* returns:
 
array(4) {
    'body' => string " IMAGE BINARY DATA " (length=7761)
    'headers' =>
        array (size=14)
        0 => string 'HTTP/1.1 200 OK' (length=15)
        1 => string 'Server: nginx' (length=13)
        2 => string 'Date: Thu, 18 Dec 2013 12:40:11 GMT' (length=35)
        3 => string 'Content-Type: image/jpeg' (length=24)
        4 => string 'Content-Length: 7761' (length=20)
        5 => string 'Connection: close' (length=17)
        6 => string 'Keep-Alive: timeout=3' (length=21)
        7 => string 'Last-Modified: Fri, 22 Mar 2013 09:41:02 GMT' (length=44)
        8 => string 'ETag: "514c272e-1e51"' (length=21)
        9 => string 'X-UPSTREAM: www1.golem.de' (length=25)
        10 => string 'Expires: Sun, 18 Jan 2014 12:40:11 GMT' (length=38)
        11 => string 'Cache-Control: max-age=2678400' (length=30)
        12 => string 'X-Cache-Status: HIT' (length=19)
        13 => string 'Accept-Ranges: bytes' (length=20)
    'engine' => string 'cURL' (length=4)
    'cached' => boolean false
    'error' => string '' (length=0)
}
*/
$ options

Вы можете использовать опции контекста HTTP, чтобы настроить запрос в соответствии с вашими потребностями. Таким образом, вы можете создавать запросы любого типа, включая использование файлов cookie или механизмов аутентификации, прокси,user agent и т.д. Вот несколько примеров:

$options = array(
	'timeout' => 6, // change request timeout
	'header' => [
		'Cookie: User=1;Foo='.rawurlencode('bar'), // add cookie
		'Authorization: Basic '.base64_encode('user:password'), // auth header
	],
	'proxy'=> 'http://186.227.8.21:3128', // use proxy, protocols: http, https, socks4, socks4a, socks5, socks5h
);
GET

Выполните запрос GET с параметрами URL:

$url = 'http://www.mydomain.com/index.php';
$params = array(
    'parameter1' => 'value1',
    'parameter2' => 'value2'
);
$options = array('method' => 'GET');
$url .= '?'.http_build_query($params);
 
$result = \Web::instance()->request($url, $options);
POST

Выполните запрос POST с данными POST.

$url = 'http://www.mydomain.com/index.php';
 
$postVars = array(
    'parameter1' => 'value1',
    'parameter2' => 'value2'
);
$options = array(
    'method'  => 'POST',
    'content' => http_build_query($postVars),
);
$result = \Web::instance()->request($url, $options);
PUT

Загрузите файл с помощью запроса PUT.

$f3 = \Base::instance();
$web = \Web::instance();
 
$url = 'http://www.mydomain.com/upload/';
$file = '/path/to/myFile.zip';
 
$options = array(
    'method'  => 'PUT',
    'content' => $f3->read($file),
    'header' => array('Content-Type: '.$web->mime($file));
);
 
$result = $web->request($url, $options);

minify

Минифицируйте файлы CSS и Javascript, удалив пробелы и комментарии. Возвращает объединенный вывод в виде строки.

string minify ( string|array $files [, string $mime = NULL [, bool $header = TRUE [, string $path = NULL ]]] )
 

Пример:

$minified = Web::instance()->minify('style.css,framework.css,null.css');

Этот метод также автоматически определит mime-тип файлов, которые будут уменьшены, и отправит в браузер как заголовок Content-Type. Вы можете заменить используемый mime-тип параметром $mime и полностью прекратить отправку данных заголовка, установив для параметра $header значение FALSE.

Если файлы не находятся в пределах одного из путей поиска UI, вы должны использовать аргумент $path, чтобы указать путь к их каталогу. В частности, установите, $path=' 'если указанные пути к файлам - абсолютные.

Чтобы получить максимальную производительность, вы можете включить кэширование системы F3, и F3 будет использовать его для сохранения/извлечения файла(ов) для минимизации, а также для сохранения комбинированного вывода. Вы можете ознакомиться с Руководством пользователя Cache Engine для получения более подробной информации. Чтобы увидеть пример того, как minify можно использовать в своих шаблонах, ознакомьтесь с разделом Javascript и CSS.

rss

Парсит RSS-канал и, при необходимости, возвращайте массив всех тегов.

array|false rss ( string $url [, int $max = 10 [, string $tags = NULL ]] )
 

Пример:

$count = 20; // Default: 10
$tags = array('title', 'link', 'pubDate'); // Default: NULL (all tags)
 
Web::instance()->rss('http://example.org/feed.rss', $count, $tags);

whois

Получить информацию с сервера

string|false whois ( string $addr [, string $server = 'whois.internic.net'] )
 

пример:

echo $web->whois('fatfreeframework.com');
 
/* returns:
Whois Server Version 2.0
 
Domain names in the .com and .net domains can now be registered
with many different competing registrars. Go to http://www.internic.net
for detailed information.
 
 .  Domain Name: FATFREEFRAMEWORK.COM
   Registrar: INTERNETWORX LTD. & CO. KG
   Whois Server: whois.domrobot.com
   Referral URL: http://www.domrobot.com
   Name Server: NS.INWX.DE
   Name Server: NS2.INWX.DE
   Name Server: NS3.INWX.EU
...
*/

slug

Возвращает URL- и filesystem-friendly строки.

string slug ( string $text )
 

Цель этой функции - преобразовать иностранные символы в их приблизительные эквиваленты английской раскладки. Поэтому он использует транслитерацию ISO-9 с массивом таблицы поиска, который может быть расширен с помощью DIACRITICS var. Кроме того, он предназначен для удаления всех не буквенно-цифровых символов и преобразования их в тире.

echo Web::instance()->slug('ĤÈĹĹŌ'); // displays 'hello'
echo Web::instance()->slug('Ein schöner Artikel über Max & John!'); // displays 'ein-schoener-artikel-ueber-max-john'

diacritics

Возврат предустановленной таблицы перевода диакритических знаков

array diacritics ( )
 

Эта таблица используется методом slug() вместе с переменной DIACRITICS .

filler

Вернуть кусок текста из стандартного отрывка из Lorem Ipsum.

string filler ( [ int $count = 1 [, int $max = 20 [, bool $std = TRUE ]]] )
 

Эта функция может быть полезна для заполнения вашего пустого макета некоторым текстом-заполнителем. Поэтому $count контролирует количество создаваемых предложений со случайным количеством слов от 3 до $max. По умолчанию $std переменная указывает, будет ли возвращаемый текст начинаться с заполнителя Lorem ipsum dolor по умолчанию, состоящего из 124 символов.

echo $web->filler(3, 5, FALSE);
/* returns 3 random sentences, with a maximum of 5 words, similar to this:
'Iste corporis aut. Exercitationem corporis rem harum repellat. Cupiditate eligendi debitis.'
*/
Печать/экспорт