Existe-t-il un moyen de vérifier si un dossier existe sur le serveur en utilisant la fonctionnalité PHP Ftp?Comment vérifier en utilisant PHP fonctionnalité FTP si le dossier existe sur le serveur ou non?
Répondre
Pour PHP 5:
$folder_exists = is_dir('ftp://user:[email protected]/some/dir/path');
http://php.net/manual/en/function.is-dir.php: "PHP 5.0.0, cette fonction peut également être utilisé avec des enveloppes d'URL."
http://php.net/manual/en/wrappers.ftp.php: [Support] "PHP 5.0.0: filesize(), filetype(), file_exists(), is_file() et is_dir()"
Il n'existe pas de fonction 'exists' pour les connexions ftp en php.
Vous pouvez essayer ftp_chdir et vérifier le résultat
cela vous plonger dans le dossier que vous vérifiez, ce qui est inutile supplémentaire action, si vous voulez juste vérifier si dir existe, de sorte que vous aurez t o aller encore un niveau avec 'ftp_chdir' pour revenir – vladkras
trébuché sur cette question à partir de 2009 et trouvé cette question n'est pas satisfaisante pour moi. J'ai fait quelques petites recherches et j'ai trouvé un petit tweak pour ce problème.
Donc, si trouvé le * ftp_nlist * sorcière retourne un tableau de chaîne avec des noms de fichiers et dossiers witch existe dans le répertoire courant ftp, et je l'ai simplement vérifié sous le tableau (avec boucle de foreacah) si le dossier ou le fichier que nous avons recherché existe et qu'une nouvelle méthode ifExist a été créée.
vous pouvez en lire plus à php.net: http://php.net/manual/en/function.ftp-nlist.php
une autre option pour le YII cadre utilisateurs de son extension ftp qui masque la lib php ftp et le rend encore plus facile de travailler avec un serveur ftp à partir du code.
J'espère que vous m'aiderez.
J'ai écrit quelque chose de similaire, mais en utilisant la fonction 'in_array'. –
ftp_mdtm() obtient la dernière heure de modification pour un fichier distant. Renvoie la dernière heure modifiée en tant qu'horodatage Unix en cas de succès, ou -1 en cas d'erreur. Notez que ftp_mdtm() ne fonctionne pas avec les répertoires. Donc, si nous obtenons -1 alors peut-être que le fichier est le répertoire.
Notez également que tous les serveurs ne prennent pas en charge cette fonctionnalité!
pour la vérification des fichiers multiples, il est préférable d'utiliser ftp_chdir
au lieu d'utiliser la is_dir
/fonction file_exists
avec des enveloppes d'URL, parce que il y a assez lent (fichier foreach il doit être ouvert une nouvelle connexion ftp ...).
foreach ($list as $item) {
$is_dir = @ftp_chdir($ftp_handle, $item); //produces warning if file...
if ($is_dir) {
ftp_chdir($ftp_handle, '..');
$dirs[] = $item;
} else {
$files[] = $item;
}
}
Ce script était prêt après ~ 10 sec.
Le même script utilisant is_dir
et file_exists
nécessitait plus de 45 secondes.(Chaque fichier avait 10 pistes)
Essayez ceci:
if (ftp_nlist($ftp_stream, $new_folder) == false) {
ftp_mkdir($ftp_stream, $new_folder);
}
La solution qui fonctionne pour moi:
if (!in_array($dirName.'/'.$something, $ftp->nlist($dirName))) {
// do something
}
Sur les serveurs FTP modernes, vous pouvez utiliser la commande MLST/MLSD pour récupérer détaillée informations lisibles par machine sur les fichiers. Lisez la page RFC https://tools.ietf.org/html/rfc3659#page-23 pour en savoir plus sur cette commande.
Voici un exemple de code pour déterminer le type de noeud du système de fichiers:
function isDir($ftp, $fsNodePath) {
$type = strtolower(fsNodeType($ftp, $fsNodePath));
return ($type === 'cdir' || $type === 'pdir' || $type === 'dir');
}
function isFile($ftp, $fsNodePath) {
$type = strtolower(fsNodeType($ftp, $fsNodePath));
return ($type === 'file');
}
function isLink($ftp, $fsNodePath) {
$type = strtolower(fsNodeType($ftp, $fsNodePath));
return (preg_match('/^OS\.unix\=(slink|symlink)/i', $type) === 1);
}
function fsNodeType($ftp, $fsNodePath)
{
$lines = array_values(ftp_raw($ftp, "MLST $fsNodePath"));
$linesCount = count($lines);
if ($linesCount === 1) {
throw new Exception('Unsuitable response for MLST command: ' . $lines[0]);
}
if ($linesCount !== 3) {
$e = new Exception('Unexpected response for MLST command (1)');
$e->response = $lines;
throw $e;
}
if (!preg_match('/^250\-/', $lines[0]) || !preg_match('/^250 /', $lines[2])) {
$e = new Exception('Unexpected response for MLST command (2)');
$e->response = $lines;
throw $e;
}
$spEntry = ' ' . $lines[1];
if (preg_match('/[\s\;]type\=([^\;]+)/i', $spEntry, $matches)) {
$type = trim($matches[1]);
return $type;
} else {
throw new Exception('Failed to extract filesystem node type from SP entry:' . $spEntry);
}
}
$ftp = ftp_connect('192.168.0.100');
ftp_login($ftp, 'user', '1234');
$is = isDir($ftp, 'tmp');
var_dump($is);
Notez que chaque serveur prend en charge la commande MLST. Par exemple, ftp.freebsd.org n'a pas :(
Moi aussi je ne suis pas satisfait de tout ce qui a été accepté, j'ai une connexion standard (pas de style OO comme dans la réponse de @ Lackeeee qui est la plus proche de la mienne):
$ftp = ftp_connect($host, 21, 30);
ftp_login($ftp, $user, $password);
// if $my_dir name exists in array returned by nlist in current '.' dir
if (in_array($my_dir, ftp_nlist($ftp, '.'))) {
// do smth with $my_dir
}
ftp_close($ftp);
est ici une fonction pour le faire. Il retourne simple true
ou false
. Il gère également certains cas de pointe.
function isDir($connection, $dir)
{
$dir = trim($dir, '/');
$dir = '/' . $dir;
if ($dir === '/') {
return true;
}
return in_array($dir, ftp_nlist($connection, dirname($dir)));
}
- 1. Comment vérifier si les fichiers existent sur le serveur FTP?
- 2. Comment vérifier si le fichier existe sur FTP avant FtpWebRequest
- 3. Vérifiez si le fichier existe ou non?
- 4. Vérifiez si ftp est complet ou non?
- 5. Vérifier si un répertoire existe sur un autre serveur ksh
- 6. Comment vérifier si un fichier existe sur un serveur en utilisant C# et la classe WebClient
- 7. Comment vérifier si l'utilisateur a entré ou non des données dans MySQL en utilisant PHP?
- 8. Comment vérifier qu'un fichier existe ou non en Javascript?
- 9. Transférer des images sur le serveur en utilisant PHP
- 10. Comment vérifier si le chemin d'installation du projet C# existe
- 11. Sécurité PHP: récupérer le fichier PHP du serveur, non-traité
- 12. Télécharger le fichier sur le serveur FTP sur l'iPhone
- 13. Comment vérifier si un contrôleur existe en utilisant Zend Framework
- 14. vérifier si le nom d'utilisateur existe
- 15. C# programme client ftp créer un dossier dossier
- 16. En utilisant% {REQUEST_URI} modifié dans le fichier RewriteCond existe vérifier
- 17. Comment puis-je vérifier qu'une clé de tableau existe si le tableau n'existe pas en PHP?
- 18. comment vérifier si un fichier existe avant de le créer
- 19. Obtenir MIME-Types sur FTP en PHP
- 20. en téléchargeant du code sur le serveur de développement ou de production à l'aide de ftp ou en utilisant telnet, sont-ils tous deux non sécurisés?
- 21. Vérifier si le contenu a déjà été envoyé en PHP
- 22. Vérifiez si un répertoire existe en PHP
- 23. Comment vérifier si le fichier tlb est enregistré dans le registre en utilisant C++?
- 24. Comment vérifier si le travail est désactivé ou non dans sqlserver management studio 2005?
- 25. Comment vérifier si une méthode python est liée ou non?
- 26. Le téléchargement FTP échoue sur le serveur virtuel distant mais fonctionne parfaitement sur la configuration locale
- 27. Comment vérifier si un lien est actif ou non?
- 28. Deatails de serveur FTP selon le domaine
- 29. Comment vérifier si un fichier existe en javascript?
- 30. Existe-t-il un moyen de vérifier si l'email est EXISTED en utilisant php?
Génial, cela fonctionne aussi avec file_exists. – davethegr8
Cette méthode peut-elle utiliser un tampon/connexion FTP préexistant? Si cela était possible, quelle syntaxe devrait être utilisée? Disons que nous avons déjà fait '$ ftp_buffer = ftp_connect ($ ftp_host);' et ftp_login ($ ftp_buffer, $ ftp_user, $ ftp_pass) ;, alors pourrions-nous faire quelque chose le long de 'is_dir ('ftp: example.com/some/dir/path '); '? –
@MajidFouladpour: Non, c'est complètement différent de l'extension FTP, et ça ne coopère pas. http://php.net/manual/en/ref.ftp.php – Piskvor