我需要从输入文件字段将文件上传到我的服务器,然后使用FTP将文件夹(该文件在其子文件夹中)的副本复制到另一台服务器。
我使用move_uploaded_file
将文件上传到我的服务器,然后使用readdir
迭代文件夹并使用FTP连接复制文件,但上传的文件不能复制。
我写了readdir
获取的所有文件,以便知道它是否是readdir
问题,并且我发现文件名未打印。我怎样才能获得该文件?我的代码如下:
<?php
/* Previous code here */
if ($_FILES['logo']['name'] != ""){
move_uploaded_file($_FILES['logo']['tmp_name'], $folder. '/img/logo.png');
}
/* more code here */
function subirFTP($conn_id, $dirOrigen, $dirDestino){
$vcarga = opendir($dirOrigen);
while(false !== ($file = readdir($vcarga))){
if ($file != '.' && $file != '..'){ //Si no es la carpeta raíz ni el padre
echo "Copiando: " . $file;
if (!is_dir($dirOrigen . $file)){ //Si es un archivo
ftp_put($conn_id, $dirDestino . $file, $dirOrigen . $file, FTP_BINARY);
echo " - HECHO<br>";
}
else{ //Si es un directorio
echo "<br>";
ftp_mkdir($conn_id, $dirDestino . $file);
ftp_chdir($conn_id, $file);
subirFTP($conn_id, $dirOrigen . $file . "/", "./");
ftp_chdir($conn_id, '..');
}
}
}
closedir($vcarga);
}
function copiaFTP($host, $user, $pass, $dirFTP, $codigo, $carpeta){
// establecer una conexión básica
$conn_id = ftp_connect($host);
// iniciar una sesión con nombre de usuario y contraseña
$login_result = ftp_login($conn_id, $user, $pass);
ftp_pasv($conn_id, true);
ftp_set_option($conn_id, FTP_TIMEOUT_SEC, 3600);
// movemos a la carpeta raiz
ftp_chdir($conn_id, $dirFTP);
// creamos la carpeta para el ilink
ftp_mkdir($conn_id, $codigo);
ftp_chdir($conn_id, $codigo);
// copiamos los archivos
subirFTP($conn_id, $carpeta . "/", "./");
// cerrar la conexión ftp
ftp_close($conn_id);
}
$host = $_POST['ftp_host'];
$user = $_POST['ftp_user'];
$pass = $_POST['ftp_pass'];
$ftp_dir = $_POST['ftp_dir'];
copiaFTP($host, $user, $pass, $ftp_dir, $codigo, "midir");
?>
答案 0 :(得分:0)
opendir不是递归的。如果你把文件放在img subdir下,你需要阅读这个目录来获取你的文件。您读取$ folder变量中的目录,但您移动的文件位于
下$folder ."/img"
您可以查看用于读取递归目录的官方文档的示例4
答案 1 :(得分:0)
首先,您可以使用静态目标上传文件,其中所有文件夹都已存在吗?例如:
move_uploaded_file($_FILES['logo']['tmp_name'], 'MyFolder/img/logo.png');
在我的案例中,我必须在我的网络服务器上使用绝对URL(123/456 / myweb / public_html / img /)和相对URL(img /)进行大量测试。
顺便说一句,上传图片时,jQuery文件上传插件(https://blueimp.github.io/jQuery-File-Upload/)中的上传类(UploadHandler.php)非常有用。