php - ftp_get - Avertissement: ftp_get(): Ouverture de la mode BINAIRE des données de connexion
Je suis en train d'écrire un script qui va télécharger des fichiers depuis un serveur FTP. Ils sont tous assez grande (près de 2 go chacun). Le script commence à s'exécuter, mais qui finalement se termine avec l'erreur ci-dessus. Est-il de la taille relative? Est-il un moyen de contourner cela? Voici le code:
<?php
$ftp_server = "ftp.EXAMPLE.com";
$conn_id = ftp_connect ($ftp_server) or die("Couldn't connect to $ftp_server");
$login_result = ftp_login($conn_id, "USERNAME", "PASSWORD");
if ((!$conn_id) || (!$login_result)) die("FTP Connection Failed");
ftp_sync("download");
ftp_close($conn_id);
$mkdir = date('Y-m-d');
mkdir('encrypted/'.$mkdir, 0777);
smartCopy("./download/", 'encrypted/'.$mkdir);
chmodr("encrypted/".$mkdir, 0777);
function ftp_sync ($dir) {
global $conn_id;
if ($dir != ".") {
if (ftp_chdir($conn_id, $dir) == false) {
echo ("Change Dir Failed: $dir<BR>\r\n");
return;
}
if (!(is_dir($dir)))
mkdir($dir);
chdir ($dir);
}
$contents = ftp_nlist($conn_id, ".");
foreach ($contents as $file) {
if ($file == '.' || $file == '..')
continue;
if (@ftp_chdir($conn_id, $file)) {
ftp_chdir ($conn_id, "..");
ftp_sync ($file);
}
else
ftp_get($conn_id, $file, $file, FTP_BINARY);
}
ftp_chdir ($conn_id, "..");
chdir ("..");
}
function chmodr($path, $filemode) {
if (!is_dir($path))
return chmod($path, $filemode);
$dh = opendir($path);
while (($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..') {
$fullpath = $path.'/'.$file;
if(is_link($fullpath))
return FALSE;
elseif(!is_dir($fullpath) && !chmod($fullpath, $filemode))
return FALSE;
elseif(!chmodr($fullpath, $filemode))
return FALSE;
}
}
closedir($dh);
if(chmod($path, $filemode))
return TRUE;
else
return FALSE;
}
function smartCopy($source, $dest, $folderPermission='0777',$filePermission='0777'){
$result=false;
if (is_file($source)) {
if(is_dir($dest)) {
if ($dest[strlen($dest)-1]!='/')
$__dest=$dest."/";
$__dest .= basename($source);
}
else {
$__dest=$dest;
}
$result=copy($source, $__dest);
chmod($__dest,$filePermission);
}
elseif(is_dir($source)) {
if(!is_dir($dest)) {
@mkdir($dest,$folderPermission);
chmod($dest,$folderPermission);
}
if ($source[strlen($source)-1]!='/')
$source=$source."/";
if ($dest[strlen($dest)-1]!='/')
$dest=$dest."/";
$return = true;
$dirHandle=opendir($source);
while($file=readdir($dirHandle)) {
if($file!="." && $file!="..") {
$result=smartCopy($source.$file, $dest.$file, $folderPermission, $filePermission);
}
}
closedir($dirHandle);
}
else {
$result=false;
}
return $result;
}
function deleteDirectory($dir) {
if (!file_exists($dir)) return true;
if (!is_dir($dir) || is_link($dir)) return unlink($dir);
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') continue;
if (!deleteDirectory($dir . "/" . $item)) {
chmod($dir . "/" . $item, 0777);
if (!deleteDirectory($dir . "/" . $item)) return false;
};
}
return rmdir($dir);
}
?>
OriginalL'auteur whitman6732 | 2010-03-22
Vous devez vous connecter pour publier un commentaire.
Êtes-vous sûr que chaque fichier est binaire?
Vous pouvez essayer de deviner le type de fichier à partir de son extension afin d'ajuster le mode de téléchargement, comme il est suggéré dans ce commentaire: http://www.php.net/manual/fr/function.ftp-get.php#86516
OriginalL'auteur Benjamin Delichere
J'ai eu un problème similaire et en utilisant les éléments suivants résolu pour moi.
Fonctionne pour moi aussi. Merci beaucoup!
Si vous utilisez la connexion, ajouter le ftp_pasv($conn_id, TRUE); ligne juste après ftp_login()
OriginalL'auteur Silverback
Pour toute personne qui pourrait venir par cette question parce que d'avoir le même problème. Pour moi, c'était plutôt simple, à l'emplacement cible pour le téléchargement n'a pas suffisamment d'espace libre pour le fichier.
Je suis là avec vous.
C'était mon problème. Merci!
Mon problème aussi, je vous remercie
OriginalL'auteur Der Hochstapler
Essayer d'augmenter
FTP_TIMEOUT
(la valeur par défaut est de 90)Il a fonctionné parfaitement pour moi.
http://www.php.net/manual/en/function.ftp-set-option.php
OriginalL'auteur Svoka
Essayez d'utiliser
ftp_close
etftp_connect
de réinitialiser votre connexion FTP.J'avais passé une bonne journée sur celle-ci, d'essayer tout ce que j'ai pu trouver (ftp_pasv, ftp_alloc, de changer de FTP_ASCII/FTP_BINARY), sans succès.
Certains serveurs ont des limites sur combien vous pouvez télécharger par session.
OriginalL'auteur Andrew Martin