Содержание
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 ]]] )
Эта функция может весте себя двумя способами:
- по запросу POST он извлекает файлы, загруженные с помощью входных файлов HTML, и перемещает их в каталог, указанный в системной переменной UPLOADS . Возвращаемое значение представляет собой массив, содержащий статус загрузки для каждого загруженного файла.
- по запросу 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
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.' */