move_uploaded_file():无法移动

时间:2016-02-29 14:13:14

标签: php uploadify

$targetFolder = '/LP/media/image'; // Relative to the root

if (!empty($_FILES)) {
    $tmpName = $_FILES['Filedata']['tmp_name'];
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
    //$ext = end(explode('.', $_FILES['Filedata']['name']));
    $targetFile = rtrim($targetPath, '/') . '/' . $_FILES['Filedata']['name'];

    // Validate the file type
    echo $targetFile;
    $fileParts = pathinfo($_FILES['Filedata']['name']);
    $fileTypes = array('jpg', 'jpeg', 'png','JPG','JPEG','PNG'); // File extensions
    if (in_array($fileParts['extension'], $fileTypes)) {
        move_uploaded_file($tmpName, $targetFile);
        //echo '1'.$fileParts['filename'];
        // echo $fileParts['filename'];

        $aimage = file_get_contents($tmpName);

       // echo '<img src="data:image/jpeg;base64,' . base64_encode($aimage) . '" width=\'100\' height=\'100\' />';
    } else {
        echo 'Invalid file type.';
    }
}
?>

相同的代码在我的本地计算机上运行,​​但部署在远程服务器上。然后低于错误。

  

/home/username/public_html/LP/media/image/default_avatar.png
  警告:move_uploaded_file(/home/username/public_html/LP/media/image/default_avatar.png):无法打开流: / home / username / public_html /中没有此类文件或目录uploadify / gallery.php 在线 28

     

警告:move_uploaded_file():无法将'/ tmp / phpoe0fBd'移动到 / home中的'/home/username/public_html/LP/media/image/default_avatar.png' / username/public_html/uploadify/gallery.php 在线 28

3 个答案:

答案 0 :(得分:0)

您提供的代码并不清楚告诉问题的根源,因此我将为您提供一个完整的代码段,您可以从中获得更好的结论。

在这种情况下,我使用一个名为&#34; documents&#34;的formdata从JavaScript发送一个数组到我的PHP文件。我还修改了文件的名称,使其成为:&#34; filename_optional_ $ i(int)&#34;。

for($i=0; $i<count($_FILES['documents']['name']); $i++){
    list($dump, $extention) = explode(".", (string)$_FILES['documents']['name'][$i]);
    $document_name = $file_name.'_optionnel'.$i;
    if(($_FILES['documents']['size'][$i] < 500000)){
        if ($_FILES['documents']["error"][$i] > 0){
            echo 'Erreur.';
        }else{
            if(file_exists( $directory_path . $document_name . "." . $extention)) {
                echo 'Le fichier existe déjà.';
            }else{
                $sourcePath = $_FILES['documents']['tmp_name'][$i];
                $targetPath = $directory_path . $file_name ."/". $document_name . "." . $extention;
                array_push($attachments, $targetPath);
                move_uploaded_file($sourcePath, $targetPath);
            }
        }
    }else{
        echo 'Le fichier est trop grand.';
    }
}

确保您的路径变量指向正确的文件夹。比如说,如果您希望文件转到折叠图像,则必须执行以下操作:

path_to_folder / images / 而不是 path_to_folder / images

编辑:

以下是文件名和目录路径变量的样子:

/*$nom, $prenom and $user_id come from database values*/
$file_name = $nom."_".$prenom."_".$user_id;

$directory_path = dirname( __FILE__ ) . '/user_docs/';

/* Create mask */ 
$oldmask = umask(0);

/* Create the folder for user */
$directory = mkdir($directory_path.$file_name, 0777);

/* redo the mask */
umask($oldmask);

我对这个网站很陌生,但我能为您做的最少的事情就是为您提供此代码以帮助您解决问题。我已经写了一些评论来指导你完成。

Full code source for upload

答案 1 :(得分:0)

我有这个小功能(不是最好的)但它“工作”在我的情况下必须移动上传的文件或它们被删除,所以我将它们移动到我的PHP文件旁边的文件夹并回显链接到它(你可以把它移到任何其他地方,重命名或其他:

function save_file() {
    $gs_name = $_FILES['uploaded_files']['tmp_name'];
    if(is_readable($gs_name) && $_FILES['uploaded_files']['error'] == 0) { //Tells whether a file exists and is readable. no error during upload (0)
        move_uploaded_file($gs_name, 'upload/'.$_FILES['uploaded_files']['name']);

        echo "saved.<a href='upload/".$_FILES['uploaded_files']['name']."' target='_blank'/>".$_FILES['uploaded_files']['name']."</a><br/>";
        echo "<p><a href='upload/' target='_self'>Uploaded files.</a></p>";
        echo "<p><a href='upload_file.php' target='_self'>Continue...</a></p>";
    }
}

关于它的重要部分是:

if(is_readable($gs_name) && $_FILES['uploaded_files']['error'] == 0)

它允许它检查文件是否可以被复制,如果没有可能导致文件损坏的错误...我指向这个因为路径似乎没问题,其他已经提到文件和文件夹权限。

答案 2 :(得分:0)

尝试以下代码。识别错误应该很容易:

<?php

$upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/LP/media/image';

if (isset($_FILES['Filedata'])) {

    $file = $_FILES['Filedata'];

    if ($file['error'] !== UPLOAD_ERR_OK) {
        echo 'error: ', $file['error'], PHP_EOL;
        exit;
    }

    $allowed = array('jpg', 'jpeg', 'png');
    $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
    if (!in_array($extension, $allowed)) {
        echo 'error: invalid file extension', PHP_EOL;
        exit;
    }

    $target = $upload_dir . '/' . basename($file['name']);
    if (!move_uploaded_file($file['tmp_name'], $target)) {
        echo 'error: move_uploaded_file failed', PHP_EOL;
        print_r(error_get_last());
        exit;
    }

    echo 'success', PHP_EOL;
    echo $target, PHP_EOL;
}