найти расширение файла при загрузке? - PullRequest
1 голос
/ 04 января 2011

что я пытаюсь сделать здесь, получить текущий файл и затем загрузить его, найти расширение файла и переименовать его! и повторить результат !! но это кажется неправильным, и я не знаю, какая часть !! : ((

    $fieldname = $_REQUEST['fieldname'];
    $uploaddir = 'uploads/';
    $uploadfile = $uploaddir . basename($_FILES[$fieldname]['name']);


    if (move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadfile)) {

    //find the extension
     $extension= pathinfo($uploadfile);

    //rename the file
      rename ($uploadfile, "newfile.".$extenion['extension']."");
 echo "uploads/newfile.'".$extension['extension']."'"; // "success"

}

Ответы [ 3 ]

2 голосов
/ 04 января 2011

Я думаю, что вы должны сделать что-то вроде этого:

$fieldname = $_POST['fieldname']; // don't use $_REQUEST
$extension = pathinfo($_FILES[$fieldname]['name'], PATHINFO_EXTENSION);

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . 'newfile.'.$extension;

if (move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadfile)) {
    // success
}

move_uploaded_file уже "переименовывает" файл, нет необходимости вызывать rename вручную.Просто сделайте это за одну операцию.

Вы, вероятно, также заметили, что я передал PATHINFO_EXTENSION pathinfo, поскольку вам нужно только расширение, а не полная информация о пути.Наконец, я использовал $_POST вместо $_REQUEST.Вы не должны использовать $_REQUEST, если вы действительно не знаете, что делаете.Это может привести к непредвиденным изменениям переменных в файлах cookie или сеансах, например.

0 голосов
/ 04 января 2011
$fieldname = $_POST['fieldname']; #its never going to be a GET! ..not sure y u need this though, the file field should hold the array key, but anyway...
#get the extension by removing everything before the last dot
$extension = preg_replace('@.+\.@', '', $_FILES[$fieldname]['name']);
$newname = "newfile.".$extension;

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . $newname;

if (move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadfile)) {

 echo "$uploadfile"; // "success"

}

Не проверено, но логика прямо в точку.

0 голосов
/ 04 января 2011

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

$fieldname = $_REQUEST['fieldname'];
$tmpfile = $_FILES[$fieldname]['tmp_name'];

$info = pathinfo($tmpfile);
$filename = 'newfile.' . $info['extension'];

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . $filename;

if(move_uploaded_file($tmpfile, $uploadfile)) {
    echo $uploadfile;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...