[PHP] move_uploaded_file Problem

mydoys.de

Well-known member
ID: 84968
L
20 April 2006
2.758
125
Mein Code:

File kommt von hier :
Code:
<form action="ddd.php" method="post" enctype=multipart/form-data>
<input type=file name=datei>
</form>

PHP:
$File = $HTTP_POST_FILES['datei']['name'];
$ordnernamefuer="dingens/";
$savename = $ordnernamefuer.$File;
	if(move_uploaded_file($File, $savename)) 
	chmod($savename, 0777);
	{
	echo "FERTIG";
	}

dingens hat die rechte 777

Mein Problem:
es Passiert nichts.. Keine Fehlermeldung nichts,...
 
ich glaube da fehlen headerinformationen.hatte sowas auch ma in nem kontaktformular mit anhang.
genaueres kann ich dir jetzt dazu nich sagen da ich mir die infos ausm web gezogen hab und mein kontaktformular wird dir nich viel bringen.

aber villeicht hilfts ja ;)

$Trenner = md5(uniqid(time()));

$Header = "From: ".$_REQUEST['Email'];
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
$Header .= "This is a multi-part message in MIME format";
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: text/plain";
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: 8bit";
$Header .= "\n\n";
$Header .= "Sie haben folgende Nachricht erhalten: \n\n";
while(list($Formularfeld, $Wert) = each($_REQUEST))
{
if($Formularfeld != "Send" && $Formularfeld != "Anhang1" && $Formularfeld != "Anhang2" && $Formularfeld != "Anhang3" && $Formularfeld != "Anhang4" && $Formularfeld != "Anhang5")
{
$Header .= $Formularfeld.": ".$Wert."\n";
}
}

$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";

for($i1=1;$i1<6;$i1++){
if(empty($_FILES['Anhang'.$i1]['name']))continue;



$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang'.$i1]['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang'.$i1]['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang'.$i1]['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang'.$i1]['tmp_name'], "r"), $_FILES['Anhang'.$i1]['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";

}

$Header .= "--$Trenner--";
 
@erotkia:
Falsche Baustelle. Hier gehts um Upload, nicht um MIME-Mails ;)

@mydoys.de:
Wenn nichts passiert, heißt das doch, dass nicht "FERTIG" ausgegeben wird. Und wenn das der Fall is, hat doch alles funktioniert. Wo ist das Problem ? :think:

Mach mal um den Wert des enctype-Attributs die Anführungszeichen rum. Manche Browser fressen dir das sonst ned.
 
Zuletzt bearbeitet:
hacker...in meinem script gehts auch um upload ;) die exakt gleiche funktion.denn das script hatte mir vorher den move_uploaden_file fehler ausgegeben und ich hab beim hoster nachgefragt.

die datei wird ja vorher hochgeladen und dann verschickt.anders geht es ja nicht.
 
hacker...in meinem script gehts auch um upload ;)
Sorry, aber ich seh keinen Upload. Ich seh nur, wie die Headerdaten für eine MIME-Mail vorbereitet werden.

mydoys.de möchte eine Datei hochladen, nicht wissen, wie er die Header setzen muss, um sie mit einer Mail zu verschicken.
Ein Beispiel, wie der ZIP-Header aussehen muss, wenn ich ne hochgeladene Datei zippen will, bringt ja wohl auch nix ;)
 
Ok, passiert ja doch was ;)

Ich hab mir den Quellcode grade nochmal angesehen und war wohl das letzte Mal wegen deiner komischen Klammerung verwirrt.

Kann ich dann davon ausgehen, dass die Datei nicht hochgeladen wird ? Oder wird sie nur nicht verschoben ?
register_long_arrays überhaupt aktiviert ? Sonst funktioniert dieser veraltete Code natürlich von vorneherein nicht.

Wenn ich jetzt das Stichwort "Debugging" bringe, werd ich ja doch wieder alles aus der Nase ziehen dürfen - vermute ich mal.
Hier mal ein modifizierter Quellcode mit Debugging:
PHP:
error_reporting(E_ALL & (~E_STRICT));
print_r($_FILES); echo "<br />";
//$File = $HTTP_POST_FILES['datei']['name']; <- veraltet
$File = $_FILES['datei']['name'];
$ordnernamefuer="dingens/"; 
$savename = $ordnernamefuer.$File;
echo "savename = '$savename'<br />";
if(move_uploaded_file($File, $savename))
{
  echo "move_uploaded_file succeed<br />";
  if(chmod($savename, 0777))
    echo "chmod succeed<br />";
  else
    echo "chmod failed<br />";
}
else
  echo "move_uploaded_file failed<br />";

echo "FERTIG";
 
Das ['name'] ist falsch, da steht der Orginalname der Datei drin... du brauchst zum kopieren aber den temporären Dateiname vom Upload und der versteckt sich hinter ['name_tmp'].
 
Ok, passiert ja doch was ;)

--->

Array ( [datei] => Array ( [name] => Foto706.jpg [type] => image/jpeg [tmp_name] => /var/www/web50/phptmp/php8XLnqF [error] => 0 [size] => 507810 ) )
savename = 'dingens/Foto706.jpg'
move_uploaded_file failed
FERTIG


Das ['name'] ist falsch, da steht der Orginalname der Datei drin... du brauchst zum kopieren aber den temporären Dateiname vom Upload und der versteckt sich hinter ['name_tmp'].

Mom ich teste mal..


Also so?

PHP:
error_reporting(E_ALL & (~E_STRICT));
print_r($_FILES); echo "<br />";
//$File = $HTTP_POST_FILES['datei']['name']; <- veraltet
$File = $_FILES['datei']['name_tmp'];
$ordnernamefuer="mailanhang/"; 
$savename = $ordnernamefuer.$File;
echo "savename = '$savename'<br />";
if(move_uploaded_file($File, $savename))
{
  echo "move_uploaded_file succeed<br />";
  if(chmod($savename, 0777))
    echo "chmod succeed<br />";
  else
    echo "chmod failed<br />";
}
else
  echo "move_uploaded_file failed<br />";

echo "FERTIG";

geht auch nicht..
 
PHP:
$_FILES['datei']['tmp_name'];

Greetz

paddya



PHP:
Array ( [datei] => Array ( [name] => Foto704.jpg [type] => image/jpeg [tmp_name] => /var/www/web50/phptmp/php4XvIQ8 [error] => 0 [size] => 350570 ) )
savename = 'dingens//var/www/web50/phptmp/php4XvIQ8'
move_uploaded_file failed
FERTIG
 
PHP:
move_uploaded_file($_FILES['datei']['tmp_name'], 'dingens/' . $_FILES['datei']['name'])

sollte funktionieren

Greetz

paddya
 
sollte funktionieren
Greetz
paddya

also so:

PHP:
error_reporting(E_ALL & (~E_STRICT));
print_r($_FILES); echo "<br />";
//$File = $HTTP_POST_FILES['datei']['name']; <- veraltet
$File = $_FILES['datei']['tmp_name'];
$ordnernamefuer="dingens/"; 
$savename = $ordnernamefuer.$File;
echo "savename = '$savename'<br />";
if(move_uploaded_file($_FILES['datei']['tmp_name'], '$ordnernamefuer/' . $_FILES['datei']['name']))
{
  echo "move_uploaded_file succeed<br />";
  if(chmod($savename, 0777))
    echo "chmod succeed<br />";
  else
    echo "chmod failed<br />";
}
else
  echo "move_uploaded_file failed<br />";

echo "FERTIG";

Ich teste mal



geht immer noch nicht... :heul:

PHP:
Array ( [datei] => Array ( [name] => Foto625.jpg [type] => image/jpeg [tmp_name] => /var/www/web50/phptmp/phpigw2k1 [error] => 0 [size] => 86809 ) )
savename = 'mailanhang//var/www/web50/phptmp/phpigw2k1'
move_uploaded_file failed
FERTIG
 
Entweder ohne Anführungszeichen um die Variable $ordnernamefuer oder wenn dann mit doppelten.

Greetz

paddya
 
PHP:
error_reporting(E_ALL & (~E_STRICT));
print_r($_FILES); echo "<br />";
//$File = $HTTP_POST_FILES['datei']['name']; <- veraltet
$File = $_FILES['datei']['name'];
$ordnernamefuer="dingens/"; 
$savename = $ordnernamefuer.$File;
echo "savename = '$savename'<br />";
if(move_uploaded_file($_FILES['datei']['tmp_name'], $ordnernamefuer . $File))
{
  echo "move_uploaded_file succeed<br />";
  if(chmod($savename, 0777))
    echo "chmod succeed<br />";
  else
    echo "chmod failed<br />";
}
else
  echo "move_uploaded_file failed<br />";

echo "FERTIG";

Greetz

paddya

Edit: Sorry für den Doppelpost...
 
Kein Problem ;)

Dein Problem war nur, dass du mit den Variablen durcheinander gekommen bist.

Greetz

paddya