ホームページ  >  記事  >  バックエンド開発  >  携帯電話に写真を撮ってアバターをアップロードする機能をPHPで実装

携帯電話に写真を撮ってアバターをアップロードする機能をPHPで実装

不言
不言オリジナル
2018-05-16 14:34:264246ブラウズ

現在、携帯電話で写真を撮ることが非常に人気がありますが、携帯電話を使用して写真を撮り、PHP でアバターをアップロードするにはどうすればよいでしょうか?

理由は非常に簡単です。まず、携帯電話は写真情報を転送します。これは get 関数の転送ではありません。 、$GLOBALS
['HTTP_RAW_POST_DATA'] を使用するこのシステム関数は post と非常に似ていますが、$GLOBALS
['HTTP_RAW_POST_DATA'] はより豊富なデータ形式をサポートしています。詳細な違いについては、Baidu と Google を検索してください。
設計プロセスは次のとおりです:
$GLOBALS ['HTTP_RAW_POST_DATA'] は写真データ ストリーム (バイナリ) を転送します --> 空白の画像を開きます ---> データ ストリームを空白の画像に書き込みます -- 決定します有効な画像かどうか---完了。
写真の転送に使用されるバイナリ ストリームには、写真のサイズ、形式、その他の属性がすでに含まれていることに注意してください。時間の点では、携帯電話の画像情報が Web ページに転送されます。

携帯電話では通常、写真やビデオがバイナリ ストリームで構成されているのは知っていますが、ビデオもアップロードできるのでしょうか。携帯電話で写真を撮ってアバターをアップロードするのと原理は同じでしょうか?自分で勉強することもできます

コードを直接入力します

/* 

* 上传图片类 

* @parameter; 用户ID 

* @date:2011-8-15 

* @author:cy 

* */  

function UpImg($subdir){  

// 设置存储路径   

if(!emptyempty($subdir)){  

$dirnow=getcwd();  

$folder =$dirnow."/cover/".$subdir;// folder where to save images   

if( !is_dir($folder) )    mkdir($folder);  



// 图片命名   

$datenow=date('Ymd');  

$timenow=time();  

$image = $datenow.$timenow.'.jpg';  



// 图片是否已存在   

$check = $folder . '/' . $image;  

if (file_exists($check)) {  

    unlink($check);  

} else {  

    $png = file_get_contents ( 'php://input' ) ? file_get_contents ( 'php://input' ) : gzuncompress ( $GLOBALS ['HTTP_RAW_POST_DATA'] );//得到post过来的二进制原始数据   

    if(!emptyempty($png)){  

        $file = @fopen($folder."/".$image, "w");   

        fwrite($file,$png);//写入    

        fclose($file);//关闭    

        // orignal image location   

         $write_image = $folder . '/' . $image;  

      

    }else{  

        $msg = "没有数据流";  

    }     

    if(getimageInfo($write_image)){  

            $msg = "上传成功";  

        }else{$msg = "图片格式不正确";}  

}    

}else{  

$msg = "参数错误";  

}  

return $msg;  

}  



/* 

* 检测图片是否合法 

* @parameter; 文件名 

* @date:2011-8-15 

* @author:cy 

* */  

function getimageInfo($imageName = '') {    

$imageInfo = getimagesize ( $imageName );    

if ($imageInfo !== false) {    

    $imageType = strtolower ( substr ( image_type_to_extension ( $imageInfo [2] ), 1 ) );    

//            $imageSize = filesize ( $imageInfo );     

    return $info = array ('width' => $imageInfo [0], 'height' => $imageInfo [1], 'type' => $imageType, 'mine' => $imageInfo ['mine'] );    

} else {    

    //不是合法的图片     

    return false;    

}    


}
xml-rpc を使用する場合、サーバー側は主に $_POST ではなく php 入力ストリーム input を通じてクライアント データを取得します。 array

上記の検出に基づいて、次のような要約を作成できます:

1. Content-Type 値が application/x-www-form-urlencoded の場合、PHP は対応するデータを保存します。 http リクエストの本文。
配列 $_POST に入力します。$_POST 配列に入力されたデータは、urldecode() 解析の結果です。 (実際には、Content-Type に加えて、データがフォーム データであることを示す
multipart/form-data もあります。これについては後で紹介します)
2、php://input data、としてContent-Type が multipart/form-data でない限り (この条件付き制限は後で導入されます)。次に、php:
//入力データは、データの http エンティティ本体部分と一致します。この部分的に一貫したデータの長さは、Content-Length によって指定されます。
3. Content-Type が application/x-www-form-urlencoded で、送信メソッドが POST メソッドの場合のみ、$_POST データ
と php://input データが「一致」します (引用符で囲まれている場合は、形式に一貫性がなく、内容に一貫性があることを示します)。そうでなければ、それらは矛盾します。
4. php://input は $_GET データを読み取ることができません。これは、$_GET データが http リクエストの本文部分ではなく、http リクエスト ヘッダーの PATH フィールドに query_path として書き込まれているためです。

これは、xml_rpc サーバーが file_get_contents(‘php://input’,

‘r’) を通じてデータを読み取る理由を理解するのにも役立ちます。 $_POST から読み取るのではなく、xml_rpc のデータ仕様が xml であり、その Content-Type が text/xml であるためです。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。