Загруженный файл не имеет владельца файла (используя move_uploaded_file в PHP)

Я использую функцию move_uploaded_file для загрузки файлов. Файлы перемещаются в нужный каталог, и я вижу его физическое существование, но не могу их открыть. Я получаю сообщение об ошибке «Отказано в доступе». Я просматриваю свойства файла и обнаружил, что у него нет владельца.

Кстати, я использую IIS на Windows 2008.

Проверяю разрешения, все настроено правильно. Пользователь, запускающий веб-службу, имеет полные права администратора.

Кроме того, я заменил функцию move_uploaded_file на функцию copy() и смог получить доступ к файлу. У него также был пользователь, управляющий сервером, в качестве его владельца.

Что, черт возьми, может быть не так?

Спасибо, я ценю вашу помощь.

ОБНОВЛЕНИЕ: после перемещения файла я попытался установить разрешения с помощью chmod($filename,0655), но это тоже не сработало.

ОБНОВЛЕНИЕ 2 (решение): Хорошо, ребята, я разобрался. Системный администратор не установил upload_tmp_dir. Это сработало, как только мы добавили путь.

Исходный код:

         // Check if file was uploaded
     if(isset($_FILES['formname']) && $_FILES['formname']['size'] > 8){
         $displayName = $_FILES['formname']['name'];
            $displayName = unixfilename(basename($displayName));

            $tempName = $_FILES['formname']['tmp_name'];

         $filename = $_FILES['formname']['name'];
         $fileType = substr($filename, strrpos($filename,".")+1);
         $filename = substr($filename,0,strrpos($filename,".")) . date("_Ymd_His") . ".$fileType"; // Add unique identifier
         $filename = unixfilename(basename($filename)); 

         $destinationPath = "xx\yy\zz\\";

         // Check if the file is of a valid type
         if($fileType == "txt"){
             // Check if file exists in processor folder
             if(!file_exists($destinationPath.$filename)){
                if(move_uploaded_file($tempName,$destinationPath.$filename)){
                    if(file_exists($destinationPath.$filename)){
 // success

person Kel    schedule 01.11.2010    source источник


Ответы (2)


проверьте, кто является пользователем, который на самом деле выполняет загрузку

echo exec('whoami');
person zod    schedule 01.11.2010

В дополнение к установке upload_tmp_dir в вашем файле php.ini убедитесь, что указанный вами каталог доступен для записи PHP.

Если вы используете диспетчер PHP в IIS, он по умолчанию устанавливает upload_tmp_dir на C:\Windows\Temp, который по умолчанию для меня не был доступен для записи процессом PHP.

person Matt Mombrea    schedule 10.05.2017