Существует решение Вашей проблемы, которая распределяется с самим 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
мне было бы интересно изучать, какое решение Вы заканчиваете тем, что использовали, если Вы требуете дальнейшей помощи, прокомментируйте это сообщение, и я попытаюсь помочь.
Да. Поскольку файл является удаленным, вы полностью зависите от значения заголовка Content-Length
(если вы не хотите загрузить весь файл). Вам потребуется curl_setopt ($ ch, CURLOPT_NOBODY, true)
и curl_setopt ($ ch, CURLOPT_HEADER, true)
.
Использование запроса HEAD и проверка Content-Length
- это стандартный способ сделать это, но вы не можете полагаться на него в целом, поскольку сервер может не поддержите это. Заголовок Content-Length
является необязательным, и, кроме того, сервер может даже не реализовать метод HEAD. Если вы знаете, какой сервер исследуете, вы можете проверить, работает ли он, но в целом это не является пуленепробиваемым.
Если вам не нужно пуленепробиваемое решение, вы можете просто сделать:
strlen(file_get_contents($url));
Я предполагаю, что использование 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
Жалко: - (