phpcms モジュール開発における swfupload の使用の概要_PHP チュートリアル
phpcms モジュール開発に正式に連絡した後、いくつかの機能モジュールを開発しました。その中で、画像の一括アップロードの問題に遭遇したため、phpcms での swfupload の使用方法を検討し始めました。
phpcms に付属のコンテンツ タイプでは、画像グループを直接指定できますが、この画像グループ機能は、静的な HTML ファイル全体をアップロードする必要があるものではありません。フォルダー全体をアップロードする方法を見つけて、元のファイル名を維持できるようになりました。
その目的は次のように要約されます:1、システムのファイルとディレクトリ構造を変更しないでください。
2、複数の添付ファイルをアップロードする機能を実現します。
3、アップロード後にフォルダー名を取得できます。
phpcms には添付ファイルのアップロード機能が付属しています。swfupload 関数を使用したいのですが、この関数は phpcms の添付ファイルのアップロード機能に統合されています。その後、それを抽出して変更する必要があります。
最初のステップは、これを呼び出す方法を勉強することです。
まず、Firefox ブラウザで firebug を開き、ネットワーク パネルを開き、phpcm で swfupload によって呼び出されるボタンを見つけます。
コードをコピーします。 コードは次のとおりです。
phpcms/modules/attachemet/attachemts.php内
例 開いて見てください。コードは次のとおりです。
コードをコピーします。 次のコードを実行します。
Public Function SWFUPLOAD () { $ Grouplist = getcache ('grouplist', 'member'); 'dosubmit'])){
’を通じて .
前の部分は無視して、アップロードについて説明します。まず、添付ファイルのアップロードが許可されているかどうかを確認します。 次に、$_GET から swfupload のパラメータ引数を取得し、キーを確認して、引数を解析するためのキー パスを取得し、Web サイトの設定を取得し、アップロードが許可されている添付ファイルのサイズを取得します。添付ファイルの Cookie リストの未使用の値。
テンプレートでさまざまな表示を設定します。 最後で最も重要なことは、このテンプレートを見つけて swfupload がどのように導入されるかを確認する必要があるということです。
テンプレートはここにあります: phpcms/modules/attachment/templates/swfupload.tpl.php
テンプレート ファイルを開きます。テンプレート ファイルには多数のファイルが導入されています。
まず、ヘッダーファイルを紹介します。これには jquery などが含まれています。後で使用する必要があるときに、このヘッダーもインポートします。
その後、swfupload のスタイル ファイルと必要な JS がここで呼び出されます。この関数は何をしますか?
この機能を探してみましょう
phpcms/modules/attachment/functions/golable.func.php にその痕跡が見つかりました。この関数の主な機能は
コードをコピーすることです。コードは次のとおりです:
/* flash上传初始化
* 初始化swfupload上传中需要的参数
* @param $module 模块名称
* @param $catid 栏目id
* @param $args 传递参数
* @param $userid 用户id
* @param $groupid 用户组id
* @param $isadmin 是否为管理员模式
*/
function initupload($module, $catid,$args, $userid, $groupid = '8', $isadmin = '0'){
$grouplist = getcache('grouplist','member');
if($isadmin==0 && !$grouplist[$groupid]['allowattachment']) return false;
extract(getswfinit($args));
$siteid = param::get_cookie('siteid');
$site_setting = get_site_setting($siteid);
$file_size_limit = $site_setting['upload_maxsize'];
$sess_id = SYS_TIME;
$swf_auth_key = md5(pc_base::load_config('system','auth_key').$sess_id);
$init = 'var swfu = \'\';
$(document).ready(function(){
swfu = new SWFUpload({
flash_url:"'.JS_PATH.'swfupload/swfupload.swf?"+Math.random(),
upload_url:"'.APP_PATH.'index.php?m=attachment&c=attachments&a=swfupload&dosubmit=1",
file_post_name : "Filedata",
post_params:{"SWFUPLOADSESSID":"'.$sess_id.'","module":"'.$module.'","catid":"'.$_GET['catid'].'","userid":"'.$userid.'","siteid":"'.$siteid.'","dosubmit":"1","thumb_width":"'.$thumb_width.'","thumb_height":"'.$thumb_height.'","watermark_enable":"'.$watermark_enable.'","filetype_post":"'.$file_types_post.'","swf_auth_key":"'.$swf_auth_key.'","isadmin":"'.$isadmin.'","groupid":"'.$groupid.'"},
file_size_limit:"'.$file_size_limit.'",
file_types:"'.$file_types.'",
file_types_description:"All Files",
file_upload_limit:"'.$file_upload_limit.'",
custom_settings : {progressTarget : "fsUploadProgress",cancelButtonId : "btnCancel"},
button_image_url: "",
button_width: 75,
button_height: 28,
button_placeholder_id: "buttonPlaceHolder",
button_text_style: "",
button_text_top_padding: 3,
button_text_left_padding: 12,
button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
button_cursor: SWFUpload.CURSOR.HAND,
File_queued_handler: FileQueued、
File_queue_error_handler: File_Dialog_Complete_handler : FileDialogComplete、
Upload_progress_handler: アップロードプログレス、
アップロード_エラー_ハンドラー: アップロードエラー、
UPload_success_handler: s、lアップロード完了ハンドラー: アップロード完了
});
}) '; $init を返します。
}
テンプレート swfupload.tpl.php を見てみましょう。
このテンプレートは、タブの形式で表示されるように js を使用して、swfupload ボタンを含むタブの ID を見つけることができます。
その ID は tab_swf_1 です
これは div であり、コードは次のとおりです。
コードをコピーします
コードは次のとおりです:
PAD-10 "ID =" SWFUPLOAD "& GT;
& LT; Legend & GT; & LT;? PHP Echo L ('リスト')? -list "id =" fsuploadprogress ">
"
ここでは、ID が buttonPlaceHolder であるスパンがあり、構成ファイルに button_placeholder_id: "buttonPlaceHolder" という行があることがわかります。ページがロードされると、ID が buttonPlaceHolder である要素が JS に置き換えられることは明らかです。 swfupload アップロード コントロールを使用します。 次のステップは、ファイルをクリックした後に swf アップロード メソッドをトリガーすることです
コード内に次のコードがあります。このメソッドは swfupload.js で定義されています。
プログラム内でこれを呼び出す方法
まず最初に、これらの必要なファイルをこのコントロールに表示されるテンプレートに導入する必要があります
userid,$this->groupid ,$this->isadmin )?>
次に、テンプレート内の swfupload を配置する場所にそのようなタグを記述します
このようにして swfupload を導入しました。必要な場合は、アップロードやその他の機能を通常どおりに実行できます。
設定ファイル(initupload関数で出力されたもの)にこのような行があります
コードをコピーします
ここは今まで気にしていなかったifの中の物です
取り出して見てください
コードをコピーしてください
if( $_POST['swf_auth_key'] != md5(pc_base::load_config('system','auth_key').$_POST['SWFUPLOADSESSID']) || ($_POST['isadmin']==0 && !$grouplist[$_POST['groupid']]['allowattachment'])) exit();
pc_base::load_sys_class('attachment','',0);
$attachment = 新しい添付ファイル($_POST[ 'module'],$_POST['catid'],$_POST['siteid']);
$attachment->set_userid($_POST['userid']);
$aids = $attachment->upload( 'Filedata',$_POST['filetype_post'],'','',array($_POST['thumb_width'],$_POST['thumb_height']),$_POST['watermark_enable']);
if($ aids[0]) {
$filename= (strto lower(CHARSET) != 'utf-8') ? iconv('gbk', 'utf-8', $attachment->uploadedfiles[0]['filename']) : $attachment->uploadedfiles[0]['filename'];
if($attachment-> ;uploadedfiles[0]['isimage']) {
echo $aids[0].','.$this->upload_url.$attachment->uploadedfiles[0]['filepath'].','。 $attachment->uploadedfiles[0]['isimage'].','.$filename;
} else {
$fileext = $attachment->uploadedfiles[0]['fileext'];
if($fileext == 'zip' || $fileext == 'rar') $fileext = 'rar';
elseif($fileext == 'doc' || $fileext == 'docx') $fileext = 'doc';
elseif($fileext == 'xls' || $fileext == 'xlsx') $fileext = 'xls';
elseif($fileext == 'ppt' || $fileext == 'pptx') $fileext = ' ppt';
elseif ($fileext == 'flv' || $fileext == 'swf' || $fileext == 'rm' || $fileext == 'rmvb') $fileext = 'flv';
else $fileext = 'do';
echo $aids[0].','.$this->upload_url.$attachment->uploadedfiles[0]['filepath'].','.$fileext.', '.$filename;
}
exit;
} else {
echo '0,'.$attachment->error();
exit;
この里面がある行は比較的重要です。
最初にシステムのアタッチメント クラスをロードし、ここに到達する方法を使用します。
程序对上传成功做了echooperation.返還的东西是 返了编号,上传后的地址,拓展名,文件名.
これらの西は给谁用の啊 我们还得回去看構成文件.
構成ファイルの一部は、上転送中に各イベントがトリガーする方法です。 有始上传的.有上成功的,有上传失的.等等.
私が見ることができる方法の 1 つは、file_dialog_complete_handler:fileDialogComplete,
これらは swfupload に達しました。
その後私はphpcms/static/swfupload/handler.js里面にあるこの方法に到達しました。上での転送が成功した後にエコー結果の解析が完了したデータを参照してください。 解析的な方法
function att_show(serverData,file)
{
var serverData = serverData.replace(/
var data =serverData.split(',') ;
var id = data[0];
var src = data[1];
var ext = data[2];
var filename = data[3];
if(id == 0) {
alert(src) )
return false;
}
if(ext == 1) {
var img = '
} else {
var img = '

}
$.get('index.php?m=attachment&c=attachments&a=swfupload_json&aid='+id+'&src='+src+'&filename='+filename);
$('#fsUploadProgress').append('');
$('#attachment_'+id).html(img );
$('#att-status').append('|'+src);
$('#att-name').append('|'+filename);
}
この方法による目的は、id が fsuuploadprogress の要素の領域に、成功した添付ファイルを追加することです。 关键の地方来了.我们swfupload方法里面に添付ファイルがないシステムタイプの例
真正上传添付ファイルはここにあります。私は添付ファイルのアップロード方法を使用してファイルを上送信します。
この添付ファイルファイルのアップロード方法はシステムクラスの場所にあります、つまり phpcms/libs/classes/attachment.class.php の場所です
この里面に私達はアップロード方法里面にアクセスできます
到此里我们就理清思路了。
システムはこれを実行しています
最初にモジュールパネルの面で swfupload(配置ファイルは関数用に生成されたもの) -> 上転送ファイル -> 添付ファイルモジュールの swfupload メソッドを参照して処理 (システムの添付ファイルのアップロードメソッドを使用してアクセサリを循環します。) 結果を swfupload に返します。メソッド)->処理結果 swfupload 経由のメソッド(fileDialogComplete) が返されます。上面我们已经实现了在模板里面導入swfupload.但我们使用的配置文件及上传付属品的方法等都是系原来自带的。并现我想要的目录结构和文件命名方法。怎么办。 .
変更
怎么改、最初们要配置文件改掉。 自己のモジュールの領域にある関数ファイルの領域に自己の関数が確立されています。我们用自己の関数名 文件命名はglobal.func.phpこのシステム统会はauto_loadを介して我们の関数数追加
去我们把系统中添付モジュール関数文件下面のglobal.func.php里面のinitupload関数全盘コピー贝进来.只修正その中の一行
その後、私はシステムのattachment クラスを削除します。私は自分のモジュールの下にあるクラスファイルを下面に構築します。myattachment.class.php
一我我们自己的分類。集成系の添付ファイル分類を外します。(私有方法コピー过来来。)我们要修正行。最初一点はアップロード方法里面の上传目录変更です。その後、文書を修正します。命名方法.
function upload($field, $alowexts = '', $maxsize = 0, $overwrite = 0,$thumb_setting = array(), $watermark_enable = 1) {
if(!isset($_FILES[$field])) {
$this->error = UPLOAD_ERR_OK;
return false;
}
if(empty($alowexts) || $alowexts == '') {
$site_setting = $this->_get_site_setting($this->siteid);
$alowexts = $site_setting['upload_allowext'];
}
$fn = $_GET['CKEditorFuncNum'] ? $_GET['CKEditorFuncNum'] : '1';
$this->field = $field;
$this->savepath = $this->upload_root.$this->upload_dir.date('Ymd');//这里我们需要修改下.也可以不修改.在我们实例化这个类的时候再来指定目录.
$this->alowexts = $alowexts;
$this->maxsize = $maxsize;
$this->overwrite = $overwrite;
$uploadfiles = array();
$description = isset($GLOBALS[$field.'_description']) ? $GLOBALS[$field.'_description'] : array();
if(is_array($_FILES[$field]['error'])) {
$this->uploads = count($_FILES[$field]['error']);
foreach($_FILES[$field]['error'] as $key => $error) {
if($error === UPLOAD_ERR_NO_FILE) continue;
if($error !== UPLOAD_ERR_OK) {
$this->error = $error;
return false;
}
$uploadfiles[$key] = array('tmp_name' => $_FILES[$field]['tmp_name'][$key], 'name' => $_FILES[$field]['name'][$key], 'type' => $_FILES[$field]['type'][$key], 'size' => $_FILES[$field]['size'][$key], 'error' => $_FILES[$field]['error'][$key], 'description'=>$description[$key],'fn'=>$fn);
}
} else {
$this->uploads = 1;
if(!$description) $description = '';
$uploadfiles[0] = array('tmp_name' => $_FILES[$field]['tmp_name'], 'name' => $_FILES[$field]['name'], 'type' => $_FILES[$field]['type'], 'size' => $_FILES[$field]['size'], 'error' => $_FILES[$field]['error'], 'description'=>$description,'fn'=>$fn);
}
if(!dir_create($this->savepath)) {
$this->error = '8';
return false;
}
if(!is_dir($this->savepath)) {
$this->error = '8';
return false;
}
@chmod($this->savepath, 0777);
if(!is_writeable($this->savepath)) {
$this->error = '9';
return false;
}
if(!$this->is_allow_upload()) {
$this ->error = '13';
return false;
}
$aids = array();
foreach($uploadfiles as $k=>$file) {
$fileext = fileext['name ' ]);
if($file['error'] != 0) {
$this->error = $file['error'];
return false;
}
}
if(!preg_match("/^( ".$this->alowexts.")$/", $fileext)) {
$this->error = '10';
return false;
}
if($this-&g t;最大サイズ && $file ['size'] > $this->maxsize) {
$this->error = '11';
return false;
}
if(!$this-> file($file['tmp_name' ])) {
$this->error = '12';
return false;
}
//$temp_filename = $this->getname($fileext);//名前この里.我们必要修正下
$temp_filename = $file['tmp_name'].$fileext; //修正オリジナルのシステムファイル名.
$savefile = $this->savepath.$temp_filename; $savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(.|$)/i" 、"_\1\2"、$savefile); $filepath = preg_replace(new_addslashes("|^".$this->upload_root."|"), "", $savefile); if(!$this->上書き && file_exists($savefile)) 続行; $upload_func = $this->upload_func; if(@$upload_func($file['tmp_name'], $savefile)) { $this->uploadeds++; @chmod($savefile, 0644); @unlink($file['tmp_name']); $file['name'] = iconv("utf-8",CHARSET,$file['name']); $uploadedfile = array('filename'=>$file['name'], 'filepath'=>$filepath, 'filesize'=>$file['size'], 'fileext'=>$fileext , 'fn'=>$file['fn']); $thumb_enable = is_array($thumb_setting) && ($thumb_setting[0] > 0 || $thumb_setting[1] > 0 ) ? 1:0; $image = 新しい画像($thumb_enable,$this->サイトid); if($thumb_enable) { $image->thumb($savefile,'',$thumb_setting[0],$thumb_setting[1]); if($watermark_enable) { $image->watermark($savefile, $savefile); $aids[] = $this->add($uploadedfile); $aids を返します。 }
注:この里我们は再システムの添付モジュールを下構築MY_attachment.php ただし、これは样会影响系の添付ファイル上传機能です。
在我们自己的制御器里面.我们今回候就追加自己書込的类了.
pc_base::load_app_class('你的モジュール名',' ',0);
残りの操作は、システムの接続モジュールの下にある接続コントローラーの swfupload メソッドを参照することで変更できます。
これで、システムファイルディレクトリを変更せずに、目的のファイルアップロード機能が完成しました。
http://www.bkjia.com/PHPjc/326932.html

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

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が期限切れになります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

ホットトピック









