検索
ホームページバックエンド開発PHPチュートリアルphpcms モジュール開発における swfupload の使用の概要_PHP チュートリアル

phpcms モジュール開発における swfupload の使用の概要_PHP チュートリアル

Jul 21, 2016 pm 03:11 PM
phpcms導入使用いくつかの戻る開ける開発するモジュールフォーマル

phpcms モジュール開発に正式に連絡した後、いくつかの機能モジュールを開発しました。その中で、画像の一括アップロードの問題に遭遇したため、phpcms での swfupload の使用方法を検討し始めました。

phpcms に付属のコンテンツ タイプでは、画像グループを直接指定できますが、この画像グループ機能は、静的な HTML ファイル全体をアップロードする必要があるものではありません。

フォルダー全体をアップロードする方法を見つけて、元のファイル名を維持できるようになりました。

その目的は次のように要約されます:

1、システムのファイルとディレクトリ構造を変更しないでください。

2、複数の添付ファイルをアップロードする機能を実現します。

3、アップロード後にフォルダー名を取得できます。

phpcms には添付ファイルのアップロード機能が付属しています。swfupload 関数を使用したいのですが、この関数は phpcms の添付ファイルのアップロード機能に統合されています。その後、それを抽出して変更する必要があります。

最初のステップは、これを呼び出す方法を勉強することです。

まず、Firefox ブラウザで firebug を開き、ネットワーク パネルを開き、phpcm で swfupload によって呼び出されるボタンを見つけます。


コードをコピーします。 コードは次のとおりです。

?m=attachment&c=attachments&a=swfupload&args=10,,1&module=&catid=&authkey=b756a93dea2e627293e88fa9d62af709&pc_hash=iXFbo1このようなリクエストの束を、添付ファイル モジュールの添付ファイル コントローラーでキャプチャしました。
このモジュールのこのコントローラーでこのメソッドを見つけてみましょう。

phpcms/modules/attachemet/attachemts.php内
例 開いて見てください。コードは次のとおりです。

コードをコピーします。

次のコードを実行します。


Public Function SWFUPLOAD () {
$ Grouplist = getcache ('grouplist', 'member'); 'dosubmit'])){

アップロード後の処理なので、とりあえずはswfuploadの導入方法を調べる必要があります。 } else { if($ this-> ;isadmin==0 && !$grouplist[$this->groupid]['allowattachment']) showmessage (L('att_no_permission')); $authkey = $_GET['authkey'];//Get鍵 _GET['args']));//パラメータの分割 = sizecount($site_setting['upload_maxsize']*1024) // アップロード サイズを許可します $att_not_used = param: :get_cookie('att_json'); //未処理のファイルリストを取得します
!isset($att_not_used)) $tab_status = ' class ="on"';//未処理の設定がある場合、ラベル スタイルはオンになります
if(!empty($att_not_used)) $div_status = 'hidden';// それ以外の場合はタグを非表示にします
’を通じて .

前の部分は無視して、アップロードについて説明します。まず、添付ファイルのアップロードが許可されているかどうかを確認します。 次に、$_GET から swfupload のパラメータ引数を取得し、キーを確認して、引数を解析するためのキー パスを取得し、Web サイトの設定を取得し、アップロードが許可されている添付ファイルのサイズを取得します。添付ファイルの Cookie リストの未使用の値。

テンプレートでさまざまな表示を設定します。 最後で最も重要なことは、このテンプレートを見つけて swfupload がどのように導入されるかを確認する必要があるということです。

テンプレートはここにあります: phpcms/modules/attachment/templates/swfupload.tpl.php

テンプレート ファイルを開きます。テンプレート ファイルには多数のファイルが導入されています。


コードをコピーします。 コードは次のとおりです。 admin_tpl ('header', 'attachment');?>
swfupload/fileprogress.js">




まず、ヘッダーファイルを紹介します。これには jquery などが含まれています。後で使用する必要があるときに、このヘッダーもインポートします。

その後、swfupload のスタイル ファイルと必要な JS がここで呼び出されます。この関数は何をしますか?
この行を過小評価しないでください。swfupload の設定全体がここにあります。
この機能を探してみましょう

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_dialog_Start_handler: FileDialogStart、

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 であり、コードは次のとおりです。

コードをコピーします
コードは次のとおりです:

="button" id="btupload" value="" onClick="swfu.startUpload ();" />
>onShow">& lt;font color="red"> /font> , < ;/div>
;/div> change_params()">
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 で定義されています。


コードは次のとおりです:
< ;input type="button" id="btupload" value="" onClick="swfu.startUpload(); " />


これです。swfupload のアップロード コントロールの使用方法はすでに見つかりました
プログラム内でこれを呼び出す方法

まず最初に、これらの必要なファイルをこのコントロールに表示されるテンプレートに導入する必要があります


コードをコピーします コードは次のとおりです:



userid,$this->groupid ,$this->isadmin )?>



コードは上記の通りです
次に、テンプレート内の swfupload を配置する場所にそのようなタグを記述します


コードをコピーします コードは次のとおりです:
< ; input type="button" id="btupload" value="" onClick="swfu.startUpload();


このようにして swfupload を導入しました。必要な場合は、アップロードやその他の機能を通常どおりに実行できます。
しかし、これではまだ私たちのニーズを満たせません。そして、ファイルを Shenma にアップロードしました。その後、私たちを見つけてファイルを Shenma にアップロードします。
設定ファイル(initupload関数で出力されたもの)にこのような行があります

コードをコピーします

コードは次のとおりです:upload_url:"'.APP_PATH.'index.php?m=attachment&c =attachments&a=swfupload&dosubmit=1 ",
これは明らかに、ファイルを処理するために添付モジュールの添付ファイル コントローラーの swfupload メソッドにファイルをアップロードしたことを明らかにしています

ここは今まで気にしていなかった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(//g,'');
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 = '
phpcms モジュール開発における swfupload の使用の概要_PHP チュートリアル
';
} else {
var img = '
phpcms モジュール開発における swfupload の使用の概要_PHP チュートリアル
';
}
$.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 の場所です

この里面に私達はアップロード方法里面にアクセスできます


复制码代码如下:
$this->savepath = $this->upload_root.$this->upload_dir .date ('Y/md/');

この自然就是指定了上传到目录.文件名是通过getnameメソッド来获取的.

到此里我们就理清思路了。

システムはこれを実行しています

最初にモジュールパネルの面で swfupload(配置ファイルは関数用に生成されたもの) -> 上転送ファイル -> 添付ファイルモジュールの swfupload メソッドを参照して処理 (システムの添付ファイルのアップロードメソッドを使用してアクセサリを循環します。) 結果を swfupload に返します。メソッド)->処理結果 swfupload 経由のメソッド(fileDialogComplete) が返されます。

上面我们已经实现了在模板里面導入swfupload.但我们使用的配置文件及上传付属品的方法等都是系原来自带的。并现我想要的目录结构和文件命名方法。怎么办。 .

変更

怎么改、最初们要配置文件改掉。 自己のモジュールの領域にある関数ファイルの領域に自己の関数が確立されています。我们用自己の関数名 文件命名はglobal.func.phpこのシステム统会はauto_loadを介して我们の関数数追加

去我们把系统中添付モジュール関数文件下面のglobal.func.php里面のinitupload関数全盘コピー贝进来.只修正その中の一行


复制番号代次:
upload_url :「」。 APP_PATH.'index.php?m=你的モジュール名&c=你的制御器名&a=你的メソッド名&dosubmit=1",

この文件は我们的制御器下面に提交します。写す方法
その後、私はシステムの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

tru​​ehttp://www.bkjia.com/PHPjc/326932.html技術記事 phpcms モジュール開発に正式に連絡した後、いくつかの機能モジュールを開発しました。その中で、画像の一括アップロードの問題に遭遇しました。そこで、phpcms での swfupload の使用方法を検討し始めました。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションの概念を簡単に説明してください。PHPセッションの概念を簡単に説明してください。Apr 26, 2025 am 12:09 AM

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

PHPセッションに保存されているすべての値をどのようにループしますか?PHPセッションに保存されているすべての値をどのようにループしますか?Apr 26, 2025 am 12:06 AM

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

ユーザー認証にセッションを使用する方法を説明します。ユーザー認証にセッションを使用する方法を説明します。Apr 26, 2025 am 12:04 AM

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

PHPセッションにユーザーの名前を保存する方法の例を挙げてください。PHPセッションにユーザーの名前を保存する方法の例を挙げてください。Apr 26, 2025 am 12:03 AM

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

PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

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

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

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

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

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

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

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

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

Safe Exam Browser

Safe Exam Browser

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

SublimeText3 Mac版

SublimeText3 Mac版

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

DVWA

DVWA

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

EditPlus 中国語クラック版

EditPlus 中国語クラック版

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター