チュートリアル
PHP の 10 の高度なテクニック (パート 2)
6. 動的な画像の作成
サードパーティのライブラリ ファイルをインストールし、一定の幾何学的知識がある限り、PHP を使用して画像を作成および処理できます。実際、私は大学を卒業していないので、まだ PHP を使用して画像を作成できるため、これには幾何学の知識はあまり必要ありません。
基本的なイメージ作成機能を使用する前に、GD ライブラリ ファイルをインストールする必要があります。 JPEG 関連の画像作成機能を使用する場合は、jpeg-6b をインストールする必要があります。画像内で Type 1 フォントを使用する場合は、t1lib をインストールする必要があります。
イメージ作成環境を確立する前に、いくつかの準備を行う必要があります。まず、t1lib をインストールし、次に jpeg-6b をインストールし、次に GD ライブラリ ファイルをインストールします。 GD をライブラリとしてコンパイルする際に jpeg-6b が使用されるため、インストールする際はここで指定した順序でインストールする必要があります。jpeg-6b がインストールされていないとコンパイル時にエラーが発生します。
これら 3 つのコンポーネントをインストールした後も、PHP を再構成する必要があるのが、PHP のインストールに DSO を使用する理由の 1 つです。 make clean を実行し、次の内容を現在の構成に追加します。
--with-gd=[/path/to/gd]
--with-jpeg-dir=[/path/to/jpeg -6b ]
--with-t1lib=[/path/to/t1lib]
追加が完了したらmakeコマンドを実行し、次にmake installコマンドを実行します。 Apache を再起動した後、phpinfo() を実行して、新しい設定が有効になっているかどうかを確認します。これで、イメージの作成作業を開始できます。
インストールされている GD ライブラリ ファイルのバージョンに応じて、GIF または PNG 形式のグラフィック ファイルを作成できる場合とできない場合があります。 gd-1.6 以前のバージョンがインストールされている場合、GIF 形式のファイルは使用できますが、PNG は作成できません。 gd-1.6 以降のバージョンをインストールすると、PNG ファイルは作成できますが、GIF 形式のファイルは作成できません。
簡単な画像を作成するには多くの機能を使用する必要もありますが、順を追って説明します。
この例では、PNG 形式で画像ファイルを作成します。次のコードは、作成された画像の MIME タイプを含むヘッダーです。
ImageCreate() を使用して空白の画像を表す変数を作成します。この関数にはピクセル単位の画像サイズのパラメーターが必要で、その形式は ImageCreate(x_size, y_size) です。サイズ 250X250 の画像を作成したい場合は、次のステートメントを使用できます:
$newImg = ImageCreate(250,250);
画像はまだ空白なので、色で塗りつぶすこともできます。ただし、最初に ImageColorAllocate() 関数を使用して RGB 値を使用してこの色に名前を割り当てる必要があります。この関数の形式は ImageColorAllocate([image], [red], [green], [blue]) です。空色を定義したい場合は、次のステートメントを使用できます:
$skyblue = ImageColorAllocate($newImg,136,193,255);
次に、ImageFill() 関数を使用して画像をこの色で塗りつぶす必要があります。 ImageFill() 関数には、ImageFillRectangle()、ImageFillPolygon() など、多くの関数のバージョンがありますか?簡単にするために、次の形式で ImageFill() 関数を使用します:
ImageFill([image], [start x point], [start y point], [color])
ImageFill($newImg,0,0, $skyblue);
最後に、画像作成後に占有されていた画像ハンドルとメモリを解放します:
ImageDestroy($newImg);
このようにして、画像の作成は次のようになります:
$newImg = ImageCreate(250,250)
$skyblue = ImageColorAllocate($newImg,136,193,255);
I mageFill($newImg, 0,0,$skyblue);
ImagePNG($newImg);
?>
このスクリプトファイルをskyblue.phpとして保存してアクセスするとブラウザで見ると、スカイブルーの250X250のPNG形式の画像が表示されます。
画像作成機能を使って、大きな画像を小さな画像にするなど、画像を処理することもできます:
画像があり、そこから 35X35 サイズの画像を切り抜きたいとします。必要なのは、35x35 の空の画像を作成し、元の画像を含む画像ストリームを作成して、サイズ変更した元の画像を新しい空の画像に配置することだけです。
このタスクを完了するための重要な関数は ImageCopyResize() で、次の形式が必要です: ImageCopyResize([新しい画像ハンドル],[元の画像ハンドル],[新しい画像 X], [新しい画像 Y], [元の画像 X ]、[元のイメージ Y]、[新しいイメージ X]、[新しいイメージ Y]、[元のイメージ X]、[元のイメージ Y])。
/* ファイルに含まれるコンテンツ タイプをブラウザに知らせるためのヘッダーを送信します */
header("Content-type: image/png")
/* 新しい画像の高さと幅を作成して保存します変数*/
$newWidth = 35;
$newHeight = 35;
/* 指定された高さと幅で新しい空白の画像を作成します*/
$newImg = ImageCreate($newWidth,$newHeight) ;
/* 元の大きい画像からデータを取得します*/
$origImg = ImageCreateFromPNG("test.png");
/* サイズ変更された画像をコピーし、ImageSX() と ImageSY() を使用して取得します元の画像のサイズ X と Y*/
ImageCopyResize($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));
/*必要な画像を作成してメモリを解放します*/
ImagePNG($newImg);
ImageDestroy($newImg) ?>
この小さなスクリプトを resize.php として保存して、ブラウザを使用します。にアクセスすると、35X35サイズのPNG形式のグラフィックが表示されます。
7. PHP ベースのユーザー認証
各スクリプトでパスワード保護を実行したい場合は、header() ステートメント、$PHP_AUTH_USER および $PHP_AUTH_PW を使用して、基本的な認証スキーム、通常のサーバーベースの質問/応答を確立できます。シーケンスは次のとおりです:
1. ユーザーがサーバーにファイルをリクエストします。ファイルがサーバー上で保護されている場合、応答ヘッダーで 401 (許可されたユーザーを示す) 文字列がユーザーに返されます。
2. ブラウザがこの応答を受信すると、ユーザー名とパスワードの入力を求めるダイアログ ボックスが表示されます。
3. ユーザーはダイアログ ボックスにユーザー名とパスワードを入力し、[OK] ボタンをクリックして認証のために情報をサーバーに返します。
4. ユーザー名とパスワードが有効な場合、ユーザーがファイルを使用している限り、保護されたファイルは有効なままになります。
単純な PHP スクリプト ファイルは、ユーザー名/パスワード ダイアログ ボックスを自動的に表示する適切な HTTP ヘッダーをユーザーに送信することで、HTTP 質問/応答システムを模倣できます。情報は $PHP_AUTH_USER と $PHP_AUTH_PW に保存されており、これら 2 つの変数を使用して、テキスト ファイルやデータベースなどに保存されているユーザー名/パスワードと比較できます。
この例では、認証に 2 つのハードコードされた値を使用していますが、ユーザー名とパスワードがどこに配置されても原理は同じです。 | /* 値でない場合は、ダイアログ ボックスを表示させるヘッダーを送信します*/
header('WWW-Authenticate: Basic realm="My Private Stuff"');
header('HTTP/1.0 401 Unauthorized) ');
echo '認証が必要です。';
if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {
/* 入力されたユーザー名のいずれかの場合かつパスワードが間違っている場合は、ダイアログボックスが表示されるメッセージを送信してください。 Header*/
header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized' );
echo '認可が必要です。';
exit
} else if (($PHP_AUTH_USER == "validname") || ($PHP_AUTH_PW == "goodpassword")) {
/* 両方の値の場合正しいです。成功メッセージを表示します*/
echo "< ;P> あなたは許可されています! すべてのファイルは安全です。ほとんどのファイルを保護できる可能性がありますが、特定のディレクトリ内のすべてのファイルを保護できると考えている場合は、考え方を変える必要があります。
8. PHP と COM
冒険心があり、CGI、ISAPI、または Apache モジュール バージョンの PHP を Windows 上で実行している場合は、COM 機能にアクセスできます。さて、COM の詳細な説明は Microsoft や多くの分厚い書籍に委ねられています。COM の機能を簡単に理解するために、ここでは簡単な一般的なスクリプトを紹介します。
この PHP スクリプトは、バックエンドで Microsoft のワードプロセッサ Word を起動し、新しい文書を開いてテキストを入力し、文書を保存して Word を閉じます。
<
// 新しい COM コンポーネントを指すインデックスを作成します
$word = new COM("word.application") or die("Can't start Word!"); // 表示します現在使用されている Word のバージョン番号
Echo "Loading Word, v. {$word->Version}
";
// 可視性を 0 (false) に設定します。アプリケーションを最前面で開くには、 1 (true) を使用します
$word->Visible = 0;
// Word で新しいドキュメントを作成します
$word->Documents->Add ();
// 新しいドキュメントにテキストを追加します
$word->Selection->TypeText("Testing 1-2-3...") // ドキュメントを保存しますWindows 一時ディレクトリ
$word->Documents[1]->SaveAs("/Windows/temp/comtest.doc")
// COM コンポーネントとの接続を閉じます 接続
$ word->Quit();
// 画面に追加情報を表示
echo "ファイルを確認してください..."
?> イントラネット Web サイトがある場合、データは次のように保存されます。 SQL Server。これらのデータの Excel 形式が必要な場合は、PHP で必要な SQL クエリを実行して出力をフォーマットし、COM を使用して Excel を開き、データを Excel 形式のデータに変換して保存できます。ユーザーのデスクトップ。
9. PHP と Java
PHP のもう 1 つの興味深い機能は、既存の Java オブジェクトのメソッドを呼び出すことができることです。これにより、PHP を Java ベースのアプリケーションに統合できます。この機能は、職場で PHP アプリケーションを推進したい場合に非常に便利です。得られる結果は、「ここにあるものはすべて Java に基づいています。」というものです。この機能を利用するには、サーバーに PHP がインストールされている必要があります。 Java仮想マシン)。 Sun、Kaffe、IBM、または Blackdown から JDK をインストールする場合、JVM はすでにインストールされています。
PHP を設定するときは、設定ファイルに with-java セクションを追加し、php.ini ファイルの一部を変更する必要があります。php.ini ファイルの変更には、主に次の内容を追加する必要があります。 ]
java.library.path=/path/to/library
java.class.path=/classpath/
extension_dir=/path/to/extensions
extension=libphp_java.so
なお、加えられた変更 インストールの種類に応じて、Java 関数の設定方法を学ぶには、PHP インストール ディレクトリの ext/java ディレクトリにある README ファイルを読む必要があります。
以下は、新しい Java オブジェクトを作成する方法に関する PHP スクリプトの例です。このスクリプトは、いくつかの Java プロパティにアクセスしてモニターに表示します。これは COM の例と同様に興味深いものであり、インスピレーションを与えてくれるはずです。
<
$system = new Java("java.lang.System");
echo "
getProperty("java.version") "
";
echo "Javaベンダー = " . $system->getProperty("java.vendor") . "