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

Существует решение Вашей проблемы, которая распределяется с самим Python. pindent.py, это расположено в каталоге Tools\Scripts в установке окон (мой путь к нему является C:\Python25\Tools\Scripts), похоже, что Вы имели бы к [1 110] захват это с svn.python.org при работе Linux или OSX.

Это добавляет комментарии, когда блоки закрываются или могут правильно расположить код с отступом, если комментарии вставляются. Вот пример кода, произведенного pindent с командой:

pindent.py -c myfile.py

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
       # end if
   else:
       print 'oops!'
   # end if
# end def foobar

, Где оригинал myfile.py был:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'

можно также использовать pindent.py -r для вставки корректного добавления отступа на основе комментариев (прочитайте заголовок pindent.py для деталей), это должно позволить Вам кодировать в Python, не вызывая беспокойство о добавлении отступа.

, Например, работая pindent.py -r myfile.py преобразует следующий код в myfile.py в то же, правильно расположенное с отступом (и также прокомментировал), код, как произведено pindent.py -c пример выше:

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
# end if
else:
print 'oops!'
# end if
# end def foobar

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

15
задан j0k 3 September 2012 в 14:17
поделиться

4 ответа

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

9
ответ дан 30 November 2019 в 23:50
поделиться

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

1
ответ дан 30 November 2019 в 23:50
поделиться

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

strlen(file_get_contents($url));
1
ответ дан 30 November 2019 в 23:50
поделиться

Я предполагаю, что использование 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);

И даст вам:

float 3438

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


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

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

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

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

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

Жалко: - (

11
ответ дан 30 November 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: