【PHP】PEAR Part2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/08/01(月) 21:27:12ID:pG+mahP3■PEAR
http://pear.php.net/
■前スレ
Pear
http://pc8.2ch.net/test/read.cgi/php/985665522/
0713nobodyさん
2007/02/06(火) 16:22:33ID:???ディレクトリセパレータでは?
include_path = ".;C:\httpd142p\php5\PEAR"
0714nobodyさん
2007/02/06(火) 16:30:00ID:???Warning: require_once(Net/Socket.php) [function.require-once]: failed to open stream: No such file or directory in C:\httpd142p\php5\PEAR\HTTP\Request.php on line 47
Fatal error: require_once() [function.require]: Failed opening required 'Net/Socket.php' (include_path='.;C:\httpd142p\php5\PEAR\') in C:\httpd142p\php5\PEAR\HTTP\Request.php on line 47
ふぅ〜。。どうしたもんですかね
0715nobodyさん
2007/02/06(火) 16:42:08ID:???これ一行だけのソースでもNo such 〜になる?
C:\httpd142p\php5\PEAR\Net
でアドレスバー叩いてちゃんとSocket.phpはあるかい?
0716nobodyさん
2007/02/06(火) 17:02:55ID:???Socket.phpとURL.phpダウンして入れたところ正常に動きました。
ふぅ〜。ありがとうございましたm(_ _)m。
0717nobodyさん
2007/02/06(火) 17:22:12ID:???>該当箇所にはちゃんとPearファイルがあるのにエラーになってしまいます。
>該当箇所にはちゃんとPearファイルがあるのにエラーになってしまいます。
>該当箇所にはちゃんとPearファイルがあるのにエラーになってしまいます。
0718nobodyさん
2007/02/06(火) 17:54:04ID:NJuIco/q{
exit( "不正なリクエストでおじゃる" );
}
$hoge = $_POST["hoge"] ? $_POST["hoge"] : "";
こういうソースがあったのですが、リクエストのメソッドを調べる
意味ってあるのですか?
万が一、引数が GET で渡されてたとしても、それが $_POST に代入される
ということがありえるのでしょうか。
0719nobodyさん
2007/02/06(火) 17:56:37ID:???0720nobodyさん
2007/02/06(火) 20:46:38ID:???GET引数に "GLOBALS[_POST][hoge]" とかそんな感じで
外から $_POST に値を入れられちゃう糞バグがあったような気がしんぐ
0721718
2007/02/06(火) 21:33:11ID:NJuIco/q>>718は誤爆です。
0722718
2007/02/06(火) 21:36:03ID:NJuIco/qそうだったのですか。
もうちょっと調べてみます。ありがとうございました。
0723nobodyさん
2007/02/14(水) 07:44:29ID:HWr8LnC4今html_ajaxでいろいろやってるのですが、
html_ajaxでプロキシアクセスをしてる場合のpostで通信してるのですか?getですか?
access_logをみてみると、両方のような気がするのですが。
またpostの場合、sessionでの接続ができますか?どのようにsidを送るのでしょうか?
よろしくお願いいたします。
0724nobodyさん
2007/02/14(水) 16:20:33ID:pTwqj5vm0725nobodyさん
2007/02/15(木) 01:48:19ID:???0726nobodyさん
2007/02/15(木) 02:10:56ID:202bzPy70727nobodyさん
2007/02/15(木) 17:56:46ID:kYaagmVU0728nobodyさん
2007/02/15(木) 18:18:00ID:???誰でもすぐに馴染める使いやすいパッケージは
・PHPUnit
・PhpDocumentor
・PEAR
・MDB2(+Driver)
・HTTP_Request
・Cache_Lite
・Log
あたりとか?
もうPHP4でしか使う機会がないな
PHP5でいいならフレームワークに付属ので間に合わすか、
ZFのライブラリを使う
0729nobodyさん
2007/02/15(木) 19:29:34ID:???0730nobodyさん
2007/02/15(木) 21:50:13ID:l05otmqr0731nobodyさん
2007/02/16(金) 09:32:26ID:???0732nobodyさん
2007/02/17(土) 12:31:18ID:???入力→確認→登録みたいな感じです。
出せる場合はどのようにしたら良いのでしょうか、、?
0733nobodyさん
2007/02/17(土) 12:33:24ID:???0734nobodyさん
2007/02/17(土) 14:54:17ID:???0735732
2007/02/21(水) 05:59:51ID:???やってみる!ありがとう。
0736nobodyさん
2007/02/22(木) 14:28:49ID:3Rwtxk4JJava でよく使われているもののほぼコピー?
0737nobodyさん
2007/02/22(木) 18:02:36ID:???PHP4でFirebirdのある限り
DBを使いつづける選択肢しかないんだよなぁ。
0738nobodyさん
2007/02/22(木) 22:53:30ID:Ua9elyJaスクリプトでMDB2を用いる際に、いちいちDSNやエラーチェックをすると
コードが冗長になってしまいます。
みなさんはどうしていますか?
私が考えたのは、例えば 'DataBase' というクラス(MDB2のクラスを継承)を定義して
そこから使うのがよいかと思っています。
これについて何か参考になるドキュメントがありましたら
ぜひ教えてください。よろしくお願いします。
0739nobodyさん
2007/02/23(金) 23:08:52ID:yQax9a0k何を学ぶかの取捨選択が大事だと思います
HTML_QuickFormのほかに、これには手を出すなというのはありますか?
0740nobodyさん
2007/02/23(金) 23:33:13ID:???HTML_QuickForm_Controller/DB/DB_DataObject/Auth/Auth_HTTP/Cache_Lite
このくらいかな…
0741nobodyさん
2007/02/24(土) 05:53:48ID:UYU7E5V9MySQLにパスワードと名前を入れておいて、そこを読み取って認証するという
単純な認証を試しに作ってみたのですが、どうも巧く行きません。
具体的には、どのような入力をしても、以下の「MyAuth.php」のswitch($status)でdefaultが選ばれてしまうので、困っています。
どなたか、アドバイスをください。
以下、ソースコードです。
0742これらは、全て同じ階層のフォルダに入ってます
2007/02/24(土) 05:57:38ID:UYU7E5V9<?php
$documentroot=dirname(__FILE__) . '/';
require_once($documentroot . 'config.php');
require_once ('Auth/Auth.php');
function loginFunction ($usr,$status){
switch($status){
case AUTH_IDLED :
case AUTH_EXPIRED :
$err='ログイン期限が切れています。再ログインしてください';break;
case AUTH_WRONG_LOGIN :
$err='メールアドレス/パスワードが間違っています';break;
default:
print ("default");
}
require_once('login.php');
}
$params=array(
'dsn'=> _DSN,
'table'=>'member_table',
'usernamecol'=>'userxxxx',
'passwordcol'=>'password',
'cryptType' => 'MD5',
'db_fields'=>'*');
$myAuth=new Auth('DB', $params, 'loginFunction');
$myAuth->start();
if(!$myAuth->getAuth()){
exit();
}
?>
0743これらは、全て同じ階層のフォルダに入ってます
2007/02/24(土) 05:59:12ID:UYU7E5V9<html><head><title>ログインページ</title></head>
<body>
<form method =" POST" action ="<?php print ($_SERVER ['PHP_SELF']) ?>" >
<table border="0">
<tr><th alight="right">メールアドレス</th>
<td><input type="text" name="username" size="30" maxlength="50" /></td></tr>
<tr><th alight="right">パスワード</th>
<td><input type="password" name="password" size="30" maxlength="50" /></td></tr>
<tr><td colspan="2"><input type="submit" value="ログイン" /></td></tr>
</table>
<font color="Red"><?php print($err); ?> </font>
</form></body></html>
//config.php
<?php
define("_DB_USER", "db_user");
define("_DB_PASS", "pass");
define("_DB_HOST", "localhost");
define("_DB_NAME", "db");
define("_DB_TYPE", "mysql");
define("_DSN", _DB_TYPE . '://' . _DB_USER . ':' . _DB_PASS . '@' . _DB_HOST . '/' . _DB_NAME);
?>
以上です。長々とスミマセン。
0746nobodyさん
2007/02/28(水) 08:54:35ID:ZY+YimwXDB_DataObjectがよさげだとおもって、ちょっと読んで
軽く使ってみたのですが
これってSQLだけgetすることは出来ないのでしょうか?
接続にはDBとかMDBは遅いのでPDOを使いたいのですけど・・・
良いのありませんかね?
dinolibっていうのも使ってみたけど、古いし、イマイチ。
DB_DataObjectはマジで便利そうなんだけど・・・
0747nobodyさん
2007/02/28(水) 14:56:36ID:???0748nobodyさん
2007/02/28(水) 20:30:47ID:???おれも以前に似たような要求で色々と調べたけど
"_" から始まる名前の(PEAR規約で private 扱いの)メソッドやら変数やらをアレコレしないと
生 SQL のみを取得することはできなかったっす
0749745
2007/02/28(水) 21:39:38ID:???SQL生成から実行まで、一つのメソッドでやってた。
あれを改造しちゃうか・・・
DBかMDB2を使うか
他のSQLビルダを探すか
自分で作っちゃうか
とりあえずここ過疎化してるので
PHP版に移住します。お騒がせしました。
0750745
2007/02/28(水) 23:20:38ID:ZY+YimwXすいません。板のURLが変わってたんですね
2chブラウザ使ってるのでレスが付いてないのかと思っちゃいました。
SQLビルダ作るかな〜
0751nobodyさん
2007/03/01(木) 01:32:14ID:???0752745
2007/03/01(木) 10:39:52ID:vEHHBeZ0純粋にクエリーを発行して配列にオブジェクトを格納するところまでの時間を計測したんですけど
PDO::FETCH_CLASSとかpg_fetch_object(postgresqlなら)を使うと
シチュエーションによっては10倍近い速さなんですよね。
だからSQLビルダだけ使えないかと思ったわけでして。
ただ、取得するデータ件数が少ないと、速度差はごくわずかなので
LIMITで絞ってページングすればほとんど変わらない気もするし・・・
DB_DataObject使うとSQLインジェクションとかプレイスフォルダ使わなくて
ばっちり対策済みなんでしょうか?
もうちょっと色々試してみます・・・
すごい良く出来てると思うので、気になるのは速度だけなんだよな〜
0753nobodyさん
2007/03/01(木) 11:20:12ID:???PHP4しか使えませんな環境ならしょうがないかもしれんが
最近のフレームワークのO/Rマッパの実装を調べた方がいいと思うよ
ZFやsymfonyで使ってるpropelとかもPDOのアダプタが用意されてるだろう
SQLビルダならPEARにもDB_QueryToolとかあるけど
SQLビルダっつー仕組み自体が古いというかいけてないと思う
基本O/RマッパでシンプルなDBアクセスは
SQLなんて一切気にすることなく操作できて
3つも4つもJOINするような複雑なクエリになる場合は
SQL書いて取得するっていうスタイルが今の流れで
それは理にかなってると思う
実際WEBアプリで必要になるSQLなんてのは
大抵の場合7〜8割方定型でシンプルなクエリだから
複雑なSQLはビルダで組み立てなくても直で書けばいい
ビルダでどうやって複雑なSQLを組み立てるか考えるのは本末転倒
オレオレO/Rマッパ書くためにSQL組み立てる層を書くのが面倒だから
SQLビルダだけ欲しいみたいな感覚ならまあわかるが
INSERT/UPDATE/DELETEは割と簡単に書けるし
SELECTはZFのZend_Db_Selectあたりを参考にするといいんじゃない
0754nobodyさん
2007/03/01(木) 11:23:12ID:???あなたの言っている全ての機能はDB_DataObjectにも実装されていますが?
それにフレームワーク固有のコードを書いていたら汎用性が全く無くなってしまう。
それこそ、自己満足の時代に逆境したプログラミングでしかない。
0755nobodyさん
2007/03/01(木) 11:29:52ID:???0756nobodyさん
2007/03/01(木) 11:45:56ID:???pdo がいいなら PEAR::DB とインタフェース互換で pdo 直接叩くようなのを書けばいいんじゃないかな
てか書いたら公開してくれw
0757nobodyさん
2007/03/01(木) 12:33:14ID:???別にDB_DataObjectが機能不足だなんて書いてないし
俺もDBやDB_DataObjectを経て来た上で書いている
あとZend_Dbやpropelにフレームワーク固有のコードとかない
それぞれ独立したライブラリとして作られている
てかDB扱うライブラリに普通FW固有のコードなんて書かない
もうちょっと色んなライブラリ見渡してみてもいいと思うよ
0758nobodyさん
2007/03/01(木) 12:37:31ID:???フレームワークをなんだと思ってるんだ?
0759nobodyさん
2007/03/01(木) 15:51:00ID:???MDB2って、なんかDBに比べて不便になってる
気がするんですが、気のせいでしょうか?
insertやupdateの手順がまんどくさくなってるよな。。。
0760nobodyさん
2007/03/08(木) 12:27:01ID:???Fatal error: Cannot redeclare callback1() (previously declared in c:\path\file.php:100)
以下のようにしたい場合はどうすればいいでしょうか?
if($objForm->validate()){
$objForm->process('callback1');
$objForm->process('callback2');
}
0761nobodyさん
2007/03/08(木) 12:31:50ID:???0762760
2007/03/08(木) 14:00:23ID:???仰る通りでした。ありがとうございました。
補足としては、実はと言っては怒られそうではありますが、
クラス内にprocess()を呼び出すメソッドを作り、その中にコールバック関数を定義しておりました。
このような感じ。
class Form extends HTML_QuickForm{
function actProcess($callbackFuncName){
function callbackFunc1(){...}
function callbackFunc2(){...}
return $this->process($callbackFuncName, false);
}
}
ですので、actProcess()を2回目に呼び出すと、
callbackFunc1(),callbackFunc2()がもう一度定義されエラーになっていた模様です。
調べたところ、コールバック関数をprocess()呼び出しのメソッド外に置き、
process()の第一引数をarray(&$this, 'callbackFuncName')のようにすると良い事が分かりました。
以下のような感じ。
class Form extends HTML_QuickForm{
function actProcess($callbackFuncName)
{
return $this->process(array(&$this, $callbackFuncName), false);
}
function callbackFunc1(){...}
function callbackFunc2(){...}
}
0763nobodyさん
2007/03/09(金) 15:56:39ID:???$pear upgrade PEAR
をやったら
PEAR 1.5.1 stable
に無事アップデートできたみたいなんですが、良く見ると
/usr/bin/pear
が無くなってしまった様です。
/usr/share/pear/pearcmd.php
を直接実行しようとしてもエラーが出て、中身を見てみると
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 5 |
// +----------------------------------------------------------------------+
//....'
になっています。
一旦phpを再インストールするしか復旧する方法は無いでしょうか?
0764nobodyさん
2007/03/09(金) 16:07:36ID:???whichとfindで探しても全くでてこない?
0765nobodyさん
2007/03/09(金) 16:18:35ID:???これにmultiple属性を設定するにはどんな書式にすればいいんでしょうか?
$QuickForm->addElement('select',);
みたいな書式でできるんでしょうか・・・?
0766763
2007/03/09(金) 19:18:19ID:???取り合えず、同一構成の別サーバからpearコマンドとpearディレクトリごと持ってきて入れ替えたら
$pear list
INSTALLED PACKAGES:
===================
....
PEAR 1.1 stable
....
となっていて、ここから再度アップグレードして見ました
$sudo pear upgrade PEAR
downloading PEAR-1.5.1.tgz ...
...done: 290,252 bytes
upgrade ok: PEAR 1.5.1
$pear list
pear: Command not found.
Exit 1
で、
$find / -name "pear"
してもコマンドは見つからないですね・・・家の環境だけなのか?
0767nobodyさん
2007/03/09(金) 21:25:55ID:???そりゃ消えようがしゃあないな
アップグレード時にbinにコピーできなかったとか
go-pearでPEARだけ入れ直したらいいんじゃね
0769nobodyさん
2007/03/09(金) 23:08:13ID:bGciLmRc0770nobodyさん
2007/03/11(日) 00:25:48ID:???ttp://www.townmedia.org/tips/PEAR/HTML_QuickForm.html
2-2 addElementで使える要素一覧
をみるかぎり、select のarg5に入れればなんでもアリじゃないでしょうか?
0771nobodyさん
2007/03/13(火) 18:35:18ID:???別の場所で別の人が同じ ID/PW でログインできますが、
これを拒否する方法はどういうものがあるでしょうか。
( 後からログインした人を拒否できると嬉しいです )
0772nobodyさん
2007/03/13(火) 20:09:42ID:???同一ユーザ名ログインの時には、それに対応するセッションIDが残ってるかどうかチェックして
なきゃそれでOK。
でも同一ユーザ名・パスワードの複数保持なんていうのがそもそもセキュリティ的にラフすぎ。
0773nobodyさん
2007/03/14(水) 09:34:15ID:???ありがとうございます。
何かの拍子に ID/PW が漏れた場合、
同時にアクセスされたら漏洩発覚!としたかったんです。
0775nobodyさん
2007/03/14(水) 12:37:17ID:???操作ミスなり回線不良なりでCookieあぼーんすると
直ぐにログインできないってことになる。
0776nobodyさん
2007/03/14(水) 12:59:55ID:???0780nobodyさん
2007/03/14(水) 14:43:11ID:???0783nobodyさん
2007/03/14(水) 19:03:09ID:???ストリーミングサイトだったら通信継続してるから
感知して第二ユーザはキック出来るけど、そうじゃなきゃ>>775のような
ケースでクレーム来るほうが怖いからなあ。
0784nobodyさん
2007/03/14(水) 19:07:01ID:???0785nobodyさん
2007/03/14(水) 19:12:34ID:???0786nobodyさん
2007/03/14(水) 19:21:48ID:???0787nobodyさん
2007/03/14(水) 23:04:39ID:???10分以内に通信無きゃ強制ログアウトっていうのが許されるサイトなら問題が少なくなる。
最大10分の再ログインラグが出るけどね。
0788nobodyさん
2007/03/15(木) 00:52:45ID:???・ユーザは出来るだけ明示的にログアウトするようお願いする
・メインウィンドウがクローズされる時にログアウトのURLを叩くJavaScriptを仕込んでおく
・最終アクセスを全ユーザの全アクションで記録しておいて、ログアウトなしのユーザがログインしようとしたら最終アクセスが10分以内の場合は弾く
イントラ用のアプリケーションだったから負荷とかも考慮した上でここまでやったけど
一般向けのWebサイトじゃどこまでやるかは難しい判断だろうなぁ
0789nobodyさん
2007/03/15(木) 09:27:34ID:???それは、パスワード漏洩時の対策にはならんのではないか。
まあそもそもの話として同時アクセス=漏洩なのかというか、常時使うシステムでもない限り使う時間がぶつかることがあるのか疑問。
漏洩するとしたら、内部からユーザ情報持ちだしとか、パソコンに付箋紙貼ってある時だと思うんだが、
したら不正利用する人が夜中とかに使えばまあ、システム上はほとんど不正利用にならないだろうし。
>>788
ログアウトするようにお願いするったって
不特定多数のコンピュータリテラシーがまちまちなユーザじゃ無理。
メインウィンドウをクローズしないかもしれないし。
夢を見すぎじゃないかと。
ユーザに過去のログイン・ログアウト情報を提示して、変だったら通報してもらうほうがいいんじゃねえの。
過去にどういう行動をしたのか知ってるのは本人しかいないわけだし。
0790nobodyさん
2007/03/15(木) 10:01:20ID:???世の中には「テメエにしか分からないこと」を
自動的に論理矛盾なくプログラム側で判断しろ、
という輩もいるわけでwww
0791nobodyさん
2007/03/15(木) 11:54:09ID:???0792nobodyさん
2007/03/15(木) 12:14:00ID:???お願いするだけじゃ無理なのが解ってるから2番目・3番目の仕組を入れてるわけで
無理じゃなけりゃJavaScriptだの全アクセス記録だの不要だろw
あと「イントラ用」って書いたんで不特定多数ではない時の話だってのも読み取ってほしいところ
>>791
ログインには使えるけどログアウトしてくれるかどうかは別問題だねそれはw
PCの不意のハングアップまで考慮しようとすると
それこそJavaScriptか何かでサーバとハートビート交換しまくって
途切れたらログアウト処理にするとかまでやらないと難しいだろうなぁ
0794nobodyさん
2007/03/15(木) 13:00:52ID:???と言われても、話の元の人はイントラ用とは言ってないわけだし、実際採用されたらどうかなあと思うわけで。
結局のところ、普通に当たり前のことをやっとけばいいと思うよ、としか言えないな。
一応法整備されたからパスワードだけかけておけばノーガードでもいんじゃねという話もある。
0795nobodyさん
2007/03/15(木) 13:58:14ID:???>それは、パスワード漏洩時の対策にはならんのではないか。
元ネタが同時ログインをキックしたいということだけであって、どこに問題がある?
0796nobodyさん
2007/03/15(木) 14:21:29ID:???>>773
> 何かの拍子に ID/PW が漏れた場合、
> 同時にアクセスされたら漏洩発覚!としたかったんです。
>>771だけ見ればそんなもんかって感じだが。
0797nobodyさん
2007/03/15(木) 15:40:15ID:???どうでもいいじゃん。同時アクセスキックできる方法だけ話してればいい。
0798711
2007/03/15(木) 17:59:45ID:???両方再ログイン促すので十分です。
それで漏洩か運用で分かると思うので。
なんだかいろいろと考えることが多いのですね ^^;
どこかにいい実装例はないでしょうか。
( コードがあると嬉しいです )
0799nobodyさん
2007/03/15(木) 18:50:39ID:???仮に漏洩してたとして、同時アクセスと思える範疇でアクセスがある、漏洩と判断できる確率って少ないんじゃね。
あれこれ仕掛けてユーザビリティ低下でクレームが発生するほうが高そうに思えるのだが。
まぁどこまでコストをかけるかは措いといて、
>>775で「どうやってログアウトを...」って書いたけど、Cometならできるかもしんない。
Cometシステムを構築したことどころか、lingrさえしたことないので、
どこまで実用的に漏洩を察知できるシステムができるどうかは知らんが。
これでも、ユーザが会社でブラウザを開いたまま帰宅、自宅でログイン出来ねーって言うかもな。
0800nobodyさん
2007/03/15(木) 21:24:01ID:fuFXgue7イントラ想定してしながらそうじゃないケース想定してるのが痛い
0802nobodyさん
2007/03/15(木) 21:35:01ID:???0803nobodyさん
2007/03/15(木) 22:37:02ID:???っていう仕組みを作ろうかとか考えたことある。
実用性が無さそうなんでやめたけど。
0804nobodyさん
2007/03/15(木) 22:44:26ID:???0805nobodyさん
2007/03/15(木) 23:51:51ID:???元質はイントラじゃない
イントラ云々はおれが>>788で
「イントラだったからここまでやったけどそうでなければどれくらい手間をかけたもんかな」的に書いただけ
>>803
迂闊にトイレにも行けねーなw
0806nobodyさん
2007/03/15(木) 23:57:38ID:???0807nobodyさん
2007/03/15(木) 23:58:51ID:7hzpmvYOなんか旨い方法ないのかな?
0808nobodyさん
2007/03/16(金) 00:07:36ID:???0809799
2007/03/16(金) 00:15:29ID:???Cometって時間的にどのくらいコネクションを握ったままできるのかしらんだけど、
擬似サーバプッシュでクライアントからの返答(再リクエスト)がなければログアウト状態と判断できると思う。
保存期間なしのCookieも併用して。
Apacheにmod_cometみたいなモジュールが出てきたらいろいろ面白そうだけどなぁ。
で、PEARとはまったく関係ない話になってしまった。
0811nobodyさん
2007/03/16(金) 00:56:45ID:???無いと、すぐに鯖がパンクするな。
0812nobodyさん
2007/03/16(金) 04:10:01ID:???■ このスレッドは過去ログ倉庫に格納されています