Yasuのブログ

北海道の大学生Yasuが、ライティングスキルとIT知識を高めるためにブログを始めました。

PHPのお勉強。7

<html>

<head>

<title>Test for PHP</title>

<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">

</head>

<body>

 

<?php

$resizeX = 50;

$thumbnail_name = "thumbnail.jpg"; //縮小後のファイル名

$file_dir = '/Applications/MAMP/htdocs/image/'; //ファイルの移動先を格納

$file_path = $file_dir.$_FILES["uploadfile"]["name"]; //移動先のパスが格納されていて、実際の名前が格納されている

if(move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $file_path)) { //この関数でファイルを移動

 

$img_dir ="./image/"; //画像ファイルの移動先パスが格納されている

$img_path = $img_dir.$_FILES["uploadfile"]["name"]; //$img_dirとファイル名が格納されている

$thumbnail_path = $img_dir.$thumbnail_name;

echo $thumbnail_path;

 

     if( mb_strpos($_FILES['uploadfile']['type'], 'jpeg') ) {

          $gdimg_in = imagecreatefromjpeg($file_path);

          $ix = imagesx($gdimg_in);

          $iy = imagesy($gdimg_in);

 

          $ox = $resizeX;

          $oy = ($ox * $iy)/$ix;

          $gdimg_out = imagecreatetruecolor($ox, $oy);

          imagecopyresized($gdimg_out, $gdimg_in, 0,0,0,0,$ox,$oy,$ix,$iy);

          imagejpeg($gdimg_out, $thumbnail_path);

          imagedestroy($gdimg_in);

          imagedestroy($gdimg_out);

$size = getimagesize($file_path); //アップロードした画像の情報を取得する

$size2 = getimagesize($thumbnail_path);

?>

<p>File upload has completed!</p><!-- 正常に移動したらここが実行される.-->

<img src="<?=$img_path?>"<?=$size[3]?>><br> <!-- $size[3]はwidth="xx" height="xx"形式で返すということ -->

<img src="<?=$thumbnail_path?>"<?=$size2[3]?>><br>

<b><?=$_POST["comment"]?></b>

 

<?php

} else {

     print "Prepare the JPEG style photograph!<br>";

     }

} else {

print "<p>File upload was incorrectly done.</p>";

}

?>

 

</body>

</html>

 

画像を縮小するプログラムが正しく動作した例.

$img_dir ="./image/";

これにドットを付けると成功した.

 

☆外部コマンドの実行

exec関数 exec("外部コマンド");

passthru関数 バイナリデータを受け取る

system関数 実行結果を文字列で受け取る

`` backtick演算子 結果を受け取る

 

バックグラウンドで実行する時 上記の関数の最後に&を付加.

セキュリティの為に、escapeshellcmd($文字列); としてエスケープ(無効化)する方法もアリ.

 

☆クラスとオブジェクト

具体的なモノ、アイデア=オブジェクト

function関数

クラス=集合, 内部はメンバとメソッド

メンバ=内部データ

メソッド=処理

 

☆クラスの作り方

<?php

class クラス名

{

     public $変数 = "文字列";

     public function 関数名()

     {

          //処理を記述.

     }

}

?>

 

メンバ、メソッドはpublic, private, protectedなどの定義をしなければならない.

 

インスタンス

オブジェクトを抽象化したものがクラス.

クラスを実際に利用するには実態かしてインスタンスを生成しなければならない.

例:クラスはテンプレみたいなもの、実際に利用するにはデータを持たせてインスタンスを生成.

 

new演算子

オブジェクト変数 = new クラス();

オブジェクト変数->メソッド();

 

<html>

<head>

<title>test for class</title>

<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">

</head>

 

<body>

<p>test for class</p>

<br>

<br>

<?php

$newuser = new User();

$newuser->print_hello();

 

class User

{

     public $name = 'Yasu';

 

     public function print_hello()

     {

          print $this->name;

          print ", hello!";

      }

}

?>

</body>

</html>

 

☆アクセス制限

public 外部から参照可能

private 変数を宣言したクラス内のみ参照可能

protected 変数を宣言したクラスと継承されたクラスから参照可能

 

☆クラスの継承

class 新しいクラス名 extends 継承するクラス名

 

<html>

<head>

<title>test for class</title>

<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">

</head>

 

<body>

<p>test for class</p>

<br>

<br>

<?php

class User

{

     private $name = 'NULL';

     public function print_hello()

     {

          print $this->name;

          print ", hello!";

      }

}

 

class Guest extends User {

     private $name = "Guest";

     public function print_hello() {

          print $this->name;

          print ", nice to meet you!";

     }

}

 

$newuser = new Guest();

$newuser->print_hello();

?>

</body>

</html>

 

☆オーバーライドや継承を禁止

final public function xxxx() { 

のように最初にfinalをつける

 

☆PHP5のオブジェクト機能

__autoload

 

example)

function__autoload($クラス名){

     //処理

}

 

コンストラクタ

__construct

インスタンスが生成されるときに最初に実行される処理を記述した特別なメソッド

 

デストラクタ

__destruct

インスタンスが消滅する時に実行される特別なメソッド

 

static and ::

クラス内で定義された変数を、インスタンスを作成せずにクラス外から参照する

class クラス {

     public static $変数 = "文字列";

}

 

print クラス::$変数;

 

<?php

class Test {

     public static $string = "How are you?";

     static function print_reply() {

          print "fine.";

     }

}

 

print Test::$string;

print "<br>";

print Test::print_reply();

 

?>

 

※$thisを使ったメソッドを::演算子で実行するとエラーが出る.

 

スーパークラスの変数を参照

parent::$変数

 

<?php

class Test {

     public static $string = "How are you?";

     function print_reply() {

          print "fine.";

     }

}

 

class Test2 extends Test {

     function print_reply() {

          print parent::$string;

          print "<br>";

          print "Very fine.";

     }

}

 

$test2 = new Test2();

$test2->print_reply();

?>

 

例外処理

<?php

try {

     $error = "例外を発生させます.";

     throw new Exception($error);

     print "直前で例外が発生しているため表示されない.";

 

} catch (Exception $e) {

     print "例外発生<hr>";

     print "例外メッセージ:".$e->getMessage();

     print "<br>";

     print "例外コード:".$e->getCode();

     print "<br>";

     print "ファイル名:".$e->getFile();

     print "<br>";

     print "行番号:".$e->getLine();

     print "<pre>";

     print "バックトレース:";

     print "<br>";

     print_r($e->getTrace() );

     print "</pre>";

}

print "<hr>例外処理後、処理を続けます.";

?>