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

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

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

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

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

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

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

UPDATE: После перемещения файла я попытался установить разрешения с помощью 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

Ответы [ 3 ]

0 голосов
/ 02 ноября 2010

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

echo exec('whoami');
0 голосов
/ 10 мая 2017

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

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

0 голосов
/ 02 ноября 2010
...