ホームページ > バックエンド開発 > PHPチュートリアル > php+js iframe は、jump_PHP チュートリアルなしでアバター インターフェイスのアップロードを実現します

php+js iframe は、jump_PHP チュートリアルなしでアバター インターフェイスのアップロードを実現します

WBOY
リリース: 2016-07-13 10:31:38
オリジナル
900 人が閲覧しました

インターフェースをリダイレクトせずにアバターをアップロードする方法はたくさんありますが、私が使用する方法は iframe を追加することです。コードはそのすぐ下にあります。

html:

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

//route はバックエンドインターフェイスです
//upload/avatar はアップロードされたアバターの保存アドレスです
//imgurl= /upload/avatar/< ?=$uid?> ここの最後の は、後で js を使用して最新の変更されたアバターを表示するために使用されます。以下の js 部分のコードを参照してください。 //アバターは、1.jpg、2.png などの uid.type という名前で保存されます。
//$user['avatar'] ユーザーがアバターをアップロードした場合、ユーザー データベースのアバター フィールドタイムスタンプが与えられますが、それ以外の場合は空になります


input type="submit" name="submit_file" value="OK" style="display: none;"/>



php:


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

$token = param('token');
$user = user_from_token($token);
!$user AND exit("

$lang[user_not_exists]

");
//ファイル ストレージ パス
$file_path="./upload/avatar/";
//664 権限は、ファイル所有者とグループ ユーザーが読み取りおよび書き込み可能であり、他のユーザーは読み取り専用ですユーザー。
if(is_dir($file_path) != TRUE) mkdir($file_path, 0664) ;
//アップロードを許可するファイル拡張子を定義します
$ext_arr = array("gif", "jpg", "jpeg", " png ", "bmp");

if (empty($_FILES) === false) {
//判定チェック
$photo_up_size > 2097152 AND exit("

アップロードした写真の数が 200 万を超えています

");
$_FILES["file"]["error"] > 0 AND exit("

ファイルのアップロード中にエラーが発生しました: ".$_FILES["file"]["error"]."

");
//ファイル拡張子を取得します
$temp_arr =explode( ".", $ _FILES["ファイル"]["名前"]);
$file_ext = array_pop($temp_arr)
$file_ext = strto lower($file_ext); /拡張子を確認
if (in_array($file_ext, $ext_arr) === false) {
exit("

アップロードされたファイルの拡張子は許可されていません ");
}
//ディレクトリ内の同じプレフィックスを持つファイルを削除
if($dh = opendir($file_path)) {
while(($file = readdir($dh)) !== false) {
$file_arr = $file.split('.');
if($file_arr[0] == $user['uid']) unlink($file_path.$file)
}
}
//名前を変更uidのファイル
$new_name = $user['uid'].".".$file_ext; //ファイルを保存ディレクトリに移動
move_uploaded_file($_FILES["file"]["tmp_name"], $ file_path.$new_name
);
//管理用データテーブルにファイル格納情報を書き込む
user_update($user['uid'], array('avatar'=>time())); ;p class=' iframe_message' status='1'>ファイルは正常にアップロードされました

");
} else {
exit("

正しいファイルがありませんアップロード< /p>");
}


function ext($filename) {
return strto lower(substr(strrchr($filename, '.'), 1));
}

/ *
例:
thumb(APP_PATH.'xxx.jpg', APP_PATH.'xxx_thumb.jpg', 200, 200);

Return:
array('filesize'=>0, 'width'=>0) , ' height'=>0)
*/
function thread($sourcefile, $destfile, $forcedwidth = 80, $forcedheight = 80) {
$return = array('filesize'=>0, 'width' =>0, '高さ'=>0);
$imgcomp = 10;
$destext = ext($destfile);
if(!in_array($destext, array('gif', 'jpg', ' bmp' , 'png'))) {
return $return;

$imgcomp = 100 - $imgcomp;
$src_width = $imginfo[0]; = $ imginfo[1];
if($src_width == 0 || $src_height == 0) {
return $return;
$src_scale = $src_width / $src_height; ;

if(!function_exists('imagecreatefromjpeg')) {
copy($sourcefile, $destfile)
$return = array('filesize'=>filesize($destfile), 'width'=>$src_width , ' height'=>$src_height);
return $return;

// 指定された比率に従って縮小します
if($src_width <= $forcedwidth && $src_height <= $forcedheight) {
$ des_width = $src_width = $src_height;
} elseif($src_scale >= $des_scale) {
$des_width = ($src_width >= $forcedwidth) : $src_height = $ des_width / $ src_scale;
$des_height = ($des_height >= $forcedheight) : $forcedheight;
$des_height = ($src_height >= $forcedheight) : $src_height; $des_width = $des_height * $src_scale;
$des_width = ($des_width >= $forcedwidth) ? $forcedwidth : $des_width;
}
case 'image/jpeg ':
$img_src = imagecreatefromjpeg($sourcefile);
!$img_src && $img_src = imagecreatefromgif($sourcefile);
case 'image/gif':
$img_src = imagecreatefromgif($sourcefile); img_src && $ img_src = imagecreatefromjpeg($sourcefile);
case 'image/png':
$img_src = imagecreatefrompng($sourcefile);
case 'image/wbmp':
$img_src = imagecreatefromwbmpソースファイル);
デフォルト:
$return;$ IMG_DST = ImageCreatetrueColor($ des_width、$ des_height); , $img_src, 0, 0, 0, 0, $des_width, $des_height, $src_width, $src_height);
//$tmpfile = $temp_path.md5($destfile); $ destext) {
case 'jpg': imagejpeg($img_dst, $tmpfile, $imgcomp);
case 'gif($img_dst, $tmpfile, $imgcomp); imagepng ($img_dst, $tmpfile, version_compare(PHP_VERSION, '5.1.2') == 1 ? 7 : 70);
}
$r = array('filesize'=>filesize($tmpfile), '幅 '=>$des_width, '高さ'=>$des_height);;
copy($tmpfile, $destfile);
imagedestroy($img_dst);
}
/*
* 画像のトリミング
*
* @param string $srcname 元の画像のパス (絶対パス/*.jpg)
* @param string $forcedheight トリミング後に新しい名前を生成します (絶対パス/rename.jpg)
* @param int $sourcefile トリミングされた画像の X 座標
* @param int $destfile トリミングされた画像の Y 座標
* @param int $destext トリミングされた領域の幅
* @param int $imgcomp area
clip('xxx/x.jpg', 'xxx/newx.jpg', 10, 40, 150, 150) の高さ
*/
function Clip($sourcefile, $destfile, $clipx, $clipy, $clipwidth , $clipheight) {
$getimagesize($sourcefile);
if(empty($getimgsize)) {
return 0;
} else {
$imgwidth = $getimagesize($sourcefile); getimgsize[ 1];
if($imgwidth == 0 || $imgheight == 0) {
return 0;
}
}

if(!function_exists('imagecreatefromjpeg')) {
copy($sourcefile, $ destfile);
return filesize($destfile);
switch($getimgsize[2]) {
ケース 1 :
$imgcolor = imagecreatefromgif($sourcefile)
break; $sourcefile );
break;
$imgcolor = imagecreatefrompng($sourcefile);
$img_dst = imagecreatetruecolor($clipwidth, $clipheight); ;
$img_color = imagecolorallocate($img_dst, 255, 255, 255);
imagefill($img_dst, 0, 0, $img_color); $imgwidth , $imgheight, $imgheight);
$tmpfile = $destfile,
$n = filesize($tmpfile); );
return $n;
}

// 幅と高さを返す必要がないと判断されたため、最初にトリミングしてから縮小します。
function Clip_thumb($sourcefile, $destfile, $forcedwidth = 80, $forcedheight = 80) {
// 元の画像の幅と高さを取得します
$getimgsize = getimagesize($sourcefile)
if(empty($getimgsize); )) {
リターン 0;
} else {
$src_width = $getimgsize[0];
$src_height == 0 || $src_height == 0) { 0;
}
}

$src_scale = $src_width / $src_height;
$des_scale = $forcedwidth && $src_height <= $forcedheight; des_width = $src_wi dth ;
$des_height = $src_height;
$n = Clip($sourcefile, $destfile, 0, $des_width, $des_height);
return filesize($destfile);は横長の長方形です
} elseif($src_scale >= $des_scale) {
// 元の画像の高さを基準として省略します
$des_height = $src_height / $des_scale; $n = クリップ($sourcefile, $destfile, 0, 0, $des_width, $des_height);
if($n return $ r['filesize'];
// 元の画像は縦長の長方形です
} else {
// 元の画像の幅を基準にして短くします
$des_width = $src_width ;
$des_height = $src_width / $ des_scale;
$n = クリップ($sourcefile, $destfile, 0, $des_width, $des_height);
if($n return $r['filesize']
}
}

?>


戻り値の内容を php で設定すると、次のようになります。対応する状況が発生した後、返されたコンテンツがページ iframe に表示されるため、フロントエンドが返されたコンテンツを取得してそれに応じて処理できるように、対応するクラスを設定します。 Clip() と Clip_thumb() は、画像サイズを圧縮できる画像トリミング関数です。画像は左上隅から長さと幅が 100 の正方形に切り取られます。

js:



コードをコピー

コードは次のとおりです:


var jsubmit_file = jinput.filter('[name="submit_file"]');
var jfile = jinput.filter('[name="file"]');
var jiframe = $('#iframe'); ;
var jthumb = $('.thumb');
var type = '';
jfile.on('change', function() {
var path = jfile.val();
var file_arr = path.split ('.');
type = file_arr.length-1]
jsubmit_file.trigger('load', function() {
var jiframe_message = $ (window.frames['iframe'].document).find('.iframe_message');
if(jiframe_message.attr('status') != 0) {
var url = this.contentWindow.location.href; var url_arr = url.split('=');
jthumb.attr('src', url_arr[1] + '.' + type);
alert(jiframe_message.text());

これは基本的に、画像のアップロード、アップロード結果のプロンプト、およびアップロードされた最新のアバターのリアルタイム表示の機能を実現します。私たちの選択で。



http://www.bkjia.com/PHPjc/762610.html

www.bkjia.com

tru​​e

技術記事インターフェースをリダイレクトせずにアバターをアップロードする方法はたくさんありますが、私が使用する方法は iframe を追加することです。コードはそのすぐ下にあります。 html: コードをコピーします。コードは次のとおりです: //route はバックエンド インターフェイスです //upload/avatar は上部です...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート