webForumDet fria alternativet

$_FILES['foo']['tmp_name'] fungerar inte alltid

PHPur PHP

6 svar · 251 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Frågan#1

Jag sitter och försöker ladda upp filer och märker att $_FILES['foo']['tmp_name'] inte alltid fungerar. Jag bara laddar upp filen med ett formulär och skriver ut enligt nedan för att testa:

echo $_FILES['foo']['tmp_name'];

Med vissa filer får jag resultat liknande:

C:\PHP\uploadtemp\php1C6.tmp

... och med andra filer (dock samma filändelse) får jag inget resultat alls. Oftast är filen som felar av typen jpeg/jpg. Vad kan det bero på?

Medlem sedan aug. 20002 975 inlägg
#2

Är $_FILES['foo']['tmp_name'] tom så innebär det att ingen fil är uppladdad.

Eventuellt har du försökt ladda upp en fil som är större än tillåten (i Byte).

Har du något i skriptet som laddar om sidan ?

Medlem sedan apr. 20012 427 inlägg
#3

Tack för den Matte! Jag glömde helt bort att jag lagt in ett MAX_FILE_SIZE-fält i formuläret. Vad puckad man är ibland. :x

Hur visar man ett felmeddelande om att filen är för stor då? Jag menar, hur kan man se att det var just filstorleken som var orsaken att filen inte laddades upp?

Medlem sedan aug. 20002 975 inlägg
#4

Kolla värdet på $_FILES['foo']['error'].
http://se2.php.net/manual/en/features.file-upload.errors.php

Medlem sedan apr. 20012 427 inlägg
#5

Tackar! Jag undrar dock, finns det något sätt att komma åt den storlek man specificerar i formuläret på annat sätt än i $_POST['MAX_FILE_SIZE']? Jag tänkte skriva en uppladdningsfunktion och kolla efter felen du länkade till, och i felmeddelandet vill jag gärna berätta vilken max-storleken är. Jag skulle föredra att inte behöva skicka med $_POST['MAX_FILE_SIZE'] som argument till funktionen.

function upload_file($file, $path) {

	if ($file['error'] <> 0) {
		switch ($file['error']) {
			case 1:
				$form_errors .= '<li>Bilden är för stor. Högsta tillåtna storlek är '.ini_get('upload_max_filesize').'.</li>';
			case 2:
				$form_errors .= '<li>Bilden är för stor. Högsta tillåtna storlek är >>>[b]?[/b]<<<.</li>';
		}
		return false;
	}
...
Medlem sedan aug. 20002 975 inlägg
#6

Du har den uppladdade filens storlek i $_FILES['foo']['size'], och kan därmed göra en jämförelse med en egendefinierad storlek.

if ($_FILES['foo']['size'] > 153600) {
   $form_errors .= "<li>Du får ladda upp filer på max 150kB.</li>";
}

Gör sedan överföringen fråm tempfilen endast om du inte har några felmeddelande.

Medlem sedan apr. 20012 427 inlägg
#7

Jag tänkte att eftersom användaren slipper vänta på att filen laddas upp om man använder det gömda formulärfältet så är det bättre att använda den metoden. Hursomhelst rör det sig inte om så stora filer i det här fallet så jag kan nöja mig med metoden ovan.

135 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
132 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)