ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
481
481
EMPFEHLEN
-
heyho...
ich habe ein kleines problemchen... zuerst erkläre ich am besten mal, was das script leisten soll, und was es bisher kann.
also, ich habe mir aus x tutorials ein uploadscript zusammengeschnippelt, welches 2 dateien zur selben zeit uploaden soll. hierbei handelt es sich 1. um eine zip datei, und 2. um einen screenshot (es geht um skins...).
beim upload soll ein neuer ordner erstellt werden, der den namen des skins hat. in diesen ordner sollen nun die beiden dateien upgeloadet werden, also das zip, und der screenshot dazu. weiterhin soll das script eine mail an eine deifinierte e-mail adresse schicken, um über neue uploads informiert zu werden.
was geht:
- verzeichnis erstellen
- e-mail versenden
was nicht geht:
- upload
der code:
PHP-Code:<?PHP
$addi = "contact@growers.de";
$message = "$name [ $email ] hat einen neuen skin upgeloadet.";
$tellnew = "1";
$mode = 0777;
$skingesamt=$skinname."/".$file_name;
if (!file_exists($skinname))
{
mkdir ($skinname,$mode);
copy($zip, $skingesamt);
copy($screenshot, $skingesamt);
unlink($zip);
unlink($screenshot);
}
else
echo "Ein Skin mit diesem namen existiert bereits...";
if ($tellnew == "1")
{
mail("$addi", "Uploaded file", "$message");
exit;
}
?>
und (wen es interessiert) hier noch der code des dazugehörigen formulares:
hier die fehlermeldungen:PHP-Code:<html>
<head>
<title>script: Skinupload</title>
</head>
<body>
<center>
<form method="post" action="upload.php">
<table border="0" width="650">
<tr>
<td width="120"><p align="left">(Nick)Name: </p></td>
<td width="12"><font color="red"><b>*</b></font></td>
<td width="500" colspan="2">
<input name="name" size="20">
</td>
</tr>
<tr>
<td width="120"><p align="left">E-Mail Adresse: </p></td>
<td width="12"> </td>
<td width="500" colspan="2">
<input name="mail" size="20">
</td>
</tr>
<tr>
<td width="120"><p align="left">Skin-Name: </p></td>
<td width="12"><font color="red"><b>*</b></font></td>
<td width="500" colspan="2">
<input name="skinname" size="20">
</td>
</tr>
<tr>
<td width="120"><p align="left">Skin Zip: </p></td>
<td width="12"><font color="red"><b>*</b></font></td>
<td width="500" colspan="2">
<input name="zip" size="20" type="file">
</td>
</tr>
<tr>
<td width="120"><p align="left">Screenshot: </p></td>
<td width="12"><font color="red"><b>*</b></font></td>
<td width="500" colspan="2">
<input name="screenshot" size="20" type="file">
</td>
</tr>
<tr>
<td width="120" valign="top"><p align="left">Beschreibung: </p></td>
<td width="12" valign="top"><font color="red"><b>*</b></font></td>
<td width="500" colspan="2">
<textarea rows="6" cols="36" name="description" wrap="physical"></textarea>
</td>
</tr>
</tr>
<tr>
<td colspan="4" height="50">
<input type="submit" value="hoch damit"> <input type="reset" value="Zurücksetzen">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
Warning: Unable to create 'huhu2/': Is a directory in /var/www/html/uploader/upload.php on line 10
Warning: Unable to create 'huhu2/': Is a directory in /var/www/html/uploader/upload.php on line 11
Warning: Unlink failed (Permission denied) in /var/www/html/uploader/upload.php on line 12
Warning: Unlink failed (Permission denied) in /var/www/html/uploader/upload.php
wäre dankbar für hilfe
Geändert von cyberking (22.09.02 um 23:39 Uhr)
<a href="http://www.growers.de">www.growers.de</a> - das Aquaristikportal im Netz
-
Vielleicht solltest du mit $_files["dateinname"] damit könnte es evtl klappen. Die Variable $file_name ist undefiniert, deswegen "glaubt" PHP die Variable $skingesamt sei ein Ordner, da der Wert nur "huhu2/" und nicht wie erwartet "huhu2/huhu2.zip" enthält.
Empirismus, die lieblingsmethode aller mir bekannter Programmierer :]
-
hi, habe es nun anders gelöst, bzw besser gesagt korrigiert.
allerdings gibt es da ein kleines "sicherheitsloch", welches ich noch stopfen müsste... wenn $skinname zum beispiel ../../blabla eingibt, dann wird das verzeichnis halt 2 ebenen höher erstellt. jemand eine idee, wie man das umgehen kann?
hier noch der aktualisierte "code"
PHP-Code:<?PHP
$mailto = "contact@growers.de";
$message = "$name [ $mail ] hat einen neuen skin namens $skinname upgeloadet. Screenshot: [url]http://www.growers.de/skins/[/url]$skinname/$screenshot_name";
$tellnew = "1";
$mode = 0777;
$infos = " Name: $name\n e-mail: $mail\n Skinname: $skinname\n Skinzip: $zip_name\n Screenshot: $screenshot_name\n URL zum Screenshot: [url]http://www.growers.de/skins/[/url]$skinname/$screenshot_name\n URL zum ZIP-File: [url]http://www.growers.de/skins/[/url]$skinname/$zip_name\n Beschreibung: $description";
if ($name != "" || $description != "" || $skinname != "" || $zip != "" || $screenshot != "")
{
if (!file_exists($skinname))
{
mkdir ($skinname,$mode);
if ($zip_name != "" || $screenshot_name != "" || $skinname != "")
{
copy("$zip" , "$skinname/$zip_name");
copy("$screenshot" , "$skinname/$screenshot_name");
touch("$skinname/infos.txt");
$infodatei = fopen("$skinname/infos.txt", "w");
fputs($infodatei, $infos);
fclose($infodatei);
echo "Danke $name, wir haben den Skin $skinname erhalten.";
}
else
{
die("Nicht alle Felder ausgefüllt!");
}
}
else
{
echo "Ein Skin namens $skinname existiert bereits!";
}
}
else
{
echo "Nicht alle felder ausgefüllt!";
}
if ($tellnew == "1")
{
mail("$mailto", "Neuer Skin", "$message");
exit;
}
?>
und thx für's helfen.<a href="http://www.growers.de">www.growers.de</a> - das Aquaristikportal im Netz
-
Also ich kann dir keinen code bieten, aber ne theoretische Lösung für das Problem.
Es gibt einen Stringbefehl, der nach dem letzten vorkommen eines Zeichens sucht in einem String.
eine pfadbezeichung wird ja mit " / " beendet. Dann schreibst du einen code, der dann in diesem string alles löscht bis zum letzten vorkommen des backslashes.
Reicht das? Ich hoffe!
Achso noch was die fehler die da ausgegeben werden müssten daher kommen, weil der chmod nicht richtig eingestellt ist von den pfaden, denke ich mal.
Wenn du nen neuen pfad erstellst, dann musst du uach gleichzeitig per php den chmod ändern, bevor du die file hochlädst.
dann müssten uach die fehlermeldungen wegbleiben!
-
mach am besten nen preg-pattern der punkte und striche einfach entfernt. quasi so:
$skinname = preg_replace("/(\.\.\/)*/","",$skinname);
das sucht nach ../ und ersetzt sie durch einen leeren string. ich weiß nicht wie das verhalten ist wenn du nach dem letztvorkommenden / suchst, aber falls es kein / gibt, dürfte er reintheoretisch gar nichts ausspucken, deswegen ist preg-replace besser, da er nur das ersetzt was der pattern findet. im grunde müssteste nur die zeile da oben bei dir einfügen...Empirismus, die lieblingsmethode aller mir bekannter Programmierer :]
-
hi,
ja, thx, habe es auch so gemacht... bzw ähnlich. ausserdem noch alles ein wenig verkürzt, dank freundlicher hilfe.
@Razorhawk, der CHMOD wird doch direkt beim verzeichnis erstellen auf 0777 gesetzt:
oder sehe ich das falsch?PHP-Code:<?
$mode = 0777;
mkdir($skinname,$mode);
?>
so, und nun letzten endes ist das folgende bei rausgekommen, ich denke, es wäre dann soweit erstmal fertig, zumindest funktioniert es so, wie ich wollte... wenn noch jemandem sicherheitsmängel auffallen, möge er mir bitte bescheidgeben
thx
PHP-Code:<?PHP
$skinname = ereg_replace("/" , "0" , $skinname);
$skinname = ereg_replace(" " , "_" , $skinname);
$mode = 0777;
$tellnew = "0";
$mailto = "contact@growers.de";
$message = "$name [ $mail ] hat einen neuen skin namens $skinname upgeloadet. Screenshot: [url]http://www.growers.de/skins/[/url]$skinname/$screenshot_name";
$infos = " Name: $name\n e-mail: $mail\n Skinname: $skinname\n Skinzip: $zip_name\n Screenshot: $screenshot_name\n URL zum Screenshot: [url]http://www.growers.de/skins/[/url]$skinname/$screenshot_name\n URL zum ZIP-File: [url]http://www.growers.de/skins/[/url]$skinname/$zip_name\n URL zur infos.txt: [url]http://www.growers.de/skins/[/url]$skinname/infos.txt\n Beschreibung: $description";
if ($skinname != "" and $skinname !="" and $name != "" and $zip != "none" and $screenshot != "none" and $description != "" and !file_exists($skinname) and $screenshot_type == "image/jpeg")
{
mkdir ($skinname , $mode);
copy("$zip" , "$skinname/$zip_name");
copy("$screenshot" , "$skinname/$screenshot_name");
touch("$skinname/infos.txt");
$infodatei = fopen("$skinname/infos.txt", "w");
fputs($infodatei , $infos);
fclose($infodatei);
echo "Danke $name, wir haben deinen Skin ($skinname) erhalten.<br><br>\n";
echo "Wir werden ihn nach einer kurzen Prüfung in unser Archiv aufnehmen.";
}
else
{
echo "<font color=\"red\"><h3>Es ist ein Fehler aufgetreten.</h3></font><br><br>\n";
echo "Entweder existiert bereits ein Skin namens <b>$skinname</b>,<br>\n";
echo "oder es wurden <b>nicht alle Pflichtfelder</b> ausgefüllt.<br><br>\n";
echo "Denke bitte auch daran, dass nur <b>*.zip</b> bzw <b>*.jpg</b> Dateien<br>\n";
echo "hochgeladen werden können...";
exit;
}
if ($tellnew == "1")
{
mail("$mailto", "Neuer Skin...", "$message");
exit;
}
else
{
exit;
}
?><a href="http://www.growers.de">www.growers.de</a> - das Aquaristikportal im Netz
Ähnliche Themen
-
probleme mit uploadscript
Von breytex im Forum PHPAntworten: 9Letzter Beitrag: 18.07.06, 08:56 -
Probleme mit Uploadscript
Von RageNo1 im Forum PHPAntworten: 3Letzter Beitrag: 03.07.06, 17:06 -
Probleme bei Script umsetzung
Von ulf123 im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 2Letzter Beitrag: 16.02.06, 11:19 -
Eigenes CMS -> Probleme mit Umsetzung
Von diggity im Forum PHPAntworten: 6Letzter Beitrag: 11.04.05, 18:52 -
Probleme bei umsetzung :(
Von Lykon im Forum PhotoshopAntworten: 8Letzter Beitrag: 11.04.02, 13:10





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren