/**
*これは、アップロードされたファイルや写真などを処理するために使用されるファイルアップロードクラスであり、サムネイルを自動的に生成し、ウォーターマークを追加できます
*/
// +--------------------------------- ----------------------------------------
// ThinkPHP [ 私たちにはそれができますちょっと考えてみてください ]
// +------------------------------------------ ------ ------------------------
// 著作権 (c) 2009 http://thinkphp.cn すべての権利予約済みです。
// +- -------------------------------------- ------- ------------------
// ライセンス済み ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----- -------------------------------------------- ------ ---------------
// 作成者: hxsml
// +------ --- --------------------------------------------------- ---
// $ Id: UploadFile.class.php v1.0
/**
+------------------------------------------------ ----------------------------------
* ファイルアップロードクラス
*
* 修正:
* 複数アップロードする場合ファイル、ファイル情報はフォーム名をキーとした配列になります
+------------------------------------- -------- -----------------------------------
* @category ORG
* @package ORG
* @subpackage Net
* @author hxsml
* @version v1.0
+------------------------------------- -------- -------------------------------------- --------
*/
class UploadFile {//クラス定義の開始
// アップロードされるファイルの最大サイズ
Public $maxSize = - 1;
// 複数のファイルのアップロードをサポートするかどうか
public $supportMulti = true;
// アップロードを許可するファイルの接尾辞
// 接尾辞のチェックを行わずに空白のままにしておきます
public $allowExts = array();
// 許可されるファイルの種類アップロードする
// チェックせずに空白のままにする
public $allowTypes = array();
// アップロードした画像にサムネイル処理を使用する
public $thumb = false;
// ギャラリークラスのパッケージパス
public $imageClassPath = 'ORG. Util.Image';
// サムネイルの最大幅
public $thumbMaxWidth;
// サムネイルの最大高さ
public $thumbMaxHeight;
// サムネイルのプレフィックス
public $thumbPrefix = 'thumb_';
public $thumbSuffix = '';
// サムネイル保存パス
public $thumbPath = '';
// サムネイルファイル名
public $thumbFile='';
// 元画像を削除するかどうか
public $thumbRemoveOrigin = false;
//圧縮された画像ファイルをアップロードします
public $zipImages = false;
// サブディレクトリへのファイルの保存を有効にする
public $autoSub = false;
// ハッシュ日付を使用してサブディレクトリを作成できます
public $subType = 'hash';
public $dateFormat = 'Ymd' ;
public $hashLevel = 1; // ハッシュのディレクトリレベル
// アップロードファイルの保存パス
public $savePath = '';
public $autoCheck = true; // 添付ファイルを自動的にチェックするかどうか
//同じ名前のファイルを上書きするかどうか
public $uploadReplace = false;
// アップロードするファイルの命名規則
// たとえば、時刻、uniqid、com_create_guid などにすることができます。
// パラメーターのない関数名である必要があります。カスタム関数を使用できます
public $saveRule = '';
// ファイルのアップロード ハッシュ ルール関数名
// たとえば、md5_file sha1_file などです。
public $hashType = 'md5_file';
/ / エラーメッセージ
private $error = '';
// アップロードに成功したファイル情報
private $uploadFileInfo ;
/**
+------------------------------------------------ ----------
* 建築機能
+------------------------------------- ------------------------
* @access public
+----------------- -- --------------------------------------
*/
public function __construct($maxSize='',$allowExts='', $allowTypes='',$savePath='',$saveRule='') {
if (!empty($maxSize) && is_numeric($maxSize)) {
$this->allowExts = array_map('strto lower' ,$allowExts);
}else {
$this->allowExts =explode(',',strto lower($allowExts));
}
}
if(!empty($allowTypes)) {
if(is _array($allowTypes)) {
$ this->allowTypes = array_map('strto lower',$allowTypes);
}else {
$this->allowTypes =explode(',',strto lower($allowTypes));
}
}
if(!empty ($saveRule)) {
$this->saveRule = $saveRule;
}else{
$this->saveRule=C('UPLOAD_FILE_RULE');
}
$this->savePath = $savePath;
}
/**
+------------------------------------------------ ----------
* ファイルをアップロードします
+--------------------------------- - ------------------------
* @access public
+---------------- -- --------------------------------------
* @param 混合 $name データ
* @param string $value データテーブル名
+-------------------------------------- -- ------------------
* @return string
+----------------------- -- ----------------------------------
* @throws ThinkExecption
+------ --- --------------------------------------------------- -
*/
private function save($file) {
$filename = $file['savepath'].$file['savename'];
if(!$this- >uploadReplace && is_file($filename)) {
// 不被盖同名文件
$this->error='文件已经存在!'.$filename;
return false;
}
// 如果是图像文件检测文件格式
if( in_array(strto lower($file['extension']),array('gif','jpg','jpeg','bmp','png','swf')) && false === getimagesize($file['tmp_name'])) {
$this->error = '非法画像文件';
return false;
}
if(!move_uploaded_file($file['tmp_name'], $this->auto_charset($filename,'utf-8','gbk'))) {
$this->error = '文件上传保存错误!';
return false;
}
if($this->thumb && in_array(strto lower($file['extension']),array('gif','jpg','jpeg','bmp',' png'))) {
$image = getimagesize($filename);
if(false !== $image) {
//是图像文件生成缩略图
$thumbWidth =爆発(',', $this->thumbMaxWidth);
$thumbHeight=explode(',',$this->thumbMaxHeight);
$thumbPrefix=explode( ',',$this->サムプレフィックス);
$thumbSuffix =explode(',',$this->thumbSuffix);
$thumbFile=explode(',',$this->thumbFile);
$thumbPath = $this-> ;thumbPath?$this->thumbPath:$file['savepath'];
// 画像缩略图
生成 import($this->imageClassPath);
$realFilename = $this->autoSub?basename($ file['savename']):$file['savename'];
for($i=0,$len=count($thumbWidth); $i $thumbname= $thumbPath.$thumbPrefix[$i].substr($realFilename,0,strrpos($realFilename, '.')).$thumbSuffix[$i].'.'.$file['extension'];
画像::thumb($filename,$thumbname,'',$thumbWidth[$i],$thumbHeight[$i],true);
}
if($this->thumbRemoveOrigin) {
// 生成缩略图之後删除原图
unlink($filename);
}
}
}
if($this->zipImags) {
// TODO 对图片压缩包在線上解压
}
return true;
}
/**
+------------------------------------------------ ----------
* すべてのファイルをアップロードします
+--------------------------------- - ------------------------
* @access public
+---------------- -- --------------------------------------
* @param string $savePath アップロード保存するファイルのパス
+------------------------------------------ ------ ----------
* @return string
+--------------------------- ----- ------------------------
* @throws ThinkExecption
+--------------- ----- --------------------------------------
*/
public function Upload($savePath ='') {
//如果不指定保存文件名,则由系统默认
if(empty($savePath))
$savePath = $this->savePath;
// 查上传目录
if(!is_dir($savePath)) {
// 查上传目录
if(is_dir(base64_decode($s) avePath))) {
$savePath=base64_decode($ savePath);
}else{
// 尝试创建目录
if(!mkdir($savePath)){
$this-& gt;error = '上传目录'.$savePath.'存在しない';
return false;
}
}
}Else {(if (! IS_WRITEable ($ savepath)) {
$ this-> error = 'アップロード ディレクトリ'. $ savepath.ay (); $isUpload アップロードされたファイル情報を取得します
ファイルを $key => として保存します。 $file) {
$key ;
>getSaveName($file); ファイルをアップロードします
if (! $ This- & gt; save ( $ file)) false を返します
if (fuSCion_exists ($ this- & gt; havetype)) {
$ Fun = $ This-& GT; $File [' hash'] = $fun($file['savepath'].$file['savename; '],'utf-8','gbk'));
unset を呼び出すためのファイル情報を保存します ($ file ['tmp_name'], $ file ['error']);
$ FileInfo [$ Key] = $ file; if($isUpload) {
使用アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト, false を返します。
/**
+------------------------------------------------ ----------
* 1 つのアップロード フィールドでファイルをアップロードすると、複数の添付ファイルがサポートされます
+-------------------------- --------------------------------
* @access public
+---------------------- --------------------------------------------------
* @param array $file アップロードファイル情報
* @param string $savePath アップロードファイルの保存パス
+--------------------------- ------ ----------------------------
* @return string
+--------- ------------------------------------------------------
* @throws ThinkExecption
+ -------------------------------------- ----- --------
*/
public function UploadOne($file,$savePath=''){
out through '' ' 「スルー」 スルー スルー スルー ‐ スルー ‐ ‐‐‐‐ ‐‐ と
to = $this->savePath;
$this->error = 'No' を返します。
}} else {
if (! Is_writeable ( $ savepath)) {
$ this-> '書き込み不可';
file ['name'])) {
$ key = array_keys ($ file)
$ count;
=
Count ($ file ['name']);
for ($ i = 0; $ i & lt; $ count; $i++) {
}else{
$fileArray[] = $ file; file['拡張子'] = $this->getExt($file['name']); H if ($ this-& gt; autocheck) {
if (! $ This-& gt; check ($ file) )
false を返します; file)) false を返します; $this->auto_charset( $file['savepath'].$file['savename'],'utf-8','gbk'));
}(Unset ($ File ['tmp_name'], $ file ['error']);
$ info [] = $ file;
}
// アップロードされたファイル情報を返す
Return $ info; This-& gt; error = 'ファイルのアップロードを選択しませんでした';
Return false;
}}
// 自動変換文字は配列変換をサポートします
プライベート関数 Auto_Charset ($ FCONTENTS, $ from = 'gbk', $ to to, = ' utf -8') {
$from = strtoupper($from) == 'UTF8' ? : $from;
$to = strtoupper($to) == 'UTF8' ? $ to; ($fContents as $key => $val) {
using using - $val、$from、$to);
}
else {
return $fContents;
}
}
/**
+------------------------------------------------ ----------
* アップロード ファイルの配列変数を正しい方法に変換します
* *
* 修正:
* name=upload[] を設定する場合、キーはファイルに対応する "upload" になります複数のファイルが含まれています
* * 数値インデックスでインデックス付けされた多次元配列、name=upload1...、キーは
* +-------- に対応する名前です-- ------------------------------------------
*@access private
+------ -------------------------------------- ------- --
* @param array $files アップロードされたファイル変数
+---------------------------- ------ -----------------------
* @return array
+-------------- ------------ -------------------------------------- --
*/
プライベート関数 dealFiles($files) {
$fileArray = array();
foreach ($files as $field => $file){
'])) {
$ key = array_keys ($ ファイル);
$ count
=
Count ($ ファイル ['名前']);
for ($ i = 0; $ i & lt; $ count; $i++) {
{
$ファイル配列[$フィールド |
/**
+------------------------------------------------ ----------
* エラーコード情報の取得
+-------------------------------- ------------------------
* @access public
+----------------- --------------------------------------------------
* @param string $errorNo エラー番号
+-------------------------------------- --------- ----------
* @return void
+------------------------ ---------- ------------------------
* @throws ThinkExecption
+------ ----------- -------------------------------------- -
*/
protected function error($errorNo) {
switch($errorNo) {
case 1:
$this->error = 'アップロードされたファイルが php.ini の Upload_max_filesize オプション制限を超えています値 '; a Break;
$ this-& gt; アップロード ファイルのサイズが HTML フォームの max_file_size オプションで指定された値を超えています '; '; :
$this->error = '一時フォルダーが見つかりません';
Break; $this->error = '不明なアップロードエラーです。';
($rule)) {//名前付けルールが定義されていない場合、ファイル名は変更されません
//$saveName = $filename['name'];
$saveName = 日付('YmdHis') .rand()。 "。$ filename ['endoct'];
} else {
}。ファイルを保存するサブディレクトリ
$ filename ['savename'] = $savename; e}
return $saveName($this ->dateFormat,time());休憩; 0;$i}
if(!is_dir($ file ['savepath']。$ dir)){
mk_dir($ file ['savepath']。$ dir);
/*ターサイズ'])) {
$ this-> エラー = 'アップロード ファイルのサイズが一致していません! ';
false を返します。 ';
Return false
}
// ファイルの種類を確認します
if (! $ This- & gt; checkext ($ file [' extension ']) {
$ this- & gt; error =' アップロードするファイルの種類は許可されません ' ; U Return false
}
// 合法的にアップロードされたかどうかを確認します
($ file ['tmp_name']) {
$ This- & gt; = 'ファイルが違法にアップロードされました!';
return false;
}
return true;
}
/**
+------------------------------------------------ ----------
* アップロードされたファイルの種類が合法かどうかを確認してください
+---------------------------- - ------------------------
* @access private
+-------------- -- ------------------------------------------------
* @param string $ type data
+------------------------------------------ ------ ------------------------
* @return boolean
+------------------------------------- --------- ------------------------
*/
private function checkType($type) {
if(!empty($this->allowTypes))
return in_array( strto lower($type),$this->allowTypes);
return true;
}
/**
+------------------------------------------------ ----------
* アップロードされたファイルの拡張子が合法かどうかを確認してください
+-------------------------- --- ------------------------
* @access private
+-------------- --------------------------------------------------
* @param string $ ext suffix
+---------------------------------------- -------- -------------
* @return boolean
+---------------------- ---------------------------------------
*/
private function checkExt($ext) {
if(!empty($this->allowExts ))
return in_array(strto lower($ext),$this->allowExts,true);
return true;
}
/**
+------------------------------------------------ ----------
* ファイルサイズが合法かどうかを確認してください
+---------------------------- ----- ------------------------
* @access private
+--------------- ---- ------------------------------------------
* @param整数 $size データ
+------------------------------------------ ---- ----------
* @return boolean
+---------------------------- ----- ------------------------
*/
private function checkSize($size) {
return !( $size > $this->maxSize) || (-1 == $this->maxSize);
}
/**
+------------------------------------------------ ----------
* ファイルが不正に提出されていないか確認してください
+---------------------------- ----- ------------------------
* @access private
+--------------- ---- ------------------------------------------
* @param string $filename ファイル名
+------------------------------------------ ------------------ -----------
* @return boolean
+-------------- --------------------------------------
*/
private function checkUpload($filename) {
return is_uploaded_file($filename);
}
/**
+------------------------------------------------ ----------
* アップロードされたファイルの拡張子を取得します
+---------------------------- ----- ------------------------
* @access private
+--------------- ---- ------------------------------------------
* @param string $filename ファイル名
+------------------------------------------ ------------------ -----------
* @return boolean
+-------------- --------------------------------------
*/
private function getExt($filename) {
$pathinfo = pathinfo($filename);
return $pathinfo['extension'];
}
/**
+------------------------------------------------ ----------
* アップロードされたファイル情報を取得します
+-------------------------------- -- ------------------------
* @access public
+-------------- - ----------------------------------------
* @return array
+ -------------------------------------------------- ------
*/
public function getUploadFileInfo() {
return $this->uploadFileInfo;
}
/**
+------------------------------------------------ ----------
* 最後のエラー メッセージを取得します
+---------------------------- --- ------------------------
* @access public
+-------------- -- ------------------------------------------
* @return string
+- ------------------------------------------------ -- -------
*/
public function getErrorMsg() {
return $this->>エラー;
}
}
上記は、thinkphp ファイルのアップロード クラスを内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









