¿Hay alguna forma de comprobar si existe una carpeta en el servidor que utiliza la funcionalidad PHP Ftp?¿Cómo verificar utilizando la funcionalidad PHP FTP si la carpeta existe en el servidor o no?
Respuesta
Para PHP 5:
$folder_exists = is_dir('ftp://user:[email protected]/some/dir/path');
http://php.net/manual/en/function.is-dir.php: "A partir de PHP 5.0.0, esta función también se puede utilizar con algunas URL."
http://php.net/manual/en/wrappers.ftp.php: [Soporte] "A partir de PHP 5.0.0: Tamaño del archivo(), tipo de archivo(),() file_exists, is_file(), y is_dir()"
No existe la función 'exists' para las conexiones ftp en php.
Usted podría intentar ftp_chdir y comprobar el resultado
esto le sumergirse en carpeta que está comprobando, que no sirve para nada adicional acción, si solo quiere comprobar si existe directorio, entonces tendrá t o subir un nivel con 'ftp_chdir' nuevamente para volver – vladkras
topamos con esta pregunta a partir de 2009 y se encontró esa pregunta insatisfactoria para mí. He investigado poco por mi cuenta y he encontrado un pequeño cambio para ese tema.
Así que si se encuentra el ftp_nlist * * bruja función devuelve una matriz de cuerda con archivos y carpetas nombres de brujas existen bajo el directorio FTP actual, y luego simplemente he comprobado en virtud de la matriz (con bucle foreacah) si la carpeta o archivo que buscamos existe allí y si se ha creado un nuevo método ifExist.
se puede leer más en php.net: http://php.net/manual/en/function.ftp-nlist.php
otra opción para el marco YII usuarios de la extensión de su ftp que enmascara el lib php ftp y hace que sea aún más fácil trabajar con un servidor ftp del código
Espero que encuentres útil.
Escribí algo similar, pero usando la función 'in_array'. –
ftp_mdtm() obtiene la última hora de modificación para un archivo remoto. Devuelve la última hora modificada como una marca de tiempo Unix en caso de éxito, o -1 en caso de error. Tenga en cuenta que ftp_mdtm() no funciona con directorios. Entonces, si obtenemos -1, tal vez el archivo sea directorio.
Tenga en cuenta también que no todos los servidores admiten esta función.
para el control de varios archivos que es mejor utilizar ftp_chdir
en lugar de utilizar la función is_dir
/file_exists
con envolturas de URL, porque hay bastante lento (archivo foreach no se debe abrir una nueva conexión 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;
}
}
Este script estuvo listo después de ~ 10 seg.
El mismo script que usa is_dir
y file_exists
necesita más de 45 seg.(Cada archivo tenía 10 carreras)
Prueba esto:
if (ftp_nlist($ftp_stream, $new_folder) == false) {
ftp_mkdir($ftp_stream, $new_folder);
}
La solución que funciona para mí:
if (!in_array($dirName.'/'.$something, $ftp->nlist($dirName))) {
// do something
}
Por modernos servidores FTP puede utilizar comandos MLST/MLSD para recuperar detallada información legible por máquina sobre archivos. Lea la página RFC https://tools.ietf.org/html/rfc3659#page-23 para obtener más información sobre este comando.
Aquí es código de ejemplo para determinar el tipo de nodo de sistema de archivos:
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);
Tenga en cuenta que no todos los servidores soporta comandos MLST. Por ejemplo, ftp.freebsd.org no :(
Yo tampoco estoy satisfecho con ningún artículo incluido uno aceptado. Tengo una conexión estándar (no de estilo OO en la respuesta de @ Lackeeee, que es la más cercana a la mía):
$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);
Aquí es una función para hacer esto. devuelve un simple true
o false
. también se ocupa de algunos casos extremos.
function isDir($connection, $dir)
{
$dir = trim($dir, '/');
$dir = '/' . $dir;
if ($dir === '/') {
return true;
}
return in_array($dir, ftp_nlist($connection, dirname($dir)));
}
- 1. ¿Cómo verificar si la sesión existe o no?
- 2. PHP mkdir() Función - Si la carpeta existe
- 3. Cómo usar SharpSVN para (rápidamente) verificar si existe una carpeta/archivo remoto en el servidor
- 4. ¿Cómo verificar si existe una restricción en el servidor Sql?
- 5. ¿Cómo puedo verificar si existe o no un recurso incrustado?
- 6. Crear un archivo en otro servidor utilizando la funcionalidad de archivo PHP
- 7. ¿Cómo verificar si existe una carpeta en Cocoa & Objective-C?
- 8. Programmatically Para verificar dll existe en Gac o no. Si es así, mostrarlo en la cuadrícula
- 9. Cómo verificar si el archivo existe en FTP antes de FtpWebRequest
- 10. Comprobación de la existencia de archivos en el servidor FTP
- 11. Cómo encontrar si existe una carpeta en la Bandeja de entrada y crear si no existe
- 12. ¿Cómo verificar un div existe o no?
- 13. ¿Cómo verificar el directorio existe o no en Linux.?
- 14. Cómo agregar http: // si no existe en la URL?
- 15. ¿Cómo hacer que Python verifique si el directorio ftp existe?
- 16. Si la sesión existe o no
- 17. ¿Cómo creo una carpeta en VB si no existe?
- 18. Reescribir ruta solo si el archivo/carpeta no existe
- 19. ¿Cuál es la mejor manera de verificar si el artículo existe o no ?: Seleccione Recuento (ID) O ¿Existe (...)?
- 20. "Crear tabla si no existe": ¿cómo verificar el esquema también?
- 21. EXTJS - ¿Cómo verificar si el elemento existe?
- 22. Crear carpeta si no existe en Google Drive
- 23. ¿Cómo puedo verificar si el archivo existe y, si no, matar la compilación?
- 24. Descargando una carpeta mediante FTP usando PHP
- 25. ¿La forma más rápida de verificar si un objeto existe en Core Data o no?
- 26. Crear una carpeta si no existe
- 27. ¿Cómo puedo verificar si un archivo existe en un servidor remoto usando Perl?
- 28. LINQ para verificar si existe ID en la lista
- 29. Comprobar si el archivo existe en el servidor remoto utilizando su URL
- 30. ¿Cómo puedo verificar para ver si PEAR está instalado en mi servidor o no?
Impresionante, esto también funciona con file_exists. – davethegr8
¿Podría este método usar un buffer/login de FTP preexistente? Si pudiera, ¿qué sintaxis debería usarse entonces? Digamos que ya hemos hecho '$ ftp_buffer = ftp_connect ($ ftp_host);' y 'ftp_login ($ ftp_buffer, $ ftp_user, $ ftp_pass);', entonces podríamos hacer algo a lo largo de 'is_dir ('ftp: example.com/some/dir/ruta '); '? –
@MajidFouladpour: No, esto es completamente diferente de la extensión de FTP, y no coopera. http://php.net/manual/en/ref.ftp.php – Piskvor