【PHP】PEAR Part3
環境:PHP5 Linux はじめまして、現在会員情報を管理するサイトを作っているのですが 個人レベルではいき詰まってしまったので、教えてください。 セキュリティなどを考慮しつつ、セッション管理をしたいのですが 自前で作った関数や処理では不安が多々あります。 そこでフレームワークをと思ったのですが、不慣れなため敷居が高く 結局、Pearがいいのでは?と検索しているうちに考えました。 Pearでのセッション管理などでお勧めの方法やサイトがあったら教えてください。 よろしくお願いします。 PEARは中途半端なので自分でちゃんと学ぶかFW使うべし メジャーどころのフレームワーク使った方が良いと思うよ はじめまして、最近はじめた者ですが、質問させていただきます require_once 'DB.php'; の行で毎回 Fatal error: Class 'PEAR_Error' not found in C:\Program Files\PHP5\PEAR\DB.php on line 946 がでてしまいます。PEARのインストールは確認できたので原因がわかりません。 その他色々調べましたが解決いたしませんので、よろしくお願いいたします require_once 'DB.php'; ↓ //require_once 'DB.php'; 379ですが解決いたしました php.iniのインクルードパス設定 include_path = ".;C\.... ↓ include_path = "C\.... に変更したところ動くようになりました。 pearで初心者向きで なんかおもしろいもの教えて。 ↓とりあえずこん中で面白そうなのを試してみたら? ttp://www.phppro.jp/school/pear/ File_Archive::extract()についての質問です。 アーカイブの読み込みをファイルパスからではなくfile_get_contents()の返り値の変数から行いたいと思っています。 readSource()あたりかと思ったんですがどうやら違うようです。 何か方法がありましたら教えてください。 readConcat()あたりも試しましたがうまくいきませんでした。 レンタルサーバでPEARを使うには、何を持っていけばいいんですか? 使いたいのはPagerです。 ここ3日ほど苦しんでます orz... 助けてください。。。 PEARのインストール時に、コマンドプロンプトで [php.mbstring.dll が見つからなかったため、このアプリケーションを解しできませんでした。] というアラートが表示され、 それをOKすると、次に、プロンプト上に PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\php\5.2.2-Win32\ext*php_exif.dll' - 指定されたモジュールが見つかりません。 in Unknown on line 0 Could not open input file: PEAR\go-pear.phar 続行するには何かキーを押してください. . . と出てしまい、先に進めません。 環境は次に書きます (続き) 環境など OS: WindowsXP home PHP のインストール先 C:\php\php\5.2.2-Win32\ php.ini での設定(一部抜粋) extension_dir = "C:\php\php-5.2.2-Win32\ext" これまでやったこと、、、 PHPの再インストール、 ini ファイルのディレクトリセパレータを \ から / に変える、 php_mbstring.dll を、いろんな場所にコピー ※C:\php に入れたら余計変な挙動になってしまいました 神様に祈る 同じことばっかり繰り返して、気が変になりそうです。 ほんとうにお願いします。 PHP のインストール先 C:\php\php\5.2.2-Win32\ php.ini での設定(一部抜粋) extension_dir = "C:\php\php-5.2.2-Win32\ext" 変な\入ってるじゃん すいません、PHPのインストール先がミスタイプでした (?) C:\php\php\5.2.2-Win32\ (○) C:\php\php-5.2.2-Win32\ 申し訳ないです。 こんにちは あるサイトでは相手の言語に合わせたレスポンスをくれます require_once( "HTTP/Client.php" ); $client = new HTTP_Client(); $client->get( "http://hoge.com "); 普通に見に行くと英語版が渡され $client->setDefaultHeader( array('User-Agent' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', 'Accept-Language' => 'ja', 'Content-Language' => 'ja' )); こうしても変わりませんでした 自分のサーバーにアクセスさせると UA PEAR HTTP_Request class ( http://pear.php.net/ )" となり、UAが変わった形跡がありません 何がおかしいのでしょうか? $context = stream_context_create(array( 'http' => array( 'method' => 'GET', 'header' => 'Accept-Language: ja' ))); $url = "http://aaaaaa "; $data = file_get_contents($url, false, $context); var_dump( $data ); これでできましたm_ _m sendmailでtoを指定せずbccに複数宛先を指定して、 それぞれ受信者のto:にはアドレスが表示されてるってできまっか? 以下でやると宛先は無表示になるけど。 $headers['From'] = $from ; $headers['Bcc'] = "aa@ddd.com, cc@jjjj.com" ; $headers['Subject'] = "本文" ; $headers['X-Mailer'] = "PHP/".phpversion() ; $param["sendmail_path"] ="/usr/sbin/sendmail"; $param["sendmail_args"] = ("-t") ; $mail = Mail::factory("mail", $param) ; $mail->send($recipients, $headers, $body) ; 結論からいえばできない。 Toヘッダもメールの一部だからな。 受信者ごとに内容が違ったらcarbon copyにならないだろう。 (Bccは消えるが、受信者ごとの内容が変わるわけではない) 1通ずつ送るしかないな。 RFCでは、toの記入が必須、とはかかれていない。 つまり、toを絶対に入れなくてはいけない、というルールは無い。 しかし、実際の運用では、toが未記入だと、 送信できないメーラーがほとんど。 しかし元質問ではToヘッダに本来の受信者アドレスを入れたいわけであって・・・ エンベローブToとメールヘッダのToは別。 MTAが使うのはエンベローブTo、メールヘッダはMUAが使う。 それぞれの受信者のToに各受信者のアドレスを表示したいなら、1通ずつそう 送ってやればいい。 PEAR::DB利用しいてオートナンバー利用時に登録した主キーを取得するのに Insert後に ・MySQL select last_insert_id() as LASTID ・PostgreSQL select LASTVAL() as LASTID ・SQLite select last_insert_rowid() as LASTID を発行して主キーを取得しているのですが もっとスマートにPEAR::DBに備わっている機能でなんとかならないのでしょうか? (一応さがしたのですが見あたりませんでした。) やはり厳しいですか。。。 宛先は空欄で運用することにします。 Image_Graphで棒グラフ使っています。 横積み型と縦積み型のグラフを合体したようなグラフを作成しようと考えております。 $Plot =& $Plotarea->addNew('bar', array($Dataset, 'stacked'));// 縦積み $Plot =& $Plotarea->addNew('bar', array($Dataset));// 横積み どうすれば再現できますでしょうか? >>410 今更PEAR:DBM2用に自前のデータベース用クラスを書き直すのも微妙ですから PHP4を考慮する必要が無くなったらPDOに移行するつもりです。 ですからとりあえずPEAR:DBを使い続けてPEAR:DBM2に移行するつもりはありません。 そもそも、DBを変更する(ことを想定する)システムってそんなにあるのか という気が。 速さ的には ネイティブ関数>PDO>PEAR:DBとかのPDOを使わない遺物達 なんだっけか。 >>415 > そもそも、DBを変更する(ことを想定する)システムってそんなにあるのか > という気が。 それには同意だが、でも便利なメソッドとかあるから、使っちゃいますけどね。 一部はMDB2に書き換えて、さすがにPEAR::DBを利用するのはもうない。 今はZF使っているのでZend_Db。 >>417 単発処理の時は気にならないが、毎分何千何万というアクセスを受けるときはどうでしょうかね? 幸か不幸かそういう開発に携わったことないからしらね。 Zend_DbはPDO経由だから、Zend_Db自身がそれほど遅いつうもんでもないんじゃね。 ZF自身が遅いだろうつーのは置いといてw いやZend_DBのソース読めば分かるけどZend_DB自身も結構遅いよ 基本はラッパーだからそんなには感じないけどね。 ソースのどのあたりが重いわけ? つーか、DBまわりって結構クエリがDB依存だから、 ラッパーってのも微妙なところがあるなw そこら辺ってみんなどうやってるん? Calendar-0.5.4.gz コレを解凍する方法を教えて、 gzipとかすると、ディレクトリじゃなくなります。 ディレクトリじゃないからだろ。 gzipってのは1つのファイルを圧縮する物だからgunzipしても1つのファイルに置き換わるだけ。 guiのでそのファイルをダブルクリックすると展開できるんですよね。 windowsのzipの様に。 Mail_Queueクラスで送信するメールにReturn-Pathを設定したいのですが 1日がんばってもうまくいってくれないので質問いたします。 次の様にコードを書いたのですが、Return-Pathにfoo@bar.jpに指定したいのですが どなたか分かる方いらっしゃらないでしょうか? $params = '-f foo@bar.jp'; $mail_opt['param']=$params; $mail_queue = new Mail_Queue($db_opt, $mail_opt); $mail_queue->put($from, $address, $headers, $body); 環境は PHP5.2、メーラーはsendmailです。 >>426 今ざっとソースとドキュメント見た限りでは Mail_Queueコントラクタの第2引数ってそういう使い方じゃなくね?ってのと、 結局Mail_Queue自体はキューの操作だけで メール送信処理自体はsend_mailプロパティに セットされてるdriver(送信用のライブラリ)に委ねていて、 デフォルトではdriverが設定されてない場合は factorySendMail()でPEARのMailクラスが自動的に設定されるっぽいので 自前でMailのインスタンス生成してそのオプションで エンベロープfrom(Return-Path)を設定して Mail_Queueのdriverとしてセットすりゃいけそうな感じはするけど ほんとにざっと見ただけなんではずしてたらすまん >>427 お知恵をありがとうございます。 結局Mail_Queueクラスの奥深くにもぐりながら試行錯誤した結果 コンストラクタの中で $mail_option[]='-ffoo@bar.jp'; としたらうまく動きました。ハードコーディングになるのですごく嫌なのですが・・・ それなら $params = '-ffoo@bar.jp'; $mail_opt[]=$params; $mail_queue = new Mail_Queue($db_opt, $mail_opt); $mail_queue->put($from, $address, $headers, $body); と変更するだけで動きそうなのですが、何故か動かなかったです。 文法的にありえない気がするのですが・・・。 今回はここで手を引かねばならないのが痛い・・・。 私がお馬鹿なのでしょうか? 失礼致しました。 初歩的なことだとおもうんですがサンプルコードの最初にかいてある require_once "HTTP/Request.php"; とかって実際にはどこにあるんでしょうか? >>430 レンタルサーバーなので私は何も置いてないんですがサンプルで大抵指定してあるこれは どっかから調達してこないといけないわけですね。 pearのサンプルを実行する前にまずマニュアルを一読することをオススメします pearの機能を入れる際にpear.php.netって出てくるけどこれはネット経由でモジュールを落として来てるってこと? ネットに繋がってない環境だと設定書き換える必要ありますか? 下記のPearを用いたものでファイルをアップロードしようとしてます。 require_once "HTTP/Request.php"; $req =& new HTTP_Request("http://192.168.24.1/uketori.php "); $req->setMethod(HTTP_REQUEST_METHOD_POST); $result = $req->addFile("upload.jpg", "/tmp/sample.jpg"); if (PEAR::isError($result)) { echo $result->getMessage(); } else { $response = $req->sendRequest(); if (PEAR::isError($response)) { echo $response->getMessage(); } else { echo $req->getResponseBody(); } } uketori.php $updir = "./upload/"; $upload = move_uploaded_file( $_FILES["name"]["tmp_name"], $updir.$_FILES["filepath"]["name"]); if($upload == true) { echo "成功"; } else { echo "失敗"; } この場合は従来formに記載していた <input type="file" name="test">という部分のtestの指定方法がおかしいのではないかと思います。 どう修正すればよいのか教えてもらえないでしょうか。 しょうもない質問だとは思いますが宜しくお願いします。 MDB2ではMySQLのユーザ変数は使えないのでしょうか。 以下ようなのSQL文 SELECT @n := COUNT(*) FROM articles を実行しようとしています。 要は、MySQLのユーザ変数を使いたいのですが、うまくいかないようです。 ↑のSQLはあくまでも例なので、これでは変数を使う意味はありませんが、 MySQLだけでランクを表示する際などには、不可欠です。 (例えば、値が前の行と同じならランクはカウントアップしない、等) 使う方法等知っている方がいたら、どうか教えてください。 データのバックアップをmove_uploaded_fileで受け取ってますが、特に送信元とかの確認はしてません。 特定のところのみから受け取ったり、データの信頼性を高めたいのですがそういった関数や方法があれば教えてください。 HTTP_Requestで下記のヘッダーを送ってみたんですが $req->addHeader("User-Agent:","hogehoge"); 特に何も表示されていません。 表示側のPHPは下記になります。 $headers = getallheaders(); while (list ($header, $valie) = each ($headers)){ echo "$header: $value <br />\n"; } しかし下記のようにするとヘッダーに出てきます。 $req->addHeader("hogehoge"); 書き方は間違っていないと思うのですがUser-Agentの中に任意の文字列を入れて 送出するが間違っているようであれば教えてください。 >>439 $valueが$valieになってる >>438 で何か情報あればだれでもいいのでお願いします。 特定のところってホストのこと?$_SERVER変数で比較すればいいのでは 別の話だけど cron のときに $_SERVER で取得できなくてハマるのは誰もが通る道 やったことないけどcronだと$_SERVERって取れないの? MDB2で、queryがエラーになった時にメモリリークするっぽいんですが、うちだけ? Windows Server 2003、XAMPP 1.7.1、Pear MDB2 2.4.1、MDB2_Driver_mysql 1.4.1 で、 -- $db =& MDB2::connect( "mysql://test:test@localhost/test" ); for ($i = 0; $i < 10000; $i++) { $db->query("XXXX"); print $i.": memory usage=".memory_get_usage()."<br>\n"; flush(); } -- こんなコードでも、どんどんメモリ使用量が増えていきます。 query だけでなく、exec でも、prepare と execute でも、エラーになるようなコードだとメモリが増える。 成功するqueryのループだと増えません。 INSERTに失敗したらUPDATEするようなコードにしたのが間違いだったかなぁ マジメに存在チェックするしかないのか… すみません すべてのPEARをインストールしたいんですが いい方法ありませんか? >>448 全部インストールするコマンドがあるんですか? >>449 pear remote-list | awk '{print $1}' | xargs -n 1 pear install >>450 うおっ!! ありがとうございます!! できました ちなみに、すべてインストールすることによる弊害ってディスク容量圧迫以外になにかありますか? セキュリティーホール対策するべきプログラムが増える ttp://pear.php.net/manual/ja/package.http.http-request.file-upload.php のコードで質問なんですが 9行目は送信元となるファイルが無かったりした場合 13行目は送信先から何らかのレスポンスを$responseに格納 15行目は13行目の$responseに何も無いとき?エラーの場合 18行目は$responseが正常な時は戻ってきたbodyを表示 という意味だとおもうのですが、4行目で指定している送信先が(受け取り側)が 無い場合はどうすればいいのでしょうか? file_get_contentsなどで事前に確認するしかないでしょうか? PEARをインストールしたんですけれど、PHPフォルダの中にDBフォルダ(その下にあるDataObjectフォルダも)が存在せず、 またcreateTables.phpも見当たらないのですが この場合どうしたらいいのですか? http://pear.php.net/packages.php こういう所からパッケージをダウンロードして自分でPHPフォルダに入れなければいけないのでしょうか? で、一応ココの(http://pear.php.net/packages.php?catpid=7&catname=Database&php=all )一番上のDBってのをダウンロードして解凍したのですが、上記のファイルが存在しません どうしたらいいのでしょうか? ↑自己解決しました DBではなく、DateObjectに入っていました 人気無いな、このスレ 俺にとっては必須のライブラリなんだけど では、何を使ってるんですか? 時代遅れの自分に教えて下さい PEAR、機能多すぎて、学習に時間かかる・・・ 基本的なものをいくつか勉強したけど、全部は無理・・・ 使いこなせない Zendなんか使ってるヤツいるのか? ってかお前らライブラリ何使ってるんだ? >>466 そんなの勉強するもんじゃないぞ。 PEARの利用法だけ習得して あとは必要なときにマニュアル見て使えればOKだ サーバーサイドで実行できるjqueryライクなphpオープンソース phpquery サーバー側でHTMLをjqueryで整形できるよ。 http://code.google.com/p/phpquery/ $doc = phpQuery::newDocumentHTML("http://www.yahoo.co.jp/ "); $html = $doc['div'] -> html(); サーバーサイド側でこんな簡単にHTMLが抜け出せる。 正規表現も使わないで済む。jqueryライクな書き方でOK pearのパッケージダウンロードして解凍するじゃん? んでその解凍されたファイルが拡張子何もついてないから 圧縮ファイルだと気づくまで半日かかったんだが死んでくれないか? read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる