Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
[Funktion] ftp script upload -> beschädigte datei [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[Funktion] ftp script upload -> beschädigte datei


 
dionysos
30-09-2005, 17:13 
 
Hallo,

seit einiger zeit kann ich keine dateien mehr via ftp über ein script auf den server laden. bzw. werden die dateien zwar hochgeladen sind aber beschädigt. egal ob es sich um eine bilddatei, pdf oder word doc handelt. beim vergleich der dateigrößen ist aufgefallen dass die hochgeladenen dateien immer einige byte größer waren als die original datei.
da es vor einigen wochen noch wunderbar funktionierte habe ich keine idee woran es leigen könnte.

wäre über hilfe sehr dankbar :)

das script ist folgendes:

ftp class:

class scmsftp
{
protected $stream;

public function Connect ($host, $username, $password, $port = '21', $timeout = 90)
{
$chk = ftp_connect ($host, $port, $timeout);
if ($chk)
{
$this->$stream = $chk;
return ftp_login ($this->$stream, $username, $password);
}
return false;
}

public function Close ()
{
return ftp_quit ($this->$stream);
}

public function DoPASV ($on = true)
{
$on = ($on == true) ? true : false;
return ftp_pasv ($this->$stream, $on);
}

public function PutFile ($rfile, $lfile, $type = FTP_ASCII)
{
$chk = ftp_put ($this->$stream, $rfile, $lfile, $type);
return (file_exists ($lfile) && ($type == FTP_ASCII || $type == FTP_BINARY) && $chk) ? $chk : false;
}

public function GetFile ($rfile, $lfile, $type = FTP_ASCII)
{
$chk = ftp_get ($this->$stream, $lfile, $rfile, $type);
return (file_exists ($lfile) && ($type == FTP_ASCII || $type == FTP_BINARY) && $chk) ? $chk : false;
}

public function DelFile ($file)
{
$chk = ftp_delete ($this->$stream, $file);
return $chk;
}

public function GetFileSize ($file)
{
return ftp_size ($this->$stream, $file);
}

public function Rename ($old, $new)
{
return ftp_rename ($this->$stream, $old, $new);
}

public function DelDir ($dir)
{
$chk = ftp_rmdir ($this->$stream, $dir);
return $chk;
}

public function MakeDir ($dir)
{
$chk = ftp_mkdir ($this->$stream, $dir);
return $chk;
}

public function ListDirFiles ($directory, $raw = false)
{
$func = ($raw == false) ? 'ftp_nlist' : 'ftp_rawlist';
$chk = $func ($this->$stream, $directory);
if (is_array ($chk))
{
$arr = array ();
foreach ($chk as $key => $file)
$arr[] = ($raw == false) ? str_replace ($directory . '/', '', $file) : $file;
return $arr;
}
return false;
}

public function SendRaw ($raw)
{
$chk = ftp_exec ($this->$stream, $raw);
return $chk;
}

public function GetCurrentDir ()
{
return ftp_pwd ($this->$stream);
}

public function SwitchDir ($dir)
{
return ftp_chdir ($this->$stream, $dir);
}

public function DoCHMOD ($path, $chmod)
{
$chk = (ftp_chmod ($this->$stream, $chmod, $path) == false) ? false : true;
return $chk;
}


und das script:


$dftp = new scmsftp();
$dftp->Connect($cms['ftp_server'], $cms['ftp_user'], $cms['ftp_pass']);
$dftp->SwitchDir($cms['ftp_basedir']."file/");
$dftp->PutFile($_FILES['FCKeditor_File']['name'], $_FILES['FCKeditor_File']['tmp_name']);
$dftp->Close();

 
penizillin
30-09-2005, 18:37 
 
als aller erstes mit einem hex-editor in die datei reinschauen - wo wurde was drangehangen, und wenn - zeigen.

lässt sich das problem bei ascii-übertragung wiederholen?

 
dionysos
30-09-2005, 18:51 
 
vielen dank für deine antwort....

wird beim php ftp upload automatisch der binary mode verwendet?

wie finde ich raus was dazu gekommen ist?

wenn ich die datei mit einem "normalen" ftp programm hochlade gibt es kiene probleme.

greetz
dan

 
penizillin
30-09-2005, 19:53 
 
es gibt keinen "standard"-modus.

wenn du aber nachgeschaut hättest, bevor du eine fremde klasse verwendest (ja, es ist jetzt ein vorwurf, wenn ich mich irre, berichtige mich), wüsstest du, wie die methode putfile() aufgebaut ist - wenn du kein drittes parameter verwendest, kann auch keine binäre übertragung stattfinden und die doc/pdf/whatever-dateien werden beschädigt sein.

ebenfalls nich gerade entgegenkommend fand ich, dass du meine frage nicht beantwortet hast.

 
dionysos
30-09-2005, 20:09 
 
wie wird entschieden welcher modus verwendet wird wenn der modus nicht angegeben wird?

vor deiner antwort wußte ich ja nicht dass es einen 3. parameter gibt. also auch nicht wie ich den ascii mode simulieren kann.

 
penizillin
30-09-2005, 20:11 
 
ich zitiere: public function PutFile ($rfile, $lfile, $type = FTP_ASCII)

folgende fragen bitte beantworten:

1. wieviele parameter erwartet die funktion?
2. welche davon sind pflicht, welche nicht?
3. was passiert, wenn die nicht-pflicht-parameter ausgelassen werden?

 
dionysos
30-09-2005, 20:15 
 
schlechten tag gehabt?

trotzdem danke für die hilfe... wenn ichs auf binary umstelle gehts wieder.

greetz
dan

 
penizillin
30-09-2005, 20:17 
 
schlechten tag gehabt? ja, aber ich glaube nicht, dass es wichtig ist.

dachte nur, du wirst dich mehr freuen, wenn du die lösung selbst findest als wenn ich sie dir direkt verrate. :dontknow:

 
dionysos
30-09-2005, 20:21 
 
ich fand es nur so seltsam dass es vor ein paar tagen noch wunderbar ging. ich hatte erst an eine veränderung der server conf gedacht...

danke nochmal :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:05 Uhr.