2007/10/24 水曜日

XREA:PHPのセーフモード関連で困ったら

Filed under: サーバ, PHP — tiny-p @ 23:11:41

解決策

・パーミッションをゆるめ(707など)、Apache権限で書き込み、読み込みできるようにする
 (同じユーザーapacheでも、他のユーザーから呼び出された場合、アクセスはできない)

・PHPをCGIとして使う(.htaccessで設定)
・604など自ユーザー権限で読み込みできる状態でファイル作成した上で、CGIからユーザー名を強引に変更する
http://www.xrea.com/files/chg_uname.txt

2007/10/12 金曜日

Perl:Win32::GUI

Filed under: Perl — tiny-p @ 18:44:59

記録のためにコピペ

Perl で GUI: Win32::GUI と Win32::GUI::Loft を使う

昨日のPARに引き続きPerl について。ラクダのステーキ: PerlでGUIWin32::GUIWin32::GUI::Loftの存在を知り、興味を持ったので試してみた。

当初、ActivePerl 用に Win32::GUI をppm install win32-gui でインストールしたものの、このバージョンは 0.0.558 と古く、ウィンドウの背景色が白くなってしまう問題があるため、Laurent Rocher Win32::GUI packagesにある 0.0.670 の ppm に入れなおした。

 > ppm install Win32-GUI.ppd

Win32::GUI::Loft の方はバイナリパッケージ (loft_binary.zip) を入手して、PPM ディレクトリに入っている ppm をインストールした。ただし、 Win32-GUI-AdHoc.ppd、 Win32-GUI-Loft.ppd ともに

 <DEPENDENCY NAME="Win32" VERSION="0,0,0,0" />

という行を削る必要があった。インストールには ppm コマンドを用いる。

 > ppm install Win32-GUI-AdHoc.ppd  > ppm install Win32-GUI-Loft.ppd

The GUI Loft で GUI を設計

Win32::GUI::Loft には The GUI Loft という専用の GUI ビルダーが付属しており (The GUI Loft に Win32::GUI::Loft が付属しているという方が正確かもしれない)、 マウスを使って手軽に GUI の設計ができる。ボタンなどのオブジェクトには Perl スクリプトから扱いやすいように適切に名前をつけておく (ここでは winLauncher, tfCommand, btnExecute)。

The GUI Loft を利用するコードの書き方

サンプルプログラムとして、ファイル名を指定してプログラムを実行する、という単純なスクリプトを作ってみた。上のスクリーンショットのように設計した GUIを launcher.gld として保存し、次のようなコードを書いた。

use strict;
use FileHandle;
use Win32::GUI;
use Win32::GUI::Loft::Design;
main();
sub main {
my $filename = “launcher.gld”;
my $gld = read_file($filename);
my $design = Win32::GUI::Loft::Design->newScalar($gld, $filename) or die();
my $win = $design->buildWindow();
$win->tfCommand->SetFocus();
$win->Show();
Win32::GUI::Dialog(); }
sub read_file {
my $filename = shift;
if ($INC{’PAR.pm’}) {
# in PAR
return PAR::read_file($filename);
} else {
my $fh = new FileHandle($filename);
return join(”, $fh->getlines());
} }
sub ::btnExecute_Click {
my $win = $Win32::GUI::Loft::window{winLauncher};
if ($win) {
my $command = $win->tfCommand->Text();
my $ShellExecute = new Win32::API(”shell32″, “ShellExecute”, “LPPPPL”, “L”);
$ShellExecute->Call(0, 0, $command, 0, 0, 1); }
return 1; }
sub ::winLauncher_Terminate { return -1; }

GUI の組み立てはすべて Win32::GUI::Loft が行ってくれるため、ウィンドウを作ったりボタンを乗せたりといった単調なコードを書く必要はない。read_file 内では、PAR の中で実行されたときと、普通に実行されたときとで処理をわけている。launcher.pl を実行するとGUIのウィンドウが表示される。

できあがった launcher.pl を

 > pp --gui -a launcher.gld -o launcher.exe launcher.pl

のように実行ファイルに変換すると、約 2.2 MB になった。-a で実行に必要な launcher.gld をパックし、–gui を指定して実行時にコマンドプロンプトを表示しないようにしている。launcher.exe は Perl がインストールされていない環境でも動作する。めでたし。

2007/10/9 火曜日

PHP:BOM除去

Filed under: PHP — tiny-p @ 6:08:28

requre requre_once include したときに、BOMやら空白文字やら改行まで取り込んでしまう。

知らない間に\t やら\n が紛れ込む。
HTMLなら問題ないけどXML作成しようとすると大問題。
そこで

<?php

ob_start();

require

include

requre_once

on_end_clean();

ツ黴€//
$smarty->display();
echo “hogehoge”;
としてやる。
これである程度は解決しそう。

でもなぜかSmarty通したらBOM除去ができなかった。
まぁPHPではBOM入れるなってコトですかね。
BOMつけておくことでIEがUTF-8エンコードをしっかり解釈してくれるのですが。。。

参考:http://ameblo.jp/takuya/entry-10012365916.html

次のページ »

Copyright (C) 2007 tiny-p. All Rights Reserved.