(.*)

Самый простой способ захватить файл удаленного файла в PHP?

Я думал о том, чтобы сделать запрос на голову с помощью cURL, было интересно, не так ли это?

Solutions Collecting From Web of «Самый простой способ захватить файл удаленного файла в PHP?»

Да. Поскольку файл удален, вы полностью зависите от значения заголовка Content-Length (если вы не хотите загрузить весь файл). Вам нужно будет curl_setopt($ch, CURLOPT_NOBODY, true) и curl_setopt($ch, CURLOPT_HEADER, true) .

Лучшее решение, которое следует принципу KISS

$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE)); $filesize = $head['content-length']; 

Я предполагаю, что использование curl для отправки запроса HEAD – хорошая возможность; что-то вроде этого, вероятно, будет:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://sstatic.net/so/img/logo.png'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_exec($ch); $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); var_dump($size); 

Таким образом, вы используете запрос HEAD и не загружаете весь файл. Тем не менее, вы полагаетесь на удаленный сервер, отправляете правильный заголовок Content-length.

Другим вариантом, о котором вы могли подумать, было бы использовать filesize … Но это не удастся : в документации указано (цитирование) :

Начиная с PHP 5.0.0, эта функция также может использоваться с некоторыми обертками URL. См. Список поддерживаемых протоколов / Wrappers для списка, в которых обертки поддерживают семейство функций stat ().

И, к сожалению, с обертками HTTP и HTTPS , stat() не поддерживается …

Если вы попытаетесь, вы получите сообщение об ошибке:

Warning: filesize() [function.filesize]: stat failed for http://sstatic.net/so/img/logo.png 

Использование запроса HEAD и проверка Content-Length – это стандартный способ сделать это, но вы не можете полагаться на него в целом, так как сервер может его не поддерживать. Заголовок Content-Length является необязательным, и, кроме того, сервер может даже не реализовать метод HEAD. Если вы знаете, какой сервер вы исследуете, то вы можете проверить, работает ли он, но в качестве общего решения оно не является доказательством пули.

Если вам не нужен пуленепробиваемый раствор, вы можете просто сделать:

strlen(file_get_contents($url)); 

Источник

Работа с удалёнными файлами

В случае, если опция allow_url_fopen включена в конфигурационном файле php.ini , вы можете использовать URL-адреса HTTP и FTP в большинстве функций, принимающих в качестве параметра имя файла. Также вы можете использовать ссылки в операторах include , include_once , require и require_once (для корректной работы этих функций должна быть включена опция allow_url_include). Дополнительную информацию о поддерживаемых в PHP протоколах вы можете найти в Поддерживаемые протоколы и обёртки.

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

Пример #1 Получение заголовка удалённой страницы

$file = fopen ( «http://www.example.com/» , «r» );
if (! $file ) echo «

Невозможно открыть удалённый файл.\n» ;
exit;
>
while (! feof ( $file )) $line = fgets ( $file , 1024 );
/* Сработает, только если заголовок и сопутствующие теги расположены в одной строке */
if ( preg_match ( «@\(.*)\@i» , $line , $out )) $title = $out [ 1 ];
break;
>
>
fclose ( $file );
?>

Вы также можете работать с удалёнными файлами, расположенными на FTP-сервере (подразумевается, что вы авторизовались с необходимыми для этого привилегиями). Таким образом вы можете только создавать новые файлы, но попытка перезаписать существующий файл при помощи функции fopen() приведёт к ошибке.

Для того, чтобы авторизоваться под пользователем, отличным от ‘anonymous’, вам необходимо указать логин (и, возможно, пароль) в адресной строке, например так: ‘ ftp://user:password@ftp.example.com/path/to/file ‘. (Вы можете использовать этот же синтаксис для доступа к удалённым файлам по HTTP -протоколу, если необходима Basic-аутентификация.)

Пример #2 Сохранение данных на удалённом сервере

$file = fopen ( «ftp://ftp.example.com/incoming/outputfile» , «w» );
if (! $file ) echo «

Невозможно перезаписать удалённый файл.\n» ;
exit;
>
/* Запись данных. */
fwrite ( $file , $_SERVER [ ‘HTTP_USER_AGENT’ ] . «\n» );
fclose ( $file );
?>

Замечание:

Глядя на приведённый выше пример, у вас может возникнуть идея использовать эту технику для ведения удалённого лог-файла. К сожалению, это нереализуемо, поскольку попытка записи в уже существующий удалённый файл при помощи функции fopen() приведёт к ошибке. В реализации распределённого логирования, возможно, вам поможет функция syslog() .

User Contributed Notes

  • Отличительные особенности
    • HTTP-​аутентификация в PHP
    • Cookies
    • Сессии
    • Работа с XForms
    • Загрузка файлов на сервер
    • Работа с удалёнными файлами
    • Работа с соединениями
    • Постоянные соединения с базами данных
    • Использование PHP в командной строке
    • Сборка мусора
    • Динамическая трассировка DTrace

    Источник

    Использование удалённых/remote файлов

    Если поддержка «URL fopen-оболочки/wrapper» включена при конфигурировании PHP (если вы только не передали явным образом флаг —disable-url-fopen-wrapper для конфигурирования (для версий, новее 4.0.3) или не установили allow_url_fopen в off в файле php.ini (для более новых версий)), вы можете использовать HTTP и FTP- URL’ы с большинством функций, которые принимают filename/имя файла в качестве параметра, в том числе — операторы require() и include().

    Примечание: Windows-версия PHP в настоящее время не поддерживает удалённый доступ к файлам для следующих функций: include(), include_once(), require() require_once().

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

    Пример: Получение названия/title удалённой страницы

    Unable to open remote file. "; exit; > while (!feof ($file)) < $line = fgets ($file, 1024); /* Это будет работать, только если title и его тэги расположены в одной строчке */ if (eregi ("", $line, $out)) < $title = $out[1]; break; >> fclose($file); ?>

    Вы можете также записывать в файлы по FTP, если соединены как пользователь с корректными правами доступа и если файл ещё не существует. Для соединения как любой пользователь, кроме ‘anonymous’, вам необходимо специфицировать username (и, возможно, password) в URL, как, например: ‘ftp://user:password@ftp.example.com/path/to/file’. (Вы можете использовать тот же синтаксис для доступа к файлам по HTTP, если необходима Basic-аутентификация.)

    Пример: Сохранение данных на удалённом сервере

    Unable to open remote file for writing. "; exit; > /* Здесь записываются данные. */ fputs ($file, $_SERVER['HTTP_USER_AGENT'] . " "); fclose ($file); ?>

    Примечание: из этого примера у вас может возникнуть идея использовать эту технику для записи в удалённый log, но, как указано выше, вы можете записывать только в новый файл с использованием оболочек URL fopen(). Для выполнения распределённого логинга, вроде этого, вы должны просмотреть syslog().

    Источник

    Работа с удаленными файлами

    В случае, если опция allow_url_fopen включена в конфигурационном файле php.ini , вы можете использовать HTTP и FTP ссылки в большинстве функций, принимающих в качестве параметра имя файла. Также вы можете использовать ссылки в операторах include , include_once , require и require_once (начиная с версии PHP 5.2.0 для корректной работы этих функций должна быть включена опция allow_url_include ). Дополнительную информацию о поддерживаемых в PHP протоколах вы можете найти в Поддерживаемые протоколы и обработчики (wrappers).

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

    Пример #1 Получение заголовка удаленной страницы

    $file = fopen ( «http://www.example.com/» , «r» );
    if (! $file ) echo «

    Невозможно открыть удаленный файл.\n» ;
    exit;
    >
    while (! feof ( $file )) $line = fgets ( $file , 1024 );
    /* Сработает, только если заголовок и сопутствующие теги расположены в одной строке */
    if ( preg_match ( «@\(.*)\@i» , $line , $out )) $title = $out [ 1 ];
    break;
    >
    >
    fclose ( $file );
    ?>

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

    Для того, что бы авторизоваться под пользователем, отличным от ‘anonymous’, вам необходимо указать логин (и, возможно, пароль) в адресной строке, например так: ‘ftp://user:password@ftp.example.com/path/to/file‘. (Вы можете использовать этот же синтаксис для доступа к удаленным файлам по HTTP -протоколу, если необходима Basic-авторизация.)

    Пример #2 Сохранение данных на удаленном сервере

    $file = fopen ( «ftp://ftp.example.com/incoming/outputfile» , «w» );
    if (! $file ) echo «

    Невозможно перезаписать удаленный файл.\n» ;
    exit;
    >
    /* Запись данных. */
    fwrite ( $file , $_SERVER [ ‘HTTP_USER_AGENT’ ] . «\n» );
    fclose ( $file );
    ?>

    Замечание:

    Глядя на приведенный выше пример, у вас может возникнуть идея использовать эту технику для ведения удаленного лог-файла. К сожалению, это нереализуемо, поскольку попытка записи в уже существующий удаленный файл при помощи функции fopen() приведет к ошибке. В реализации распределенного логирования, возможно, вам поможет функция syslog() .

    Источник

    Работа с удаленными файлами

    В случае, если опция allow_url_fopen включена в конфигурационном файле php.ini, вы можете использовать HTTP и FTP ссылки в большинстве функций, принимающих в качестве параметра имя файла. Также вы можете использовать ссылки в операторах include(), include_once(), require() и require_once(). Дополнительную информацию о поддерживаемых в PHP протоколах вы можете найти в List of Supported Protocols/Wrappers.

    Замечание: В 4.0.3 и более ранних версиях при сборке необходимо использовать опцию —enable-url-fopen-wrapper для активации возможности работать с удаленными файлами.

    Замечание: Дистрибутивы PHP для Windows-платформ до версии 4.3 не поддерживают возможности работы с удаленными файлами для следующих операторов: include(), include_once(), require(), require_once(), и функций вида imagecreatefromXXX (GD Функции).

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

    Пример 1 Получение заголовка удаленной страницы
    $file = fopen ("http://www.example.com/", "r"); if (!$file) < echo "

    Unable to open remote file.\n"; exit; > while (!feof ($file)) < $line = fgets ($file, 1024); /* Сработает, только если заголовок и сопутствующие теги расположены в одной строке */ if (eregi ("", $line, $out)) < $title = $out[1]; break; >> fclose($file);

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

    Для того, что бы авторизироваться под пользователем, отличным от ‘anonymous’, вам необходимо указать логин (и, возможно, пароль) в адресной строке, например так: ‘ftp://user:password@ftp.example.com/path/to/file’. (Вы можете использовать этот же синтаксис для доступа к удаленным файлам по HTTP-протоколу, если необходима Basic-авторизация.)

    Пример 2 Сохранение данных на удаленном сервере
    $file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w"); if (!$file) < echo "

    Unable to open remote file for writing.\n"; exit; > /* Запись данных. */ fputs ($file, $_SERVER['HTTP_USER_AGENT'] . "\n"); fclose ($file);

    Замечание: Глядя на приведенный выше пример, у вас может возникнуть идея использовать эту технику для ведения удаленного лог-файла. К сожалению, это не реализуемо, поскольку попытка записи в уже существующий удаленный файл при помощи функции fopen() приведет к ошибке. В реализации распределенного логирования, возможно, вам поможет функция syslog().

    Источник

    Читайте также:  Python факториал без цикла
Оцените статью