PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : $_FILES[]['tmp_name']


alex2911
21.10.2005, 16:45:03
Hi Leute !

Ich suche einen Weg, den $_FILES[]['tmp_name'] einer Datei vor absenden des Upload-Forumlars zu wissen bzw. diesen Namen mit einem Prefix zu versehen (zb: aus: [tmp_name] => C:\WINDOWS\TEMP\php2E3.tmp sowas: [tmp_name] => C:\WINDOWS\TEMP\12345_php2E3.tmp)

meikel (†)
22.10.2005, 02:02:27
Ich suche einen Weg, den $_FILES[]['tmp_name'] einer Datei vor absenden des Upload-Forumlars zu wissen
PHP kann nicht hellsehen.

alex2911
22.10.2005, 02:39:45
PHP kann nicht hellsehen.

Das nicht, aber irgendwo wird ja die lezte tmp_name gespeichert da es nach einem Muster abläuft.

Serp
22.10.2005, 03:50:35
Wofür zur Hölle brauchst du das denn???

meikel (†)
22.10.2005, 04:08:49
Das nicht, aber irgendwo wird ja die lezte tmp_name gespeichert da es nach einem Muster abläuft.
Nein. Der Name ist ein Zufallsstring, den möglicherweise sogar der Apache generiert, weil der das File entgegennimmt und erst danach PHP aufruft, wenn in dem Action URL PHP Tags gefunden werden.

feuervogel
22.10.2005, 09:13:52
Wofür zur Hölle brauchst du das denn???
ihm scheint arg langweilig zu sein oder er will sich künstlich selbst probleme auferlegen, weil er sonst keine zu haben scheint ;-)

alex2911
23.10.2005, 18:24:45
ihm scheint arg langweilig zu sein oder er will sich künstlich selbst probleme auferlegen, weil er sonst keine zu haben scheint ;-)
Ist wieder nicht wahr ;)

Ich will ein Uploadpopup bauen -- unter Zuhilfenahme von nur einem JS.

Nein. Der Name ist ein Zufallsstring, den möglicherweise sogar der Apache generiert, weil der das File entgegennimmt und erst danach PHP aufruft, wenn in dem Action URL PHP Tags gefunden werden.

Apache vielleicht, aber nicht Zufall. Die temp_namen sind fortlaufend.
Beispiel:
File1: Datei:C:\WINDOWS\TEMP\php11.tmp
File2: Datei:C:\WINDOWS\TEMP\php12.tmp
Es sind jedoch nicht nur zahlen. Irgendwann werden Buchstaben dranngehängt (C:\WINDOWS\TEMP\php2E3.tmp) usw.
Durch Tests ist mir auch aufgefallen dass sich Apache dies anscheinend nicht file-basiert merkt. Es muss also im Speicher sein (durch Neustart des Rechners gehts wieder bei php11.tmp los).

Ich hab natürlich auch versucht, den temp_namen manuell zu beeinflussen:


$var = preg_replace('/C:\\\\WINDOWS\\\\TEMP\\\\(.*)\\.tmp/s', 'C:\\WINDOWS\\TEMP\\upl_$1.tmp', $_FILES['name']['tmp_name']);
$_FILES['name'] = array('name' => $_FILES['name']['name'],
'type' => $_FILES['name']['type'],
'tmp_name' => $var,
'error' => $_FILES['name']['error'],
'size' => $_FILES['name']['size']);


Funktioniert auch hervorragend:

["name"]=>
array(5) refcount(1){
["name"]=>
string(18) "back_header_st.gif" refcount(2)
["type"]=>
string(9) "image/gif" refcount(2)
["tmp_name"]=>
string(29) "C:\WINDOWS\TEMP\upl_php2D.tmp" refcount(2)
["error"]=>
long(0) refcount(2)
["size"]=>
long(7142) refcount(2)
}
}

Aber es wird kein Bildchen hochgeladen.
Anscheinend hat da php eine Sicherheitsfunktion die dies verhindert.
Der einzige Unterschied bei der Ansicht des generierten Codes und des beenflussten Codes ist refcount(3) (nicht geändert) // refcount(2) (geändert)

So, soweit eine nähere Ausführung dazu.

@ Feuervogel: Nicht jeder macht nur das was er mit Sicherheit auch schafft. Ich bastle an so unmöglichen Sachen in meiner Freizeit ;)
Und trotzdem habe ich nicht genug davon *fg*.
Allgemein code ich schon eine Zeit - hab aber noch nicht 2mal genau das selbe gemacht. Also etwas Phantasie ist immer gefragt - was aber nicht heißen soll dass man gleich zu viel Zeit hat.

So long .

xabbuh
23.10.2005, 20:29:47
Ich hab natürlich auch versucht, den temp_namen manuell zu beeinflussen:
Was genau soll das bringen? Dann hast du zwar das $_FILES-Array manipuliert und somit einen Dateinamen nach deinem Geschmack, aber dafür existiert diese Datei natürlich nicht im upload_tmp_dir und kann somit logischerweise auch nicht mehr verschoben werden.
Ehrlich gesagt, habe ich auch immer noch nicht verstanden, was dir das letztendlich bringen soll.

File1: Datei:C:\WINDOWS\TEMP\php11.tmp
File2: Datei:C:\WINDOWS\TEMP\php12.tmp
Es sind jedoch nicht nur zahlen. Irgendwann werden Buchstaben dranngehängt (C:\WINDOWS\TEMP\php2E3.tmp) usw.
Möglicherweise wird hier dann auf eine hexadezimale Darstellung des Namen zurückgegriffen, um ein fortlaufende Nummerierung auch in großen Zahlenbereichen zugewährleisten. 2E3 wäre dann gleichbedeutend mit 739 im dezimalen Zahlensystem.

meikel (†)
23.10.2005, 20:58:55
Ich will ein Uploadpopup bauen -- unter Zuhilfenahme von nur einem JS.Na und? Wo liegt das Problem? PHP kriegt den Namen des Tempfiles, welches im Upload_tmp_dir rumliegt, vom Apachen mitgeteilt.

Apache vielleicht, aber nicht Zufall. Die temp_namen sind fortlaufend.
Auf Deiner komischen Kiste vielleicht.
Bei mir steht da sowas:
php433gxI
phpfGASvY
phpXZQXPH
phpToRSwY
Einfach mal das selbe File mehrfach hochgeladen.

Selbst das Studium des Musters einer Raufasertapete wäre prickelnder als da eine Regelmäßigkeit zu finden.