PHP.mk документација

Вообичаени стапици

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

features.file-upload.common-pitfalls.php PHP.net прокси Преводот е вчитан
Оригинал на PHP.net
Патека features.file-upload.common-pitfalls.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + преведен приказ Кодовите, табелите и белешките остануваат читливи во истиот тек.
Вообичаени стапици

Референца за `features.file-upload.common-pitfalls.php` со подобрена типографија и навигација.

features.file-upload.common-pitfalls.php

Вообичаени стапици

На MAX_FILE_SIZE објектот не може да специфицира големина на датотека поголема од големината на датотеката поставена во upload_max_filesize во php.ini датотека. Стандардно е 2 мегабајти.

Ако е овозможен лимит на меморија, поголем memory_limit можеби ќе биде потребно. Осигурајте се дека сте поставиле memory_limit доволно големо.

Враќа max_execution_time е поставено премногу мало, извршувањето на скриптата може да биде надминато од вредноста. Осигурајте се дека сте поставиле max_execution_time доволно големо.

Забелешка: max_execution_time влијае само на времето на извршување на самата скрипта. Секое време поминато на активности што се случуваат надвор од извршувањето на скриптата, како што се системски повици користејќи system()симболот, на пр. sleep() функција, прашања до базата на податоци, времето потребно за процесот на поставување датотеки, итн., не се вклучени при одредување на максималното време што скриптата работи.

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

max_input_time поставува максимално време, во секунди, што скриптата смее да прима влез; ова вклучува поставување датотеки. За големи или повеќе датотеки, или корисници со побавни врски, стандардното од 60 секунди може да биде надминато.

Враќа post_max_size е поставено премногу мало, големи датотеки не можат да се постават. Осигурајте се дека сте поставиле post_max_size доволно големо.

На max_file_uploads поставката за конфигурација ја контролира максималниот број датотеки што можат да се постават во еден барање. Ако се постават повеќе датотеки отколку што е лимитот, тогаш $_FILES ќе престане да обработува датотеки откако ќе се достигне лимитот. На пример, ако max_file_uploads е поставен на 10Содржи какви било информации за патеката обезбедени од клиентот што следат по името на датотеката на тековната скрипта, но предничат на низата за прашање, ако е достапно. На пример, ако тековната скрипта беше пристапена преку URI $_FILES никогаш нема да содржи повеќе од 10 ставки.

Невалидирањето на датотеката со која работите може да значи дека корисниците можат да пристапат до чувствителни информации во други директориуми.

Поради големиот број стилови за листање директориуми, не можеме да гарантираме дека датотеките со егзотични имиња (како што содржат празни места) се обработуваат правилно.

Развивачот не смее да меша нормални input полиња и полиња за поставување датотеки во иста променлива на формуларот (со користење на input име како foo[]).

Белешки од корисници 10 белешки

амалкон _a_t_ еудорамаил _d_o_t_ ком
21 години пред
Note that, when you want to upload VERY large files (or you want to set the limiters VERY high for test purposes), all of the upload file size limiters are stored in signed 32-bit ints.  This means that setting a limit higher than about 2.1 GB will result in PHP seeing a large negative number.  I have not found any way around this.
Нирмал Натараџан
пред 16 години
If using IIS 7.0 or above, the Request Filtering is enabled by default and the max allowed content length is set to 30 MB.

One must change this value if they want to allow file uploads of more than 30 MB.

Sample web.config entry:

<configuration>
    </system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="314572800"/>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

The above setting will allow 300 MB of data to be sent as a request. Hope this helps someone.
администратор на creationfarm dot com
пред 23 години
The macintosh OS (not sure about OSx) uses a dual forked file system, unlike the rest of the world ;-). Every macintosh file has a data fork and a resource fork. When a dual forked file hits a single forked file system, something has to go, and it is the resource fork. This was recognized as a problem (bad idea to begin with) and apple started recomending that developers avoid sticking vital file info in the resource fork portion of a file, but some files are still very sensitive to this. The main ones to watch out for are macintosh font files and executables, once the resource fork is gone from a mac font or an executable it is useless. To protect the files they should be stuffed or zipped prior to upload to protect the resource fork. 

Most mac ftp clients (like fetch) allow files to be uploaded in Macbinhex, which will also protect the resource fork when transfering files via ftp. I have not seen this equivilent in any mac browser (but I haven't done too much digging either).

FYI, apple does have an old utility called ResEdit that lets you manipulate the resource fork portion of a file.
adrien.nizon+phpnet на gmail dot com
пред 9 години
[Editor's note: to be more precise, MAX_FILE_SIZE can't exceed PHP_INT_MAX before PHP 7.1.]

Please note that the field MAX_FILE_SIZE cannot exceed 2147483647. Any greater value will lead to an upload error that will be displayed at the end of the upload

This is explained by the related C code :
if (!strcasecmp(param, "MAX_FILE_SIZE")) {
    max_file_size = atol(value);
}

The string is converted into a long int, which max value is... 2147483647

Seems to be corrected since php-7.1.0beta3 (https://github.com/php/php-src/commit/cb4c195f0b85ca5d91fee1ebe90105b8bb68356c)
dg на artegic dot de
пред 16 години
In case of non-deterministic occurence of the UPLOAD_ERR_PARTIAL error:  The HTTPD (e.g. Apache) should respond with a 'Accept-Ranges: none' header field.
bohwaz
3 години пред
Please be advised that setting a large post_max_size or upload_max_filesize for a complete server or a complete virtual host is not a good idea as it may lead to increased security risks.

The risk is that an attacker may send very large POST requests and overloading your server memory and CPU as it has to parse and process those requests before handling them to your PHP script.

So it's best to limit changing this setting to some files or directories. For example if I want to /admin/files/ and /admin/images/ I can use:

<If "%{REQUEST_URI} =~ m!^/admin/(files|images)/! && -n %{HTTP_COOKIE}">
    php_value post_max_size 256M
    php_value upload_max_filesize 256M
</If>

I also require the request to have a cookie to avoid basic attacks. This will not protect you against attacks coming from non-authenticated users, but may delay any attack.

This setting can be used in Apache server configuration files, and .htaccess files as well.
morganaj на coleggwent dot ac dot uk
пред 22 години
Here is another that may make your upload fall over.  If you are using Squid or similar proxy server make sure that this is not limiting the size of the HTTP headers. This took me weeks to figure out!
андерс јенбо пц дк
пред 18 години
A responce to admin at creationfarm dot com, Mac OS X and Windows running on a NTFS disk also uses a multi stream file system. Still only the data stream in transfared on http upload. It is preferable to pack Mac OS X files in .dmg files rathere then zip but the avarage user will find zip much easir and they are supported on more platforms.
tjaart на siam-data-services dot com
20 години пред
Took me a while to figure this one out...

I think this is actually a header problem, but it only
happens when doing a file upload.

If you attept a header("location:http://...) redirect after
processing a $_POST[''] from a form doing a file upload
(i.e. having enctype="multipart/form-data"), the redirect
doesn't work in IE if you don't have a space between
location: & http, i.e.
header("location:http://...)  vs
header("location: http://...)

===================================
<?php
if ($_POST['submit']=='Upload') {
    // Process File and the redirect...
    header("location: http://"..."/somewhere.php");
    exit;
}
?>
<html><head></head><body>
<form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="20000">
    Your file: <input name="filename" type="file">
    <input name="submit" type="submit" value="Upload">
</form>
</body></html>
===================================

This only happens if all of the following are true:
header("location:http://...) with no space
Form being processed has enctype="multipart/form-data"
Browser=IE

To fix the problem, simply add the space.

Hope this helps someone else.
tomcashman на unitekgroup dot com
пред 22 години
For apache, also check the LimitRequestBody directive.
If you're running a Red Hat install, this might be set in /etc/httpd/conf.d/php.conf.
By default, mine was set to 512 KB.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.