php move_uploaded_file ()

Поэтому я тестирую скрипт move_uploaded_file () php с веб-сайта w3schools http://www.w3schools.com/php/php_file_upload.asp . Вот мой код.

if ($_FILES["file"]["size"] < 2000000) { if ($_FILES["file"]["error"] > 0) echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("/var/www/upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } elseif(move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/upload/".$fileName)) echo "Stored in: " . "/var/www/upload/".$fileName; } } else echo "Invalid file"; 

Проблема заключается в if(move_uploaded_file($_FILES["file"]["tmp_name"],"/var/www/upload/".$fileName)) все время возвращает false, но, похоже, файл хранится в папке tmp на сервере (например: /tmp/php8rrKoW ). Когда я проверяю папку tmp файла там нет. (Он должен быть удален после завершения выполнения скрипта.) Я также не вижу папку /php8rrkoW . Я не уверен, что он должен быть там. Я установил разрешение для папки tmp и /var/www/upload/ to 777 с помощью chmod , но я не уверен, должен ли я установить владельца apache . Поэтому я хочу знать, почему файл не копируется в /var/www/upload и если есть способ проверить это.

Вот базовый класс загрузки изображений, который я сделал для другого вопроса на днях, прост в использовании, возможно, вы найдете его интересным.

 <?php error_reporting(E_ALL); //Will help you debug a [server/path/permission] issue Class uploadHandler{ public $upload_path; public $full_path; public $name; public $size; public $ext; public $output; public $input; public $prefix; private $allowed; function upload(){ if($_SERVER['REQUEST_METHOD'] == 'POST'){ if(isset($_FILES[$this->input]['error'])){ if($_FILES[$this->input]['error'] == 0){ $this->name = basename($_FILES[$this->input]['name']); $file_p = explode('.', $this->name); $this->ext = end($file_p); $this->full_path = rtrim($this->upload_path,'/').'/'.preg_replace('/[^a-zA-Z0-9.-]/s', '_', $this->prefix.'_'.$file_p[0]).'.'.$this->ext; $info = getimagesize($_FILES[$this->input]['tmp_name']); $this->size = filesize($_FILES[$this->input]['tmp_name']); if($info[0]>$this->allowed['dimensions']['width'] || $info[1] > $this->allowed['dimensions']['height']){ $this->output = 'File dimensions too large!'; }else{ if($info[0] > 0 && $info[1] > 0 && in_array($info['mime'],$this->allowed['types'])){ move_uploaded_file($_FILES[$this->input]['tmp_name'],$this->full_path); $this->output = 'Upload success!'; }else{ $this->output = 'File not supported!'; } } }else{ if($_FILES[$this->input]['error']==1){$this->output = 'The uploaded file exceeds the upload_max_filesize directive!';} if($_FILES[$this->input]['error']==2){$this->output = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in our HTML form!';} if($_FILES[$this->input]['error']==3){$this->output = 'The uploaded file was only partially uploaded!';} if($_FILES[$this->input]['error']==4){$this->output = 'No file was uploaded!';} if($_FILES[$this->input]['error']==6){$this->output = 'Missing a temporary folder!';} if($_FILES[$this->input]['error']==7){$this->output = 'Failed to write uploaded file to disk!';} if($_FILES[$this->input]['error']==8){$this->output = 'A PHP extension stopped the file upload!';} } } } } function setPath($var){ $this->upload_path = $var; } function setAllowed($var=array()){ $this->allowed = $var; } function setFilePrefix($var){ $this->prefix = preg_replace('/[^a-zA-Z0-9.-]/s', '_', $var); } function setInput($var){ $this->input = $var; } } //Start class $upload = new uploadHandler(); //Set path $upload->setPath('./'); //Prefix the file name $upload->setFilePrefix('user_uploads'); //Allowed types $upload->setAllowed(array('dimensions'=>array('width'=>200,'height'=>200), 'types'=>array('image/png','image/jpg','image/gif'))); //form property name $upload->setInput('myfile'); //Do upload $upload->upload(); //notice if(isset($upload->output)){ echo $upload->output; } ?> <form action="" method="POST" enctype="multipart/form-data"> <!--1 MB = 1048576 bytes--> <input type="hidden" name="MAX_FILE_SIZE" value="1048000" /> <p>Upload your image:<input type="file" name="myfile"><input type="submit" value="Upload"></p> </form> 

Кажется, что вы должны использовать ./upload/ вместо / var / www / upload /, поскольку вы уже находитесь в главном каталоге доступного веб-сайта.

Вы также можете обратиться к http://www.tizag.com/phpT/fileupload.php или API: http://php.net/manual/en/function.move-uploaded-file.php

дай мне знать, если это работает

Целевой каталог, в который вы хотите переместить файлы, должен быть доступен для записи пользователем веб-сервера. Также не забывайте, что некоторые web-серверы работают внутри changeroot, поэтому части пути назначения могут не понадобиться. В справочнике по PHP также говорится, что вы должны проверить форму HTLM, чтобы убедиться, что это enctype = 'multipart / form-data'.

И, наконец: где определено $ filename?

Ваш путь должен состоять из '/ home / usr-name'

Попробуйте добавить '/ home / your-username' в начало '/ var / www / upload'.

Чтобы получить представление, добавьте info.php в свой корневой каталог, откройте его в браузере и посмотрите в разделе «Загруженный файл конфигурации».