現在、携帯電話で写真を撮ることが非常に人気がありますが、携帯電話を使用して写真を撮り、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 として書き込まれているためです。
‘r’) を通じてデータを読み取る理由を理解するのにも役立ちます。 $_POST から読み取るのではなく、xml_rpc のデータ仕様が xml であり、その Content-Type が text/xml であるためです。