PHPやってますか?PHPやってますか?PHP本家へPHPやってますか?
HOME | SECURITY | INSTALL | SAMPLE | TROUBLE | TIPS | BOOK | LINKS | BBS
区切り線
HOME
SECURITY
INSTALL
SAMPLE
TROUBLE
TIPS
BOOK
LINKS
BBS

(C)1999-2002
Hideyuki SHIMOOKA
All rights reserved.

BBS 過去の記事4

ひろし さん 2002年 03月 18日 22時 07分 45秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/php/

try--catchですか!
今、一番ほしい機能の一つです。
フォームの入力漏れチェックをtry--catch風にできたら、さぞきれいだろうなあと考えています。
しかし、自分で実現するにはアイデアが整理できずにお手上げ状態です。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 03月 18日 12時 01分 07秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

ひろしさん、こんにちは。

ありがとうございます > Abstractクラス
自分で作ってみて思ったより効果があるのでびっくりです(^-^;

やはりJavaとは違って、PHPはあくまで「オブジェクト指向風」ですから、足りないところは自分指向で好きに実装できてしまうところが面白いですね。

#PEARは、自前でExceptionのthrowやデストラクタなども作っているようですが、あそこまで作る気力は。。。

また、URLは失念してしまったのですが、try〜catchをPHP4(だったと思います)で実装した例がありました。ここら辺は、PHP5になるともっと楽になりそうですね。

デザパタの方もようやく1/3になりました。やはり多いですね、23個は。 (^-^;
毎回ネタに苦労してますが、頑張ります。

ひろし さん 2002年 03月 18日 01時 24分 50秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/php/

こんばんは。
デザインパターン、好調ですね。
今回追加のStateで特に思ったのですが、自爆メソッド内蔵Abstract強制クラス、すさまじい威力ですね。
PHPでクラスを書いていて物足りない部分の一つをこうして技術的にカバーできるのは面白いと思います。

よし さん 2002年 03月 13日 11時 04分 04秒

ありがとうございました。
上手いこといきました。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 03月 13日 08時 21分 48秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

よしさん、こんばんは。

ini_set関数で変更可能です。
ただし、PHP4のみで使用できる関数です。

詳しくは、PHPマニュアルの「LXXVI PHP オプションと情報(info)」を参照してください。

よし さん 2002年 03月 12日 16時 34分 26秒

ありがとうございました
magic_quotes_gpcをOFFに変えればできたのですが、
サーバー上のiniファイルは設定を変えれないので
使いたいファイルだけOFFにすることは可能なのでしょうか

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 03月 12日 10時 22分 52秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

ひろしさん、こんにちは。

サンプルを、仰るとおり、文字列チェックや文字コード変換などの処理にすれば良かったんですが、何せ頭が回らない時間に更新してるもので。。。(^-^;

数種類の処理内容を持つバッチなどでも使えそうですね。

#機能追加や削除が設定ファイルでできるとか。。。

ひろし さん 2002年 03月 12日 03時 25分 55秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/php/index.php?type=top

こんばんは。
Filterパターン、お見事の一言に尽きます。
いろいろ応用できそうですね。
URL引数で渡された文字列の長さチェックや、文字コード変換、空欄禁止処理などなど、、。

今回の記事を参考にさせてもらって、いろいろ考えてみます。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 03月 12日 02時 38分 08秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

よしさん、こんばんは。

FAQネタですね。これは文字化けではありません。

php.iniの設定で「magic_quotes_gpc」の設定があると思いますが、Onになってませんか?
これをOffにしてApacheを再起動した後に再度確認してみてください。

また、

・http://www.php.net/manual/ja/configuration.php#ini.magic-quotes-gpc
・http://www.pat.hi-ho.ne.jp/dimension/php/faq.shtml

も参照してみてください。

よし さん 2002年 03月 11日 13時 45分 50秒

こんにちは
HDMLをやり始めたのですが、

<HDML VERSION=3.0 MARKABLE=TRUE>
<nodisplay name=preset>
<action type=accept task=go dest=#list vars="name=&mess=">
</nodisplay>

<choice name=list>
<center>投稿
<CE task=go dest=#name label="入力">名前<tab>[$name]
<CE task=go dest=#mess label="入力">メッセージ<tab>[$mess]
<CE task=go dest="add.php" method=post postdata="name=$name&mess=$mess">投稿
<CE task=go dest=#preset>リセット
</choice>
<entry name=name key=name>
<action type=accept task=go dest=#list>
名前入力
</entry>
<entry name=mess key=mess>
<action type=acceot task=go dest=#list>
メッセージ入力
</entry>
</hdml>

これをPHP4.1がわで
<?php
header("content-type: text/x-hdml;charser=shift_jis");
echo "<HDML VERSION=3.0 MARKABLE=TRUE>";
echo "<display>";
echo $name;
echo $mess;
echo "</display>";
echo "</hdml>";
?>
これを実行させると
文字化けを起こすのですがどうすれば良いのでしょうか

例]
芸能界と入力すると芸能\界となります

ケンキチ さん 2002年 03月 07日 11時 23分 45秒

おはようございます。
さっそく調べていただいて有難うございます。

ご指摘の通り、test_codeはCHAR(8)なのですが実際は7byteの文字列
が格納されてました。
PHP4のバグですか・・・。
http://bugs.php.net/bug.php?id=14013に関しても大変役立ちました。

回避方法の通り、test_codeをCHAR(7)にして半角スペースが入らないようにするか
VARCHAR2型に変更したいと思います。

trim(test_id) = :tidに関してもテストを行ってみましたが遅いですね。。。
INDEXが利用されていないということですか。。。

遅くなりましたが、こちらの環境としては
Linux(RedHat7) + PHP4.1.0 + Oracle8.1.7でテストを行っていました。

BIND変数の有効性もよくわかりましたので、これを利用してコーディング
していきたいと思います。
色々勉強になりました。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 03月 07日 01時 17分 28秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

書き忘れてしまいました。。。

VARCHAR2(8)にする場合は、test_idをtrim(test_id)でUPDATEする必要があります。

update master set test_id = trim(test_id);

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 03月 07日 01時 12分 40秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

ケンキチさん、こんばんは。

初めに。。。ですが、2つSELECTがあるうち、なぜ後者のtest_idはtrimしてないんでしょうか?typo?

CHAR型(固定長)なので、8バイト未満の文字列はスペースで埋められますよね?前者のtest_idはtrimされている(前後のスペースは削除された状態)ので、test_idが8バイトでない場合はSELECTされないと思います。


で、前者のSELECT文からtrimを削除したスクリプトで試してみましたが、「12345678」や「-23----8」(「-」は実際は半角スペース)は正しくSELECTされましたが、「1234567-」はダメでした。

調べてみると、どうやらPHP4のバグのようですねぇ。。。
http://bugs.php.net/bug.php?id=14013を参照してみてください。文字列の最後にある1つ以上のスペースが削除されてしまうようです。

回避方法ですが、

・後者のSELECT文で「trim(test_id) = :tid」とする
 →「123-----」「-----123」が同一コードと見なされるし、INDEXが使われなくなるのでダメでしょう。。。
・test_idをスペース以外の文字で必ず8バイトにする
 →「00000123」など
・CHAR(8)をVARCHAR2(8)にする
 →ALTER TABLE文で一発です。文字列が8バイトでない場合があるのであれば、スクリプトの変更なしで対応可能

あたりでしょうか?


#具体的な環境とどのような条件(データなど)だとダメだったか書いていただけると、みなさんフォローしやすいと思います

ケンキチ さん 2002年 03月 06日 21時 30分 40秒

はじめまして

BIND変数を利用してOracleのテーブルからデータをSELECT使用としているのですが
どうしてもうまくいきません。

ソースは以下のような感じです。(一部)
(このソースはBIND変数の有用性を確かめようとあえてこのようなつくりにしてあります)

$conn = ocilogon("test_user","test","TESTDB");

#MASTERテーブルから全員分のTEST_IDを取得
$sql = ociparse($conn,"select trim(test_id) as test_id from master");
ocidefinebyname($sql,"TEST_ID",&$test_id);
ociexecute($sql);
$i = 0;

#SIDを全て配列に格納
while (ocifetch($sql)) {
$tid[$i] = $test_id;
$i++;
}

for ($j = 0;$j < $i-1;$j++) {
#上で取得したTEST_ID数だけもう一度MASTERに問い合わせてNAMEを取得
$sql = ociparse($conn,"select name from master where test_id = :tid");
ocidefinebyname($sql,"NAME",&$name);
ocibindbyname($sql,":TID",&$tid[$j],-1);
ociexecute($sql);
ocifetch($sql);
echo "$j...$name<BR>";
}
ocilogoff($conn);


MASTERテーブルのTEST_IDはChar(8)です。
これを、Number型のカラムに対して問い合わせると結果が返ってくるのですが
Char型であるTEST_IDに問い合わせても結果が返ってきません。

そこで、上記のBIND変数を利用したSELECT文を以下のように変更するとNAMEを取得できました。
select name from master where test_id = to_number(:tid)
(結果はBIND変数を利用しなかった場合に比べ以上に遅かったですが・・・)

Char型のカラムにBIND変数を利用して問い合わせる場合は前後に特別な
処理が必要なのでしょうか?

どなたかアドバイスいただけたら幸いです。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 03月 06日 00時 07分 43秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

いさむさん、こんばんは。

セキュリティーパッチですか?
コマンドとしては、あってるんじゃないでしょうか?

基本的には、gzip形式の「〜.patch.gz」を展開してやり(おそらくここで〜.patchファイルができる)、ソースディレクトリでpatchコマンドを実行してやればいいと思います。

逆に「このコマンドじゃないとダメ」ではないので、コマンドとしては色々あるはずです。何を使うかは、個人的な好みではないでしょうか。

いさむ さん (nika@noppo.ne.jp) 2002年 03月 05日 23時 23分 20秒

こんばんわ!!
先日はありがとうございました。

またお聞きしたい点があるのですが(^_^;)
PHPのパッチの当て方を調べているのですが
あるサイトでは

zcat hogehoge.patch.gz | patch -p0

と明記されていたのですが上記の方法でいいのか不安だったので
質問させて頂きました。

また、パッチは展開したソースディレクトリにて展開すると
書いてあった?ような気がしたのですが展開した後は
再インストールが必要なのでしょうか?

初歩的な筆問ばかりで申し訳ないのですが教えて下さい。<m(__)m>

ゆきこ さん (color_box@mail.goo.ne.jp) 2002年 03月 04日 15時 32分 56秒

こんにちは!ゆきこです!

まず結果からご報告!
日本語無事に表示されました!
ありがとうございました!本当に助かりました!

修正した部分は

1:フォントファイルのパス("C:\\WINNT\\Fonts\\MSGOTHIC.TTC)
2:test.phpのファイル形式をshift-jisに指定して保存

するときちんと日本語が表示されました!
プログラムファイルのコードとimagettftext()の変換前のコードを合わせないといけないみたいです。2をしないと文字化けしたままになってました〜。

でも本当にたすかりました!すごく感謝しています。
いつもHP見てますので、これからもがんばってくださいね!
応援してます!
ありがとうございました!

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 02月 28日 23時 07分 24秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

すみません。もう1つ。。。

> header ("Content-type: image/png");

の部分を、

> ImagePng ($im);
> ImageDestroy($img);

の直前に持ってくることで、サイズ設定やフォント設定時のエラーが表示されるようになりますので、どこでエラーが起こっているか分かるようになると思います。

また、コマンドプロンプトからphp.exeを直接実行してみて、エラーが表示されていないか、確認することもできます。

例)php.exe -q test.php

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 02月 28日 18時 25分 44秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

もう1つ。。。

php.iniを修正しただけであれば、Apacheの再起動で充分です。

#OSの再起動までは必要ありません。

サービスとして登録しているのであれば、サービスを再起動してやればOKです。コマンドプロンプトからapache.exeを実行しているのであれば、ctrl+Cで一度止めてやり、再度apache.exeを実行すればOKです。

頑張ってください。

広島県人@埼玉在住 さん 2002年 02月 28日 18時 23分 03秒

ゆきこさん、こんにちは。

> ImageTTFText($im, 1, 0, 105, 20, $text_color, "/WINNT/Fonts/MSGOTHIC.TTC", $string);

ImageTTFText($im, 1, 0, 105, 20, $text_color, "c:\\WINNT\\Fonts\\MSGOTHIC.TTC", $string);
としてやったらどうでしょう?

#「\」はエスケープされるため、2つ必要です

ゆきこ さん (color_box@mail.goo.ne.jp) 2002年 02月 28日 17時 49分 52秒

こんばんは。ゆきこです。
素早いご返答、ありがとうございました。
うれしいです〜v


1:GDのインストール確認
phpinfoでjpeg/png/wbmp/freetypeがサポートされていることを確認しました。

-------------------------------------------------
phpinfo.php
-------------------------------------------------
GD Support : enabled
GD Version : 1.6.2 or higher
FreeType : Support enabled
FreeType : Linkage with TTF library
JPG Support : enabled
PNG Support : enabled
WBMP Support : enabled


2:マルチバイト対応関数を使えるように設定
-------------------------------------------------
php.ini
-------------------------------------------------
extension=php_mbstring.dllのコメントを外しました(OS再起動)


3:テストファイルを実行
-------------------------------------------------
test.php
-------------------------------------------------
<?php

header ("Content-type: image/png");

$im = ImageCreate (100,100);
$background_color = ImageColorAllocate ($im, 255, 255, 255);
$text_color = ImageColorAllocate ($im, 233, 14, 91);

$string = mb_convert_encoding("日本語使える??", "UTF-8");
ImageTTFText($im, 1, 0, 105, 20, $text_color, "/WINNT/Fonts/MSGOTHIC.TTC", $string);

//$string = "SAMPLE IMAGE";
//ImageString($im, 30, 5, 5, $string, $text_color);

ImagePng ($im);
ImageDestroy($img);
?>
-------------------------------------------------
test.php
-------------------------------------------------

以上のファイルを実行すると×マーク(イメージなし)が
でてきてしまいました。
ImageTTFText()をImageString()に置き換えると
画像は正常に表示します。
ImageTTFText()を使うために必要な設定事項というのはあるのでしょうか?
それとも単にphp or gdのインストールや設定がうまくいっていないだけなのでしょうか…。
もし理由をお知りでしたら、ぜひ教えてください……。

こんなふうになってるのは私だけかしら…。
もうphp再インストールしたほうがいいのかなという気持ちになっています。
問題だらけのでかなりへこんでます〜。
phpの設定はいつ終わるんだろう……。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 02月 27日 22時 51分 24秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

ゆきこさん、こんばんは。

私も以前(PHP3.0.xの頃)やったことがありますが、再度確認してみました。確認した環境ですが、

・WindowsNT4.0Server
・Apache1.3.19
・PHP4.1.1(DSOとしてインストール)

な感じです。

●1:Windows2000でのGDインストール方法
 インストール方法ですが、仰るとおりでよいと思います(extension=php_gd.dllのアンコメントだけ)。

 phpinfoを表示してみれば、この時点でjpeg/png/wbmp/freetypeがサポートされていることが分かると思います。ちなみに、phpinfoの「GD Version」が「1.6.2 or higher」と表示されるのは、これ以前のgdがpngではなくgifをサポートしているため、区別するために表示されているものと思います。(Linux版でgd-1.8.3とともにコンパイルしていますが、phpinfoの表示は変わりません。gd-2.0だと変わりますが。。。)

 ちなみに、ダウンロードされたgdやlibpngは、dllですか?ひょっとしてソース?

●2:ライブラリのインストール
 これも特に必要ないと思います。

●3:上記を無事終えると、日本語は使えるようになるのでしょうか……。
 使えますよ。PHPマニュアルにも書いてありますが、マルチバイト文字を使用する場合は、utf-8にする必要があります。変換には、マルチバイト対応関数のmb_convert_encoding関数を使用すればOKです。

 例)$string = mb_convert_encoding("日本語です", "UTF-8");

 php-usersメーリングリストにも結構出てくる話題ですので、一度目を通してみると良いと思います。

 http://www.php.gr.jp/


ちなみに、以前やったネタは、http://www.pat.hi-ho.ne.jp/dimension/php/sample.shtml#gifにあります。

ひろし さん 2002年 02月 27日 20時 37分 00秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/php/index.php

すいません。自分で突っ込みますが、下のスクリプト、やはりChain of Responsibilityです。
チェックできたら即そこでチェーンが終わるからです。
まちがってほんとうにすいません。

ひろし さん 2002年 02月 27日 19時 57分 45秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/php/index.php

こんばんは。Chain of Responsibilityの記事、たいへん面白かったです。
それで、チェーンの作成の部分で非常に残念がっておられるようなので、こんな解決法はどうでしょうか。
昨年SUNからブループリントが出た、J2EEパターンからFilterパターンを用いた同じ動作のスクリプト例です。

各コンクリートクラスでコンストラクタをいちいち書かないといけないという欠点はあるのですが、チェーン(この場合はフィルタ)の作成部分は一行で書けます。

Chain of ResponsibilityとFilterパターンがこのように似通っていることは非常に興味深いと思います。

以下、そのスクリプト-------------------------------
<?php
class CheckHandler
{
var $next_;

/*
*セッター。返り値不要。
*/
function setNext(&$next){
$this->next_=$next;
}

/**
* 確認用のゲッター
*/
function getNext()
{
return $this->next_;
}

/**
* 処理の実行。これを呼び出す
*/
function check($variable)
{
if ($this->checked($variable)) {
echo $variable . ":checked by " . get_class($this) . "<BR>";
}
else if (isset($this->next_)) {
$this->next_->check($variable);
}
else {
echo $variable . ":unknown<BR>";
}
}

/**
* 実際の処理を行うメソッド。抽象的な位置づけ
*/
function checked($variable)
{
}
}

/*
* 各コンクリートフィルタにはそれぞれ次のフィルタへの
* 参照を渡すための引数が必要。
*/

class NumberCheckHandler extends CheckHandler
{
function NumberCheckHandler(&$next){
$this->setNext($next);
}

function checked($variable)
{
return preg_match("/^[0-9]+$/", $variable);
}
}
class AlphabetCheckHandler extends CheckHandler
{
function AlphabetCheckHandler(&$next){
$this->setNext($next);
}
function checked($variable)
{
return preg_match("/^[a-z]+$/i", $variable);
}
}
class MobileNumberCheckHandler extends CheckHandler
{
function MobileNumberCheckHandler(&$next){
$this->setNext($next);
}
function checked($variable)
{
return preg_match("/^0[0-9]0-[0-9]{4}-[0-9]{4}$/", $variable);
}
}

/*
* 末端フィルタクラス(何もしないフィルタ。コンストラクタが引数をとらない。)
* 本当はCheckHandlerそのもので代用できるが、意味合いを強調するためにあえて作成。
* 末端フィルタに到達したとき独自の処理は本来このクラス内に書きます。
*/
class Terminator extends CheckHandler
{
}

?>
<?php
/**
* main
* 非常に残念がっている部分が、フィルタパターンを使うとこのように書けます。
*/
$ch = new NumberCheckHandler(new AlphabetCheckHandler(new MobileNumberCheckHandler(new Terminator())));


/**
* セットされているかチェック
*/
echo "\$ch=".get_class($ch)."<br/>";
$tmp = $ch->getNext();
echo "\$tmp=".get_class($tmp)."<br/>";
$tmp = $tmp->getNext();
echo "\$tmp=".get_class($tmp)."<br/>";
$tmp = $tmp->getNext();
echo "\$tmp=".get_class($tmp)."<br/>";
$tmp = $tmp->getNext();
echo "\$tmp=".get_class($tmp)."<br/>";

/**
* 動作のチェック
*/
$ch->check("090-1234-5678");
$ch->check("09012345678");
$ch->check("chain_of_responsibility");
$ch->check("hoge");
?>

ゆきこ さん (color_box@mail.goo.ne.jp) 2002年 02月 27日 16時 36分 46秒

いつも拝見させていただいています。
Oracle関連やWin上でのphpインストール手順など、探していた情報たくさんあって活用させてもらってます!

実は今GDのインストール手順がわからず困っているので、本当はここで聞くべきではないかもしれないのですが、お力をかしていただきたいと思い書き込んでいる次第です。

こちらのHPにもGDに関するページがあり拝読させていただいたのですがわからないところが多数あり、思い切って質問させていただきました。

<<Windows2000上でのGDインストール手順について>>

■環境■
OS:Windows2000
Server:Apache1.3.22
PHP:4.1.1

■目標■
pngで日本語文字列を表示したい。

■わからない事■
1:Windows2000でのGDインストール方法
php4.1.1インストール時に、php.iniのextension=php_gd.dllのコメントを外し、osを再起動するとgd(ver1.6.2)を使えます。これはgdをインストールしたといえるのでしょうか?
最新版gd1.8.4をダウンロードしてきたのですが、インストール方法がわかりません。
解説書を探したのですが…なくて……。

2:ライブラリのインストール
libpng,FreeTypeライブラリ,zlibなど必要なライブラリをダウンロード(zip)し解凍したのですが、その後どうすればいいのかわかりません。Windowsでのインストール方法を教えてください……。

3:上記を無事終えると、日本語は使えるようになるのでしょうか……。

個人的な掲示板に、このように質問を羅列してしまい、本当に申し訳なく思っています。
もしなにか参考になるページお知りでしたら、それを教えていただくだけでもかまいませんのでよろしくお願いします。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 02月 24日 23時 03分 13秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

せいやさん、こんばんは。

#個人的な意見は書かせてもらいましたが、保証はできませんので。。。

ソフト的であれば、OSユーザーの限定や認証方法(ワンタイムパスワードなど)、Apache以外の不要なサービス(telnetやftp、sambaなど)を停止することでサーバにログインできる口を限定し、ユーザー権限を絞り込むことである程度「見られなく」する事は可能と思います。

物理的な保護であれば、筐体の開閉部分、HDDとコネクタ、HDDとベイの間に封印を張っておくとか?(HDDの丸ごとコピー対策になるかな?)

もちろん、契約面でも縛る必要はあるでしょう。

でも、コピーしそうな取引先にはレンタルしないのが一番のような気が。。。

せいや さん (sinsore@excite.co.jp) 2002年 02月 24日 15時 15分 28秒

PHPでウェブグループウェアを作っているのですが、そのグループウェアを取引先にサーバーごと渡したいと思っているのですが、不正にハードドライブをコピーされないように、どうにかソースを隠すことが出来ないものでしょうか? 1クライアント「いくら」で契約するため、最初にサンプルで無料にて貸し出すサーバーをコピーされては困るので悩んでいます。

いさむ さん (nika@noppo.ne.jp) 2002年 02月 24日 00時 41分 59秒

広島県人@埼玉在住 さん
こんばんわ

返事有り難うございました。
ご指摘通り、古いGDが存在していました(^_^;)
初心者なものですいませんでした。
勉強になりました。

指示して頂いた通り行いインストールも無事終了いたしました。
本当に有り難うございました。

また質問等してしまうかもしれませんが今後とも宜しくお願いします。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 02月 23日 14時 57分 29秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

いさむさん、こんにちは。

GDはソースからのインストールですか?それともrpmか何かのパッケージですか?

内容からは、「ソースからインストールしたが、rpmでインストールされているもの(gifを作成する古いバージョン)がmake時に使われている」感じがします。

PHPのconfigureオプションで「--with-gd=/usr」としているので/usr/lib/libgd.so.1.8.3があるはずですので、確認してみてください。

もしソースからGDをインストールしたなら、/usr/local/libあたりにインストールされていると思いますので、「--with-gd=/usr/local」などとすると良いと思います。

いさむ さん (nika@noppo.ne.jp) 2002年 02月 22日 22時 01分 33秒

PHP4.1.0にてGD−1.8.4を使用したいのですが
PHPの再インストールでエラーがでてしまい困っています。

./configure --enable-mbstring --enable-mbstr-enc-trans --with-apxs=/usr/local/httpd/bin/apxs --with-pgsql=/usr/local/pgsql --with-gd=/usr --with-jpeg-dir=/usr

上記のオプションでインストールをしようとしているのですが

make を実行すると

php_gd.h:69: warning: static declaration for `gdImageColorResolve' follows non-static
gd.c:92: conflicting types for `gdIOCtx'
/usr/local/include/gd_io.h:18: previous declaration of `gdIOCtx'
gd.c: In function `zif_imagecreatefromgif':
gd.c:1203: `gdImageCreateFromGif' undeclared (first use in this function)
gd.c:1203: (Each undeclared identifier is reported only once
gd.c:1203: for each function it appears in.)
gd.c: In function `zif_imagegif':
gd.c:1432: `gdImageGif' undeclared (first use in this function)
make[3]: *** [gd.lo] Error 1
make[3]: Leaving directory `/usr/local/src/php-4.1.0/ext/gd'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/src/php-4.1.0/ext/gd'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/php-4.1.0/ext'
make: *** [all-recursive] Error 1

上記のエラーで落ちてしまいます。

GD−1.8.4はすでにインストールは終わっているのですが
何がいけないのでしょうか?

長々と書いてしまいましたが誰か教えて下さい。

キューブ さん (cube@alaska.co.jp) 2002年 02月 22日 20時 45分 27秒

広島県人@埼玉在住 様 >
お返事ありがとうございます。
どうも、rm configure ./buildconf の手順が抜けてたみたいです。
ご指導のとうりやってみたところ、libtool4の依存関係でrpm4..やらdb3-..やら
いろいろアップデートしてなんとか無事にインストールできました。(泣)ありがとうございます。
linuxもphpも初心者なのでコマンドひとつ調べるのに四苦八苦してます。これからも脱windowsをめざしてがんばって勉強します(泣)

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 02月 22日 04時 15分 51秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

ひろしさん、こんばんは。

PHPDoc、良いですよ。
実際、クラス類を階層化したのは、ひろしさんが仰るとおり、変なPHPファイルがあるとそれもドキュメント化対象になってしまうからです。。。(^-^;

#テスト用スクリプトやテンポラリなど。。。

今は、クラススクリプトとテスト用スクリプトで階層を別にしています。

そろそろテスト用スクリプトをPHPUnitにしたいな。。。ま、そのうちやります(^-^;

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 02月 22日 04時 09分 23秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

キューブさん、こんばんは。

phpinfoでmbregexの項目が表示されていないということは、インストールに失敗していますね。。。

インストールの手順ですが、以下の点をチェックしてみてください。
1.php4ソースの解凍先
2.php4_mbregex-1.3.1.tar.gzの解凍先
3.2を1/ext/に解凍した場合、1で「rm configure」「./buildconf」を行ったあとにconfigureを実行したかどうか?
4.2を3以外のディレクトリに解凍した場合、付属のREADME.jaにある手順でインストールしているか?また、php.iniの設定を行った&正しいか?

こちらも3の手順で試してみましたが、libtoolが1.4以上でないとbuildconfが動きませんでしたが、automakeと共にrpm -Uvhするとあとはスムーズにコンパイル終了&動作チェックできました。

ちなみに、サンプルはphp-usersに流れてた以下のようなものです。

<?php
$strS = "ラーメン大好き";
$strEreg = "ラーメン";
print ereg_replace("$strEreg", "<B>$strEreg</B>", $strS);
?>

ひろし さん 2002年 02月 22日 00時 54分 41秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/php/index.php

こんばんは。
記事を読んで、PHPDocを初めて使ってみました。
なんとも便利なツールですねぇ。

しかし、過去の中途半端に作ったクラスまでドキュメント化されたり、今までパッケージを全く考えずにつくってたりで、ちょっとへこんでしまいました。
今後は整理しながらクラスを作っていきたいです。

キューブ さん (cube@alaska.co.jp) 2002年 02月 21日 21時 18分 49秒

はじめまして、キューブと申します。最近PHPを仕事で使うようになり、こちらのサイトをよく拝見させていただいてます。

質問なのですが、php4.1.1とmbregex1.3.1をインストールして日本語の正規表現(mberg)を使用したところ、
画面が真っ白になり、つかえませんでした。
phpinfo で情報を見てみるとmbregexの項目が表示されていないので、インストールに失敗したのだと思います。

ちなみに、環境が
redhatlinux 6.2
apache1.3.20
php4.1.1
mbregex1.3.1
です。
phpのインストールのオプションは以下のようにしました。
'./configure'
'--with-apxs=/usr/local/apache/bin/apxs'
'--with-oracle=/app/ora817/product/8.1.7/'
'--with-oci8=/app/ora817/product/8.1.7/'
'--enable-sigchild'
'--enable-mbstring'
'--enable-mbstr-enc-trans'
'--enable-mbregex'
'--without-mysql'
なにがいけなかったのかわからず悩んでいます。
よろしければお力添えをよろしくお願いします。

ひろし さん 2002年 02月 20日 11時 58分 23秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/php/index.php?type=top

今気づいたのですが、リンクありがとうございます。
これからもよろしくお願いします。

PHPでデザインパターンの記事、面白かったです。特にSingleton。
staticがPHPでも使えるのは初めて知りました。やはりマニュアルには隅々目を通さないといけませんね。
それでは。

HASHIZIME さん 2002年 02月 10日 14時 13分 23秒

HASHIZUMEと申します。

以前にローディングの件でご相談したものです
ご無沙汰してしまい申し訳ありませんでした。

助言いただいたPHPのバージョンを変えての実験をする
許可が下りなくてなかなか実験出来ていません・・・。
実験が出来ましたらその結果を書き込みたいと思います

>ユーザーがSELECTするテーブルとSQL*Loaderでロードする
>テーブルは同一のものでしょうか?
これは同一のものです。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 01月 31日 22時 10分 04秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

ひろしさん、こんばんは。

徹夜、ご苦労様でした(^-^;
php-usersにも流れてましたね。JSPと言うよりは、私はJakartaのVelocityを想像してしまいました。
今後どんなネタが出てくるか、楽しみにしてます。

ひろし さん (ayu@e-fukuoka.co.jp) 2002年 01月 31日 07時 17分 17秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/php/index.php?type=top

管理者さま>僕も触発されて、PHPサイトを作ってみました。↑
内容少ないのですが、とびきりのネタ1つだけを掲載しています。
これからもっともっとマニアックなネタをふやすつもりです。

サイトデザインが貴サイトと似てるのは偶然です。僕の元の日記サイトが偶然似たデザインでして、その流用なのです。

というか、久しぶりに徹夜しました。あああ、、、仕事が、、、。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 01月 29日 18時 45分 43秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

rikaponさん、ひろしさん、yu-kiさん。こんにちは。

rikaponさん:
PHPLibはやったことが皆無なのですが、PHP3であればphp3.ini打と思うんですが、修正しているのはphp.iniですか?

http://www.php.gr.jp/php/phplib/
http://isweb13.infoseek.co.jp/computer/yabiku/phplib_install.html

辺りを再度チェックしてみると良いかも知れません。


ひろしさん:
デザインパターンのネタはやろうと思ってまして、確かにJavaと違って、同じパターンでも標準のPHP関数を使うと、かなり別物みたいな実装もできるようです(Iteratorパターンとか)。
また、サイト構築時のパターンは、面白いかも知れませんね。

yu-kiさん:
是非チャレンジしてみてください。

yu-ki さん 2002年 01月 28日 20時 25分 15秒

こんにちはyu-kiです
わざわざサンプルまで書いていただいたのに申し訳ないです。
普通にメソッドにしてしまいました。
次回のVerUPでオブジェクト指向を目指そうと思います。

という訳で一応完成です。
http://craftsq.adam.ne.jp/phpscript/domxml_sq.htm

ひろし さん (ayu@e-fukuoka.co.jp) 2002年 01月 28日 18時 52分 47秒
URL:http://hoover.ktplan.ne.jp/kaihatsu/

はじめまして。PHPを仕事で使っているものです。
このサイト、いつも興味深く見ております。

さて、PHPでサイトを作るときに皆さんがつかっている面白いテクニックをパターン言語的にあつめたら面白いのではないかと思います。GoFの移植というのではなく、PHPでサイトを作るとき独特の技巧を共有できたらおもしろいのではないでしょうか。
なにかみなさんはそういうものを日常使ってないでしょうか。
以下、僕が考えたパターンの一例です。感想お待ちしております。
--------------------------------------------------
[名称]
サイトのルートディレクトリを求めるパターン

[概要]
何階層かのディレクトリにわたるサイトをいくつかのファイルに分けて作るときに、おおもとのルートディレクトリにあたるディレクトリを特定する方法。

[背景]
Webサーバーのドキュメントルートディレクトリのサブディレクトリにサイトを構成する場合を考える。例えば、/~hoge/以下にサイトを置く場合などである。
複雑なサイトを作る場合はディレクトリをさらに何階層にもわけてスクリプトを配置することがある。
そのような場合に、PHPスクリプト冒頭のinclude文(or require文)に記述するインクルードパスは複雑であり、かつ、そのスクリプトの置いてあるディレクトリ階層によってさまざまに異なる。
かといって、なんでもかんでもPHPのインクルードパス設定で解決するのでは移植性に欠けるし、レンタルサーバーなどではその設定を変更できないことすらある。

[適用の可能性]
階層の複雑なサイトを、いくつかの部品ファイルに分けて作り上げたいとき。

[解]
ルートディレクトリに特定の名前の空ファイルを置く。
スクリプトの最初でディレクトリをさかのぼって行き、そのファイルを見つけたらそこをルートディレクトリとみなす。

[実装]
仮にroot.dirというファイル名の空ファイルをルートディレクトリに置くとする。
include文を書く必要があるスクリプトの最初に以下の命令を書くと$rootdirにルートディレクトリへのパスが格納される。
//--------------------------------------
if(!$rootdir)
while(1){
if(file_exists($rootdir."root.dir")) break;
$rootdir.="../";
}
//--------------------------------------■

あとは、

//--------------------------------------
include($rootdir."tools/file1.inc");
include($rootdir."tools/file2.inc");
//--------------------------------------■

などと書いていけばよい。

[結果]
PHPスクリプトの最初の部分のinclude文の羅列部分の記述をどこに置いてあるPHPファイルでも同じになるようにできる。
したがって、サイトを部品に分けて手軽に開発できるようになる。

rikapon さん 2002年 01月 28日 13時 10分 50秒

PHP3にPHPLIBが上手く組み込めずに、ここ数日セッション管理の実現に梃子摺ってます。確認してphp.iniの書き換えも行い、その他の設定ファイルも確認して書き換えをしたのですが、駄目でした。php.iniの置き場所を間違えているのでしょうか。現在、そのくらいしか心当たりがありません、、、PHPLIB組み込み経験のある方、アドバイスをよろしくお願いします。


yu-ki さん 2002年 01月 25日 15時 38分 11秒

わざわざサンプルまで書いていただいてありがとうございました
私もまだまだ勉強不足なので精進します
上手くいったらご報告します

PHP初心者 さん 2002年 01月 25日 12時 56分 06秒

広島県人@埼玉在住さん、返事ありがとうございます。
文章が足りなくて申し訳有りませんでした。

さて結果ですが・・・

PHP.iniの[;extension=php_fdf.dll]のコメントを
はずし、アドビのサイトから入手したFDFToolkitのdll
[FDFtk.dll]をc:\winnt\system32へCOPYすることで
なんとなりそうです。

ありがとうございました。


広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 01月 25日 11時 20分 08秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

yu-kiさん、こんにちは。

#私もオブジェクト指向については、まだまだ勉強中ですが。。。

再帰的な構造を作るのであれば、Compositパターンでしょうか。

#「継承」ではなく「委譲」を使います

簡単ですが、以下のようなサンプルを作ってみました。Nodeクラス自身が、他のNodeクラスのインスタンスを保持している状態です。

<?php
class Node
{
var $children_;
var $name_;
var $val_;

/**
* コンストラクタ
*/
function Node($name)
{
$this->name_ = $name;
$this->children_ = array();
}

/**
* 子要素を追加する
*/
function add($node) {
array_push($this->children_, $node);
return $this;
}

function getName() {
return $this->name_;
}

function getValue() {
return $this->val_;
}

function setValue($val) {
$this->val_ = $val;
}

/**
* 結果ツリー(?)を返す
*/
function getResult() {
$ret = "<" . $this->getName() . ">";
$ret .= $this->getValue() . "\n";

//子要素の結果ツリーを得る
foreach ($this->children_ as $key => $val) {
$ret .= $this->children_[$key]->getResult();
}

$ret .= "</" . $this->getName() . ">" . "\n";

return $ret;
}
}
?>
<?php
/**
* ここからサンプルプログラム
*/
$root = new Node("html");

$head = new Node("head");
$title = new Node("title");
$title->setValue("テスト");
$head->add($title);
$root->add($head);

$body = new Node("body");
$h3 = new Node("h3");
$h3->setValue("Nodeクラスのテストです。");
$body->add($h3);
$root->add($body);

echo $root->getResult();
?>

yu-ki さん 2002年 01月 25日 02時 53分 01秒

こんばんはyu-kiです
クラスについてわからないことがあるので、知ってたら教えてください
domxml等の関数で
  $xmldata = new domclass
  $root = $xmldata->root()
  $child1 = $root->child()
  $child2 = $child1->child()
  $child3 = $child2->child()
というような操作をする関数がありますが、こういう操作をするPHPのクラスってどうやって作るんでしょうか?
  class ClassA extends ClassA
という風にすればいいんでしょうか?
どこで再帰構造にするのかがよくわかりません。

クラスについてよくわかってないものでくだらない質問かもしれませんが、もしわかるんでしたら教えてください。

広島県人@埼玉在住 さん (dimension@pat.hi-ho.ne.jp) 2002年 01月 25日 00時 50分 06秒
URL:http://www.pat.hi-ho.ne.jp/dimension/

PHP初心者さん、こんばんは。

んー。。。ご自分で調べたりしてみましたか?
失礼ですが、あなたの文章からでは、それが分かりません。

#「どういうことをやって、どこでつまづいている」から「分かりません」なのか。。。

Google(http://www.google.co.jp/)で検索するだけでも、結構情報は出てくるはずです。


で、本題ですが、Windows版PHPのインストール手順は、PHPマニュアル(http://www.php.net/manual/ja/html/install.windows.html)にかなり詳しく載っていますが、ご覧になったでしょうか?
このページを読んでいただければ、php.ini中の

;extension=php_fdf.dll

の行コメントを外せばどうにかなりそう、ということが分かると思います。
私自身、FDFが何者かよく分かってないですが、PHPマニュアルのForms Data Format関数のページ(http://www.php.net/manual/ja/html/ref.fdf.html)にあるサンプルをそのまま実行したとき、「Fatal error: Call to undefined function」なエラーは出てきませんでしたので、おそらく大丈夫と思います。

ちなみに環境は、

・WindowsNT4.0 Server + SP6
・Apache1.3.19 for win32
・PHP4.0.6 for win32

です。

PHP初心者 さん 2002年 01月 24日 10時 55分 49秒

お世話になります。
下記の条件で、FDFToolKitをインストールしてFDF関数を利用したいのですが
インストール方法がよく分かりません。教えていただけませんか?

利用環境は「WIN-NT+Apache+PHP406」です。

久森 さん (hisamori@mit-sys.co.jp) 2002年 01月 22日 09時 06分 21秒

ありがとうございます。
お教えいただいたキーワードをもとに
探してみたいと思います。

区切り線
HOME | SECURITY | INSTALL | SAMPLE | TROUBLE | TIPS | BOOK | LINKS | BBS