CUrl — узнать размер файла до открытия | PHPClub
tolyan
Новичок
- #1
CUrl — узнать размер файла до открытия
Ситуация такая:
использую CUrl в скрипте для доставки файлов по почте. Используется тьма возможностей CUrl при открытии: выставление реферрера, открывание файла по частям, еще чего-то там.. Все это с целью преодолеть всяческие защиты от скачивания и прочее.
Не могу найти такую штуку:
как узнать размер файла до его открытия? Если файл большой, то он открывается в цикле частями до тех пор, пока цикл не доберется до конца файла.
curl_getinfo() возвращает дельную инфу только после curl_init() а до этого галимые нули.
filesize просто не может добраться до многих файлов, которые может открыть CUrl
white phoenix
Новичок
- #2
tolyan
Дык полюбому память будет занята, ведь для отправки по почте нужно иметь в переменной весь файл.
tolyan
Новичок
- #3
C этим проблем нет — по частям открываем по частям отправляем.
Но как до процесса отправки узнать размер _ВСЕГО_файла? Чтобы не получить по почте вместо 7 метров 700, по незнанию.
А файлы размером в 100 метров скриптик отправляет на ура — проверено.
SiMM
Новичок
- #4
В общем случае — никак. Заголовок Content-Length в отклике сервера не является обязательным. В частном — при помощи HEAD-запроса. Как делать его в CURL и возможно ли вообще — смотри в документации.
Получить размер файла из системы в Python
В Python существует несколько методов определения размера файла. По-видимому, существуют методы эффективного получения размера файлового объекта путем импорта файла в Python и методы получения размера файлового объекта с помощью вызовов ОС через вашу файловую систему. Ваши конкретные требования будут выбирать предпочтительный метод. В этом руководстве вы узнаете, как получить размер файла в Python.
Перед выполнением каждой функции над файлом мы должны время от времени проверять размер файла. Например, если вы пытаетесь реплицировать данные из одного файла в другой. Прежде чем приступить к процессу копирования файла, мы можем проверить, больше ли размер файла 0. В этой статье мы будем использовать три метода: модуль os. path, функцию stat и объект файла. В Python вы можете получить размер файла практически любым способом. Очень важно получить размер файла в Python, чтобы контролировать размер файла или сортировать файлы в каталоге по размеру файла.
Содержание
- Пример 1
- Пример 2
- Пример 3
- Вывод
Пример 1
Первый метод определения размера файла заключается в использовании os.path.getsize(). Также задействован модуль os. Этот модуль позволяет нам работать с путями к файлам и каталогами в Python. Мы можем получить доступ и изменить пути, используя этот модуль. По сравнению с размером os.stat(file).st реализация os.path.getsize() проста и понятна. Она вызывает os.error, если файл каким-то образом не существует или недоступен. Функция getsize в модуле Python os.path принимает в качестве входных данных путь к файлу и возвращает размер файла в байтах. В этом случае мы должны указать точный путь к файлу (абсолютный путь), а не относительный путь.
Корневая папка всегда находится в начале абсолютного пути. Абсолютный путь содержит весь список каталогов, необходимый для поиска файла. Например, /user/mydocuments/data/abc.txt — это абсолютный путь к файлу abc.txt. Строка пути содержит всю информацию, необходимую для получения файла. Известно, что родственник вносит свой вклад в текущий рабочий каталог программы. Как видите, мы использовали функцию getsize, чтобы получить точный размер файла после импорта модуля os. После этого распечатываем результат.
import os
s = os.path.getsize(‘D:/demo.txt’)
print(‘File size:’, s, ‘bytes’)
Результат приведенного выше кода выглядит следующим образом.
Пример 2
Метод os.stat() возвращает объект, содержащий многочисленные дескрипторы файловой системы файла, такие как его размер, время последнего обновления, идентификация пользователя и т. д. Этот метод полезно использовать для получения дополнительной информации о файле. os.stat() — это функция, аналогичная os.path. Единственным аргументом getsize() является путь к файлу. Модуль os в Python имеет метод stat, который принимает путь в качестве аргумента. Этот путь может быть строкой или просто объектом пути, и он возвращает структуру со статистической информацией о пути. Среди различных характеристик этой структуры поле st_size содержит размер файла, находящегося по указанному пути.
import os
s = os.stat(‘D:/demo.txt’)
print(‘File size:’, s.st_size, ‘bytes’)
Ниже приведен вывод кода.
Пример 3
Более надежный метод получения размера файла в Python состоит в том, чтобы открыть файл либо как файловый объект, выполнить поиск до конца файла и прочитать положение курсора в конце файла, которое будет равно размеру в байтах. В Python эта функция помогает определить размер огромного файлового объекта в режиме реального времени. Когда у нас есть объект, указывающий на файл, мы должны выполнить следующие шаги, чтобы получить размер файла для использования этого метода. При первом открытии файла курсор указывает на начало файла.
Метод seek объекта File используется для перемещения курсора в определенное место. Он принимает два аргумента, первый из которых — начальное положение курсора, а второй — конечное положение курсора. Если первый параметр отсутствует, по умолчанию устанавливается значение 0, что означает, что файл начинается с начала. Используйте метод seek для перемещения курсора в конец файла с 0 в качестве начального значения и os в качестве пункта назначения. SEEK END — это конечное значение, где SEEK END — это константа модуля ОС, указывающая конец файла.
import os
a = open(‘D:/demo.txt’)
a.seek(0, os.SEEK_END)
print(‘File size:’, a.tell(), ‘bytes’)
Размер файла можно увидеть ниже.
Теперь мы понимаем, почему важно получать размер файла в Python при ранжировании файлов по размеру или в различных других сценариях. Вывод размера файла всегда в байтах. Значение может быть кратно размеру блока файловой системы, чтобы упростить будущие вычисления. В этом посте мы узнали, как проверить размер файла с помощью нескольких встроенных функций, таких как seek(), tell(), st_size() и os.path.getsize(). Мы также использовали некоторые уникальные концепции программирования и управления файлами. Мы использовали метод open() для открытия файла, а затем использовали функции для проверки размера файла.
Как установить максимальный размер загружаемого файла PHP
Как установить максимальный размер загружаемого файла PHPВ этой статье описывается, как изменить максимальный размер загружаемого файла для сценариев PHP с помощью директив upload_max_filesize и post_max_size php.
Содержание- Изменение максимального размера загружаемого файла
- Установка директив
- Дополнительная информация
Изменение максимального размера загружаемого файла
По умолчанию максимальный размер загружаемого файла для сценариев PHP составляет 128 мегабайт. Однако вы можете изменить эти ограничения. Например, вы можете установить нижний предел, чтобы пользователи не могли загружать большие файлы на ваш сайт. Для этого измените
Чтобы обеспечить правильную загрузку файлов, директива post_max_size должна быть немного больше, чем upload_max_filesize . Например, следующие настройки демонстрируют, как установить ограничение на загрузку файлов до 20 мегабайт:
upload_max_filesize = 20M post_max_size = 21M
Чтобы проверить текущее значение директивы upload_max_filesize и других директив, вы можете использовать функция phpinfo() . Для получения дополнительной информации см. эту статью.
Установка директив
Предпочтительным способом установки директив php является использование графических инструментов в панели управления.
Для учетных записей, использующих панель управления cPanel, см. эту статью.
Об учетных записях, использующих панель управления Plesk, см. в этой статье.
Многие учетные записи также позволяют использовать собственный файл php.ini. Инструкции по созданию пользовательского файла php.ini см. в этой статье.
Дополнительная информация
- Чтобы просмотреть полный список директив php.ini , посетите http://www.php.net/manual/en/ini.list.php.
- Для получения дополнительной информации о директиве upload_max_filesize посетите http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize.
- Для получения дополнительной информации о директиве post_max_size посетите http://www.php.net/manual/en/ini.core.php#ini.post-max-size.
Детали статьи
- Уровень: Продвинутый
Другие статьи в этой категории
- Сообщения об ошибках PHP
- Регистрация ошибок PHP
- PHP часовые пояса
- Максимальное время выполнения PHP
- PHP директива allow_url_fopen
- Директива PHP register_globals
- Директива о магических кавычках PHP
- PHP максимальный размер загружаемого файла
- Ограничение памяти PHP-скрипта
- PHP max_input_vars директива
- PHP директива expose_php
- PHP директива output_buffering
- Директива PHP disable_functions
Показать больше
Статьи по теме
- Изменение версий и настроек PHP с помощью PHP Selector
- Пользовательские файлы php.
- Использование директив php.ini
- Переключение версий PHP в Plesk
Показать больше
Развивайте свой веб-бизнес
Подпишитесь, чтобы получать еженедельные советы, стратегии и новости, необходимые для развития вашей сети бизнес.
Бесплатно. Отписаться в любое время.
Была ли эта статья полезной для вас? Тогда вам понравится наша поддержка. Испытайте преимущества хостинга A2 уже сегодня и получите предварительно защищенный и предварительно оптимизированный веб-сайт. Ознакомьтесь с нашими планами веб-хостинга сегодня.
Загрузка больших файлов > 512 МБ — Последняя версия руководства по администрированию Nextcloud последняя документация
Максимальный размер файла для загрузки по умолчанию составляет 512 МБ. Вы можете увеличить это ограничить до того, что позволяет ваша файловая система и операционная система. Есть определенные жесткие ограничения, которые не могут быть превышены:
< 2 ГБ на 32-битной архитектуре ОС
< 2 ГБ с IE6 - IE8
< 4 ГБ с IE9 - IE11
64-битные файловые системы имеют гораздо более высокие ограничения; обратитесь к документации по вашему файловая система.
Примечание
На клиента синхронизации Nextcloud эти ограничения на загрузку не распространяются. так как он загружает файлы небольшими порциями. См. клиентскую документацию для получения дополнительной информации о параметрах конфигурации.
Конфигурация системы
Убедитесь, что установлена последняя версия PHP
Отключение пользовательских квот, что делает их неограниченными
Ваш временный файл или раздел должен быть достаточно большим, чтобы вместить несколько параллельные загрузки от нескольких пользователей; например если максимальный размер загрузки составляет 10 ГБ и среднее количество пользователей, одновременно загружающих файлы, равно 100: временное пространство имеет вмещать не менее 10×100 ГБ
Настройка веб-сервера
Примечание
Nextcloud поставляется с собственным файлом nextcloud/.htaccess
php-fpm
не могу прочитать настройки PHP в . htaccess
эти настройки должны быть установлены в файл nextcloud/.user.ini
.Установите следующие два параметра в соответствующем файле php.ini (см. Загруженный файл конфигурации раздел версии PHP и информация для поиска соответствующие файлы php.ini)
php_value upload_max_filesize 16G php_value post_max_size 16G
Параметры upload_max_filesize
и post_max_size
могут не применяться к загрузке файлов
через запросы PUT одного файла WebDAV или загрузку файлов фрагментами
Для них тайм-ауты PHP и веб-сервера являются ограничивающим фактором для размера загрузки.
Настройте эти значения в соответствии с вашими потребностями. Если вы видите тайм-ауты PHP в своих файлах журналов, увеличьте значения времени ожидания, которые указаны в секундах:
php_value max_input_time 3600 php_value max_execution_time 3600
Модуль mod_reqtimeout
Модуль Apache также может мешать завершению больших загрузок. Если вы используете это
модуль и получить неудачную загрузку больших файлов либо отключить его в вашем Apache
конфиг или поднять настроенный RequestReadTimeout
тайм-аутов.
В конфигурации вашего веб-сервера также есть несколько других параметров конфигурации, которые может предотвратить загрузку больших файлов. См. руководство вашего веб-сервера. как правильно настроить эти значения:
Апач
Тело лимита запроса
SSLRenegBufferSize
Время ожидания
Апач с mod_fcgid
FcgidMaxRequestInMem
Фкгидмаксрекуестлен
Примечание
Если вы используете Apache/2.4 с mod_fcgid, по состоянию на февраль/март 2016 г. FcgidMaxRequestInMem
по-прежнему необходимо значительно увеличить значение по умолчанию.
чтобы избежать возникновения ошибок сегментации при загрузке больших файлов. это не обычный
, но служит обходным путем для Apache с ошибкой mod_fcgid # 51747.
Параметр FcgidMaxRequestInMem
значительно выше нормального больше не может быть
необходимо, как только ошибка № 51747 будет исправлена.
Apache с mod_proxy_fcgi
Время ожидания прокси-сервера
нгинкс
client_max_body_size
fastcgi_read_timeout
client_body_temp_path
Начиная с nginx 1.7.11 новая опция конфигурации fastcgi_request_buffering
доступен. Установка для этого параметра значения fastcgi_request_buffering off;
в вашей конфигурации nginx
может помочь с тайм-аутами во время загрузки. Кроме того, это помогает, если у вас заканчивается
дисковое пространство в разделе tmp вашей системы.
Примечание
Убедитесь, что client_body_temp_path
указывает на раздел с
достаточно места для размера вашего загружаемого файла и на том же разделе, что и upload_tmp_dir
или tempdirectory
(см. ниже). Для оптимального
производительности, поместите их на отдельный жесткий диск, предназначенный для
подкачка и временное хранилище.
Если ваш сайт находится за внешним интерфейсом nginx (например, балансировщиком нагрузки):
По умолчанию загрузка будет ограничена 1 ГБ из-за proxy_buffering
и proxy_max_temp_file_size
на внешнем интерфейсе.
Если вы можете получить доступ к конфигурации внешнего интерфейса, отключите proxy_buffering или увеличьте размер proxy_max_temp_file_size по умолчанию с 1 ГБ.
Если у вас нет доступа к внешнему интерфейсу, установите для заголовка X-Accel-Buffering значение
add_header X-Accel-Buffering no;
на вашем внутреннем сервере.
Настройка PHP
Если вы не хотите использовать Nextcloud .htaccess
или .user.ini
, вы можете
вместо этого настройте PHP. Обязательно закомментируйте все строки .htaccess
относящийся к размеру загрузки, если вы его ввели.
Если вы используете Nextcloud в 32-разрядной системе, любая директива open_basedir
в файле php.ini
необходимо закомментировать.
Установите следующие два параметра внутри php.ini
, используя свои собственные настройки.
значения размера файла:
upload_max_filesize = 16G post_max_size = 16G
Сообщите PHP, какой временный каталог вы хотите использовать:
upload_tmp_dir = /var/big_temp_file/
Буферизация вывода должна быть отключена в .htaccess
или .user.ini
или php.ini
или PHP
вернет ошибки, связанные с памятью:
Настройка Nextcloud
В качестве альтернативы upload_tmp_dir
PHP (например, если у вас нет доступа к php.ini
) вы также можете настроить временное место для загруженных файлов с помощью tempdirectory
в вашем config.php
(см. Параметры конфигурации).