• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Extrem verschachteltes $_FILES-Array

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Hey Leute,

beim Absenden eines Upload-Formulars erhalte ich ein $_FILES-Array, das nicht ganz meinen Erwartungen entspricht. Darüber hinaus ist es unvollständig.

[src=php]<?php
if(isset($_POST['submit'])){

// Count total files
$countfiles = count($_FILES['file']['name']);

// Looping all files
for($i=0;$i<$countfiles;$i++){
$filename = $_FILES['file']['name'][$i];

// Upload file
move_uploaded_file($_FILES['file']['tmp_name'][$i],'upload/'.$filename);

}
}
?>
<form method='post' action='' enctype='multipart/form-data'>
<input type="file" name="file[]" id="file" multiple>

<input type='submit' name='submit' value='Upload'>
</form>[/src]

Ergebnis:
Array ( [file] => Array ( [name] => Array ( [0] => ende.png ) [type] => Array ( [0] => ) [tmp_name] => Array ( [0] => ) [error] => Array ( [0] => 6 ) [size] => Array ( [0] => 0 ) ) )

Ich habe weniger Verschachtelung und mehr Dateiinfo erwartet. Typ und Grße wird nicht ermittelt. Und alle Werte sind unntigerweise noch einmal alleine in einem eigenen Array. Woran knnte das liegen?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Du hast da den Error Code 6 in "Error", der lautet wie folgt: https://www.php.net/manual/en/features.file-upload.errors.php

UPLOAD_ERR_NO_TMP_DIR
Value: 6; Missing a temporary folder.

Hier steht auch noch etwas dazu: https://www.php.net/manual/en/ini.core.php#ini.upload-tmp-dir

Meine Annahme daher wäre, dass dein temporäres Verzeichnis nicht durch den PHP beschreibbar ist.

upload_tmp_dir

The temporary directory used for storing files when doing file upload. Must be writable by whatever user PHP is running as. If not specified PHP will use the system's default.

If the directory specified here is not writable, PHP falls back to the system default temporary directory. If open_basedir is on, then the system default directory must be allowed for an upload to succeed.

Edit: Und hier: https://stackoverflow.com/questions/15692705/change-default-temp-directory-for-php-file-uploads
 
Zuletzt bearbeitet:

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #3
Danke für deine Antwort. Ich habe jetzt mehrere Sachen versucht:
1. Einen Ordner "tmp" im root angelegt, wo auch das Upload-Skript liegt.
2. Php.ini-Datei gesucht, deren Pfad mir im Kopf der Übersicht verraten wurde, die ich über php_info(); aufrufen kann. Ich habe direkt darin den upload_tmp_dir geändert mit dem Wert /tmp. Seltsamerweise wird diese und auch andere Änderungen nicht nach per php_info(); angezeigt. Es bleibt alles unverändert.
3. Bei Plesk in den php-Einstellungen am Seitenende unter Zusätzliche Konfigurationsanweisungen folgendes eingegeben: upload_tmp_dir = /tmp

Als ich nach open_basedir suchte fand ich folgendes an folgenden Punkten:
A) auf der Einstellungsübersicht von Plesk/PHP folgenden Eintrag: {WEBSPACEROOT}{/}{;}{TMP}{/}
B) Ausgabe über php_info();: C:/Inetpub/vhosts/xxx.de\;C:\Windows\Temp\
C) php.ini-Datei, auf die sich (B) angeblich bezieht: ;open_basedir = (also auskommentiert)

Ich raff das nicht.

Es kommt immer zum selben Fehler 6


Edit:
[13-Dec-2020 21:24:36 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(C:\Users\IWPD_1~1\AppData\Local\Temp) is not within the allowed path(s): (C:/Inetpub/vhosts/xxx.de\;C:\Windows\Temp\) in Unknown on line 0
[13-Dec-2020 21:24:36 UTC] PHP Warning: File upload error - unable to create a temporary file in Unknown on line 0

Edit 2:
Wenn ich open_basedir ausschalte, geht es. Aber das kann wohl nicht die Lsung sein.
 
Zuletzt bearbeitet:

Dr. M.

Weltmaschinenfahrer

Registriert
30 Juli 2018
Beiträge
188
2. Php.ini-Datei gesucht, deren Pfad mir im Kopf der Übersicht verraten wurde, die ich über php_info(); aufrufen kann. Ich habe direkt darin den upload_tmp_dir geändert mit dem Wert /tmp. Seltsamerweise wird diese und auch andere Änderungen nicht nach per php_info(); angezeigt. Es bleibt alles unverändert.
Meine Vermutung geht in dieselbe Richtung wie die von BurnerR, nur andersrum:
Sicher, dass /tmp fuer dein OS passt? Die Fehlermeldungen und die Konfiguration schauen stark nach Windows aus.
Da waere dann eher upload_tmp_dir=C:\Windows\Temp\ passend (oder ein anderes Verzeichnis, das schreibbar und in open_basedir ist).
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #6
Danke soweit für die Hinweise. Der Webseite läuft auf einer Windows VM. Deshalb verwendete ich auch ein Semikolon. Die Array-Verschachtelung hing mit dem multiple zusammen. Da ich immer nur eine hochladen muss, konnte ich das soweit reduzieren.

Ich habe open_basedir erst einmal auf NONE gelassen, um zu sehen, ob da noch mehr krudes Zeug auf mich zu kommt. Und ja, da stimmt noch mehr nicht: Folgendes Skript liefert nun folgendes zurück:

[src=php]
if(isset($_POST['submit']))
{

print_r($_FILES);

$filename = $_FILES['file']['size'][$i];
if(array_key_exists('file', $_FILES))
{
if ($_FILES['file']['error'] === UPLOAD_ERR_OK)
{
echo 'upload was successful<br>';

if(move_uploaded_file($_FILES['file']['tmp_name'][$i],'uploads/'.$filename))
{
echo "really successful<br>";
}
else
{
echo "actually not<br>";
}
}
else
{
die("Upload failed with error code " . $_FILES['file']['error']);
}
}
}


?>
<form method='post' action='' enctype="multipart/form-data">
<input type="file" name="file" id="file">

<input type='submit' name='submit' value='Upload'>
</form>

[/src]

Array ( [file] => Array ( [name] => ende.png [type] => image/png [tmp_name] => C:\Users\IWPD_1(***)\AppData\Local\Temp\php4643.tmp [error] => 0 [size] => 5573 ) )
upload was successful
actually not
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
@nietaL: Die Ausgabe stimmt, aber hast du auch Berechtigungen gesetzt bzw. Existiert der "uploads" Folder den du angegeben hast?

Es gibt da zwei Problemstellen. Aus der Dokumentation:
Return Values

Returns true on success.

If filename is not a valid upload file, then no action will occur, and move_uploaded_file() will return false.

If filename is a valid upload file, but cannot be moved for some reason, no action will occur, and move_uploaded_file() will return false. Additionally, a warning will be issued.

Quelle
 
Oben