私は最近、画像をアップロードする目的で現在作業中のアプリケーションに非常に涼しいValums File Upload Pluginを接続することができました。私は今、手続き型のコーディングを使用する前に行うことができたいくつかの画像操作(リサイズ、ウォーターマーク、サムネイル作成など)を行うために、このプラグインのサーバー側のPHPスクリプトを変更する必要がありますが、方法を見てアップロード処理はvalumsプラグインで行われます。これはすべてOOPです。PHP OOP画像のアップロードと操作
ので(私はのためにこれを行うために誰かのために求めていないてる私は最近、スタイルをプログラミングOOPのまわりで私の頭を取得しようといくつかの時間を費やしてきたと私は、私は基本を取得すると思うが、私は実際にいくつかのポインタを使用することができます私は既存のコードに何をしたいのか、私の画像操作メソッドはどこに行くべきか、アップロードされたファイルをどのように扱うべきか、といったことについてどのように実装するのかについて私に尋ねました。
サーバ側の処理のための完全なコードがhereを見つけることができますが、それは少し、この(申し訳ありません、それはまだかなり長いです)のように行くの概要として:
<?php
/**
* Handle file uploads via XMLHttpRequest
*/
class qqUploadedFileXhr {
function save($path) {
$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);
// REMOVED VALIDATION
$target = fopen($path, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);
return true;
}
function getName() {
return $_GET['qqfile'];
}
function getSize() {
// REMOVED
}
}
/**
* Handle file uploads via regular form post (uses the $_FILES array)
*/
class qqUploadedFileForm {
function save($path) {
if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
return false;
}
return true;
}
function getName() {
return $_FILES['qqfile']['name'];
}
function getSize() {
return $_FILES['qqfile']['size'];
}
}
class qqFileUploader {
private $allowedExtensions = array();
private $sizeLimit = 10485760;
private $file;
function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){
$allowedExtensions = array_map("strtolower", $allowedExtensions);
$this->allowedExtensions = $allowedExtensions;
$this->sizeLimit = $sizeLimit;
$this->checkServerSettings();
if (isset($_GET['qqfile'])) {
$this->file = new qqUploadedFileXhr();
} elseif (isset($_FILES['qqfile'])) {
$this->file = new qqUploadedFileForm();
} else {
$this->file = false;
}
}
private function checkServerSettings(){
// REMOVED
}
private function toBytes($str){
// REMOVED
}
/**
* Returns array('success'=>true) or array('error'=>'error message')
*/
function handleUpload($uploadDirectory, $replaceOldFile = FALSE){
// REMOVED VALIDATION
$pathinfo = pathinfo($this->file->getName());
$filename = $pathinfo['filename'];
//$filename = md5(uniqid());
$ext = $pathinfo['extension'];
// REMOVED VALIDATION
if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){
return array('success'=>true);
} else {
return array('error'=> 'Could not save uploaded file.' .
'The upload was cancelled, or server error encountered');
}
}
}
$allowedExtensions = array("jpeg","jpg","bmp");
// max file size in bytes
$sizeLimit = 10 * 1024 * 1024;
$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
$result = $uploader->handleUpload('uploads/');
// to pass data through iframe you will need to encode all html tags
echo htmlspecialchars(json_encode($result), ENT_NOQUOTES);
?>
明確にするために、私は後じゃありませんスプーンの摂食は、私は本当に間違った道を離れることを望んでいない私は急な学習曲線上にあるので、私はどこを開始し、見て周りの頭を取得するために苦労している。おそらくこれを手続き型コードに変えることができますが、これはOOPを正しく学ぶ良い機会だと思います。
ご協力いただきまして誠にありがとうございます。
ダンクラスqqFileUploader
を拡張している私は何をしようとするだろう
こんにちはJohn、正しい方向に少し傾いている可能性はありますか?私はアップロードされた画像をどのように手に入れるかを完全には分かっていないので、それを使って遊ぶことができます。私はqqFileUploaderクラスを拡張しようとしましたが、$ this->ファイルをあまり使用していませんでした。 –
こんにちはJohn、あなたの返事をありがとう。テストとして、$ ImageHandle = imagecreatefromjpeg($ this-> file);を追加しました。あなたが提案したところで、「クラスqqUploadedFileXhrのオブジェクトを文字列に変換できませんでした」という恐ろしいエラーが発生しました。私は私がここで噛むことができるよりもずっと噛んだと思うようになっています! –
そのファイルを操作するには、おそらく 'getName()'関数を使いたいでしょう。したがって、 '$ ImageHandle = imagecreatefromjpeg($ this-> file);の代わりに、' $ ImageHandle = imagecreatefromjpeg($ this-> file-> getName()); 'を使用します。上のクラスでは 'getName()'という名前の関数があり、それを使うことができます。そこに別の関数を作成し、 '$ this-> file-> yourFunction()'を使って呼び出すことさえできます。 – john