webForumDet fria alternativet

Filuppladdning - UNIX vs PC

PHP

17 svar · 306 visningar · startad av nkrantz

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

Hej!

har skrivit ett script för att ladda upp filer via PHP. Funkade utmärk när vi körde det på vår lab server på kontoret (WINNT) men nu när vi tankat över det till kunden som ligger på en UNIX så vill det inte funka.

<form enctype="multipart/form-data" action="admin.php?adminFile=<?=$adminArea;?>" method="post">
<input type="hidden" name="action" value="add">
<input type="hidden" name="MAX_FILE_SIZE" value="500000">
<b>V&auml;lj fil</b>: *<br>
<input name="iFile" type="file" class="inp"><br><br>
<b>Namn</b>: *<br>
<input type="text" name="iName" class="inp"><br><br>
<b>Beskrivning</b>:<br>
<input type="text" name="iDescr" class="inp"><br><br>
<input type="submit" name="submit" value="Ladda Upp" class="sub">
</form>

När jag tar emot informationen så kan jag hämta variablerna för iName och iDescr, men däremot inte från iFile. Finns det någon skillnad mellan win och unix när det gäller filuppladdning?

Snabba svar gör mig glad nu!

// Nippe

Medlem sedan jan. 2000372 inlägg
#2

Inte såvitt jag vet, jag har kört på båda plattformar utan problem, och koden ovan ser rätt ut tycker jag.

Är $iFile helt tom när du kollar den alltså?

Medlem sedan feb. 20012 412 inlägg
#3

PHP koden önskas för att eventuellt kunna hjälpa dig.

mvh Jörgen HP

Medlem sedan jan. 2000372 inlägg
#4

Har du testat med $HTTP_POST_FILES['iFile'] ?

Kan kanske vara nåt med php.ini på UNIX-servern du kör på?

Medlem sedan apr. 2002830 inlägg
#5

Japp, $iFile är helt tom. Varken $iFile eller $_POST['iFile'] returnerar något...

Medlem sedan feb. 20012 412 inlägg
#6

Om du provar skriva ut den temporära filen innan den blivit omhändertagen.

$HTTP_POST_FILES['iFile'] ['tmp_name']

Medlem sedan apr. 2002830 inlägg
#7

$HTTP_POST_FILES['iFile']

Funkade inte. Laddningen av sidan bryts så fort som den försöker läsa det värdet. Detsamma gäller för $_POST['iFile']. Mycket mysko!

Jörgen HP: Felet i det här faller är inte min PHP kod (tror jag), utan det är nog något serverrelaterat. Men här kommer den ändå:

	function Image()
	{
		$this->db = new Database; // creates a new database object
		$this->db->dbConnect(); // connects to the database
		
		if (isset($_POST['iID']))
			$this->iID = $_POST['iID'];
		if (isset($_POST['iName']))
			$this->iName = $_POST['iName'];
		if (isset($_POST['iFile']))
			$this->iFile = $_POST['iFile'];
		if (isset($_POST['iFile_name']))
			$this->iFileName = $_POST['iFile_name'];
		if (isset($_POST['iFile_type']))
			$this->iFileType = $_POST['iFile_type'];
		if (isset($_POST['iDescr']))
			$this->iDescr = $_POST['iDescr'];
	}

	function create()
	{
		global $imageDir;
				
		if ($this->allRequired())
		{
			if ($this->allowed())
			{
				if (!file_exists($imageDir.$this->iFileName))
				{
					if (copy($this->iFile,$imageDir.$this->iFileName))
					{
						if ($this->db->dbQuery("
												INSERT INTO 
													image 
												SET 
													name='$this->iName',
													file='$this->iFileName',
													descr='$this->iDescr'
												"))
						{
							return 1;	
						}
						else
						{
							return 0;
						}
					}
					else
					{
						return 0;
					}
				}
				else
				{
					return 0;
				}
			}
			else
			{
				return 0;
			}
		}
		else
		{
			return 0;
		}
Medlem sedan jan. 2000372 inlägg
#8

Jag måste säga att jag tycker att detta ser skumt ut:

admin.php?adminFile=<?=$adminArea;?>

skulle argumentet adminFile skickas med som ytterligare en POST-variabel alltså?

Testa att lägga in det som ett hidden-fält istället, för det där ser ju galet ut.

<input type="hidden" name="adminFile" value="<?=$adminArea?>">

och sen bara ta bort argumentet i <form action=> taggen.

Medlem sedan apr. 2002830 inlägg
#9

$HTTP_POST_FILES['iFile'] ['tmp_name'] funkade inte heller... helt dött när den försöker läsa det...

admin.php?adminFile=<?=$adminArea;?> skickas via $_GET och ger inga problem. Anledningen till att jag inte skickar den via POST är att även vanliga länkar skall komma runt i admindelen.

Konfigurationen av servern: http://www.marholmen.com/test.php

// Nippe

Medlem sedan jan. 2000372 inlägg
#10

Nämen vaddå, jag kanske är helt ute och cyklar, men ska du skicka en GET samtidigt som en POST och det funkar? Det låter ju som att det skulle kunna ställa till problem tycker jag.

Låt oss veta hur du löser detta till slut iaf :)

Medlem sedan jan. 2000372 inlägg
#11

Angående din PHP-config så ser ju kanske inte detta helt rätt ut:

upload_tmp_dir
no value no value

Medlem sedan apr. 2002830 inlägg
#12

Skicka POST och GET samtidigt har aldrig varit några problemas så vitt jag vet. Fast jag har fortfarande inte löst mitt problem... HJÄLP...

Medlem sedan apr. 2002830 inlägg
#13

Det har du rätt i! Kanske där problemet ligger. Får skrika lite på webhotellet! Tack så länge, återkommer då jag löst det hela...

Medlem sedan apr. 2002830 inlägg
#14

Kom och tänka på en sak. Det finns inget sätt för mig att sätta en "egen" upload_tmp_dir, dvs göra en mapp som jag chmodar lite coolt och sedan laddar upp filerna till? Antar att det inte går, men man kan ju alltid fråga.

Medlem sedan jan. 2002414 inlägg
#15

jo det finns det...skall se om jag hinner leta upp det nu så återkommer jag så fort jag hinner...

Medlem sedan feb. 20012 412 inlägg
#16

Jag tror man kan göra typ så här: :)

$tmpFil = $HTTP_POST_FILES["fil"]["tmp_name"];
$fil = = $HTTP_POST_FILES["fil"]["name"];

move_uploaded_file($tmpFil", "/katalog/filer/$fil");
...
<input type="hidden" name="MAX_FILE_SIZE">
<input type="file" name="fil">
...
Medlem sedan apr. 2002830 inlägg
#17

Jo, det kan man göra... MEN, det förutsätter att filen kommer upp på servern, och det gör den inte utan att upload_tmp_dir är konfigurerat verkar det tyvärr som. Och som det är nu så får jag inget värde alls av arrayen $HTTP_POST_FILES.. och inte av $_FILES[] heller.. och inte från $_POST[] heller... *snyft*. Men tackar tipset ändå!

// Nippe

Medlem sedan apr. 2002830 inlägg
#18

Nu funkar det på något skumt sätt:

/****************************************************************************
* Function: 	Image()
* Description:	Constructor, creates the object from the parameters sent to
*				the function.
* Pre-Cond: 	-
* Post-Cond:	-
* Input:		-
* Output:		-
****************************************************************************/
	function Image()
	{
		$this->db = new Database; // creates a new database object
		$this->db->dbConnect(); // connects to the database
		
		if (isset($_POST['iID']))
			$this->iID = $_POST['iID'];
		if (isset($_POST['iName']))
			$this->iName = $_POST['iName'];
		if (isset($_FILES['iFile']['tmp_name']))
			$this->iFile = $_FILES['iFile']['tmp_name'];
		if (isset($_FILES['iFile']['name']))
			$this->iFileName = $_FILES['iFile']['name'];
		if (isset($_FILES['iFile']['type']))
			$this->iFileType = $_FILES['iFile']['type'];
		if (isset($_POST['iDescr']))
			$this->iDescr = $_POST['iDescr'];
	}

/****************************************************************************
* Function: 	create()
* Description:	Uploads the image and add information to the database.
* Pre-Cond: 	-
* Post-Cond:	A image have been uploaded and information for it have been
*				added in the database
* Input:		-
* Output:		1 if everything is ok, else 0
****************************************************************************/
	function create()
	{
		global $imageDir;
		
		if ($this->allRequired())
		{
			if ($this->allowed())
			{
				if (!file_exists($imageDir.$this->iFileName))
				{
					if (copy($this->iFile,$imageDir.$this->iFileName))
					{
						if ($this->db->dbQuery("
												INSERT INTO 
													image 
												SET 
													name='$this->iName',
													file='$this->iFileName',
													descr='$this->iDescr'
												"))
						{
							return 1;	
						}
						else
						{
							return 0;
						}
					}
					else
					{
						return 0;
					}
				}
				else
				{
					return 0;
				}
			}
			else
			{
				return 0;
			}
		}
		else
		{
			return 0;
		}
	}

Servern är lika konfigurerad som innan. Jag antar att det var någon annanstans som felet låg. Men jag fattar inte var!

På min tidigare fråga så hittade jag att man kan ändra konfigurationen mha

ini_set('upload_tmp_dir','/home/marholmen.com/images/');

Tackar så mycket för hjälpen!

// Nippe

269 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)