readdir не получает загруженный файл от move_uploaded_file

Мне нужно загрузить файл на мой сервер из поля входного файла, а затем сделать копию папки (файл находится в подпапке) на другой сервер, использующий 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");
?>

2

Решение

Опендир не является рекурсивным. если вы поместите файл в img subdir, вам нужно прочитать этот каталог, чтобы получить ваш файл. Вы читаете каталог внутри переменной $ folder, но ваш перемещенный файл находится в

$folder ."/img"

Вы можете посмотреть пример 4 официальной документации для чтения рекурсивного каталога

http://php.net/manual/en/function.opendir.php

0

Другие решения

Прежде всего, вы можете загрузить свой файл со статическим назначением, где все папки уже существуют? Пример:

move_uploaded_file($_FILES['logo']['tmp_name'], 'MyFolder/img/logo.png');

В моем случае мне пришлось сделать много тестов на моем веб-сервере с абсолютными URL-адресами (123/456 / myweb / public_html / img /) и относительными URL-адресами (img /).

Кстати, класс загрузки (UploadHandler.php) из плагина загрузки файлов jQuery (https://blueimp.github.io/jQuery-File-Upload/) очень полезно при загрузке изображений.

0

По вопросам рекламы [email protected]