auto_globals_jit setting is also affecting $_REQUEST superglobal in 5.3 It is not explicitly stated in documentation.
Описание на директивите на php.ini от ядрото
Този списък съдържа директивите на php.ini от ядрото, които могат да бъдат установени с цел конфигуриране на PHP. Директивите, които се обслужват от разширения са дадени и описани на страниците на съответните разширения. Например, информация относно директивите свързани с работа със сесии могат да бъдат намерени на страница Функции за сесии.
Настройки на Httpd
| Име | По подразбиране | Модифицируемо | Дневник на промените |
|---|---|---|---|
| async_send | "0" | PHP_INI_ALL |
Езикови настройки
| Име | По подразбиране | Модифицируемо | Дневник на промените |
|---|---|---|---|
| short_open_tag | "1" | PHP_INI_ALL | PHP_INI_ALL от PHP <= 4.0.0. PHP_INI_PERDIR от PHP < 5.3.0 |
| asp_tags | "0" | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 4.0.0. |
| precision | "14" | PHP_INI_ALL | |
| y2k_compliance | "1" | PHP_INI_ALL | |
| allow_call_time_pass_reference | "1" | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 4.0.0. |
| expose_php | "1" | php.ini only | |
| zend.ze1_compatibility_mode | "0" | PHP_INI_ALL | Достъпна от PHP 5.0.0. Премахната в PHP 5.3.0 |
Тук има кратко описание на конфигурационните директиви.
- short_open_tag boolean
-
Указва дали е позволено използването на кратката форма (
<? ?>) за отварящия таг на PHP. Ако искате да използвате PHP в комбинация с XML, тряжва да забраните тази опция за да можете да използвате<?xml ?>. В противен случай трябва да го изведете с PHP, например<?php echo '<?xml version="1.0"'; ?>. Също така, ако е забранено, трябва да използвате пълната форма на отварящия PHP таг (<?php ?>).Забележка: Директивата засяга и кратката форма
<?=, която е еквивалентна на<? echo. Използването на тази кратка форма изискваshort_open_tagда бъде включена.
- Включва поддръжката на използваните в ASP тагове <% %>, като допълнение на обичайните тагове <?php ?>. Това включва краткия запис аз извеждане <%= $value %>. За повече информация вж. Излизане от HTML.
- precision integer
- Броя на значещите цифри на числата с плаваща запетая.
- y2k_compliance boolean
- Налагане на спазването на съвместимостта с 2000-та година (ще предизвика проблеми при несъвместими браузъри)
- allow_call_time_pass_reference boolean
-
Указва дали да се изведе предупреждение, ако параметрите на функция са предадени по референция време на извикването и. Този метод е непрепоръчителен, и е най-вероятно да не се поддържа и в бъдещи версии на PHP/Zend. Препоръчителният метод за определяне кои параметри трябва да бъдат предадени по референция е това да се извършва в декларацията на функцията. Също така се препоръчва, да пробвате тази опция включена и изключена, и да се уверите, че скриптовете ви работят и в двата случая, за да сте сигурни, че ще работят и с бъдещи версии на езика (като ще бъде генерирано предупреждение всеки път, когато използвате тези възможности).
Предаването на параметри на функция по време на извикването и стана непрепоръчително с цел по-голяма прегледност на кода. Дадена функция може да промени параметрите си, по начин, който не е документиран, ако този параметър не е деклариран като предаван по референция. За да предотвратите тези странични ефекти, е по-добре да укажете точно кои параметри се предават по референция само в декларацията на функцията.
Вж. съшо Референции.
- expose_php boolean
-
Указва дали PHP да се показва като инсталирано на сървъра (като добавя определен низ в хедъра на уеб сървъра). Това не застрашава сигурността по никакъв начин, но предоставя възможност да се разбере дали на сървъра е инсталирано PHP или не.
- zend.ze1_compatibility_mode boolean
-
Активира режима на съвместимост със Zend Engine 1 (PHP 4). Тази промяна влияе на клонирането, преобразуването на типовете (обекти без свойства се преобразуват до FALSE или 0) и сравняването на обектите. В този режим обектите се предават по стойност, а не както е по подразбиране - по референция.
Вижте също раздела наречен Миграция от PHP 4 към PHP 5.
Ограничения на ресурсите
| Име | По подразбиране | Модифицируемо | Дневник на промените |
|---|---|---|---|
| memory_limit | "128M" | PHP_INI_ALL | "8M" преди PHP 5.2.0, "16M" от PHP 5.2.0 |
Тук има кратко описание на конфигурационните директиви.
- memory_limit integer
-
Тази директива установява максималното количество памет (в байтове), което даден скрипт може да използва. Посредством това се предотвратява използването на цялата достъпна памет на сървъра, от зле написани скриптове. Забележете, че за да премахнете ограничението за използването на паметта, трябва да установите тази директива в -1.
Прези PHP 5.2.1, с цел използването на тази директива, трябва тя да бъде активирана по време на компилация, посредством -enable-memory-limit. Това е необходимо и за да бъдат достъпни функциите memory_get_usage() и memory_get_peak_usage().
Когато се използва цяло число, стойността се отчита в байтове. Може да се използва също и краткото записване, съгласно описанието във FAQ.
Вж. също: max_execution_time.
Настройване на производителността
| Име | По подразбиране | Модифицируемо | Дневник на промените |
|---|---|---|---|
| realpath_cache_size | "16K" | PHP_INI_SYSTEM | Достъпна от PHP 5.1.0. |
| realpath_cache_ttl | "120" | PHP_INI_SYSTEM | Достъпна от PHP 5.1.0. |
Тук има кратко описание на конфигурационните директиви.
- realpath_cache_size integer
-
Установява размера на realpath кеша, който ще се използва от PHP. Тази стойност трябва да е по-голяма в системи, при които PHP отваря множество файлове, с цел това да се отрази на количеството на извършените файлови операции.
- realpath_cache_ttl integer
-
Периодът от време (в секунди) за което да се кешира realpath информацията за даден файл или директория. В системи при които рядко се променят файловете, стойността трябва да е по-голяма.
Работа с данни
| Име | По подразбиране | Модифицируемо | Дневник на промените |
|---|---|---|---|
| track_vars | "On" | PHP_INI_?? | |
| arg_separator.output | "&" | PHP_INI_ALL | Достъпна от PHP 4.0.5. |
| arg_separator.input | "&" | PHP_INI_PERDIR | Достъпна от PHP 4.0.5. |
| variables_order | "EGPCS" | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 5.0.5. |
| request_order | "" | PHP_INI_SYSTEM|PHP_INI_PERDIR | Достъпна от PHP 5.3.0 |
| auto_globals_jit | "1" | PHP_INI_PERDIR | Достъпна от PHP 5.0.0. |
| register_globals | "0" | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 4.2.3. |
| register_argc_argv | "1" | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 4.2.3. |
| register_long_arrays | "1" | PHP_INI_PERDIR | Достъпна от PHP 5.0.0. |
| post_max_size | "8M" | PHP_INI_PERDIR | PHP_INI_SYSTEM от PHP <= 4.2.3. Достъпна от PHP 4.0.3. |
| gpc_order | "GPC" | PHP_INI_ALL | |
| auto_prepend_file | NULL | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 4.2.3. |
| auto_append_file | NULL | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 4.2.3. |
| default_mimetype | "text/html" | PHP_INI_ALL | |
| default_charset | "" | PHP_INI_ALL | |
| always_populate_raw_post_data | "0" | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 4.2.3. Достъпна от PHP 4.1.0. |
| allow_webdav_methods | "0" | PHP_INI_PERDIR |
Тук има кратко описание на конфигурационните директиви.
- track_vars boolean
-
Ако е активирана, променливите на обкръжението, GET, POST, бисквитките и сървърните променливи ще бъдат достъпни в асоциативните масиви $_ENV, $_GET, $_POST, $_COOKIE и $_SERVER.
Забележете, че от PHP 4.0.3,
track_varsе винаги включена. - arg_separator.output string
-
Разделителят използван при URL-адресите генерирани от PHP, за разделяне на аргументите.
- arg_separator.input string
-
Списък на разделителите използвани от PHP за прехвърляне на данните от URL-адреса към променливи.
Забележка: Всеки знак на тази директива се счита за разделител!
- variables_order string
-
Установява реда на обработка на EGPCS (Environment, Get, Post, Cookie, и Server) променливите. Например, ако variables_order е установена в "SP", PHP ще създаде superglobals $_SERVER и $_POST, но няма да създаде $_ENV, $_GET, and $_COOKIE. Установяването на директивата в "" означава, че никакви superglobals няма да бъдат установени.
Ако непрепоръчителната директива register_globals е включена (премахната в PHP 6.0.0), variables_order ще определя реда на променливите ENV, GET, POST, COOKIE и SERVER, които са от глобалната област на действие. Така например, ако variables_order е установен в "EGPCS", register_globals е включена и са установени $_GET['action'] и $_POST['action'], $action ще приеме стойността на $_POST['action'], тъй като P е след G в примерната стойност на директивата.
ПредупреждениеПри CGI и при FastCGI SAPI-та $_SERVER се попълва и от стойности от обкръжението; S винаги е еквивалентно на ES независимо от поставянето на E някъде другаде в тази директива.
Забележка: Съдържанието и реда на $_REQUEST също зависи от тази директива.
- request_order string
-
Тази директива описва реда в който PHP регистрира променливите GET, POST и Cookie в масива _REQUEST. Регистрацията се извършва от ляво на дясно, като по-новите стойности препокриват по-старите.
Ако директивата не е установена, за $_REQUEST променливите се използва стойността на variables_order.
- auto_globals_jit boolean
-
Ако директивата е включена SERVER и ENV променливите се създават в момента на първата им употреба (Just In Time), а не в началото на изпълнението на скрипта. Ако тези променливи не се използват в скрипта, включването на тази директива ще доведе до увеличаване на производителността.
За да може да работи тази директива, директивите register_globals, register_long_arrays, и register_argc_argv трябва да бъдат изключени. От PHP 5.1.3 не е необходмо да е изключена директивата register_argc_argv.
- register_globals boolean
-
Указва дали да бъдат регистрирани EGPCS (Environment, GET, POST, Cookie, Server) променливите като глобални променливи.
От » PHP 4.2.0, стойността по подразбиране на тази директива е off.
За повече информация, моля, прегледайте главата за сигурността от Употреба на register_globals.
Забележете, че
register_globalsне може да се установява по време на изпъление на скрипта (ini_set()). Въпреки това, ако хостингът ви позволява, можете да използвате .htaccess както е описано по-долу. Примерен код за .htaccess:php_flag register_globals off.Забележка:
register_globalsзависи от директивата variables_order.
ПредупреждениеТази възможност е НЕПРЕПОРЪЧИТЕЛНА от PHP 5.3.0 и ПРЕМАХНАТА след PHP 6.0.0. Да се разчита на тази възможност е силно непрепоръчително.
- register_argc_argv boolean
- Казва на PHP дали да декларира argv и argc променливите (които биха съдържали GET-информацията). Вж. също command line. Тази директива е достъпна от PHP 4.0.0 и винаги е "била включена" преди това.
- register_long_arrays boolean
- Указва на PHP дали да регистрира непрепоръчителните предварително дефинирани променливи $HTTP_*_VARS. Когато е включена (както е по подразбиране), дългите предварително-дефинирани променливи, като например $HTTP_GET_VARS ще бъдат дефинирани. Ако не ги използвате е препоръчително да изключите тази директива, за по-голяма производителност. Вместо тях използвайте свръхглобалните масиви като $_GET. Тази директива е достъпна от PHP 5.0.0 и е премахнат от PHP 6.0.0.
- post_max_size integer
- Установява максималния позволен размер на POST данните. Тази настройка засяга и качването на файлове. За да могат да се качват големи файлове, стойността трябва да е по-голяма от тази на upload_max_filesize. Ако в конфигурационния скрипт е включено ограничение на паметта, memory_limit също влияе на качването на файлове. В общия случай memory_limit трябва да бъде по-голямо от post_max_size . Когато се използва цяло число, стойността се отчита в байтове. Може да се използва също и краткото записване, съгласно описанието във FAQ. Ако размера на данните изпратени по POST е по-голям от post_max_size, свръхглобалните променливи $_POST и $_FILES ще бъдат празни. Това може да се види по няколко начина, например като се подаде $_GET променлива към скрипт, който да обработи данните, например чрез <form action="edit.php?processed=1"> и след това се извърши проверка дали $_GET['processed'] е установена.
- gpc_order string
-
Установява реда на обработката на GET/POST/COOKIE променливите. Стойността по подразбиране на тази директива е "GPC". Установяването и в "GP" например, ще накара PHP напълно да игнорира бисквитките и да препокрива всяка променлива от GET метода с променлива от POST-метода носеща същото име.
Забележка: Тази опция не е налична в PHP 4. Вместо нея използвайте variables_order.
- auto_prepend_file string
-
Указва името на файла, който автоматично се анализира преди главният файл. Файлът се вмъква, все едно е вмъкнат посредством функция require(), така че, при вмъкването се използва include_path.
Специалната стойност none забранява автоматичното анализиране.
- auto_append_file string
-
Указва името на файла, който автоматично се анализира след главният файл. Файлът се вмъква, все едно е вмъкнат посредством функция require(), така че, при вмъкването се използва include_path.
Специалната стойност none изключва автоматичното вмъкване за анализ.
Забележка: Ако изпълнението на скрипта е спряно с exit(), автоматично анализиране няма да се извърши.
- default_mimetype string
-
- default_charset string
-
От версия 4.0.0, PHP винаги извежда набора от знаци по подразбиране в заглавката Content-type. За да забраните изпращането на набора от знаци, просто я установете в празен низ.
- always_populate_raw_post_data boolean
-
Винаги попълва $HTTP_RAW_POST_DATA със суровите данни предадени по POST. В противен случай, променливата се попълва само с неразпознатия MIME тип на данните. Въпреки това, предпочитаният метод за осъществяване на достъп до суровите POST данни е php://input. $HTTP_RAW_POST_DATA не е достъпна при enctype="multipart/form-data".
- allow_webdav_methods boolean
-
Позволява работа с WebDAV http заявки в PHP-скриптове (например PROPFIND, PROPPATCH, MOVE, COPY и т.н). Директивата не съществува до PHP 4.3.2. Ако искате да вземете данните от заявка изпратена по post, трябва да установите и always_populate_raw_post_data.
See also: magic_quotes_gpc, magic_quotes_runtime, and magic_quotes_sybase.
Пътища и директории
| Име | По подразбиране | Модифицируемо | Дневник на промените |
|---|---|---|---|
| include_path | ".;/path/to/php/pear" | PHP_INI_ALL | |
| doc_root | NULL | PHP_INI_SYSTEM | |
| user_dir | NULL | PHP_INI_SYSTEM | |
| extension_dir | "/path/to/php" | PHP_INI_SYSTEM | |
| extension | NULL | само php.ini | |
| cgi.check_shebang_line | "1" | PHP_INI_SYSTEM | Достъпна от PHP 5.2.0. |
| cgi.fix_pathinfo | "1" | PHP_INI_SYSTEM | Достъпна от PHP 4.3.0. PHP_INI_ALL преди PHP 5.2.1. |
| cgi.force_redirect | "1" | PHP_INI_SYSTEM | Достъпна от PHP 4.2.0. PHP_INI_ALL преди PHP 5.2.1. |
| cgi.redirect_status_env | NULL | PHP_INI_SYSTEM | Достъпна от PHP 4.2.0. PHP_INI_ALL преди PHP 5.2.1. |
| fastcgi.impersonate | "0" | PHP_INI_SYSTEM | Достъпна от PHP 4.3.0. PHP_INI_ALL преди PHP 5.2.1. |
| cgi.rfc2616_headers | "0" | PHP_INI_ALL | Достъпна от PHP 4.3.0. |
Тук има кратко описание на конфигурационните директиви.
- include_path string
-
Указва списъкът от директории, където require(), include(), fopen(), file(), readfile() и file_get_contents() ще търсят за файлове. Форматът е същият като променливата за системния път PATH: списък на директории, разделени с двоеточие при Юникс и точка и запетая при Уиндоус.
Example #1 include_path при Unix
include_path=".:/php/includes"
Example #2 include_path при Windows
include_path=".;c:\php\includes"
Употребата на . в пътя за включване ви позволява да извършите относителни включвания, като точката представлява текущата директория.
- doc_root string
-
Главната директория на PHP на сървъра. Стойността и се използва само, ако не е празна. Ако PHP е конфигурирано с защитен режим, файлове извън тази директория не се обслужват. Ако PHP не е компилирано с FORCE_REDIRECT, трябва да установите doc_root, при положение, че сте стартирани PHP като CGI под който и да е уеб сървър (различен от IIS). Другият начин е да използвата cgi.force_redirect показана по-долу.
- user_dir string
-
Наименованието на основната директория, използвана от потребителя като начална за PHP файловете, например public_html.
- extension_dir string
-
Директорията в която PHP ще търси динамично-зареждаемите разширения. Вж. също: enable_dl, и dl().
- extension string
-
Кои динамично зареждаеми се разширения да бъдат заредени при стартиране на PHP.
- cgi.check_shebang_line boolean
-
Указва дали CGI PHP ще проверява за редове започващи с #! (shebang), в началото на стартирания скрипт. Този ред може да е нужен, ако скриптът може да се изпълни самостоятелно и с PHP CGI. В CGI режим PHP прескача този ред и игнорира съдържанието му, ако директивата е включена.
- cgi.fix_pathinfo boolean
-
Осигурява реална поддръжка на PATH_INFO/PATH_TRANSLATED за CGI. Предишното поведение на PHP беше да установи PATH_TRANSLATED в SCRIPT_FILENAME, без да се съобразява с PATH_INFO. За повече информация относно PATH_INFO прегледайте CGI спецификацията. Ако тази директива е установена в 1, PHP CGI ще коригира пътищата, така, че да отговарят на спецификацията. Установяването и в 0, означава, че PHP ще се държи както преди. Стойността и по подразбиране е 0; Добре е да промените скриптовете си да използват SCRIPT_FILENAME вместо PATH_TRANSLATED.
- cgi.force_redirect boolean
-
cgi.force_redirect е необходима, за да осигурите сигурно изпълнение на PHP като CGI под повечето уеб сървъри. Ако се остави недефинирана, PHP ще я включи по подразбиране. Можете да я изключите на своя собствена отговорност.
Забележка: За потребители работещи под Windows: Можете спокойно да изключите директивата при IIS, всъщност трябва да го направите. За да накарате OmniHTTPD и Xitami да заработят, трябва да изключите тази директива
- cgi.redirect_status_env string
-
Ако cgi.force_redirect е включена и не работите под Apache или Netscape (iPlanet) уеб сървъри, може да има нужда да установите име на променливата от обкръжението, за която ще търси PHP, за да знае, че може да продължи с изпълнението.
Забележка: Установяването на тази променлива може да доведе до проблеми със сигурността, така че, първо разберете какво точно искате да направите.
- fastcgi.impersonate string
-
FastCGI под IIS (при WINNT-базирани ОС) поддържа възможността да интерпретира ролята на лексемите на сигурността на извикващия клиент. Това позволява на IIS да дефинира контекст на сигурността, под който се изпълнява заявката. mod_fastcgi под Apache в момента не поддържа тази възможност (03/17/2002). Установете тази директива в 1, ако работите под IIS. Стойността й по подразбиране е 0.
- cgi.rfc2616_headers int
-
Казва на PHP какъв тип заглавки да използва при изпращане на кода за HTTP отговор. Ако е установена в 0, PHP изпраща Status: заглавка, която се поддържа от Apache и други уеб сървъри. Ако опцията е установена в 1, PHP ще изпрати » RFC 2616-съвместима заглавка. Оставете я установена в 0, освен ако не знаете какво точно правите.
Качвания на файлове
| Име | По подразбиране | Модифицируемо | Дневник на промените |
|---|---|---|---|
| file_uploads | "1" | PHP_INI_SYSTEM | PHP_INI_ALL от PHP <= 4.2.3. Достъпна от PHP 4.0.3. |
| upload_tmp_dir | NULL | PHP_INI_SYSTEM | |
| upload_max_filesize | "2M" | PHP_INI_PERDIR | PHP_INI_ALL от PHP <= 4.2.3. |
Тук има кратко описание на конфигурационните директиви.
- file_uploads boolean
-
Дали са позволени HTTP качвания на файлове. Вж. също директивите upload_max_filesize, upload_tmp_dir и post_max_size.
Когато се използва цяло число, стойността се отчита в байтове. Може да се използва също и краткото записване, съгласно описанието във FAQ. - upload_tmp_dir string
-
Временната директория, която да се използва за съхраняване на файлове при качване. Трябва да бъде достъпна за запис, от потребителя от чието име е пуснато PHP. Ако не е указана, PHP ще използва стойността по подразбиране за системата.
- upload_max_filesize integer
-
Максималният размер на файла за качване.
Когато се използва цяло число, стойността се отчита в байтове. Може да се използва също и краткото записване, съгласно описанието във FAQ.
Общи SQL
| Име | По подразбиране | Модифицируемо | Дневник на промените |
|---|---|---|---|
| sql.safe_mode | "0" | PHP_INI_SYSTEM |
Тук има кратко описание на конфигурационните директиви.
- sql.safe_mode boolean
-
Ако са включени функциите за връзка с бази от данни, които имат указани стойности по подразбиране, ще използват тях, вместо предоставените аргументи. За да видите стойностите по подразбиране, прегледайте документацията на функциите за свързване към съответните бази от данни.
Adding multiple directories to open_basedir:
open_basedir = "/var/www/htdocs/:/var/www/tmp/" adds both paths /var/www/htdocs/ and /var/www/tmp/. Do not forget the trailing slash, otherwise the last directory will be considered as a prefix (< 5.3.4).
On Windows you use ; as the seperator.
If you need to use a path in your include_path that has a space in it - I found that I could make it work (in windows anyway) by setting a path like this
L:\Information Technology\Resources\lib\
in the include path like this listed below
include_path = ".;L:\Information" " Technology\Resources\lib\"
Note that there is no way to disable eval() work by using disable_functions directive, because eval() is a language construct and not a function.
Many people advise to disable such potentially-insecure functions like system(), exec(), passthru(), eval() and so on in php.ini when not running in safe mode, but eval() would still work even it listed in disable_functions.
This is a possible solution for a problem which seems to be a php-ini-problem but is not.
If a $_POST is used with large fields e.g. textarea's with more than 120kb characters php returns a blank screen, even if the max_post_size is 8M.
This problem may be caused by an apache-module SecFilter.
Adding the following lines to the .htaccess solves the problem.
SecFilterEngine Off
SecFilterScanPOST Off
I know this is not a php-issue, but i'm still posting it here since it looks like it is a php-problem and I did not find any sites or forums offering this solution.
Amusingly, the include_path logically includes the current directory of the running file as the last entry all the time anyways, so part of the business about shoving "." into the include_path is spurious -- it's "there" on the end all the time, at least in the 5.2.12 source (see main/fopen_wrappers.c around line 503).
This one had me goin' for a while.
For 'short_open_tag',
though it is marked as PHP_INI_ALL in changable column,
you should note the CHANGE_LOG column also:
PHP_INI_ALL in PHP <= 4.0.0.
PHP_INI_PERDIR in PHP < 5.3.0
So as of 4.0, it will not work if you wanna use
ini_set('short_open_tag') to change it's value on the fly.
Note that on some Unix systems (i.e. PHP 5.1.6 on Centos 5.2) include_path in php.ini should NOT be quoted.
For example, instead of
include_path='.:/usr/share/php'
use
include_path=.:/usr/share/php
Using quotes does not cause any error message, but all of your require_once() directives will fail (indicating that file could not be opened) - unless full path to target file is provided.
When display_errors is off, PHP will send an HTTP 500 result header on a fatal error. This is usefull when working with AJAX applications.
A handy trick to pick up parse errors in test_file.php if you can't set display_errors in php.ini or use .htaccess:
<?php
error_reporting (E_ALL);
ini_set ('display_errors', true);
include('./test_file.php');
?>
"post_max_size"
"[..]This can be tracked in various ways, e.g. by passing the $_GET variable to the script processing the data, i.e. <form action="edit.php?processed=1">, and then checking if $_GET['processed'] is set."
using PHP 4.4.8 it seems that only the $_POST array will be empty in case of the file is largen than post_max_size.
so above mentioned method does not work in my case.
i need to use $_POST['processed'] instead of $_GET['processed']
If you are having trouble getting the auto_prepend_file to work with the command line interface make sure that you have set it in the cli specific php.ini and that the read permission is set correctly for that php.ini file.
If you want to display the upload limit without knowing the server configuration, this may be useful:
<?php
function let_to_num($v){ //This function transforms the php.ini notation for numbers (like '2M') to an integer (2*1024*1024 in this case)
$l = substr($v, -1);
$ret = substr($v, 0, -1);
switch(strtoupper($l)){
case 'P':
$ret *= 1024;
case 'T':
$ret *= 1024;
case 'G':
$ret *= 1024;
case 'M':
$ret *= 1024;
case 'K':
$ret *= 1024;
break;
}
return $ret;
}
$max_upload_size = min(let_to_num(ini_get('post_max_size')), let_to_num(ini_get('upload_max_filesize')));
echo "Maximum upload file size is ".($max_upload_size/(1024*1024))."MB.";
?>
Do note however that this limit is not completely reliable; there are other factors which need to be taken into account, such as any other $_POST data and their size, the memory limit, and the script time limit. This does, however, give some rough limit, and helps you avoid "Doh!" problems where you can't figure out why your file won't upload. :)
While the manual says that the file specified by auto_prepend_file is included as if it were called by include(), in fact the file is included as if it were called by require().
In other words, if PHP cannot find the file that you specify with auto_prepend_file, it will throw a fatal error.
register_long_arrays has a very odd behavior (at least in PHP 5.2):
With register_long_arrays=Off the $GLOBALS array will not contain [_SERVER] and [_REQUEST]. They are accessible as superglobals ($_SERVER, $_REQUEST), but they disappear from the $GLOBALS array!
to make sure that all requests use SSL you can use this in a file that is set for auto_prepend_file. This ensures that all requests are SSL
<?php
if(empty($_SERVER['HTTPS']) || strtolower($_SERVER['HTTPS']) != 'on' )
header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}") and exit();
?>
I wish the documentation was more clear as to whether the arg_separator.output character is automatically encoded when PHP outputs it. In other words, is "&" valid or do I need to specify the encoded character "&"? It would make sense to specify only "&" and hope that it is encoded as needed. That way the value could be read by other functions and encoded only when output to HTML, rather than having to test whether it is already encoded and decode it when necessary (for header redirection for example)
"If the size of post data is greater than post_max_size..."
It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo
Starting with PHP 4.4.0 (at least PHP version 4.3.10 did have old, documented behaviour) interpretation of value of "session.save_path" did change in conjunction with "save_mode" and "open_basedir" enabled.
Documented ( http://de.php.net/manual/en/ref.session.php#ini.session.save-path ):
Values of "session.save_path" should or may be **without** ending slash.
For instance:
<?php
// Valid only *before* PHP 4.4.0:
ini_set( "session.save_path", "/var/httpd/kunde/phptmp" );
?> will mean:
The directory "/var/httpd/kunde/phptmp/" will be used to write data and therefore must be writable by the web server.
Starting with PHP 4.4.0 the server complains that "/var/httpd/kunde/" is not writable.
Solution: Add an ending slash in call of ini_set (or probably whereever you set "session.save_path"), e.g.:
<?php
// Note the slash on ".....phptmp/":
ini_set( "session.save_path", "/var/httpd/kunde/phptmp/" );
?>
Hope, that does help someone.
Warning, if you change upload_max_filesize, please note that both post_max_size and memory_limit directives may have to change too.
I did a little experimentation on the behaviour of auto_prepend_file as the order of access wasn't clear to me from the documentation.
1. Apache checks to see if the target file exists.
2. The prepend file is called
3. The target file is called
This means that you can use auto_prepend_file to change the target file before you access it however you can't generate new files.
Please be mindful, that if you plan on re-configuring / recompiling to add --enable-memory-limit support, you may need to run a 'make clean' before you run 'make'. Otherwise, you may end up with a phpinfo() that shows up with --enable-memory-limit as a configure parameter, but the memory_get_usage() function will still force a fatal error.
