php上傳文件move,php上傳文件限制

本文目錄一覽:

php 圖片上傳move_uploaded_file 出錯

上傳文件不存在。很可能是PHP臨時文件夾不存在導致的。

?php

/*

* 文件上傳類

*/

class Uploads{

//上傳文件

private $uploadFile;

//上傳文件擴展名

private $ext = array(‘jpeg’,’jpg’,’gif’,’png’);

//上傳文件大小

private $size = 5000000;

//上傳文件目錄

private $uploadDir = ‘./uploads/’;

//是否自定義名稱,默認FALSE

private $newName = ”;

//上傳文件是否可讀,默認為TRUE

private $isRead = TRUE;

//上傳文件是否可寫,默認為TRUE

private $isWrite = TRUE;

//上傳信息

private $info;

/*

* 文件上傳類初始化

*/

public function __construct($newName=”,$ext=”,$size=”,$dir=”,$isRead=TRUE,$isWrite=TRUE){

$this-ext = empty($ext)?$this-ext:$ext;

$this-size = empty($size)?$this-size:$size;

$this-dir = empty($dir)?$this-uploadDir:$dir;

$this-newName = $newName;

$this-isRead = $isRead?TRUE:FALSE;

$this-isWrite = $isWrite?TRUE:FALSE;

}

/*

* 處理上傳文件

*/

public function doUpload(){

$this-checkData();

$this-checkFile() or $this-error();

$this-checkExt() or $this-error();

$this-checkSize() or $this-error();

$this-checkError() or $this-error();

$this-checkDir() or $this-error();

$this-upload() or $this-error();

return $this-info[‘msg’];

}

/*

* 處理上傳文件數據

*/

public function checkData(){

$num = 0;

$newArr = array();

foreach($_FILES as $v){

if(is_array($v[‘name’])){

$count = count($v[‘name’]);

for($i=0; $i$count; $i++){

foreach($v as $m=$n){

$newArr[$num][$m] = $n[$i];

}

$num++;

}

}else{

$newArr[$num] = $v;

$num++;

}

}

$endArr = array();

foreach($newArr as $v){

if($v[‘name’] != ”){

$endArr[]=$v;

}

}

$this-uploadFile = $endArr;

}

/*

* 檢測上傳文件是否存在

*/

private function checkFile(){

if(empty($this-uploadFile)){

$this-info[‘error’] = ‘上傳文件不得為空!!!’;

return FALSE;

}

return TRUE;

}

/*

* 檢測上傳文件類型是否合法

*/

private function checkExt(){

if(!is_array($this-ext)){

$this-ext = explode(‘,’, $this-ext);

}

foreach($this-uploadFile as $v){

$ext = strtolower(substr(strrchr(basename($v[‘name’]),’.’),1));

if(!in_array($ext,$this-ext)){

$this-info[‘error’] = ‘上傳文件類型非法,禁止上傳!!!’;

return FALSE;

}

}

return TRUE;

}

/*

* 檢測上傳文件大小

*/

private function checkSize(){

foreach($this-uploadFile as $v){

if($v[‘size’]$this-size){

$this-info[‘error’] = ‘上傳文件體積過大,上傳失敗!!!’;

return FALSE;

}

}

return TRUE;

}

/*

* 檢測文件上傳錯誤代碼

*/

private function checkError(){

foreach($this-uploadFile as $v){

switch($v[‘error’]){

case 0:

return TRUE;

break;

case 1:

$this-info[‘error’] = ‘上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值,上傳失敗!!!’;

return FALSE;

break;

case 2:

$this-info[‘error’] = ‘上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值,上傳失敗!!!’;

return FALSE;

break;

case 3:

$this-info[‘error’] = ‘文件只有部分被上傳!!!’;

return FALSE;

break;

case 4:

$this-info[‘error’] = ‘沒有文件上傳!!!’;

return FALSE;

break;

}

}

return TRUE;

}

/*

* 檢測上傳文件夾是否存在

*/

private function checkDir(){

if(!file_exists($this-uploadDir)){

mkdir($this-uploadDir,0777,true);

}

if(!is_writeable($this-uploadDir)){

$this-info[‘error’] = ‘上傳目錄沒有寫入權限,上傳失敗!!!’;

return FALSE;

}

return TRUE;

}

/*

* 上傳文件

*/

private function upload(){

date_default_timezone_set(‘PRC’);

//檢測文件是否自定義名稱

$name = empty($this-newName)?date(‘Ymd_His’):$this-newName;

foreach($this-uploadFile as $k=$v){

$upload_path = $this-uploadDir.$name.’_’.($k+1).strrchr(basename($v[‘name’]),’.’);

$upload_path = iconv(‘UTF-8′,’gbk’,$upload_path);

if(is_uploaded_file($v[‘tmp_name’])){

if(move_uploaded_file($v[‘tmp_name’], $upload_path)){

if($this-isRead $this-isWrite){

chmod($upload_path,0777);

}else if($this-isRead !$this-isWrite){

chmod($upload_path,0444);

}else if(!$this-isRead $this-isWrite){

chmod($upload_path,0222);

}else{

chmod($upload_path,0000);

}

$this-info[‘msg’]=array(‘type’=1,’success’=’文件上傳成功’,’path’=iconv(‘gbk’,’UTF-8′,$upload_path));

}else{

$this-info[‘error’] = ‘文件上傳失敗!!!’;

return FALSE;

}

}

}

return TRUE;

}

/*

* 上傳成功的方法

*/

public function success(){

echo $this-info[‘msg’][‘success’];

}

/*

* 上傳文件錯誤方法

*/

public function error(){

echo $this-info[‘error’];

die;

}

這是我寫的PHP類,你可以參考一下。有什麼特殊需要的,你可以告訴我一下,完善一下上傳類。

php上傳文件為什麼要使用move

上傳文件默認存儲在臨時目錄,臨時目錄的文件是不能長久保存的,因此必須移動到確定的目錄以長久保存上傳的文件。

PHP上傳文件move_uploaded_file()函數路徑問題

兩張路徑肯定是不同的

第一個路徑,無論php文件在什麼地方,都是指向那個路徑目錄

而第二個就不一定了,得看php文件在哪裡!

第二種,如果指向的目錄不存在,那當然上傳就不會成功!

原創文章,作者:ERAF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/133701.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ERAF的頭像ERAF
上一篇 2024-10-04 00:00
下一篇 2024-10-04 00:00

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台服務器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24
  • PHP導出Excel文件

    一、PHP導出Excel文件列寬調整 當我們使用PHP導出Excel文件時,有時需要調整單元格的列寬。可以使用PHPExcel類庫中的setWidth方法來設置單元格的列寬。下面是…

    編程 2025-04-24
  • php擴展庫初探

    一、什麼是php擴展庫? PHP擴展庫(PHP extension)是一些用C語言編寫的動態鏈接庫,用於擴展PHP的功能。PHP擴展庫使得PHP可以與各種數據庫系統相連、SMTP、…

    編程 2025-04-23

發表回復

登錄後才能評論