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å?
17 svar · 306 visningar · startad av nkrantz
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ä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
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å?
Har du testat med $HTTP_POST_FILES['iFile'] ?
Kan kanske vara nåt med php.ini på UNIX-servern du kör på?
Japp, $iFile är helt tom. Varken $iFile eller $_POST['iFile'] returnerar något...
Om du provar skriva ut den temporära filen innan den blivit omhändertagen.
$HTTP_POST_FILES['iFile'] ['tmp_name']
$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;
}
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.
$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
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 :)
Angående din PHP-config så ser ju kanske inte detta helt rätt ut:
upload_tmp_dir
no value no value
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...
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...
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.
jo det finns det...skall se om jag hinner leta upp det nu så återkommer jag så fort jag hinner...
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">
...
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
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