Система загрузки файлов PHP - PullRequest
0 голосов
/ 16 февраля 2012

Эй, у меня есть система загрузки файла. У меня есть сценарий , который я нашел в Интернете, и, кажется, он хорошо работает.

Вот код PHP:

 if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) 
{
    //Check if the file is JPEG image and it's size is less than 350Kb
    $filename = basename($_FILES['uploaded_file']['name']);
    $ext = substr($filename, strrpos($filename, '.') + 1);
    if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && ($_FILES["uploaded_file"]["size"] < 350000)) 
    {
        //Determine the path to which we want to save this file
            $newname = dirname(__FILE__).'upload/'.$filename;
            //Check if the file with the same name is already exists on the server
        if (!file_exists($newname)) 
        {
            //Attempt to move the uploaded file to it's new place
            if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname))) 
            {
                echo "It's done! The file has been saved as: ".$newname;
            } 
            else 
            {
                echo "Error: A problem occurred during file upload!";
            }
            }
        else
        {
            echo "Error: File ".$_FILES["uploaded_file"]["name"]." already exists";
            }
    } 
    else 
    {
         echo "Error: Only .jpg images under 350Kb are accepted for upload";
    }
} 
else 
{
     echo "Error: No file uploaded";
}

Нет, это нормально работает, если я хочу загрузить файл jpg. Но я хочу иметь возможность поместить файл в другой каталог. потому что на данный момент страница загрузки предназначена для пользователей с правами администратора, они находятся на поддомене с именем admin.mysite.com, но место, куда я хочу, чтобы файл находился, находится в разделе для пользователей mysite.com/members/video/

Теперь есть несколько битов кода, которые не на 100% похожи на "dirname ( FILE )", что это делает? Я предположил, что он получит текущие местоположения, но я изменил всю строку, где это выглядит так:

$newname = '../mysite.com/members/video/'.$filename; 

и

$newname = 'http://www.mysite.com/members/video/'.$filename; 

Но ничего. Кто-нибудь знает, как я могу изменить этот код, чтобы я мог скопировать файл в новый каталог?

Спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 16 февраля 2012

В целях безопасности вам следует

  1. Поместить файл в место, недоступное для общей сети./ home / uploadedfiles /
  2. Изменить имя файла.Сохраните имя этого файла в базе данных и не позволяйте конечным пользователям видеть это фактическое имя.
0 голосов
/ 16 февраля 2012

dirname (_ FILE _) возвращает текущий каталог файла, в данном случае file_upload.php

Итак, в этом сценарии $ newname сохранит загруженный файл в /upload/name_of_new_file_uploaded.ext.

Вы должны попытаться использовать realpath () вместо dirname. Как это:

$newname = realpath("../../members/video/") . $filename;

в зависимости от вашей файловой структуры, добавьте / удалите точки.

PS: не забудьте изменить права доступа к папке, чтобы php мог писать в нее.

0 голосов
/ 16 февраля 2012

Измените $ newname на любое другое местоположение!

//Determine the path to which we want to save this file
$newname = dirname(__FILE__).'upload/'.$filename;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...