2016-09-12 5 views
0

У меня возникли проблемы с перемещением загруженных файлов, проблема, кажется, проблема с разрешениями, любая помощь будет высоко оценена. Я использую окна 10, и я меняю папку temp в php.ini на пользовательскую папку в каталоге xampp, и когда я проверяю эту папку temp, файл также не существует, поэтому кажется, что он даже не является закачанный им temp. Пожалуйста помоги.Windows 10 Загрузка файлов и разрешений php

class PortfolioItem extends DataBaseCommonObj{ 

protected static $table_name = 'portfolio_item'; 
protected static $db_fields = array('id','filename','mimetype','size','caption','job_id'); 

public $id; 
public $filename; 
public $mimetype; 
public $size; 
public $caption; 
public $job_id; 


private $temp_path; 
protected $upload_dir="_portfolio-items"; 
public $errors=array(); 

protected $upload_errors = array(
    // http://www.php.net/manual/en/features.file-upload.errors.php 
    UPLOAD_ERR_OK     => "No errors.", 
    UPLOAD_ERR_INI_SIZE => "Larger than upload_max_filesize.", 
    UPLOAD_ERR_FORM_SIZE => "Larger than form MAX_FILE_SIZE.", 
    UPLOAD_ERR_PARTIAL  => "Partial upload.", 
    UPLOAD_ERR_NO_FILE  => "No file.", 
    UPLOAD_ERR_NO_TMP_DIR => "No temporary directory.", 
    UPLOAD_ERR_CANT_WRITE => "Can't write to disk.", 
    UPLOAD_ERR_EXTENSION => "File upload stopped by extension." 
); 

public function attach_file($file){ 
    global $session; 
    if(!$file || empty($file) || !is_array($file)){ 
    $this->errors[] = 'no file was uploaded'; 
    return false; 
    }elseif ($file['error'] != 0) { 
    $this->errors[]=$this->upload_errors[$file['error']]; 
    return false; 
    }else { 
    $this->filename = basename($file['name']); 
    $this->temp_path = $file['tmp_name']; 
    $this->mimetype = $file['type']; 
    $this->size = $file['size']; 

    if(isset($session->message) && $session->message !== ''){ 
     $current_job = Job::find_by_id(intval($session->message)); 
     $this->job_id = $current_job->id; 
    } 
    return true; 
    } 
} 


defined('DS')?null:define('DS',DIRECTORY_SEPARATOR); 
defined('SITE_ROOT')?null:define('SITE_ROOT', DS.'mp_creations'); 
defined('INC_PATH')?null:define('INC_PATH', SITE_ROOT.DS.'includes'); 
defined('PUB_PATH')?null:define('PUB_PATH', SITE_ROOT.DS.'public'); 


public function save(){ 
    if(isset($this->id)){ 
    $this->update(); 
    }else{ 
    if(!empty($this->errors)){ 
     return false; 
    } 

    if(empty($this->filename) || empty($this->temp_path)){ 
     $this->errors[] = 'file path not available'; 
     return false; 
    } 

    $target_path = PUB_PATH.DS.$this->upload_dir.DS.$this->filename; 

    if(file_exists($target_path)){ 
     $this->errors[] = "the file {$this->filename} already exists"; 
     return false; 
    } 

    if(move_uploaded_file($this->temp_path,$target_path)){ 
     if($this->create()){ 
     unset($this->temp_path); 
     return true; 
     } 
    }else { 
     $this->errors[]='The file upload failed, possibly due to permission issues'; 
     return false; 
    } 
    } 
} 
+0

Предоставьте код, пожалуйста. Без него это просто волшебство – Andurit

+0

Насколько я знаю, файлы temp должны удалять по запросу. вы можете установить sleep() после файла move_uploaded_file и проверить файл в папке temp. – MoeinPorkamel

ответ

0

Файл будет удален из временного каталога в конце запроса, если он не был удален или переименован.

http://php.net/manual/en/features.file-upload.post-method.php 
+0

классный, но он не был перемещен, потому что его нет в целевой папке –

+0

Когда установлен этот $ this-> temp_path, дайте нам этот фрагмент кода – MoeinPorkamel

+0

изменить, чтобы показать установочный темп-путь, исходящий из $ _FILES в сообщении request –

0

Проблема, по-видимому, была в моих методах и не имеет ничего общего с разрешениями. Я использовал значения, хранящиеся в сеансе, чтобы перейти к функции move_uploaded_file(), как только я сделал это непосредственно из запроса POST, он работал нормально. Это значит, что move_uploaded_file() нужно вызвать из запроса POST? Кто-то хочет пролить свет на это, пожалуйста, сделайте так, как мне хотелось бы узнать, что происходит за кулисами.

Смежные вопросы