webForumDet fria alternativet

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

6 svar · 251 visningar · startad av Skarre

SkarreMedlem sedan apr. 20012 427 inlägg
#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å?

MatteMedlem 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 ?

SkarreMedlem 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?

MatteMedlem 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

SkarreMedlem 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;
	}
...
MatteMedlem 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.

SkarreMedlem 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.

125 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)