ini_set, ini_get und upload_max_filesize im PHP-Script

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

ini_set, ini_get und upload_max_filesize im PHP-Script

Beitrag von mgutt »

So ich teste schon eine Weile herum um das zum laufen zu bringen. Ich habe meinen eigenen Server und ich denke ich sollte ausreichende Rechte dafür besitzen um den upload_max_filesize Wert anpassen zu können während ich mich in einem php-Script bewege. Ich verzichte hier bewusst auf die Methoder per php.ini oder .htaccess, da ich einen variablen Wert auf der root-Ebene für verschiedene User benötige.

So sah mein Testscript also bisher aus:

Code: Alles auswählen

<?php 
error_reporting (E_ALL);
echo('Vorher:' . ini_get("upload_max_filesize") . '<br />');
echo('ini_set wird gesetzt...<br />');
if(ini_set("upload_max_filesize","50M") === false)
{
	echo('... hat nicht geklappt :( <br />');
}
else
{
	echo('... hat  geklappt :) <br />');
}
echo('Nachher:' . ini_get("upload_max_filesize") . '<br />');

?>

EDIT:
Die sogenannten "shorthandbytes" wie z.B. 1M, 1K, etc. sind gar nicht außerhalb der php.ini erlaubt (man findet aber unendlich viele Beispiele im Netz, die diese Voraussetzung schlichtweg ignorieren :o )
http://ch2.php.net/manual/de/faq.using. ... thandbytes
16. Einige PHP-Direktiven akzeptieren nicht nur Integer-Byte-Werte, sondern auch abgekürzte Byte-Werte. Welche Abkürzungen gibt es? Kann ich diese außerhalb der php.ini benutzen?

Die verfügbaren Abkürzungen sind K (für Kilobytes), M (für Megabytes) und G (für Gigabytes, verfügbar seit PHP 5.1.0), Groß-/Kleinschreibung spielt dabei keine Rolle. Alle anderen Werte werden als Byte-Werte erkannt. 1M entspricht z.B. einem Megabyte oder 1048576 Bytes. 1K entspricht einem Kilobyte oder 1024 Bytes. Sie können diese abgekürzten Schreibweise nicht außerhalb der php.ini verwenden. Vergleiche auch die Dokumentation von ini_get() für ein Beispiel, wie diese Werte konvertiert werden.
Also frisch geändert in:

Code: Alles auswählen

<?php 
error_reporting (E_ALL);
echo('Vorher:' . ini_get("upload_max_filesize") . '<br />');
echo('ini_set wird gesetzt...<br />');
if(ini_set("upload_max_filesize","52428800") === false)
{
	echo('... hat nicht geklappt :( <br />');
}
else
{
	echo('... hat  geklappt :) <br />');
}
echo('Nachher:' . ini_get("upload_max_filesize") . '<br />');

?>
klappt immer noch nicht...


EDIT2:
Jetzt bin ich in die vollen gegangen. Ich habe die Funktion ini_set übersetzt und mir denke ich alles zu Gemüte geführt was mit der Option "upload_max_filesize" zu tun haben könnte:

1. "ini_set" ---> Übersetzung
******************************************************************************
Sets the value of the given configuration option. Returns the old value on success, FALSE on failure. The configuration option will keep this new value during the script's execution, and will be restored at the script's ending. ******************************************************************************
Setzt den Wert einer gegebenen Konfigurationsoption. Liefert den alten Wert bei Erfolg, FALSE bei Misserfolg. Die Konfigurationsoption hält den neuen Wert während des Scriptprozesses und wird wiederhergestellt, sobald das Script endet.

"alten Wert" ---> Der alte Wert wird ausgeliefert bei Erfolg.. kein empty (obwohl häufig im Netz behauptet)

******************************************************************************
Not all the available options can be changed using ini_set(). There is a list of all available options in the appendix.
******************************************************************************
Nicht alle der verfügbaren Optionen können mit ini_set() geändert werden. In der Appendix befindet sich eine Liste mit allen verfügbaren Optionen.

2. "Appendix" ---> Dort findet man nun den folgenden Eintrag:
Name: upload_max_filesize
Standardwert: "2M"
Änderbar: PHP_INI_PERDIR
Änderungen: PHP_INI_ALL in PHP <= 4.2.3.

3. "upload_max_filesize" ---> Weitere Details zu upload_max_filesize:
upload_max_filesize integer: Maximale Größe, die eine hochgeladene Datei haben darf. Wird ein integer Wert verwendet, wird dieser Wert in Bytes gemessen. Sie können auch die Kurzschreibweise verwenden, wie in dieser FAQ beschrieben.

4. "FAQ" --> Kurschreibweise (bereits umgesetzt im ersten EDIT:
Diese ist zur meiner Überraschung nur in der php.ini erlaubt. Sonst muss man einen Bytewert angeben.

...jetzt wird es spannend...

5. PHP_INI_* Konstanten --> PHP_INI_PERDIR bedeutet:
Konstante: PHP_INI_PERDIR
Wert: 2
Bedeutung: Der Eintrag kann in php.ini, .htaccess oder httpd.conf gesetzt werden
Fazit: Wenn diese Konstante gesetzt ist kann der Wert NICHT in Scripten verändert werden!

6. PHP_INI_* Konstanten --> PHP_INI_ALL bedeutet:
Konstante: PHP_INI_ALL
Wert: 7
Bedeutung: Der Eintrag kann überall gesetzt werden
Fazit: Diese Konstante ist ab der PHP Version kleiner gleich 4.2.3 gesetzt. D.h. man konnte in der Vergangenheit die upload_max_filesize in Scripten ändern.

Ich habe derzeit die PHP-Version 4.4.2 und damit Pech gehabt :roll:
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Es wäre doch möglich das upload-Script in ein neues Verzeichnis zu kopieren und per .htaccess die ini_set zu setzen.

Jetzt frage ich mich nur, wenn die posting.php im Root aufgerufen wird und die attach_mod/posting_attachments.php z.b. included wird, welcher Ordner dann die Regel benötigt.. Root oder attach_mod?

Wenn attach_mod, dann könnte ich ja einfach diese Datei im Falle eines Mods oder Admins aus einem anderen Ordner includen und schon hätte ich eine Lösung. :-?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

Zurück zu „Coding & Technik“