繁体   English   中英

readdir不会通过move_uploaded_file上载文件

[英]readdir doesn't get uploaded file by 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");
?>

opendir不是递归的。 如果将文件放在img子目录下,则需要阅读此目录以获取文件。 您在$ folder变量中读取了目录,但移动的文件位于

$folder ."/img" 

您可以查看官方文档的示例4以递归方式读取目录

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

首先,您可以使用所有文件夹都已存在的静态目标上载文件吗? 例:

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

就我而言,我必须在Web服务器上使用绝对URL(123/456 / myweb / public_html / img /)和相对URL(img /)进行大量测试。

顺便说一下,当您上传图像时,来自jQuery File Upload Plugin( https://blueimp.github.io/jQuery-File-Upload/ )的Upload类(UploadHandler.php)非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM