PHPメモ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* PHPメモ [#v37e7e81]
#contents
** はまったところメモ [#ndb837db]
*** include の振る舞い [#cdc00d1f]
include というのは、外部ファイルを読み込む演算子。
include 'ファイル名';
読み込まれるのはわかるが、 include をしたファイルは、
HTMLモードで展開される、ということを知らなかったためにハ...
どういうことかというと、include ファイルは php スクリプト...
HTML(というか、スクリプトではない単純テキスト)として読...
つまり、
#code(html){{
<?php
// phpコード1
include 'xxxx.inc';
// phpコード2
?>
}}
というのは、
#code(html){{
<?php
// phpコード1
?>
<!-- xxx.inc の内容 -->
<?php
// phpコード2
?>
}}
ということ。
なので、include ファイルの内容を php スクリプトとする場合...
include ファイルにも php の開始タグと終了タグを書く必要が...
逆にいえば、ファイルの内容を HTML として出力したいのなら、
読み込んだ内容を echo や print などする必要はなく、includ...
これは require(require_once)も同じ。
''参考''
- [[include - PHP マニュアル:http://www.phppro.jp/phpmanu...
*** PHP4 と PHP5 のインスタンスの扱い [#te5ecde8]
インスタンスを生成し、それを別の変数に代入した場合の扱い...
具体的には、
#code(html){{
<?php
class hoge {
var $fuga = 'default';
}
$src = new hoge();
$dst = $src;
$dst->fuga = 'modify';
echo $src->fuga;
?>
}}
としたとき、PHP4 では 'default' になり、PHP5 では 'modify...
つまり、PHP5 では元の値が変更されるが、PHP4 では変更され...
その理由が次のページで解説されていた。
- [[PHPでの内部変数の扱われ方 - PHPプロ!:http://www.phpp...
なんかいろいろ書かれてるけど、
つまり、オブジェクトにおける代入演算子('=')の挙動は、
PHP4 はコピーの扱いで、PHP5 は参照の扱いになるってこと。
PHP4 では参照はできないのかといえば、明示的に '=&' を使え...
''PHP4 で参照による代入をする場合''
#code(html){{
<?php
...
$dst =& $src;
...
?>
}}
PHP5 からは、オブジェクトの代入はデフォルトで参照になった...
PHP4 のときのようにコピーをとりたい場合は、clone を使う必...
''PHP5 でコピーによる代入をする場合''
#code(html){{
<?php
...
$dst = clone $src;
...
?>
}}
*** allow_url_fopen が無効にされちゃったYO! [#wa20e503]
allow_url_fopen というのは、PHPでリモートファイルを開いて...
最近はどのサーバでもセキュリティを厳しくする傾向にあり、...
そんな場合は、HTTP_Request を使う。
PEAR のライブラリに HTTP/Request というものがあるので、こ...
例えば、次のような感じでリモートのファイル内容を参照でき...
#code(PHP){{
<?php
require_once "HTTP/Request.php";
function getRemoteFile($url) {
$http_req =& new HTTP_Request($url);
if ( !PEAR::isError( $http_req->sendRequest() ) ) {
$code = $http_req->getResponseCode();
if ( $code >= 300 && $code < 400 ) {
$http_hdr = $http_req->getResponseHeader();
if ( isset($http_hdr['location']) ) {
return getRemoteFile($http_hdr['location'...
}
} else {
return $http_req->getResponseBody();
}
}
return null;
}
?>
}}
上記では、応答コードが300番台の場合は「リダイレクトしてく...
ヘッダ情報に書かれている location を取得して関数を再起さ...
fopen() を使ってファイルを開いて内容を読み出している部分...
HTTP/Request がインストールされていない場合は、[[PEAR:htt...
注意すべきは、PEAR のライブラリはパスが通った場所に置かれ...
つまり、こんな感じで。
(root)
|
+- [DIR] HTTP
| |
| +- [DIR] Net
| | |
| | +- Socket.php
| | +- URL.php
| |
| +- Request.php
|
+- 上のスクリプトを書いたファイル
*** セッションの扱い [#j0d04c5c]
''初期化、終了''
使うページでは、まず
session_start();
を呼出すのはお約束。
破棄する場合は
session_destroy();
破棄は、完全にそのサイトを離れる場合に呼出すようにすると...
毎回呼出すわけじゃない。呼出した時点でセッションが切れる。
''セッションに変数を作成する''
PHP5以降であれば $_SESSION というグローバル配列へ書き込み...
例えば、"user_id" と "user_pass" などというセッション変数...
$_SESSION['user_id'] = "xxxxx";
$_SESSION['user_pass'] = "xxxxx";
とすればOK。
PHP4.1より前のバージョンでは session_register という関数...
session_register('user_id');
session_register('user_pass');
$user_id = "xxxxx";
$user_pass = "xxxxx";
PHP5でも session_register は使える。でも、いちいち宣言の...
$_SESSION の実装は、その中で結局 session_register を呼出...
どちらで書いても同じ意味っぽい。
読み出す場合は、
$id = $_SESSION['user_id'];
$pass = $_SESSION['user_pass'];
で。
** ImageMagic を Windows 環境にインストール メモ [#b252b9...
+ ここから Windows 用のバイナリをダウンロードしてインスト...
[[ImageMagic インストーラ(Win):http://imagemagick.org/scr...
+ 次のサイトから php_imagick_dyn-Q16 をダウンロード。&br;
- [[Mikko’s blog:http://valokuva.org/?page_id=50]]
-- [[imagick-windows-builds/:http://valokuva.org/outside-...
-- [[imagick-windows-builds/080709/:http://valokuva.org/o...
+ dll を PHP の ext フォルダに配置。&br;
php.ini にフォルダの設定があるはず。
+ php.ini に次の記述を追加。&br;
extension=php_imagick_dyn-Q16.dll
+ システム環境変数に次の記述を追加。&br;
MAGICK_HOME=[ImageMagic をインストールしたフォルダ]
ex.) C:\ImageMagick
これで、例えば次のようなスクリプトを表示してみる。
#code(php){{
$image =& new Imagick('test.jpg');
$image-> thumbnailImage(100, 0);
$image-> writeImage('test_thumb.jpg');
}}
("test.jpg" は同じフォルダに配置で。)
サムネイルが出力されればよし。
*** 駄目な場合に試すこと。 [#w8d30bf4]
- Apache 再起動。
- Windows(OS)再起動。
*** もっといろいろやってみる [#rd1d0866]
ここらへんにリファレンスがある。&br;
[[PHP Manual - 画像処理 (ImageMagick):http://jp.php.net/m...
** 参考サイト [#uea0ee84]
- [[日本PHPユーザ会:http://www.php.gr.jp/]]
- [[PHPプロ!:http://www.phppro.jp/]]
- [[PHP Hypertext Preprocessor:http://php.benscom.com/]]
-- [[PHPマニュアル:http://php.benscom.com/manual/ja/]]
- [[初心者がおくるPHP入門:http://ww7.tiki.ne.jp/~inabah/p...
- [[PHP入門:http://www.scollabo.com/banban/php/]]
- [[Planet PHP Japan:http://planet.php.gr.jp/]]
-----
[[MLEXP. Wiki]]
終了行:
* PHPメモ [#v37e7e81]
#contents
** はまったところメモ [#ndb837db]
*** include の振る舞い [#cdc00d1f]
include というのは、外部ファイルを読み込む演算子。
include 'ファイル名';
読み込まれるのはわかるが、 include をしたファイルは、
HTMLモードで展開される、ということを知らなかったためにハ...
どういうことかというと、include ファイルは php スクリプト...
HTML(というか、スクリプトではない単純テキスト)として読...
つまり、
#code(html){{
<?php
// phpコード1
include 'xxxx.inc';
// phpコード2
?>
}}
というのは、
#code(html){{
<?php
// phpコード1
?>
<!-- xxx.inc の内容 -->
<?php
// phpコード2
?>
}}
ということ。
なので、include ファイルの内容を php スクリプトとする場合...
include ファイルにも php の開始タグと終了タグを書く必要が...
逆にいえば、ファイルの内容を HTML として出力したいのなら、
読み込んだ内容を echo や print などする必要はなく、includ...
これは require(require_once)も同じ。
''参考''
- [[include - PHP マニュアル:http://www.phppro.jp/phpmanu...
*** PHP4 と PHP5 のインスタンスの扱い [#te5ecde8]
インスタンスを生成し、それを別の変数に代入した場合の扱い...
具体的には、
#code(html){{
<?php
class hoge {
var $fuga = 'default';
}
$src = new hoge();
$dst = $src;
$dst->fuga = 'modify';
echo $src->fuga;
?>
}}
としたとき、PHP4 では 'default' になり、PHP5 では 'modify...
つまり、PHP5 では元の値が変更されるが、PHP4 では変更され...
その理由が次のページで解説されていた。
- [[PHPでの内部変数の扱われ方 - PHPプロ!:http://www.phpp...
なんかいろいろ書かれてるけど、
つまり、オブジェクトにおける代入演算子('=')の挙動は、
PHP4 はコピーの扱いで、PHP5 は参照の扱いになるってこと。
PHP4 では参照はできないのかといえば、明示的に '=&' を使え...
''PHP4 で参照による代入をする場合''
#code(html){{
<?php
...
$dst =& $src;
...
?>
}}
PHP5 からは、オブジェクトの代入はデフォルトで参照になった...
PHP4 のときのようにコピーをとりたい場合は、clone を使う必...
''PHP5 でコピーによる代入をする場合''
#code(html){{
<?php
...
$dst = clone $src;
...
?>
}}
*** allow_url_fopen が無効にされちゃったYO! [#wa20e503]
allow_url_fopen というのは、PHPでリモートファイルを開いて...
最近はどのサーバでもセキュリティを厳しくする傾向にあり、...
そんな場合は、HTTP_Request を使う。
PEAR のライブラリに HTTP/Request というものがあるので、こ...
例えば、次のような感じでリモートのファイル内容を参照でき...
#code(PHP){{
<?php
require_once "HTTP/Request.php";
function getRemoteFile($url) {
$http_req =& new HTTP_Request($url);
if ( !PEAR::isError( $http_req->sendRequest() ) ) {
$code = $http_req->getResponseCode();
if ( $code >= 300 && $code < 400 ) {
$http_hdr = $http_req->getResponseHeader();
if ( isset($http_hdr['location']) ) {
return getRemoteFile($http_hdr['location'...
}
} else {
return $http_req->getResponseBody();
}
}
return null;
}
?>
}}
上記では、応答コードが300番台の場合は「リダイレクトしてく...
ヘッダ情報に書かれている location を取得して関数を再起さ...
fopen() を使ってファイルを開いて内容を読み出している部分...
HTTP/Request がインストールされていない場合は、[[PEAR:htt...
注意すべきは、PEAR のライブラリはパスが通った場所に置かれ...
つまり、こんな感じで。
(root)
|
+- [DIR] HTTP
| |
| +- [DIR] Net
| | |
| | +- Socket.php
| | +- URL.php
| |
| +- Request.php
|
+- 上のスクリプトを書いたファイル
*** セッションの扱い [#j0d04c5c]
''初期化、終了''
使うページでは、まず
session_start();
を呼出すのはお約束。
破棄する場合は
session_destroy();
破棄は、完全にそのサイトを離れる場合に呼出すようにすると...
毎回呼出すわけじゃない。呼出した時点でセッションが切れる。
''セッションに変数を作成する''
PHP5以降であれば $_SESSION というグローバル配列へ書き込み...
例えば、"user_id" と "user_pass" などというセッション変数...
$_SESSION['user_id'] = "xxxxx";
$_SESSION['user_pass'] = "xxxxx";
とすればOK。
PHP4.1より前のバージョンでは session_register という関数...
session_register('user_id');
session_register('user_pass');
$user_id = "xxxxx";
$user_pass = "xxxxx";
PHP5でも session_register は使える。でも、いちいち宣言の...
$_SESSION の実装は、その中で結局 session_register を呼出...
どちらで書いても同じ意味っぽい。
読み出す場合は、
$id = $_SESSION['user_id'];
$pass = $_SESSION['user_pass'];
で。
** ImageMagic を Windows 環境にインストール メモ [#b252b9...
+ ここから Windows 用のバイナリをダウンロードしてインスト...
[[ImageMagic インストーラ(Win):http://imagemagick.org/scr...
+ 次のサイトから php_imagick_dyn-Q16 をダウンロード。&br;
- [[Mikko’s blog:http://valokuva.org/?page_id=50]]
-- [[imagick-windows-builds/:http://valokuva.org/outside-...
-- [[imagick-windows-builds/080709/:http://valokuva.org/o...
+ dll を PHP の ext フォルダに配置。&br;
php.ini にフォルダの設定があるはず。
+ php.ini に次の記述を追加。&br;
extension=php_imagick_dyn-Q16.dll
+ システム環境変数に次の記述を追加。&br;
MAGICK_HOME=[ImageMagic をインストールしたフォルダ]
ex.) C:\ImageMagick
これで、例えば次のようなスクリプトを表示してみる。
#code(php){{
$image =& new Imagick('test.jpg');
$image-> thumbnailImage(100, 0);
$image-> writeImage('test_thumb.jpg');
}}
("test.jpg" は同じフォルダに配置で。)
サムネイルが出力されればよし。
*** 駄目な場合に試すこと。 [#w8d30bf4]
- Apache 再起動。
- Windows(OS)再起動。
*** もっといろいろやってみる [#rd1d0866]
ここらへんにリファレンスがある。&br;
[[PHP Manual - 画像処理 (ImageMagick):http://jp.php.net/m...
** 参考サイト [#uea0ee84]
- [[日本PHPユーザ会:http://www.php.gr.jp/]]
- [[PHPプロ!:http://www.phppro.jp/]]
- [[PHP Hypertext Preprocessor:http://php.benscom.com/]]
-- [[PHPマニュアル:http://php.benscom.com/manual/ja/]]
- [[初心者がおくるPHP入門:http://ww7.tiki.ne.jp/~inabah/p...
- [[PHP入門:http://www.scollabo.com/banban/php/]]
- [[Planet PHP Japan:http://planet.php.gr.jp/]]
-----
[[MLEXP. Wiki]]
ページ名: