PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/ ※マニュアル上部の「search for」から検索を活用すべし(便利)。
過去スレ、関連リンク、FAQ等
>>2-10 辺り
【FAQ】 1. ブラウザに何も表示されないんだけど・・・ → error_reporting、display_errors、log_errors 2. include/requireに?a=b&c=dのようなパラメータつけたい → できません 3. $a1,$a2,$a3...はどうしたら? → 可変変数・・・というかむしろ配列使え 4. echo "$arr['hoge']['fuga']"; がうまくいかない → {おっぱい括弧}でくくれ 5. echo?print? → echoはコンマ区切りで書ける。printは関数。パフォーマンスは気にするな 6. 値渡し・参照渡しのパフォーマンス → これまた気にするな 7. csvやtsvを扱いたい → まずはfgetcsv 8. ファイル入出力関数(fopen等)でリモートファイル扱う際の限界 → fsockopenでソケット通信で解決 9. 一定時間ごとに何かしたい → cron、タスクスケジューラ 10. 画像処理一般 or GDの限界 → ImageMagick 11. 画像・音・動画はファイルで保存?DBに保存? → 好きにしてください 12. クッキーの情報をユーザから隠したい → セッション使え、ただしクッキーとセッションは仕組みが違うから同じように扱うな
「エスパーきぼんぬ」「氏ね」「(゚Д゚)ハァ?」等のレスを貰う八ヶ条。 1. ハードウェア、OSのバージョン等には一字一句触れない。 2. 大切な個人情報が漏れるとまずいので、己の行った操作、変更などは秘密。 3. エラーメッセージの類は決して書かない。「エラーが出るんです」で留める。 目の前で生じている現象をそのまま具体的に書くなどもっての外。 事実より俺様の脳内解釈を優先すべし。 4. 独り言文体で必勝。 「…なんだけど、どうすればいいのかなぁ」「何が悪いんだろう?」 5. 「急いでいます」「困っています」等、自分の都合を全面に押し出す。 6. もう試したことを得意げに指摘してくる奴には、厳しく対応。 「それが駄目だったから質問してるんです」「それはもう試してみて駄目でした」 "どう"だめだったのか、本当に実際それを行ったかどうかなんか問題じゃない。 7. ストレートに答えを書かないもったいぶったレスには、逆切れで対応。 「だからどうすればいいんですか?」「分からないなら引っ込んでろやゴルァ」 示されたURL等を参照するなんて態度は、回答者を甘やかすことに他ならないので 絶対に避ける。 8. 情報は小出しに。 「エスパーきぼんぬ」 補足 上の八ヵ条を「一つでも」満たす者は質問者として不適格だということだ。 そのような悪い質問に対して答えられるのは, 質問者の意図をすべて汲み取ることのできるエスパーでもなければムリ, という意味であって,決して,高度な技術を持つユーザに対する尊称でなはい。 まちがっても「エスパーの方,回答お願いします」なんて痛い質問するな。つーかカエレ。
勝手にテンプレ追加 ※サーバで利用可能なモジュール及び関数リストの取得方法 <?php foreach (get_loaded_extensions() as $module) { echo "<b>[". $module ."]</b><br>"; foreach (get_extension_funcs($module) as $func) { echo $func ."<br>"; } } ?> [standard]以下はPHPの標準関数。それ以外はオプション。
データベースを使用したユーザフォーラムみたいなものを 作成すると、どうしてもphpファイルにデータベースへ接続する ためのパスワードなんかを記載する必要性が出てくるかと思いますが、 回避方法ってないでしょうか? セキュリティ的に結構不安です
OK!把握した! パスワードを使いたいがパスワードを使いたく無いってことだな
>>8 PHPのソースにアクセスできる人はDBにもアクセスできると考えて運用方法をしっかり考えるしかないかと。
>前スレ968 >libmysql.dll は PHPとMySQLにあるものどちらを >使うのが吉? MySQLにバンドルされてるlibmysql.dllは古いものだけど PHPのMySQL拡張はそれでQAされてるので、基本的にバンドル されてるものを使うのが吉。PHP5ならMySQL4.1.7リリース時のものなので (多分PHP4の頃と同じで、多分これがずっと使われる) その範囲でMySQLが利用できる。
>>8 MD5辺りで暗号化して書いとくとか。
外部PHPファイルやデータファイルにしてDOCUMENT_ROOTより
上のディレクトリに置く手もあるけど、主目的はメンテ効率であって
セキュリティ的にはあんまかわらんな。
最近PHP始めてRSSみたいな物を作ろうと思ってます。 そこで、更新された文章の一部を取得して表示させたいのですが、 こういう事は可能ですか? 可能ならどのような関数使えばいいのかお願いします。
utf-8で書かれたHTMLのフォームから Windowsクライアントで文字を入力して送信し、 それをEUCで書かれたPHPソースが受け取ったら その受け取った文字の文字コードは sjisでしょうか? それともutf-8? まさかeuc?
>>15 php_value default_charset
php_value mbstring.internal_encoding
17 :
15 :2006/01/04(水) 08:32:26 ID:???
>>16 恐縮ですがおっしゃている意味がわかりません。
>>17 POSTされたデータは投稿フォームと同じエンコードでサーバーに渡される。
サーバーはPHPの設定(
>>16 の項目)に従ってスクリプトにPOSTデータを渡す。
要はちゃんと設定しておけば作成者側が心配する必要はないってこった。
デフォルトで値も入ってるしな。
>>19 ブラウザがそのページの文字コードに従って送信してくれるってのは、まあ通常間違いないだろうね(ブラウザをどこまで信用するかはターゲットのユーザ層次第)。
ただ、POSTされたデータがmbstring.internal_encodingに自動的に変換されるのはmbstring.encoding_translationがオンの場合。
これデフォルトではオフだから。
>>15 スクリプトの側でmb_convert_encoding()を使うか、php.iniのエントリーを設定しておくか等、マニュアルよく読んで最適な設定をしましょう。
DB(またはデータファイル)にどんな文字コードで保存するかにもよるし。
一番楽なのは言うまでもなく、全部デフォルトの設定で文字コードは全て一つに統一。
一番信頼性が高いのはphp.iniをちゃんと設定することだね。
21 :
15 :2006/01/04(水) 09:53:43 ID:???
>>19 >>20 なるほど。ありがとうございます。
DB内データはEUC、HTML出力はUTF-8、
という前提でPHPを書かないといけなかったので、
頭がクラッシュしてましたが、とても鮮明になりました。
22 :
13 :2006/01/04(水) 14:11:58 ID:???
>>14 返事ありがとうございます。
普通、更新内容をチェックするのは、RDFかXMLファイルだと思いますが、
htmlやphpといった拡張子のページの更新部分を抜き取る物を作りたいんです。
その場合、fopen()やfgets()では、無理ですよね?
どうすればいいのでしょうか?
>>22 普通にdiffで比較するとか。
あとPearのText_DiffとかPECLにxdiffとかいう拡張モジュールあるから試してみたら?
タイムスタンプでも良いんじゃない?
26 :
911 :2006/01/04(水) 14:59:18 ID:ewHclrX7
>13 pear HTTP_RequestでHTTP_responsecode 304 200 を調べる(必須) そのうえで。 fgets でファイルサイズ比較。 XMLでもRDFでも同じ事。 いちいちXMLをDOMparseして日付抜いてたら処理が持たない。
更新されたかどうかだけじゃなくて更新部分を抜き出したいんじゃないの?
if()文でインクルードするファイルを分岐するのってありですか?
switchの方が使いやすいような
>>22 fopen()やfgets()「だけ」では難しいというだけで
少なくともこれら(もしくは同機能の関数)は必要。
その上で差分を比較する方法を考えなければならない。
新旧のページ内容をfgets()使って配列に格納した上で
array_diff()でもかけたら?
>>28 あと他にもincludeの引数に変数を持ってくる場合もあるよ。
__autoloadの中とか普通そうだし。
35 :
nobodyさん :2006/01/05(木) 06:32:10 ID:m56cMN8+
特定の行目だけ抽出する関数は無いでしょうか。 56.log の3行目を抽出して出力、というように使いたいのですが
関数は無い。 1行ずつ読み込んでいって指定行数目で出力して抜けるか、 全部を配列に読み込んで3行目の要素を出力するか、 TPOに応じて好きな方を選べば?
37 :
nobodyさん :2006/01/05(木) 07:47:15 ID:m56cMN8+
>>36 ありがとうございます。後者の方法で全データ格納後
目的の行目を抽出することに成功したのでそちらを利用します。
各行を固定長にすればfseekで出来るけどな。
>>13 いまさらだけど。
元のページがどういう作りなのかによって RSS 生成の方法
というか、生成に必要なデータのいじり方が変わってくる。
HTML の更新部分を抜き出そうとするなら少なくとも
1. 旧バージョンがどこかに残っている必要がある
2. HTML の解析ができる
必要があるけど、その辺は大丈夫なん?
とりあえず内容は置いといて更新されたページ一覧を作る
ことにしたら? それならタイムスタンプを見るだけで
いいし、一覧を RSS のフォーマットで吐き出すだけだから。
40 :
13 :2006/01/05(木) 23:09:20 ID:???
皆さん返事いろいろありがとうございます。
いろいろ指摘された物を使い作ってみようと思ったのですが、自分の能力のなさに結局挫折しました。
もうちょっと、PHPを詳しく学んでから作ろうと思います。
今回は、
>>39 さんの言うように、一覧だけにしておきますm(_ _)m
おまいら外部サイト参照とかで必要なHTMLのパースもPHPでやってるの? 適当なスレ知ってたら誘導希望。
>>41 外部サイトのHTMLを整形して自分のサイトで表示、みたいな話なら正規表現で切り出す方がいいんじゃないかな?
パースってのは入力されたものが文法的に正しくなければ一切の意味を成さないからHTMLに対してはブラウザのエンジン並みに強力なパーサが必要になってしまう。
もし対象がXMLだったらパースするのが普通だろうけどね。
整形する必要がないならリダイレクト。
通常はこれで十分。
本格的にやりたいなら SAX とかか? いずれにしても HTML をいじるのはあんまりやりたくないな。 今なら RSS だけでも結構な情報量になるし、その方がよくね? 少なくとも Valid XHTML ならずいぶんマシなんだがな。
44 :
nobodyさん :2006/01/07(土) 12:21:03 ID:/OfH2StE
PHP4で作ったスクリプトは無修正でPHP5で動作するもんなんでしょうかで?
動作しないこともあります
無修正…(^3^)-☆chu!!
>>41 外部サイト参照して、抽出に必要な部分ってサイトによるしそれも頻繁に変わるし、
頑張ってHTMLパースなんてしても無駄じゃない?
普通に「現時点でのHTMLの記述」から範囲指定のキーワードになりそうなの見つけて
それを正規表現で引っこ抜くくらいしかできないよね。
ファイルロック中に処理が終了したらどうなるんでしょうか? 例: flock($fp, LOCK_EX); exit;
>>48 プログラム終了と同時にストリームが閉じる。
ストリームが閉じるとロックも解除される。
50 :
php developer teams :2006/01/08(日) 18:45:01 ID:ctzaqlQU
phpで"や' = % \ _ などの特定な文字がブラウザから入力された場合全角に変換してデータベースに登録するにはどのようなソースになるのでしょうか?
>>50 そんな変なことは普通しない^^;;
つmysql_escape_string
>50 それを考えるのがお前の仕事だろうが!
>>50 特定の文字を検索して。該当するのがあったら全角変換かけて、DBに登録する。
54 :
php developer teams :2006/01/08(日) 22:00:48 ID:ctzaqlQU
いやいやmysql_escape_stringを使っても=は登録できないんですよ。 で、どうしたらいいのかなぁ〜って。
それ、ちゃんとSQL文中の値を '〜' で括ってあるのか?
58 :
php developer teams :2006/01/09(月) 02:00:58 ID:b1yfGQKW
エラーは出ない。だけどPHPから=を入力すると=以降のデータもDBには登録されていない。(phpMyAdminで確かめました)
だからSQL晒せって。おまえのプログラムがおかしいだけだから。
60 :
php developer teams :2006/01/09(月) 02:42:32 ID:b1yfGQKW
$bbs = mysql_escape_string($bbs); // $sql = "UPDATE 2ch SET bbs = '".$bbs."' WHERE userid = '".$userid."'"; mysql_query($sql,$con); でいいのかなぁ?一応。
mysql_query($sql,$con); の前に print $sql; を入れて出力結果を見せてくれ。$bbs部分に「=」が含まれてるか?
62 :
php developer teams :2006/01/09(月) 03:04:17 ID:b1yfGQKW
だめだ。表示されてませんでした。 ためしに'と¥を入力してみたけど\' と \\に変換してあった。 ただ=がなぜ省かれているのかが意味不明。
63 :
php developer teams :2006/01/09(月) 03:07:22 ID:b1yfGQKW
あ、出力結果は以下のとおりです。 UPDATE 2ch SET bbs = 'aaabbb\'nn\\ss' WHERE userid = 'hogehoge' ちなみに bbsには aaabb'nn\ss=NNNN と入力 userid は hogehoge
だろうと思った。 プログラムの頭っから$bbsの内容を確認してみるんだな。
$var = "HOGE=1 HUGA=2 HAHI=3 HOGE=6 HUGA=5 HAHI=4"; ここからHOGEの値をとりたいと考えたとき どんな方法があるでしょうか? preg_match_all("/HOGE=[0-9]/", $var, $result); も考えましたが、 これだと$result[0]="HOGE=1", $result[1]="HOGE=6"と という形になってしまい、「HOGE=」の部分が邪魔です。 str_replaceで削除することもできますが、 もっとスマートな関数や方法はないでしょうか?
数字の部分にカッコをつける。 /HOGE=([0-9])/
67 :
nobodyさん :2006/01/09(月) 10:36:21 ID:s2jFLZvL
PHPというよりも、コード構成、下手すりゃHTMLそのものの質問にもなりかねないっすが..。 おながいします。 いわゆるオーダーフォーム。商品注文ページ等々。 回覧者から見て、 [order.php] フォーム記入→Submit -記入内容にエラー有なら、エラーメッセージとともに[order.php]を再度表示。 つまり、エラーは別ページで見せた結果手動で[order.php]に戻らせるんじゃなく、[order.php]でエラーを表示しつつ、その場で修正できて、そのまま再度Submitさせると。 -記入内容にエラー無なら[payment.php]へ。 ただし[payment.php]のコンテンツ中で、注文内容をフルで活用するので、FORMはそのまま渡したい。 ただし注文内容の長さ/セキュリティ等をふまえて、アドレスには組み込みたくない。つまりPOSTで渡したい。 エラー処理のために、[order.php]のフォームは <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 構成としては、
68 :
67 :2006/01/09(月) 10:37:04 ID:s2jFLZvL
+++++++++++++++++++++++++++++++ // 一回目の表示なのか、Submitされた後かの判断 if (array_key_exists('_submit_check',$_POST)) { // Submit以降であると判断 // エラー有り。同ページをエラーとともに表示 if (errorFound()) { show_form_with_error(); } else { // エラー無し。[payment.php]へ進ませる process(); } } else { // 一回目の表示なのでエラーメッセージは無し show_form(); } +++++++++++++++++++++++++++++++
69 :
67 :2006/01/09(月) 10:38:48 ID:s2jFLZvL
この構成が、たとえばメール送るだけの「問い合わせ」フォームみたいな場合だと、process()には単純に直接 mail(..........) header(..........) と続けりゃいいんだけど、ここでいう[payment.php]のように、先ページにフォーム内容をさらに渡したいといった場合、process()の内容をどうすればいいのか。 つまり、ユーザーアクションに頼らず、コード内で手動で、「このフォーム内容で[payment.php]にSubmit」というのは出来るんでしょうか? 構成の再考等も含め、ご指摘お願いします。 繰り返しですが、譲れない点として、 -エラーは、ポップアップその他ではなく、[order.php]内で表示。つまり、エラー表示、修正、再Submitが同じページで出来るようにする -アドレス上にはフォーム内容を表示したくない。 -encryptもいいけど、やぱりできれば表示させたくない
$_SESSION
>>67 セッション使えば各ページ間でユーザから見えないようにデータを共有できるっていうのもあるし、もしくはprocess()ってやつでpayment.phpをincludeみたいにしちゃえばその必要もないかな。
まあとりあえずここ読んでみ。
http://www.php.net/session その手の構成(フォームが複数ページにわたる)はセッションを使うのがお決まりではある。
72 :
67 :2006/01/09(月) 11:42:29 ID:s2jFLZvL
ありがとうございます。セッションでやってみます。 てかトライ後早速一個目ででつまずいてることに気づきました...。 ついでといっちゃーなんですが、さくっとわかるようだったらお願いします。 <form method="post" action="<?php echo $_SERVER['PHP_SELF'].'?id='.$id; ?>"> これでSubmitさせてるのに、再読み込み先がおかしい。 order.php?id=2 にこれがあるとして、Submit後、正しくorder.php?id=2とアドレスに表示されてるのに、コンテンツ上では?id=2が無視されてる。 これは$_SERVER['PHP_SELF']の仕様ですか?ARGとか使わないといけないのか。 調べてますが、もしさくっとわかるようだったらお願いします。
PHP5.0をローカルなWinXPとApache2.0に入れています。 php.iniのmbstringセクションにある 「Local Value」と 「Master Value」の 2つの項目の違いってなんでしょうか? php.iniを編集すると「Master Value」は反映されるのですが、 「Local Value」は変更されないので困ってます。。
75 :
67 :2006/01/09(月) 12:12:29 ID:s2jFLZvL
解決しました。 そのFORM内に <input type="hidden" name="id" value="<?=$id?>"> 入れとかなきゃ、二回目以降は空になりますわそりゃ。凡ミスでした。 ありがとうございました。
<?=は非推奨だからきちんと<?php echoと書きなさい
非推奨ではありません たとえそうでも廃止にはなりません
>>76 環境によっては動かないってことね
俺もshort open tagはoffにしてる
必要に応じてXML使うところだけ.htaccessでon/offするとイイ
XML関係ねーよ馬鹿
>>74 Masterはphp.iniで設定されてる共通設定。
Localは.htaccessで設定されてるディレクトリごとの設定。
俺も short tag open は off にしてる。 off にしないと XML 系を直接扱う時に記述が面倒くさいし ロジックと表示が分離しきれないから <?= ?> も使わないし。
<?= ?>ってロジックに含むか?俺はテンプレートと同じ感覚で使ってたが。 short tag open=PHPの標準テンプレート機能ONの意味で考えてたから 特に気にせずONで使ってる。
状況に応じて切り替え これがPHPクオリティー
PHP6 から short tag って廃止されなかったっけ
ソースは?
PHPの6なんてもう出たのか。はえーなー
>>85 PHP5からASPタグは廃止になった気がする。
[
>>88 和訳]
(PHP6では)ASPスタイルのタグはサポートされないよ。でもPHPのshort tag(<?)はそのままさ。
なのでphp-generalでshort tagは「非推奨」とか言ってた人・・・( ̄ー ̄)ニヤリッ
でもASPタグ廃止と一緒に話に出すって事は 少なからず関係あるんじゃないのかとか思ってみたりする。
>php.ini-distでは、デフォルトでこのオプションは有効となっていますが、 短縮形のタグの使用は推奨されません。 >再配布可能なコードでは、短縮型のタグを使用しないようにしてください。
個人的には<? ?>はなくてもいいけど<?= ?>はあってもいいんでないかと思ったり。 他と衝突するわけでもないし。 short_open_tagで一緒くたに扱われていることに何となく疑問を感じる。
>>92 そりゃ、世の中PHPだけで動いてるわけじゃないんだから、
特定の環境と衝突する可能性のあるshort tagは標準にはできないだろうし、
再配布を考慮するなら使うべきじゃないだろ。
つか <?= ?> なんかテンプレート使ってれば必要ないが
逆に<?=?>使ってればテンプレートを別途導入する必然性が分からない。 何が便利なの?
fcdc3abf25f3e04a2424a82e29afabd2 パスワード解析してくださいませんか?
配列に格納されている値のうち,特定のものを削除するとかって 一発でできますか? 一つずつ判定してやっているのですが, もっと早くできるかなと思いまして。
>>98 条件によるけど、preg_grep()かarray_search()+array_splice()とかかな。
>>97 MD5ハッシュ生成関数でも探して2〜3年マッチング続ければ解析できるかもね
>>100 >MD5ハッシュ生成関数
md5()ではなくて?
>>102 md5()がある確信が持てなかったから遠まわしに言った。
正直調べるのがめんどくさかった
>>96 メンテが楽
テンプレートを使わずに PHP のコードをそのまま表示用に使っている
場合はちょっとしたミスで画面が表示されなくなったりエラーになったり
するが、テンプレートの場合はその心配が要らない。途中の確認用の
値とかも出力させやすいし、デザイン修正とコード修正を切り離すことも可能
(テンプレート使えば即すべてのメリットを享受できるわけではないが)
特定の条件のときに画面を切り替えるのも楽
「分業」しなきゃ必要ないみたいな考え方もあるだろうけど、分かれてると
見通しもいいし、何かと楽だ
>>104 Smartyってコンパイルエラーで画面が表示されないということがたまにあったと記憶してるけど?
他のメリットもphp生書きで出来ないものは無いと思うな。
テンプレートエンジンってMVC的フレームワークのViewで使うことが多いけど、
そういうのって既にデザインとロジックが分割されているし、
値の確認もphpinfo(INFO_VARIABLES);より激しく簡単ってことはあまりないと思うけどどうかな。
正直、かなり大きな(かつ遅い)コンポーネントを組み込んで、そのサポートをデザイン担当に
しつつ、大きくなったソースツリーのメンテ(アップデートに追従したりとか)してまで
欲しいとは思えないな。
なんで smarty 限定なの?
それに PHP 生書きでできないとは言ってないよ
楽ってだけ。
MVC とか大げさなこと考えなくても十分使える。
簡単に言えばエラーの起きる可能性を減らせる道具があるんだから
それ使った方が楽じゃんていうことだよ。テスティングフレーム
ワークなんかもそういうイメージかな。使わなくてもいいし、
使い始めるのにちょっと抵抗を覚えるけど、慣れるとそれなしでは
書きたくなくなる。おれも昔は両方とも使ってなかったから別に
>>105 の意見がおかしいとは思わないけど
あ、あと中身できてなくてもテンプレートだけガシガシ作って
いくと何か成果物ができあがってる気になれるというメリットも
あるし、できあがりのイメージをつかみやすいので、直しの要求を
早めに吸い上げやすい
関係ないけど、こういう使い方してると <?php ?> ってのが全然
必要なくなる(HTML と PHP が同居する部分はゼロだから)んで、
邪魔くさく感じる。余計な改行とかあってもまずいし、変に気を
使うからやだね
なんでSmarty限定なのかというと、使い込んだテンプレートエンジンはのはSmartyと なつかしのPHPLIBのテンプレートしかないから。いい加減な知識ですまん。 たしかに、以前は結構はまっていて、速度改善のためにyaccのエクステンションを 本気で書きはじめた事もあったけど、いまはなんだか熱が醒めてます。 理由はやはり面倒だから。それに記述言語はPHPで統一した方がコミュニケーションが 取りやすいことに気づいたから。もちろんこれは状況によるだろうけどね。 関係ないけどテストはたしかにハマル。SimpleTestは最高だ。 いつかこれも醒めるのだろうか。
まあコンパイルの速度上げてもキャッシュあるから実用上あまり意味ないしね。 つーかbisonあたりで実装してるテンプレートエンジンもあった希ガス。
109 :
nobodyさん :2006/01/10(火) 13:49:54 ID:zT96MWW+
eregやpregで、 山田 か 田中 か 中田 がヒットしたらtrue という指示はどう書けばいいですか やり方がわからないので現在は一つ一つの選択に対して ヒット後の指示を書いているのですが、全体が異様に長くなってしまいます
mb_ereg( '(山田|田中|中田)', $str ) 未テスト
$result = preg_match('/(山田|田中|中田)/', $target_string);
112 :
nobodyさん :2006/01/10(火) 14:05:04 ID:zT96MWW+
>>110 >>111 ありがとうございます、無事解決できました。
|で区切るといいのですね、これでソースサイズを抑えることが出来ます
>>104 うちの場合は、中身が<html>〜</html>のデザイン部分だけで
中のPHPコードは<?=$変数?>と<?php ?>でifとループしか入れない、
という前提のテンプレートモドキなHTMLファイルを作って、
プログラム末尾でinclude()で読み込んで表示、って形で分業開発してる。
だからミスが減るとか確認が楽とか修正の切り分けとか特定条件で表示切替とか分業できるとか
どれもSmartyと全く一緒にしか思えないし、むしろこっちの方が楽じゃないかと思ってます。
PHP が解釈しなくてもブラウザだけで表示できることが 大事な場面だってあるし、いつの間にか sjis, crlf なファイルに 書き換えるやつがいないとも限らない 分業については他にも注意が必要なところはあるかもしれんけど、 例え一人でやってても PHP の if が書けちゃうのはいやだな。 結果として同じになるかどうかじゃなくて、道具を使うことで 運用というか人間の意識に縛りを入れる必要がなくなることが 大事なんだよ 結果が同じになるから道具を増やさないという判断も当然アリ だけど、道具が増えても人間が気を使う部分が減るってことが おれには大事 もちろんその増える道具はできるだけ楽なものが望ましい。 みんな Smarty ばっか意識してるみたいだけど、もっとシンプル なテンプレートはいくらでもある
>>108 まぁその通りなんだけど、PHPで汎用的に使える構文パーサジェネレータを作る
野望もあったから。それとどれくらい速度差が出るのか個人的な興味もあって。
116 :
nobodyさん :2006/01/10(火) 15:44:48 ID:+GYIjw4a
PHPとMySQLでサイトを作成しているのですが、 MySQLのユーザー(DBにアクセスする際に必要なMySQLのユーザーアカウント)は サイトを利用するユーザー全てを登録すべきなのでしょうか? それともアクセス権等を考慮した共通のユーザーをいくつか登録しておけばよいのでしょうか?
あんまり設計とか巧みじゃないんだけど、 VIEWをSmartyにしちゃって、 「表示用の」ロジックはSmartyに任せたら、 かなり、業務ロジック全体の見通しが良くなった。 → バグもあまりおきなくなった HTMLとSmartyの切り分けというスタンダードな考えじゃなくても、 Smartyを使うってのは有りだと思う。 PHPだけでできない事じゃないけどね。
>>116 俺の場合はMySQLアカウントはひとつ。
セッションにログイン情報とかグループ情報を持たせてる。
処理の限定は俺フレームワークでユーザークラスの権限で分岐。
それでいいのかはわからないので、アドバイスではない。
119 :
nobodyさん :2006/01/10(火) 15:56:17 ID:ay29/vZh
>>119 正規表現
explode
substr
のどれかかな
>>119 お前さん hogehoge.com の所有者かい?
でなかったら exmple.com を使いなさい
みんなでF5攻撃かけてくれ、って打診なんじゃw
123 :
121 :2006/01/10(火) 16:40:10 ID:???
うあー間違った example.com ね
Smartyより軽くて、再配布できる良いテンプレートエンジンってある? いやありそうだけど案外見つからない
126 :
98 :2006/01/10(火) 22:30:12 ID:???
>>99 レスありがとうございます。
preg_grep()で出来ました。
127 :
nobodyさん :2006/01/11(水) 19:58:30 ID:JbehKDPG
パスエラー107行目とでるんだが、 107行目は最後の行で、「?>」としか書いていなくて 困っておる。 ?>がだめなのか、他に構文ミスがあるのかな?
>>127 くだらない質問スレ行きのネタだな。
"〜"がちゃんと閉じてないとか { 〜 } の対応が間違ってるとかすると
最終行で文法エラーになるぞ
130 :
nobodyさん :2006/01/11(水) 21:47:38 ID:a+2jPX+b
最後に}を書いてみよう。
FAQ とかどっかにないのかね
いやー これしかないんじゃなぁ
追加のネタ出せば増えるかもよ
これ、役に立つ人どんだけ居る? 4 から 5 に移行する人くらい?
>>127 ちなみに、パスエラーじゃなくてパースエラーな。
138 :
nobodyさん :2006/01/12(木) 18:26:33 ID:WEn9cBfu
>>130 } を最後に入れてみた。
パースエラーさえも表示されなくなった。
真っ白にな…
ちなみに環境はローカルで、PHPエディタを使用中。
全部見るしかないんだって 細かく(function とか)パーツに分かれてれば 確認も楽だが、そうでないなら「頑張る」しかない
>>138 } だけじゃなくてセミコロンが抜けてるとか、そういう初歩的なミスがないか洗い直すべき
パースエラーは大体それで直る
>>138 けつから1行ずつ削っていくとかしてみたら
142 :
nobodyさん :2006/01/12(木) 19:55:20 ID:WEn9cBfu
みんなありがとうございました。 } リターン FALSE; の部分がありませんでした。 即レスサンクス!でした。
おまいらphp-5.1.xのエラー出力でのレポーティングレベル は何にしてますか?スタッフだけで書いているものだと E_STRICTを入れても大丈夫だけど、PEARを利用していくと 警告の嵐で嫌になりますが、どんなもんですか。
無難に E_ALL & ~E_STRICT にしてる。
デフォルトはE_STRICTでPEARをrequire_onceするとき常にE_ALLに変えるようにしてる。 まあ実際問題E_ALLでいいと思うけどね。
146 :
takn :2006/01/12(木) 21:14:55 ID:???
[質問 apache2とphp5の設定について]
はじめまして、昨日からPHPをはじめた超初心者です。インストールでさっそくてこずっています、どなたか詳しい方いらっしゃいましたらご教授おねがいいたします。
winXPで
apache_2.0.55-win32-x86-no_ssl.exe
php-5.1.1-Win32.zip
をそれぞれのサイトからDLして環境を作り<? php phpinfo() ?>でテストをしたのですが、何も表示されません。ソースには<? php phpinfo() ?>がそのまま残っているのでphpが実行されていないようです。
環境設定は
http://www.php.net/manual/ja/install.windows.manual.phpを参照にして @php5ts.dllを読み込むために、パスをC:\PHPに通す
Aphp.iniを読み込むためにapache2でPHPIniDirを最終に指定
Bphp.iniのdoc_rootとapacheのDocumentrootをC:\Program Files\Apache Group\Apache2\htdocsに指定
Capacheのhttpd.confで
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php
を指定
という手順を踏み、php4でのインストール時のファイル移動は避けました。
よろしくお願いします
>144,145 thx やはりPEARを使おうと思うとそうなりますか・・・ あまり神経質にならず、素直に切り替えて使います。
>>146 <? php phpinfo() ?>
↑このスペースを消してみたらどうなる?
149 :
nobodyさん :2006/01/13(金) 11:54:00 ID:fx15cIZh
abstractクラスで abstractメソッドを宣言してオーバーライドを指示する場合、 引数も一致しないといけないじゃん。 子クラスによって、引数のリストが変わる場合は どうすればいいの?
>>149 func_get_args()を使うとか、第一引数のみをとり配列にするとか。
ただ可変個の引数をとるようなメソッド以外では無闇に引数を変えないべきだと思う。
151 :
takn :2006/01/13(金) 13:26:15 ID:???
>>148 ご回答ありがとうございます。試してみましたがだめでした orz
未だに解決でないでいます、何かいい情報ありましたらまたよろしくおねがいいたします
>>151 Apache のログには何も出てないの?
>>146 答えはエスパーにしかわからないな
<?php phpinfo() ?>
の拡張子がhtmlになっているとかだったら氏ね
155 :
takn :2006/01/13(金) 14:07:40 ID:???
>152
apache起動して正しくアクセスしています。php.iniも正しい場所においています。
php.iniを読み込む方法は
apacheのconfのディレクティブによる方法
PHPRCによる方法
今までのようにC:\WINDOWSフォルダから読み込む方法
と3つためしてみたがダメでした。
>>153 ログも見ましたが異常はないようです。
>>154 エスパーにしかですか。。。ほんとにそんな状況です。
さすがにhtmlにはなってないです
ここまで来るとapache自体起動してるのか怪しいなw
>>155 まず自宅サーバー板に行った方が良い
プログラム以前の問題
158 :
takn :2006/01/13(金) 14:27:05 ID:???
>>155 お手上げですね。
一応だけど、
・タスクマネージャでApache.exeが動いてるかどうかチェック(Winだとタスクトレイに羽マークのApacheMonitorが再生マークになっているはず)
・httpd.confに文法エラーがあると起動しないんじゃなかったっけ?
・listdllsのようなツールがあるならphp5ts.dllやphp5apache2.dllがロードされているかチェック。なければDLLファイルをゴミ箱に入れようと試みて怒られるかどうかチェック。
・phpinfoのページをブラウザで表示したとき、「ソースの表示」をやると何が表示される?
・php.iniのerror_reportingはE_ALLかE_ALL|E_STRICTになってる?display_errorsはOnになってる?
>>155 エラーログの方見てるか?
モジュールが読めてないような気がするが。
php.iniに文法エラーがあったりして。 全角スペースとかがまぎれこんでたりw
162 :
nobodyさん :2006/01/13(金) 15:03:40 ID:uOAEgm3f
PHPで、動的なページ(servletで作成されている)
を読み取る事ってできないんでしょうか?
<?php
$lines = file(
http://example.com/test.html );
?>
みたいな感じでhtmlの読み取りはわかるのですが、動的ページは不可能なんでしょうか?
そうですか。できなかったんですか。ご愁傷さまでした。
>>162 できるはずだけどな。php.iniのallow_url_fopenがOnになってるか確認すべし。
あとは、相手先によってはrefererとかuser agentとかcookieによって内容をよこさないこともあるかもしれないので、その場合はfsockopenで。
allow_url_fopenがOffなら静的ページも読めないと思うけどね。 その動的なページで何か特殊なことやってんじゃないの? IPやUSER_AGENT判別して何かしてるとかさ。
166 :
nobodyさん :2006/01/13(金) 15:37:59 ID:uOAEgm3f
すいません。読み込めてました。 変数が上手く渡せてなかっただけでした。。 どうみてもバカです。 本当に有難うございました。
167 :
nobodyさん :2006/01/13(金) 18:10:27 ID:6PRjx2Cu
このソースの{0,2}の部分は何を指しているのでしょうか? 教えてください。お願いします。 if (preg_match("/${_REQUEST['GOODS_CODE']}.{0,2}\.(jpg|gif)$/", $photo)) { unlink($photo); }
>>167 Perl正規表現で、
{m,n}
は直前の要素のm以上n以下のマッチ。
169 :
167です。 :2006/01/13(金) 18:23:33 ID:6PRjx2Cu
>>168 ということは完全マッチにしたいときは{0,0}でいいのですか?
>>169 俺はエスパーじゃないからお前が何にマッチさせたいかなんて知らん
171 :
nobodyさん :2006/01/13(金) 18:43:29 ID:6PRjx2Cu
>>170 うるせーあほ!ぼけ!かす!他で聞くよ!市ね
えーと、、、書いたものを送出する前にリロードして良かったです。。 10分ほど時間を無駄にしちゃいましたが。。 次の質問カモーン
0以上0以下がなんなのか分からんのか
”回” っていう重要な表現が抜けてることはスルーなのか?
175 :
nobodyさん :2006/01/13(金) 18:58:09 ID:6PRjx2Cu
>>172 うるせーおまえの書いたものなんかいらねーよ!
あほ ぼけ かす うんこ
177 :
nobodyさん :2006/01/13(金) 19:05:12 ID:6PRjx2Cu
>>176 ご親切にありがとうございます。
疑問がとけました。
お騒がせしました。
なにこのウザイ人
すいません、 フォームから123という数字を検索されたとします。 このときに123を除いた数 132・213・231・312・321を結果として表示したい場合、 どういう方法を使えばいいでしょう
>>181 どんな集合から123を除きたいのか定義せよ。
$result = "132 213 231 312 321 123"; $result = eregi_replace("$_GET['keyword']", "", $result); こんなのとか?
>>182 ごめんなさい
000から999の3桁のデータがあるとして
123以外の1と2と3を含む数字を抜き出したいのです。
そういう意味じゃないだろ。
186 :
nobodyさん :2006/01/13(金) 22:13:35 ID:6PRjx2Cu
>>184 そのデータ、とは?一つの変数なのか、配列なのか、とか。
例えば index.php?hoge=webpro (正規リクエスト) i ndex.php/aaa/?hoge=webpro (不正リクエスト) index.php/aaa/bbb/?hoge=webpro (不正リクエスト) この様な不正リクエストの場合でも webpro にリクエストが通ってしまいます。 何とか排除したいのですが良い方法無いでしょうか よろしくお願いします
>>188 文章がイマイチ分かりにくいのだが・・・webproってindex.phpのこと指してる?
だったらそれ不正でもなんでもないんだけど。.htaccessで弾くくらいしかないんじゃない?
つかえるならmod_rewriteかな
mod_rewrite使ってるからリクエストを受け付けてるんだと思われ 普通に考えれば階層が違うんだし受け付けるはずがない
>>191 mod_rewriteはあんま関係なくて、それは普通に使える。当たり前。
で、プログラム以降の部分はPATH_INFOに格納される。
だからPHP側でPATH_INFOを判定して、意図しないのが入ってたら
404ステータスでも返してやればいいかと。
193 :
188 :2006/01/13(金) 23:03:17 ID:???
mod_rewriteは使っていません。
index.php/aaa/?hoge=webpro (不正リクエスト)
index.php/aaa/bbb/?hoge=webpro (不正リクエスト)
/aaa/
/aaa/bbb/
これは実在、架空問わずリクエストを受け取ってしまいます。
>>191 >階層が違う
ディレクトリとして認識していないようです。PHPの?前を制御するのは鯖での操作になるのでしょうか
>>193 鯖じゃなくてindex.phpの操作だろ。
それはディレクトリじゃなくプログラムだろ。
>>193 だから
>>192 なんだってば。httpdの仕様。phpに限らない。
そういったリクエストが入っても大丈夫なように作るのが普通。
196 :
188 :2006/01/13(金) 23:13:30 ID:???
>>192 PATH_INFO ググってみます。
>>194 >>191 >階層が違う に対して
ディレクトリとして認識していないようです。 誤
ディレクトリとしては、認識していないようです。 正
>>196 URLに含まれるプログラム(ここではindex.php)以降の部分の文字列は
ディレクトリやファイルとして認識せずパラメータの一種としてプログラムに引き渡される。
それはWebの仕様。
あとは
>>192 参照
198 :
188 :2006/01/13(金) 23:18:48 ID:???
>>195 >そういったリクエストが入っても大丈夫なように作るのが普通。
一般配布スクリプトで色々検証したのですが
運が悪いのか、 「そういったリクエストが入っても大丈夫では無い」
スクリプトにしかめぐりあえませんでした。orz
「大丈夫」の基準は? 不要なパラメータを与えても単に無視して普通に動くと思うが。
200 :
188 :2006/01/13(金) 23:28:16 ID:???
>>199 たしかに 全部動きました。
皆様色々とありがとうございました
PATH_INFO ググってみて思い通りの動作になったら報告します。
>>199 そこから相対パスでリンクされてるファイルなんかは、後ろのPATH_INFO部分も
くっついた状態でURLが生成される。
必ずしも大丈夫じゃないし、そこまで対策取ってるスクリプトはあまり無い。
大抵は「そんなアクセスするユーザが悪い」で終わる。
202 :
nobodyさん :2006/01/14(土) 00:31:04 ID:PuQcgqqK
そんなにいやならApacheでAcceptPathInfoをoffにすればいいだろ。
それだ!
204 :
nobodyさん :2006/01/14(土) 05:08:12 ID:bUGfBtC9
ソフトウェア板から移動してきました。 p2のセキュリティを設定する辺りでつまづいてしまいました。 ディレクトリの丸見えを防ぐ為にhttpd.cofを書き換えたいんですが httpd.confの中に <Directory "/usr/local/apache/htdocs"> Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> が見当たりません。 /etc/httpd/httpd.confの中を探してるんですが、 探す場所が間違っているんでしょうか? p2のマニュアルやリンク先を調べた所、 usr/local/apache/conf/httpd.confと言うのを目にしたので フォルダへ移動でusr/local/apache/conf/へ移動してみたんですが そんなフォルダは無いと言われてしまいます。 環境はmac ibook OSX(10.4.2)です。 とんちんかんな事言ってたらすみません。 どうかアドバイスお願いします。
えーっと・・とりあえずスレタイ読んでくれないかな・・・?
PHPとApacheを混同してる?
>>184 123の入力で1と2と3の数字の組み合わせのリスト出すのがそもそも面倒くさいな。
真面目にループする手もあるんだろうが、こんな方法でやってみた。
$input = "123";
$inx = preg_split("//", $input, -1, PREG_SPLIT_NO_EMPTY);
$max = join('', array_fill(0, count($inx), "9"));
$reg = "^[" . join('', $inx) . "]+$";
$fmt = sprintf("%%0%dd", count($inx));
for($i = 0; $i <= $max; $i ++) {
$num = sprintf($fmt, $i);
if(join('', array_unique(preg_split("//", $num))) != $num) continue;
if( $num != $input && preg_match("/$reg/", $num) ) {
$ret[] = $num;
}
}
var_dump($ret);
質問です。 str_replaceなどを使ってページ検索を作っていますが (検索文字は太文字で表示される) 「quot;」で検索すると、「"」が太文字の「quot;」と表示されてしまいます。 太文字で「"」と表示させるにはどうするとよいでしょうか? わかる人おしえてください。 よろしくおねがいします。
quot;じゃなくて"だと思われ。
>>209 echo '<b>"</b>';
212 :
211 :2006/01/14(土) 12:29:54 ID:???
>>209 レス汚してごめん
やっぱ僕にはわからないです(汗
その str_replace 前後の処理を晒さないとダメだろ そうすりゃ間違いを指摘してもらえるかもね
>>212 211は俺だけど
名前とアンカーが逆じゃない
>>209 HTML文中に「"」という記述がある状態(これは「"」と表示される)で
「quot;」を検索して前後を<b>で挟んだりすると「&<b>quot;</b>」になるので
"→&+quot;と分解されてしまって「"」にはならなくなる。
「&xxxx;」は破壊しないようにstr_replaceせんとダメっしょ。
ただ、どっちにしろ「quot;」を検索して「"」が太字表示になるってのはおかしいんじゃ?
「"」は「"」まで1セットで1つの「文字」なんだから、それが部分的にヒットするのは変。
216 :
215 :2006/01/14(土) 13:13:23 ID:???
うは。しまった。書き直し。&→&amp変換ってしてくんないんだっけ??
>>209 HTML文中に「&quot;」という記述がある状態(これは「"」と表示される)で
「quot;」を検索して前後を<b>で挟んだりすると「&<b>quot;</b>」になるので
&quot;→&+quot;と分解されてしまって「"」にはならなくなる。
「&xxxx;」は破壊しないようにstr_replaceせんとダメっしょ。
ただ、どっちにしろ「quot;」を検索して「"」が太字表示になるってのはおかしいんじゃ?
「"」は「&quot;」まで1セットで1つの「文字」なんだから、それが部分的にヒットするのは変。
217 :
184 :2006/01/14(土) 13:30:38 ID:???
>>207 ありがとうございます
入力された数値をバラしてから後の処理で悩みまくっておりました
参考にさせていただきます。
218 :
204 :2006/01/14(土) 15:38:46 ID:???
失礼しました。
>>206 さんのおっしゃる通りPHPとApacheを混同していました。
>>208 合ってる様で良かったです。
試してみて何かあったら誘導先に行ってみます。
皆さんレスありがとうございました。
複数のサーバで同一プログラムを動かすことになりました。 保守を簡単にするため、関数や変数を共通で持たせたいので XML-RPC か SOAP を使おうと思ってます。 どっちがお勧めでしょうか?もしくは別の案があれば教えてください。
複数サーバーが同一セグメントのネットワークにあるならNFSでも張っちゃうのが楽なんだけどなw 多分そういう条件ではないんだろうなぁ。 しかし関数はともかく変数も共通って一体。
>>220 そうなんです。同一セグメントではないんですよ。
変数は都道府県や DB の接続先とかなんですけど、
まぁ、それを返す関数を用意すればいいので別にいいです。
( 分散して動かすことを考えてなかった名残りなので )
マカウゼー!
ソースをrpmで固めてaptとかyumで管理するとか、 RedhatNetworkSatelliteを使うとか、svnからexportして設定してhttpdリロードするスクリプト作るとかもあるよ。
ファイル更新時にrsyncするプログラムを組んでおくとかぢゃだめ?
>>223 ありがとうございます。ファイルを置き換える方法ですよね。
後付けの条件になりますが、
そのサーバで PHP 以外を動かすわけにはいかないんです。
>>226 最悪、自前で作りますが、
車輪の再発明より XML-RPC や SOAP などすでにあるものを使いたいな、と。
>>227 SOAPやXML-RPCを利用して関数の共通化を図るっていうのが、
関数呼び出しにSOAPやXML-RPCを利用するということを意味してる?
デメリットについても考察してWebService化を考えてるなら別にいいのでは?
デメリットとして、たとえばWebService化するとそれを利用するWebアプリの処理能力が、
WebServiceを提供してるサーバの処理能力や通信経路に依存することになるとか。
親亀こけたらみなこけるとか。
>車輪の再発明より
ってPHPでupdateするものが他にあるならそれを使えばいいし、
ないなら車輪の再発明にはならないと思うが。。。。
229 :
209 :2006/01/14(土) 21:47:55 ID:???
表現が悪かったみたいで申し訳ありません。 『a"b』というデータがあって、 『a』で検索すると→『a"b』と表示される。html文は『<b>a</b>"b』 『q』で検索すると→『a"b』と表示されてしまう。html文は『a&<b>q</b>uot;b』
230 :
209 :2006/01/14(土) 21:57:29 ID:???
書き直し^^; 『a"b』というデータがあって 『a』で検索すると→『a"b』と表示される。html文は『<b>a</b>"b』 『q』で検索すると→『a"b』と表示されてしまう。html文は『a&<b>q</b>uot;b』 よろしくおねがいします。
>>230 正規表現つかえば?
「"」じゃなくて「"」は検索対象に含まれるの?
232 :
209 :2006/01/14(土) 22:22:00 ID:???
>>231 はい。正規表現で検索してます。
「"」じゃなくて「"」は検索対象に含まれます。
(&[a-z]+;) を除外すれば? 上の正規表現は適当だからもうちょっと考えてね
検索実行前に実体参照を1度元の文字に変換しちゃう、ってのも手かもね。 そしたら「"」とか「&」とかも検索可能になるよ。
235 :
209 :2006/01/14(土) 22:42:56 ID:???
(&[a-z]+;) を除外←これは検索対象から?検索文字から? どちらにしても無理っぽいです。 やはり 1度もとの文字に変換→検索→復元 ですかね? 昨日やってたけど、なんかうまくできなかったんですよね。タグ関係で。。 もう1回やってみます。
>>235 どっちでもない
検索にヒットしなかったことにする
具体的にはその文字がマッチしても、それが (&[a-z]+;) の中に
入っている場合は検索にヒットしないようにするってこと
実体参照はかなりの数になるから変換はかなり面倒じゃね?
237 :
209 :2006/01/14(土) 23:14:04 ID:???
いや、「q」だけで検索しても「<b>q</b>uot」となってしまうので。。 <?php $key = "a";//検索文字 $str = "a"b<xml>a";//データ $str = str_replace($key, "<b>{$key}</b>", $str); ?> <html><body><?= $str ?></body></html> 例をあげて言うと これを「a」でも「q」でも「t」でもうまく検索できるようにしたい。です。
問答無用で str_replace なんかしたらうまくいかないに決まってる
そもそも格納データが HTML の状態になってるのが非効率的。
HTML 特殊文字をエスケープしていない素のデータを入れておいて、
あとで表示する際に特殊文字を変換すればいいのに。
そうすりゃ検索も簡単にできるし、データの加工(或いは編集)も楽。
どうしてもデータを HTML 状態にしなければならないのなら
諦めて
>>236 のようにするか、
実体参照のテーブルを作って strtr() で
素のデータにしてから検索。ただしこれは激しくメドイ
>>209 >232では正規表現で検索といってるがその他ではstr_replaceつかってるのはなんでだ?
241 :
209 :2006/01/14(土) 23:50:18 ID:???
データを入れるときは どうしてもデータを HTML 状態にしなければならないです。 今実行できる環境があるなら よろしければこれを実行してください。 <?php $key = "a";//検索文字 $str = "a"b<xml>a";//データ $str = str_replace($key, "<b>${key}</b>", $str); ?> <html><body><?= $str ?></body></html> この$strを、「a」「t」「x」で検索して うまく表示されるように改造していただけたら幸いです。
>>241 /(?(?=&[^\s;]*;)&[^\s;]*{$key}[^\s;]*;|{$key})/
243 :
209 :2006/01/15(日) 00:36:26 ID:???
>>240 preg_replaceでおk?
>>242 それどこでつかうのですか?
意味がわかりません。
が
自己解決できそうです。
ありがとうございました。
意味がわかりません。 が 自己解決できそうです。 ありがとうございました
209は日本語を勉強するべきだと思う。
246 :
188 :2006/01/15(日) 10:08:01 ID:???
つかえるならmod_rewriteかな
不正じゃないと思うんだが… 何がなんでも不正ってことにしたいみたいだけど
仕様を不正だと考える頭が不正
>>246 ちゃんとレス読んでるのか?
それは不正なリクエストではなく、仕様に沿った正しい実装だ。
どうしても嫌ならPHPとかで、自分が「正規と思える形に整形する」かエラー吐くなり好きなようにやれ
>>251 お前もちゃんとレス読めんでググれって
上は PATH_INFO で、?foo=bar&hoge=fuga を/bar/fuga
でも機能させることができる(もちろんそれなりの作り込みが必要)
もの。
下は
http://example.com/index.php と同じ
どうしてもイヤならリンクを絶対URIで書いて誘導していけば?
ただし、アクセスそのものを拒否しようとしちゃダメ
>>246 回避しようとする意図が分からん。
//の/変換はユーザの利便のために用意されてるものじゃないのか?
Webの仕様が気に入らないならいっそWebサーバーから自作しちまえば?
【環境】 FreeBSD 5.4 Apache 1.3.34 PHP5.1.1 Zend Optimizer2.5.10 動かしているもの : pukiwikiのみ 【質問】 アクセス数が多くなると、/usr/ports/lang/php5/work/php-5.1.1/Zend/配下で ・zend_API.c(712) : Actual location (location was relayed) ・zend_hash.c(169) : Actual location (location was relayed) ・zend_vm_execute.h(17469) : Freeing 0x08240824 (44 bytes), script = といったエラーが大量発生します。 何か原因に心当たりがある方がいらっしゃいましたら、教えて頂けないでしょうか。 書籍を買ったりgoogle検索したりして情報を集めて勉強しているのですが、 手詰まりになっています・・・。
>>252 どうしてもイヤならmod_rewriteで自動変換するのが正道かとオモウ
>>254 よー分からんけどPHP5.1.1とZendOptimizer2.5.10の組み合わせによるものか
単なるバグの類じゃないの?
そんな環境の情報はまだ全然少ないからネットで情報漁っても無駄じゃないかと思う。
php-dev辺りのMLで聞いてみるか、Zendにバグ報告出してみるとかした方がいいんじゃないかな。
258 :
188 :2006/01/15(日) 17:21:06 ID:???
こっちにも…
http://wiki.2chx.net/php/ PHPpedia (PHP FAQ集積所) 完成しました。
多少動作が重いかと思いますが、無広告ですのでご了承下さい。
まだ過去ログのFAQ漁っていません。
スレッドでの質問のループを減らすために、ご活用くださいませ。
>>258 >Permalinkとして複数のURLが存在するのがいやだったのとGoogle先生が意図しないURLでクローリングを始めたので
>キャッシュされる前にPermalinkとしての単一URLを意図したかったのです。
おいおい・・そういう何がしたいかって情報は一番初めに書くべきで・・・(ry
>>259 乙!
一応言っておくけど、FAQのQ01がちょっと間違ってるよ。
正しくは、
"$hoge[0]" // OK
"$hoge[a]" // OK
"$hoge['a']" // パースエラー
"$hoge[$x]" // OK
"$hoge->a" // OK
"$hoge->$x" // パースエラー
"$hoge[0][1]" // $hoge[0]のみ評価され、[1]の部分はそのまま残る
"$hoge[a][b]" // $hoge['a']のみ評価され、[b]の部分はそのまま残る
"$hoge->a->b" // $hoge->aのみ評価され、->bの部分はそのまま残る
一番下の3つのような状況で正しく解釈させるために中括弧 { } を使う。
ただし、中括弧でくくった場合は"{$hoge[a][b]}"はaとbが定数とみなされるので、"{$hoge['a']['b']}"と書く必要がある。
>>256 ,257
ありがとうございます。
メモリ関係を再チェックして、違うようならMLやZendに報告することにします。
265 :
nobodyさん :2006/01/16(月) 01:39:15 ID:/VwxqsS4
max_execution_timeで20を指定していて、 mysql_queryで時間のかかるクエリを実行させているのですが、 20秒経ってもFatalErrorが出てこないんです。。 set_time_limit等も使用していないのですが、どうすれば処理が中断できるでしょうか?
266 :
nobodyさん :2006/01/16(月) 01:40:03 ID:/VwxqsS4
書き忘れました。。 使用してるのは FreeBSD 4.10 Apache 1.3.34 PHP 4.3.11(DSO) です。
268 :
265 :2006/01/16(月) 01:50:35 ID:???
ありがとうございます。 データベースは影響されないんですね。。 ではどのようにして中断処理を実行させるべきなのでしょうか? PHPでは無理でしょうか?
phpinfo()のMySQLの項目にそれらしきものがあるよね。
271 :
265 :2006/01/16(月) 02:40:39 ID:???
mysql.connect_timeout=20 でやってみたのですが、やはり20秒以上かかっても処理は中断されませんでした。。
>>270-271 mysql.connect_time は PHP が MySQL に接続を確立させるまでの時間制限。
確立した後は関係無いぞ。
274 :
265 :2006/01/16(月) 03:11:57 ID:???
しかし、それ以外に処理中断する部分が見つかりませんでした。。 他に処理中断をする部分も見つかりませんし。。
DBで処理中に20秒経ったら無理矢理その処理を中断させる、とか、 ロジックの考え方的におかしくないか?
どんなQueryで、なんで時間がかかったら中断したいとか 包み隠さず書けば誰かが相談に乗るかもしれない
時間のかかるクエリの実行途中で、何の為に中断させるのか・・? その辺の事情も書けば、アドバイス貰えるかも知れないのに残念だ。
279 :
278 :2006/01/16(月) 05:13:48 ID:???
>>272 mb_convert_encoding()
281 :
265 :2006/01/16(月) 12:39:11 ID:/VwxqsS4
検索するプログラムを作ってまして、通常の検索であれば15秒辺りで終わるのですが、 ごくまれに20秒以上かかる検索結果もあるんです。 なので、20秒を限界としたいのですが、、
>>281 max_execution_timeで無理となるとphp側でできることは無いと思うし、
DB側でも「時間であきらめる」という項目は無かったと思う。
(そんなことされたら困る)
20秒以上かからんようにDBをチューンするしかないんじゃね?
そもそも検索に15秒もかかったら他のサイトを探すよ せめて3(最悪5)秒以内で結果が出るようにした方がいいよ
インデックス張ってないんじゃね?
データ件数が多すぎるとか。
>>282 >DB側でも「時間であきらめる」という項目は無かったと思う。
これはあるよ。ただ基本的に無限ループに近い処理をしてしまった時の
防衛策のようなものだけど。そのトランザクションを無効(巻き戻し)してエラーを返す。
selectにトランザクションなんてあるのかよ
キャンセル
>>290 トランザクションはSELECTやINSERTとかに、"ある"ものなのか?
まぁ、mysqlだからなぁ。。。あっても驚かないよ。
blogみたいに最新のn件だけ抽出してトップに日記を表示するにはどうすれば良いでしょうか?
295 :
nobodyさん :2006/01/17(火) 04:30:49 ID:+lwEE0tn
>>294 最新のn件抽出するスクリプトをPHPで書いて、トップページに表示させろ。
blogみたいに〜って言うならRSSでも生成してトップで取り込んでも良いだろうけど。
少々下がり気味なんでageとこ
>>294 それを考えるのがお前の仕事。
というか自分で答え書いてるんだけど何を知りたいの?
記事がファイルに保存してあってそこからの抽出方法?
それともDBからの取得方法?
どっちにしろその質問の仕方じゃ答えはでないとおもうが。
パッシブな方法 1. 日記データの日付を取得する 2. 取得した日付情報を最近のものの順序で並び替え 3. 並び替えたものの上位n件を取得 4. 取得できた最新のn件の日記リストをトップページに表示 アクティブな方法 1. 日記データを新規追加する際に"最新日記リスト"に記録。 2. "最新日記リスト"は最新のn件のリストとなるように新旧の項目を調整 3. "最新日記リスト"をトップページに表示 処理コストが大きいので通常は後者の方法を取る。
>>294 "SELECT * FROM table ORDER BY logtime DESC LIMIT $n;"
299 :
nobodyさん :2006/01/17(火) 12:36:14 ID:kDHNpOTy
windowsでtest環境を構築しててこの度4.4.2を入れたんだけど、
file('
http://... ')やfopen('
http://... ')
を記述してるとapache2がエラー起こして死亡してしまうんだ。
php.iniのallow_url_fopen=On
になってるから、動いてしかるべきなんだけどな。
>>164 で言ってたfsockを使うとちゃんとデーター取れるんだけど、
今回の変更ってここら辺影響してるんだっけ?
301 :
299 :2006/01/17(火) 14:13:03 ID:???
エラーメッセージとかはなくて ワトソン博士が立ち上がってApacheのサービスが落ちて再起動してるっぽい。 phpのコマンドラインで実行しても同じ症状になってる。 php -lでスクリプト自体をチェックしてもエラーメッセージ無しといった状況だったり。 OSはwindows2k sp4だけど、不具合とはかんけー無いだろうなぁ・・・。
イベントビュワーとか Apache のログとかあるだろう…
>>299 CLIとCGIとで試してみたけど、
確かにPHP4.4.2(cgi-fcgi)で落ちるね。
単純に$fp = fopen('
http://www.php.net/ ','r');だけで。
NG:4.4.2(cgi-fcgi)
OK:4.4.1(cli/cgi-fcgi),4.4.2(cli)
OK:5.1.1(cli/cgi-fcgi),5.1.2(cli/cgi-fcgi)
各種サーバモジュールは試してない。
原因は白根。
バグだな。
4.4.2のChangeLogには怪しいのが1件 Fixed bug #34359 (Possible crash inside fopen http wrapper).
どうしてこう、アップデートに困るバージョンを量産するかね >PHP開発陣
ほんとにダメだよな いつまで経ってもダメ
文句があるなら開発チームになればいい。 コード書けなくてもバグ報告ぐらい出来るだろ。
典型的PHP厨的レス
310 :
294 :2006/01/17(火) 22:52:18 ID:???
>>296 DBは使いません。
保存してあるファイルからの抽出です。
自分がやりたいのは
diary.htmlと言うファイルがあって、そこの中の
<h4>日記タイトル</h4>
<p>本文</p>
だけを抜き出してindex.htmlの特定の場所に1件表示させたいんです。
>>310 フォーマットが決まってるなら、preg_matchで検索するか
XMLとしてパースするか、自分でオートマトン組んで処理するか。
ただ、>297をみて後者を選ぶのがベター
前者にするならキャッシュ持たせた方がいい。
313 :
294 :2006/01/17(火) 23:06:55 ID:???
>>311 >>312 ありがとうございました。
ド素人なので実際の組み方は分かりませんが、イメージは大体掴めました。
一から勉強します…。
314 :
nobodyさん :2006/01/18(水) 01:07:48 ID:zQtemvMy
315 :
314 :2006/01/18(水) 01:14:07 ID:zQtemvMy
追記ですが…。 私は4.4.3正式版が出るまで、WindowsではPHP4.3.11を 使用することにしようと思います。 ($GLOBALの問題を考慮しても最近のPHPのバグを考えると…) 皆様はWinでの4.4.3-dev 4.3.11の選択をどの様にお考えになられますか?
316 :
299 :2006/01/18(水) 11:52:19 ID:???
snapshotを知らなかったヘタレです。
4.4.3-devで不具合は改善できてますね・・・。
>>315 完全なfixを期待できないからdevを使うのであって、
古いから安心ってわけでもないだろうしなぁ・・・
現実問題として、かたっぽが直っても別の部分で問題が出たりするから
品質管理が出来てるほうを選ぶ。
-devの付いたバージョンを使わなくちゃいけないって 辺りが、とても寂しかったりするんだけどね。
Mojavi3は永久にdevだ
Aというプログラム(自作)から全く別のBというプログラム(他人作成)に 変数(ID/PASS)を渡したいんですが、良い方法はあるでしょうか? GETを使うのはセキュリティ的にも論外な気がします。 ユーザ側からPASSは確認できないようにしていますので ブラウザからソースを見るとPASSが確認できてしまうPOSTも避けたいです。 そうなるとセッション()を使うところかと思うのですが、 Bプログラム側でセッションを考慮しようとすると非常に面倒な部分が あるのです。 何か他に良い方法はないでしょうか?
セッション変数をBにわたすラッパーを作る
>>319 BのID/PASS受け取り部分って自由にいじれるの?
だったらファイル経由とかDB経由とかにしてそのキーだけGETで渡すとか。
>>319 「全く別のBというプログラム(他人作成)」が現状でどのようなI/Fを持っていて
それを使う必要があるのか、または自分でI/Fをついかできるのか
AとBがネットワーク及びサーバでの位置関係がどうなってるのか、どのようにできるのか
その辺の情報がないと、手段が絞れないよ。
mixi は永久にベータ版
>>298 なんだ、その致命的なバグは。
それって正式リリース版のみのバグ?
4.4.2のdev使ってるんだが発生しないような・・・
session cookie get post 以外に別のphpに変数渡す方法ってあるの?
329 :
326 :2006/01/19(木) 01:03:27 ID:???
やっぱり問題ないわ、正式バージョンでも問題なかった。 fedora4+apache1.3環境で試してるけど、 apache2かwindowsあたりの問題かな?
>>328 serializeしてファイルやDBにとっておくってのもあるね。
あと環境依存だった気がするけどshmopとか。
画像ファイルをクリックしたら保存ウィンドウを開くようにしたいのですが、 これって結局apache側の処理(mimeだっけ?)であってphpでどうにかすることはできないの でしょうか?
>>331 違う、ブラウザの処理w
あとはcontentヘッダの問題でもあるが。
>>331 リンク先でheader()使ってContent-typeにoctet-streamを吐いてやればいいんじゃないかと。
>>331 >>334 いや、Content-typeはimage/pngやimage/jpeg等で、Content-dispositionをattachmentにするのがよいのではないかと。
以下、かなりテキトーだけど雰囲気だけ。
リンク元:
<a href="download.php?src=hoge.png"><img src="hoge.png" etc. /></a>
リンク先(download.php):
<?php
$src = $_GET["src"];
header("Content-type: " . image_type_to_mime_type(exif_imagetype($src)));
header("Content-disposition: attachment; filename=$src");
header("Content-length: " . filesize($src));
readfile($src);
?>
あとそれに加えてLast-modifiedやETagも送出し、リクエストヘッダからはIf-modified-sinceやIf-none-matchを読んで必要に応じて304 Not Modifiedを返す、とかするとより親切。
>>335 なにその脆弱性満載。
それはそうとPEARのHTTP_Downloadで一発ですよ。
>>336 いや、お前さんの言う脆弱性ってサニタイズしてるかどうかであってここでは別問題だろ。
話の論点がわかってないんだろうな。
>>335 download.php?src=/etc/passwd
画像をはき出す際に、有効期限を設定する方法を教えてください
>>338 みたいなお馬鹿さんがいるので注意書きしないとわからんらしい。
337を読んだんだか読んでないんだか。
(注意)
>>335 はHTTPレスポンスヘッダの例を提示することを意図したレスなので、コピペして使っちゃう横着な人はせめて正当性チェックくらいしてくださいね。
>>339 Expires:ってこと?
>>340 指摘されてからの後付ならば何とでも言えるね。
書き込み時点で、注意書きを書くくらいの配慮があればねぇ(藁
サニタイズ言うなキャンペーンなんてのもあるしな
じゃぁサニタイズ言うな言うなキャンペーンしようぜ
>>345 つーかサニタイズしなきゃいけないような作りが変というか。
表示してるファイルと同じものをダウンロードできるように
するっていう要求もなんか変な感じするけど、画像をサーバ
側で管理して動的にページ生成するんだから、ファイル名を
直接パラメータに取る必要ないよね。
>>346 手法を端的に示してるだけのサンプルだろ?
>>348 相手の本は初心者向けのPHP基礎参考本じゃまいか?
なんせ1番最初の「Hello Worldと表示させてみよう」のコードに いきなりセキュリティ対策がなってねぇ!とか突っ込む人だからなww
whoisの検索結果を表示するにはどうしたらよいのでしょうか?
>>350 「セキュリティ対策がなってねぇ!」
じゃなく
「初心者本のくせに教育的配慮がなってねぇ!」
だろ。
htmlだったから文句言われたんだよね 最初のサンプルを <?php $var = "Hello World"; echo $var; ?> にしとけば文句言われなかっただろうに
>>351 whoisの検索結果を表示すればいいです
そのネタ邪魔。 それとリンク先くらいちゃんと読め。
上の質問と似てるんだけど、 大容量ファイルをワンクリックで圧縮してダウンロードできる ようにしたいと考えてます、 上の方法で圧縮ファイル作成、ダウンロード、っていう2つに分けた 手順なら簡単なんだろうけど、いかんせん容量がでかいので 何か良い方法ないですかね、できれば圧縮しながらダウンロード、 みたいなのがあればいいんだけど。
>>357 pearを全く使ったことがないんですが、
マニュアル見ても全く理解できんのです、
というのもクラスとか(オブジェクト指向?)を完全に避けてここまで来たためです。
クラスを理解してなくてもpearって使えるでしょうか?
非常に初歩的なもので良いので
HTTP_Download::HTTP_Downloadあたりを使った例を書いてもらえないでしょうか?
>>358 おまえ、下らない質問スレの方があってないか?
>>361 引数に要求される型がboolでデフォルトがfalse
くだ質行け
363 :
nobodyさん :2006/01/20(金) 02:08:58 ID:Vc0sPXl7
はじめまして PHP4.4.2+Apache2.0.54(worker)を使用しています。 eAcceleratorを使用しようと思い、インストールしたのですが全く動作しません。 Googleで調べてみたところPHP5+Apache2でスレッドセーフなMPMを使用するとアクセルレーター系統は使えないという記事を見ました。 しかし、現在使用しているのはphp4で、Thread Safety enabledとphpinfoに書いてあったので使用できると思うのですが・・ やはり無理なのでしょうか?
>>363 いやだからThread Safety が enabled なんだろ?
はい。enableになっています。 もしかしてPHPがスレッド対応でもeAcceleratorがスレッドに対応していないのでしょうか。。?
>>365 「PHP5+Apache2でスレッドセーフなMPMを使用するとアクセルレーター系統は使えない」
という、そのままの症状が発生しているだけのようだが。
enabledの意味、わかってるよね?
367 :
nobodyさん :2006/01/20(金) 04:58:52 ID:qY5zGHnC
以前 「()の内容が真ならば虚を返す」 という関数を見た気がして探しているんですが どなたが心当たりのあるかたいますか。
>>367 気のせいかユーザ関数じゃねぇのか?
まあ近いところでempty()ってのはあるけど。
虚 (null?) じゃなくて偽 (false) を返すのなら empty() ですね。 で、$hoge が定義されていないときに if (!$hoge) すると Notice が出て、 if (empty($hoge)) ではエラーなし。
371 :
nobodyさん :2006/01/20(金) 07:50:35 ID:qY5zGHnC
>>368 >>369 >>370 どうやら自分がものすごい勘違いをしていたようです。
おそらく関数ではなく ! を使った式で正解だと思います。
説明についてもnullとfalseを間違えるなどお騒がせしました。
ありがとうございます、無事解決できました。
372 :
nobodyさん :2006/01/20(金) 09:40:24 ID:WExUI5wL
PHPのアップロードについて PHPって、ユーザーのアップロード処理が終わってからこちらで作成したPHPが起動しているようですが アップロード中から動かすことって出来ないですかね? アップロードの途中経過をユーザーに知らせたいんですが、今はupload_tmp_dirのファイルサイズを通知するという手段をとっています。 環境は ・Linux ・Apache2.2 ・PHP 5.1.2 ですが、これが可能になるなら環境の変更も考えるかもしれません。
>>372 > アップロードの途中経過をユーザーに知らせたいんですが、今はupload_tmp_dirのファイルサイズを通知するという手段をとっています。
それで通知できてるんならいいんじゃないの?
374 :
372 :2006/01/20(金) 09:48:21 ID:WExUI5wL
>>373 できてるって言うか、ないよりマシな代物です。
upload_tmp_dirに作られるファイルは、当然ファイル名はランダムで、
どれがどのユーザーのファイルかは分からないんで、全ファイルのサイズを通知して
ユーザーに適当に推測してもらうしかないですし・・・
できるかどうか知らないけど JavaScript の範疇じゃないかなぁ PHP はリクエストを受けて、それに対してレスポンスを返すのが 仕事だから、リクエストの途中の話は知ったことじゃないと 思うんだけど。
376 :
545 :2006/01/20(金) 13:26:39 ID:yXtCuLJZ
PHPとJavaScriptの組み合わせしかないと思い込んでるのかもしれないけど、以下の問題についてご教授願います。 「Submit前」のFormの値をPHPで取り出す方法を思案中。 pseudoでもちろん動かないけど、やりたいことはこんな感じ +++++++++++ ... <form name="aaa"><input type"text" name="bbb" value="" onChange="register_value()"></form> ... <script> function register_value() { <? $ccc ?> = document.aaa.bbb.value; } </script> +++++++++++ 他にメインのFORMがあっていろいろやってるので、ここではどうしてもSubmit前に処理する必要がある(と考えてください..)。 結局的にやりたいことは、FORM上の値を、SUBMITする前に(つまり $_POST['bbb'] ではなく)その場で(この場合はonChangeの度に)PHPの値$cccに渡したい。 JavaScriptの「document.aaa.bbb.value」ではなく、PHP独自で現document上のFormの値を取り出すことは可能なのでしょうか?
・・・・・・・・・・何がしたいんだ? どう考えても基本から分かってない。 PHPとJavaScriptの役割の違いを全く理解してないな。 そもそもどう考えたらPHPで送信済みの物を操作できると思えるのかと小一時間・・ PHPとは全く関係ない、JavaScriptスレに逝け
Ajax じゃねーかな
379 :
545 :2006/01/20(金) 14:17:24 ID:yXtCuLJZ
ガッツリ理解しますた。 onChangeで再読込みしてURLから渡すぐらいしかどうにもならんすよね。 ガッツリ理解しますた。 いや、つまりサーバ介さなきゃどうにもならんってことを理解しますた。
だから再読み込みしたくないなら Ajax だっつーのに
382 :
545 :2006/01/20(金) 14:57:33 ID:yXtCuLJZ
Ajax 初耳なんでちと調べてみます。 同時にdocument.forms[n].submit();の手動二段階Submitで何とかなる気もしてきた。 ありがとござんす。
ちょっとお尋ねします。 接続元のIPが一定範囲内になるかどうか調べるのって一発でできますか? たとえば以下のIPの範囲内に含まれているか否かが知りたい場合。 255.255.255.0 〜 255.255.255.15 接続元IPを最初文字列比較にして、最後だけ数値比較でやればできるわけですが...
ip2long()でなんとかならんか?
>>386 むかーし関数書いてこのスレかくだ質に書いた。
過去ログ嫁
みつからなそうだからヒントip2longとビット演算そしてサブネットマスク
390 :
385 :2006/01/21(土) 00:04:10 ID:???
391 :
nobodyさん :2006/01/21(土) 02:11:11 ID:xfElLr5F
PHPUnit2 を使っている人はいますか? php では構文エラーがでないのに、phpunit でテストクラスを実行させると 構文エラーが出てしまいます。何が原因なのでしょうか? 書き出したばかりのスケルトンも構文エラーが出ます。 $ php -version PHP 5.1.2 $ phpunit --version PHPUnit 2.3.4 by Sebastian Bergmann. $ php HogeTest.php PHPUnit 2.3.4 by Sebastian Bergmann. ... Time: 0.013412 OK (3 tests) $ phpunit HogeTest PHPUnit 2.3.4 by Sebastian Bergmann. Syntax error in HogeTest.php ~~~~~~~~~~~~~~~~~~~~~~~~~~
PHP で imode/vodafone/au 対応のサイトを作ることになったのだけど 参考になるソース ( アプリ、ライブラリなど ) を教えてくれませんか。
ググれ
394 :
nobodyさん :2006/01/21(土) 16:39:25 ID:jZKXWMZD
PEARのAUTHについて質問です。 addUserでmysqlデータベースにユーザーを追加しました。 データベースに新規追加できたのですが、パスワードがMD5で格納されてしまいます。 'cryptType'=>'none' にしたので、パスワードが平文で追加されるはずだと思うのですが、 どこか間違っているでしょうか。お願いします。 <?PHP require_once('Auth/Auth.php'); // Authオプション $params = array('dsn'=>"mysql://party_user:party_pass@localhost/party", 'table'=>'auth', 'usernamecol'=>'username', 'passwordcol'=>'password', 'cryptType'=>'none', 'db_fields'=>'user_id'); $objAuth = new Auth("DB", $params); // ユーザーの追加 if($objAuth->addUser('ABC', '123', array('user_id'=>'4'))) { echo "ユーザーを追加しました。"; } ?>
>>394 おいらの手元のある pear/Auth/Container/DB.php (DB.php,v 1.40 2003/11/15, Authのverは1.2.3くらい?)だと、
function addUser($username, $password, $additional = "")
{
if (function_exists($this->options['cryptType'])) { // つまりnone()関数が無いとmd5()になる
$cryptFunction = $this->options['cryptType'];
} else {
$cryptFunction = 'md5';
}
...
$query = sprintf("INSERT INTO %s (%s, %s%s) VALUES ('%s', '%s'%s)",
...
$cryptFunction($password), // 上のnone()かmd5()を使う
...
);
となっている。
何もしない(同じ文字列を返す)none()関数を作ればいいのかも知れんね。(他への影響は知らん)
>>395 それならstrvalでも突っ込めばよさげだな
PHP4.4.1です。 アップロード掲示板で アップしたファイルの拡張子を取得する方法を教えて下さい。 よろしくお願いします。
398 :
^0^ :2006/01/21(土) 18:27:39 ID:NwQNGC9O
m9^0^
マニュアル読めって
402 :
394 :2006/01/21(土) 18:55:35 ID:???
>>395-396 ああ、なるほど、'cryptType'というのは
$cryptFunction($password)
の$cryptFunctionに入るんですね。
だから'cryptType'=>"strval"とすると
strval($password)となって平文が格納されると。
そしてやってみたら平文で格納されました。どうもありがとう。
勉強になりました。
403 :
391 :2006/01/21(土) 19:18:47 ID:???
>>391 自己レスだけれど、PHP のパスが PHP4 になっていたのが原因だった。
404 :
nobodyさん :2006/01/23(月) 12:01:54 ID:1NSQ7CLk
自分を呼び出している関数名を取得する関数ってありますか?
呼び出し元によって動作を変えたいとかいうことを考えているなら 悪いことは言わないからやめた方がいい もっと小さな関数を作るようにしろ
406 :
404 :2006/01/23(月) 12:34:43 ID:???
素直にそうします。
407 :
nobodyさん :2006/01/23(月) 12:48:38 ID:cMW2eJoC
質問ですが trueをあらわす数字は1で falseをあらわす数字は0で合ってますか
tarは扱えますか?
409 :
nobodyさん :2006/01/23(月) 14:31:16 ID:iSBxRO6m
テキストの中で、[:XXXX:]と言うモノがあったら、 DBと接続して、該当する画像を表示させたいのですが、 [:XXXX:]は1テキスト内に複数あり、 どのように置換したらいいのかわかりません。 DBと接続、該当する画像のURLを取ってくるところまでは わかるのですが…。 PHPのバージョンは4.3.11です。
>>407 厳密には違う。どちらも本来は数字ではない。
「数値」に変換した場合はtrue=1、false=0になるが、
「数字(文字列)」に変換するとfalseは""になるという挙動の違いが生まれる。
逆に同等の動きになる数値という意味ではtrueは0以外なら何でも、falseは0、となる。
>>409 mb_ereg_replaceまたはpreg_replaceでは置換時にPHPコードを実行するオプション(e)があるのでそれを使うのが楽。
再帰的にftp_mkdirしたいんだけどグッドな関数作ってくり!
知るか!
XOOPS入れたら下のようなデバック吐いた これなんかのモジュールたりないわけ? Notice [PHP]: Only variable references should be returned by reference in file include/functions.php line 547
エラーレベル下げれば?開発者じゃないならNoticeなんて要らんだろ。
重複行を削除する一番クールな方法はどんな方法でしょうか? 一番真っ先に考えたのが、一番上の行からfileで配列に入れて 総当りでチェックする方法なのですが、どうも効率が悪いような気がします。
>>418 file() → array_unique()
ftp関数でファイルを取得してブラウザからダウンロードするには どんな感じの手順を踏めばいいでしょうか?
>>420 ftpで接続。
ftpでファイルget。
header出力。
ファイル内容出力。
>>421 ftpでgetした際に必ず一時ファイル等を作成する必要がありますか?
ダウンロードのためにサーバ側でも一時的に容量を消費してしまうことが
若干ナンセンスに感じますがしょうがないでしょうか?
>>422 ftpでファイルを作らずにgetできるなら一時保存しなくてもいいが?
>>423 どんな関数を使えば良いでしょうか?
ftp_fgetだとオープンしてるファイルに一旦書き込む必要がありますよね、
ftp_getでもサーバ側に一旦保存する必要がありますし。
あるHTMLファイルからの抽出方法で分かりません。 HTML中に<h4>が出てきた場合、その場所から数えて最初の空行までの範囲を抽出したいのですが、 以下のところで止まっています。 if (preg_match("/^<h4>/",$line)){ print_r($line); } ここからどうすればよいのでしょうか? while (preg_match("/^$/",$line)) { break; } ↑これでは上手く行きませんでした。
>>424 すまん。遠回しに書いた俺が悪かった。
> ftpでファイルを作らずにget「できるなら」
PHPの標準にはそんな関数は無い。
記憶違いで無ければPEARのNet_FTPにすら無い。
つまり一時ファイルを作るしかないってことだ。
ま、自力でFTP通信を一から書けば何とかできるかもしれんがな。
>>425 エレガントにやる方法はいくらでもあるだろうが
面倒くさいからフラグ変数のON/OFFで処理しちゃえば?
>>427 アドバイスのおかげでようやく出来ました。
ありがとうございます。
431 :
nobodyさん :2006/01/25(水) 04:02:05 ID:B3uQ6LQK
function や for の関数の中にif構文を入れたらエラーになるんですが うまく動作する方法はないでしょうか。functionのなかにifだとが利かないので forで代わりにしようと思ったら、これもエラーになってしまいました。 関数の中に関数を入れないと正常に動作します、以下は問題の箇所のコードです↓ function ginfo_block(){ global $ct,$ginfo,$glist; for ($a = 1; $a !== 1; $a++;) { print"ginfo_block()のなかのforは実行されました<br>"; } print"ginfo_block()は実行されました<br>"; }
>>431 ただの構文ミス
for ($a = 1; $a !== 1; $a++;) {
↓
for ($a = 1; $a !== 1; $a++) {
433 :
nobodyさん :2006/01/25(水) 05:40:59 ID:B3uQ6LQK
>>432 ありがとうございます、いかに変更したところ正常に作動しました
for ($a = 1; $a !== 2; $a++) {
またif構文が正常に作動しなかった理由もわかりました。
()の中が空っぽでもTrueになると勘違いしていたことが原因でした。(実際はFalseになってしまうのですね)
>>433 マニュアル嫁。
読む気ないならせめてくだ質に池
if () の中身空っぽっていったい何をしたいのだろう…
そもそもifやforを関数とか呼んでる辺りからして(ry
437 :
nobodyさん :2006/01/25(水) 12:29:49 ID:B3uQ6LQK
>>437 > その一文はただの誤植です。
二文あるようだが。
>>431 > function や for の関数の中
> 関数の中に関数を入れないと
>>437 ということはだ。まだ文字面しか飲み込めてないんだな。
if や for や function, while などが「意味」としてまだ理解できてない。
頑張れ。
更新履歴スクリプトなどのログファイルが一定期間更新されなかった場合、 自動的にページ内から掲示板へのリンクを消すといった処理ってできないでしょうか? 更新が長く止まったときは掲示板を非表示にして、 更新直後(30日ぐらい)だけ掲示板を表示しておく、という感じです。 なんでこんなことをしたいかというと、創作系サイトをやっているのですが、 長く更新しないと催促とかの書込みが続いて鬱になってくるからです。 (マメに更新してれば済む問題なのでしょうが…( ´Д‘)) 処理としては ../history/history.log の更新日時を見て 指定した期間更新がなければ <a href="bbs/bbs_opinion.cgi">感想掲示板</a> へのリンクを表示させない (更新されればまた表示される) ようにしたいのですが、どうやっていいか全くわかりません。 どうかご教示を…
441 :
nobodyさん :2006/01/25(水) 15:37:54 ID:i7XMk+as
>440 別に簡単なわけだが。 どこまでやって、何でつまってるのかがわからん。
>>440 例えばDB使えるなら更新時(書込み時のこと?)タイムスタンプとっておくとか
filemtime()で更新時間をゴニョゴニョとか
//phpは時間の比較が面倒臭いね
1. ロックディレクトリを作ってロック 2. 処理 3. sleep(2); 4. 処理 ロック解除 というスクリプトがあるのですが、ロボットのアクセスが1秒間に何回もある時、 ロックされた状態のままになって、一般の人がアクセスできなくなることは あるのでしょうか? 上の処理中に次のアクセスがあった時は、ロックファイルが存在した時点で すぐにエラーを出して終了させていますが、ひどいロボットだと何分間も アクセスが続くので、その間、常にロボットに占められる状態になるのかを 教えていただけたらと思います。
>>443 常にってことは無いでしょう。連続でアクセスされたからって間に割り込めないわけじゃないんだから。
ロックが解除された次の瞬間にアクセスできた人が次に処理できるようになるだけかと。
もちろん、そんなに連続でアクセスされたら確率の問題で一般の人は繋がりにくくなるけどね。
445 :
443 :2006/01/25(水) 16:22:39 ID:???
>>444 ありがとうございます。
やはり繋がりにくくなりますか。
検索エンジンのロボットはHTTP_USER_AGENTで拒否
できるんですが、巡回プログラムを使ったアクセスが
困るので、それを止める方法を考えるしかないですね。
>>442 strtotime() 使えばいいんじゃね?
面倒かなぁ?
時間の比較なんてどの言語も似たりよったりだ。 面倒って感じるならプログラミングすんのに向いてないだけだろう
448 :
nobodyさん :2006/01/25(水) 20:53:35 ID:NabcNoAC
くだらねー
450 :
440 :2006/01/25(水) 23:49:12 ID:???
ちょっと心当たりのあるphpスクリプトで $newview = '720';//ニュー表示何時間? しない時は0 $newlogo = '<font color="#FF6699">new</font><br>'; //最新記事マークタグ if($newview == 0 || ($newview*3600+$stmp) < $nowtim) $newlogo = "" ; $nn.="[{$tim}] $newlogo$com<hr size=1>";//最新記事 ---------- こんな感じのがあるんですが、 <font color="#FF6699">new</font> の部分を <a href="bbs/bbs_opinion.cgi">感想掲示板</a>に入れ替えれば良さそうなんですが、 実際にどうやって取り込んでページに反映させられるのかわかりません..。 ご示唆のほどお願いします。
>>450 そりゃホントに表示の部分だけで、肝心の更新日時を取得してる部分が無いよ
452 :
409 :2006/01/26(木) 03:21:42 ID:???
>>412 ありがと。
早速使ってみ…と思ったのですが、
[:XXXX:]は、何パターンもあり、
preg_replace、preg_replace…と数分だけ書くと言う手もあるのかもしれませんが、
検索文字列に設定できません。
ブログで絵文字を使うような感じにしたかったのですが、
どのようにしたらいいのでしょうか。
453 :
nobodyさん :2006/01/26(木) 04:39:17 ID:AR4L/VZ9
koreaに反応したんだお
>>452 [:XXXX:]にある程度固有のルールは無いのか?英数字しか使えないとか。
$str = preg_replace('/\[:\w+?:\]/e', 'emoji($1)', $str);
みたいな感じで[:〜:]を最短マッチで関数に引き渡せばできそうな気がするんだが。
457 :
456 :2006/01/26(木) 10:45:49 ID:???
()付け忘れた $str = preg_replace('/\[:(\w+?):\]/e', 'emoji($1)', $str);
掲示板のような親子関係が永遠に分岐する可能性のあるツリー表示がしたいんですが。 方法を思いつきません、どなたかアイデア・助言や分かりやすいサンプルソースのある場所を教え頂けないでしょうか。 再帰的な処理を行う方法がとんと浮かびません。
459 :
nobodyさん :2006/01/26(木) 11:23:50 ID:8dMtV3IM
複数のmp3ファイルを1つにファイルに結合してダウンロードさせたいのですが、 やった事のある人はいますか? いろいろ探したのですが、タグ情報の読み書きしか見当たりませんでした。 mp3の前と後ろをカットして中を結合して前と後ろを付け直すとかやってみたのですが、、、 mp3ってどうすればよいのでしょう。
>>458 その手の掲示板のソースを参考にすればいいんじゃまいか
>>459 ググればいくらでも見つかるわけで。つかphpで扱うな。
461 :
nobodyさん :2006/01/26(木) 11:29:29 ID:RHnTs72C
462 :
nobodyさん :2006/01/26(木) 14:30:13 ID:8dMtV3IM
すみません。ググっても見つからないのでこちらで聞きました。
PHPでなくてもいいのですが、
>>460 さんは何で扱いますか?
だからツリー型の掲示板探して中を見てみればいいのに…
464 :
nobodyさん :2006/01/26(木) 15:13:38 ID:8dMtV3IM
>459, >462です。すみません。できました。 キャッシュが残っていて結合されたファイルが鳴らなかっただけで、 単純に足せば鳴りました。
465 :
nobodyさん :2006/01/26(木) 15:56:54 ID:IB58kw5L
.htaccessのような感じに個別でCGI版PHPのmax_execution_timeの設定を 行うにはどうすればいいのでしょうか?
466 :
nobodyさん :2006/01/26(木) 16:03:50 ID:P2h/kQrX
PHP 4.4.2を使用しています 例えば $str='aaa'; という変数があり、 $wrap='aabcdeffaaabfue'; という変数の中から$strを大小区別無し検索するには eregi($str,$wrap) で動作しますが、 同じように preg_match('/'.$str.'/i',$wrap); でも動作するのでしょうか?
467 :
nobodyさん :2006/01/26(木) 16:06:46 ID:P2h/kQrX
自己解決しました、 正常に動きました
>>461 仕様書を出せ話はそれからだ。と言うかそれ以前にスレ違い
469 :
458 :2006/01/26(木) 16:17:19 ID:???
>>463 私じゃありませんっ
><
ソース見ても分かりませんがね・・
分かるまでじっくり見てみようと思います
複数の子を持つツリー構造を順番に巡るだけでは・・? まぁ、頑張ってソース嫁
>>469 掲示板だとして、一つの案だが
記事ごとにクラスを作る
個々の記事には独立した ID を振っておく
親配列、子配列をメンバ変数に持ち、直接の親、直接の子の ID が
ここに収まる
表示の起点となる ID を指定して、そこから例えば親は直接の親だけ
子はエンドレスで取得して表示
なんて風にやってみるって手はあるかな。
もっと効率のいい方法があると思うけど。
472 :
nobodyさん :2006/01/26(木) 17:25:26 ID:ZWELklYb
PHPでGETのクエリがあると特定箇所へのリンクができません。 1.php $str = "<a name=test1></a>"; 2.php <a href="1.php#test1?mode=asdf"> 仕様とかでしょうか?それとも可能?
PHPのお役立ちサイトとかないですか? 初心者向けのインストールガイドとかしてくれるサイトです。。。 WIKIを使いたいんですけどよくわかんなくて困ってます…。
>>465 くだ質。
PHP_INI_ALLだから、php.iniでもini_set()でも好きなように。
>>474 ・wikiを使いたい→wikiスレ
・レンタル鯖に設置したいけど方法が分からない→レンタル鯖板
・PHPのインストール方法が分からない→分からない点を書きアドバイスを求める (質問の内容によっては 自宅サーバ板)
PHPのインストールってのが何を指すのかよく分からない。
まぁ、wikiを設置したいけどやり方が分からないんだとエスパー
って事でこの板のwikiスレに行って、設置先の名前、設置するwikiの名前、それと分からないポイントを書けば誰か教えてくれるかもよ
478 :
472 :2006/01/26(木) 17:50:14 ID:ZWELklYb
>>473 マジサンクス。マジ俺アホス。一発で解決しました。50円あげるお^^
つ IIII
PHPで簡単な登録フォームを作成しています。 名前[ ] 内容[ ] 【プレビュー】【送信】 という表示だとして、プレビューのボタンを押した時に別ウィンドウが開いて 入力した内容が確認できる。 送信のボタンを押すとそのまま送信できる。 というのを考えているのですが、プレビューも送信もどちらもsubmitボタンとした場合、 formのaction先には1つのファイルしか指定できないわけで、どうすればいいか 迷っています。(プレビューと送信完了のページは別ファイル) 説明が下手ですみませんが、何かアドバイスをいただければと思います。
>>480 Submitの名前で判断すれば良いんじゃないかな?
>>480 確認しないで送れるんだけど、それでいいの?
中身空っぽのやつとかいたずらし放題なわけだけど。
>>482 ブログとかだって確認と送信あるから良いんじゃない?
484 :
480 :2006/01/26(木) 19:01:55 ID:???
>>481 その「Submitの名前」というのは、例えば以下のような事ですか?
<form action="test.php" method="POST">
ソース
<input type="submit" name="preview" value="プレビュー">
<input type="submit" name="entry"value="送信">
で、test.phpでifでsubmitからのnameを判別して
プレビュー用ならpreview.phpをincludeして、送信用ならentry.phpをinculdeするような。
>>482 確認はプレビューでするので、実際は登録されていない事になります。
>>484 オレだったら、hiddenだらけの別formを用意して、
プレビューはjavascriptで上記フォームを介して行い、
送信は普通にsubmitするかな。
もちろん、javascript offの環境ではプレビューできないけどw
487 :
nobodyさん :2006/01/26(木) 22:50:15 ID:XYYPwXMi
PHPで0から50までの乱数を出したい場合 rand(0,50); で0以上50以下が出力されるのはわかったのですが srand(初期値); のsrandの使い方がいまいちわかりません。 0から50までの乱数を出す場合はsrandの初期値はどのように 設定すればいいのでしょうか?
PHPを使ってHTMLにアクセスした際に文章をパソコン向けと携帯向けの表示振り分けを行いたいのだけど とりあえずわかったのが、UserAgentで携帯端末情報を読み取るまではわかったが、それから先が一向に進まぬ 教えて下さい。大先生方!!
>>487 http://www.php.net/srand > 注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。
つまり4.2.0以降のバージョンではsrandを書かなくていい。
ちなみに以前のバージョンでsrandを書く場合引数にはtime()などのランダムになりやすい値を与える。
つーかsrand(time())にするべし。
>>488 そこまでわかったのにどうして先に進めないのさ?
ifとかswitchとかincludeとかファイル入出力とかDBとか適当に組み合わせるだけだよ。
PHPで既存のスクリプトを改造してます。
>>490 いきなりそんなことを言う貴方はだぁれ?
493 :
nobodyさん :2006/01/27(金) 14:07:06 ID:lsupN3af
494 :
nobodyさん :2006/01/27(金) 17:14:49 ID:zienXgmO
PHP4系から5.1.2にアップデートしたら、 $test = 'hoo'; echo $test['bar']; で「h」が出力されるようになったのですが、 ($test['bar'] が $test[0] と評価されている?) こういう仕様に変わったんでしょうか?
>>494 PHP4.0.1辺りから色々試したけど同じように「h」が出力されたぞ。
「存在しない添字は0として評価される」なんて公式な仕様はないと思うので、
仕様ではないと思うけど。
キモい挙動だけど仕様でしょ。 連想配列に添字でアクセスしようとしてるんじゃなくて、オフセットを指定して 文字列にアクセスしようとしてて、string "bar" が int 0 にキャストされてるだけ。
データベース抽象化しようと思うんだけど、良い感じの奴を教えておくれ。 php 4、MySQL、PostgreSQL 対応で。
>>495 存在しない添え字っつーか、それは文字列型への桁位置アクセスだからな。
配列とは違って数値しかありえない。よって[0]扱いが正しいと思われ。
ちなみに文字列への $hoge[0] 表記は過去互換で残されてるけど推奨はされない。 できれば $hoge{0} と書いた方がいい。
503 :
nobodyさん :2006/01/28(土) 03:53:00 ID:vNPPStC0
PHPのuniqid()って どのくらいユニークなのかな? ミリ秒を種にしているとのことだけど 無限にユニークであり続けることなんて不可能だし。 UNIXタイムの限界くらいまでユニーク?
>>503 uniqidは現在時刻をマイクロ秒単位(マニュアルにはミリ秒って書いてあるけど)でそのまま16進表記しただけなので、2038年(だったっけ?)のいつだかまでの間に1マイクロ秒のズレもなく同時にuniqidを呼び出さない限りは確実にユニーク。
echo uniqid(), "\n", uniqid();ってやっても多分ちょっとはズレる。
ちなみにUNIXタイムスタンプの最大値0x7FFFFFFF(約20億)に100万を掛けた数の膨大なuniqidが存在し得る。
以下はソースのext/standard/uniqid.cから一部抜粋
> /* The max value usec can have is 0xF423F, so we use only five hex
> * digits for usecs.
> */
> if (more_entropy) {
> spprintf(&uniqid, 0, "%s%08x%05x%.8f", prefix, sec, usec, php_combined_lcg(TSRMLS_C) * 10);
> } else {
> spprintf(&uniqid, 0, "%s%08x%05x", prefix, sec, usec);
> }
spprintfっていったい何だ?w
505 :
503 :2006/01/28(土) 09:32:11 ID:???
>>504 なるほどー
分かりやすい説明ありがとう!
main/spprintf.c
Debug Build をNOにしたいのだけど
したいのだけど・・・?
したいのならすればいい。
510 :
nobodyさん :2006/01/29(日) 15:22:58 ID:mSKJalfC
DBに格納したデータを、先頭の"The"を抜いた条件で昇順でソートする方法ってどんなんでしょうか? 例>> Aaa The bbb Ccc これが思いつきそうで思いつかない……orz
HAHAHA、そうか!それ程言って欲しいのか!それならば言ってやろう!! ス レ 違 い
SQLのお話ならDB板へ。その時は使用しているDB名もお忘れなく。
513 :
510 :2006/01/29(日) 15:43:09 ID:mSKJalfC
>>512 これってDBの話なの?
DBからは素直にとってきて、配列にして、PHP側でさあどうソートするかって話だと思ったんですが……。
>>513 >これってDBの話なの?
「DBに格納したデータを」って書いてるじゃないか。
文面通りに解釈すると「DBに格納したデータを特殊な条件付でソートし結果を受け取りたい」と読める。
だから、「どこがPHPの質問なの?」と突っ込まれたわけよ。
まぁ、usort でも使ってユーザ関数でソートしたら?
515 :
510 :2006/01/29(日) 16:40:58 ID:???
>>514 そうか。言葉が足りませんでした。ごめんなさい。
usortでいじってはみてるんですが、これがなかなか……orz
ソース晒して分からない箇所を下質スレで聞くと誰か相手に(ry
517 :
510 :2006/01/29(日) 16:55:30 ID:???
>>516 わかりました。後はそちらに移動します。
どうもありがとうございました。
001に1を足して002、また1を足して003としていきたいのですが、 どういった方法があるでしょうか?
520 :
518 :2006/01/30(月) 00:12:30 ID:???
カウンターで複数桁を使用したいと考えています、 1を2にするのは簡単ですが、 01を02にするのはかなり面倒そうですので。
>>520 あとで画像カウンタとか言うなよ
sprintf を調べろ
>>520 計算自体は桁考えずに行って、最後に表示するときだけ
printf("%03d", $cnt); と3桁化すりゃいーよ。
523 :
518 :2006/01/30(月) 00:27:03 ID:???
ありがとう!!
524 :
nobodyさん :2006/01/30(月) 01:39:35 ID:gG8yFj6C BE:356457784-
ごめんなさい、↓なんですけど 自分で「短い文字でもちゃんとSJIS→JISに変換できるように!!」 と入れた処理なんですが、後から見て何をやっているか わからなくなってしまいました。 /* 文字数が少ないとエンコードに失敗するんだとさ。*/ $message = "あいうえお眉幅ABC".$message; $body = mb_convert_encoding( $message , "JIS", "EUC-JP,UTF-8,SJIS,ASCII,JIS"); $body = substr ( $body , 3 + 14 + 3 + 3 ); @なぜ「"あいうえお眉幅"」ではなくて「"あいうえお眉幅ABC"」なのか A最後の「3 + 14 + 3 + 3」の詳細 解読できる人がいたら助けてください。。。。
くだ質行けばかちん
526 :
nobodyさん :2006/01/30(月) 02:00:17 ID:gG8yFj6C BE:601522496-
527 :
nobodyさん :2006/01/30(月) 09:39:33 ID:JutOeLmX
クラス名でタイプヒンティングすると一切のデフォルト引数が無意味になるけどこれは仕様と思ってあきらめるしかない? nullを渡せたらまだよかったんだけど。 もしくはデフォルト引数にnewを書けたらまだよかったかも。 タイプヒンティングせずに関数内でinstanceofしか方法はないかな? よりよい型の制限方法あったら教えてください。
>>524 @英語もテストしたいから
A数が大きくて同時に計算できなかった
php.ini の memory_limit を抑えて、DLさせる為にflushを利用しているのですが、巧く動作しません。 何かご存じの方、ご教授願います。 ・実メモリ 128Mbytes ・DLファイル 1Gbytes ・直アクセスはしない ・DLダイアログは直ぐに出る ・https経由 DL部分のコードは下記の通りです。 ob_start(),ob_end_flush();を組み合わせても×でした。 $fp=fopen($FNAME,"rb"); while(!feof($fp)){ echo fread($fp,4096); flush(); } 環境 apache 1.3.33 php4-4.4.1_1
530 :
529 :2006/01/30(月) 19:28:04 ID:???
素のコードで巧く行きました…。 これから切り分けて、後で報告します。 お騒がせしました。 test.php <? $file="test.zip"; header("Content-Type: application/octet-stream;"); header("Content-Disposition: attachment; filename=$file"); ob_end_flush(); readfile("data/$file"); ?>
531 :
nobodyさん :2006/01/30(月) 20:56:32 ID:EJ05v1/F
ご教授お願いします POSTでwavのバイナリデータが飛ばされてくるシステムでデータを保存するのに pack関数を使用して保存すれば良いのでは?という所まではたどり着いたのですが どのように使用するのかがマニュアルを見たのですが今ひとつ分かりませんでした どなたか使い方分かる方教えていただけませんか? $data = urldecode($_POST['wavdata']); $fp = @fopen("./data.wav","wb"); fwrite($fp, pack("[この部分がわかりません]",$data)); fclose($fp);
>>531 その前に何でそのシステムがRFC1867に基づく
ファイルアップロードを行わない(させない)のか教えてくれる?
Webブラウザ以外の特殊(といっていいのかな)なクライアントでも対応してる
場合が多いと思うけど。PHPでもアップロードのクラスがPEARにあるよ。
533 :
nobodyさん :2006/01/30(月) 21:46:56 ID:/1xdn91h
×ご教授 ○ご教示
534 :
531 :2006/01/30(月) 21:47:09 ID:???
>>532 私もシステム開発元になぜRFC1867に基づくファイルアップロード
を使用できないのか聞いたのですが、
開発元で作成したデータ保存後にFTPで送信するCGIを使用するか
もしくは自分で何とか出来るならしてください
の一点張りで結局教えてくれませんでした。
現在はつなぎとして開発元が提供しているFTPのCGIを使用していますが
とにかく遅いので自前で何とかしようと今回の書き込みとなりました。
>>534 それを読んだ限りだと、開発元が作成したのはデータ保存後FTPで送信する物であり、POSTでバイナリを送りつける妙な仕様の物ではない
つまり、その妙な物を作ったのは貴方だと受け取れるが、そうなのか?
仮にそうなら、そんな妙な仕様の物を作るのはやめて、RFC1867に基づくファイルアップロードをやってくれる物を使うべきだ
まぁ・・そもそも、遅いのはFTPするCGIが原因なのか?とか作って時間の無駄だったと気付きそうな香りが・・・。
お絵描き掲示板みたいにJavaアプレットが自力でバイナリを生成して
それを標準出力(=POST)で送ってくる、とかの類じゃないの?
で、巷のお絵描き掲示板でそういう処理は実際にやってるから
ソース見てみたら参考になると思う。
参) PHP製のお絵描き掲示板 >
ttp://www.punyu.net/
ちなみにお絵描き掲示板の場合は、一定のヘッダの後に 生のバイナリデータがそのまま送信されてくるので、 urldecodeだのpackだのは要らないです。 ヘッダで指定されたサイズで受信してそのまま保存。 なので、全然違う仕様の可能性も高いけど、それ以外に そんな変な仕様になる理由が思いつかなかったので。
538 :
531 :2006/01/30(月) 22:22:57 ID:???
>>535 開発元がPOSTでバイナリデータを送っいるといっていますので
こちらでわざわざ妙なつくりにしたということはありえません。
FTPが遅いのは流れから言っても確実です
FTPを使用した場合
CGIにデータ渡す>データをエンコード後保存>FTP接続しこちらのサーバーへ>ファイル公開
FTP使用しなかった場合
データをエンコード後保存>ファイル公開
539 :
531 :2006/01/30(月) 22:51:32 ID:???
>>536 ありがとうございます
ためしてみます
報告はまた後ほど
540 :
452 :2006/01/31(火) 00:20:15 ID:+LWq5c8/
>>456 >>457 亀ですんません。
[:XXXX:]は[:はーと:]と言ったように、
ひらがなで統一しようと思ってました。
でも、英数字でも問題ないです。
preg_replaceだと1個しか置換できないのかと考え、
preg_match_allで、[::]内のひらがなを抜き出し、
ループで回して該当する画像を表示させようと思ってたのですが、
>>456 さんのやり方の方がいいのでしょうか。
正規表現がよくわからなくて、
調べてはみたものの、
ちぐはぐな返答かもしれません。
ごめんなさい。
---------------------------------------------------------
$text = 今日は天気[:hare:]がいい!明日は雨[:ame:]らしい。
---------------------------------------------------------
$textを表示させるときに、[:hare:]=太陽の画像、[:ame:]=傘の画像を
表示させたいのです…
541 :
531 :2006/01/31(火) 00:50:36 ID:???
>>536 完全なテスト環境が家に無いので確実とはいえませんが
教えていただいたもので何とかなりそうです
みなさんありがとうございました
>>540 なんとなく、こんな感じかな?
ってか、正規表現くらい勉強しろ。”調べる”のではなく、”勉強”だ。
あと、
> preg_replaceだと1個しか置換できないのかと考え、
”考え”ではなく、試せ。せっかく
>>456 が良い回答しているのに・・・。
以下、動作未確認スクリプト。
//
$text = "今日は天気[:hare:]がいい!明日は雨[:ame:]らしい。";
$text = preg_replace('/\[:(\w+?):\]/e', 'emoji($1)', $text);
function emoji($code) {
// 以下、DBに接続できていると仮定
$imageFileName = "";
$result = mysql_query("SELECT imageFileName FROM table_name WHERE emojiCode = '{$code}'");
if (mysql_num_rows($result)) {
$imageFileName = "<img src=\"".mysql_result($result , 0)."\">";
}
return $imageFileName;
}
543 :
nobodyさん :2006/01/31(火) 01:41:28 ID:kuYyOVO4
他鯖のファイル取りに行く時にIf-Modified-Sinceとかヘッダ送りたい時は fopenとかじゃ無理だよね。 自前でサーバーにつないでhttpリクエスト書かなきゃダメ? もしくはそういうステキなラッパーがあれば・・・
>>540 ちょっと調べてみたけど、sjisかeucだったら2バイト目にコロンと同じコード(3A)が来る文字はないから
>>542 の正規表現を'/\[:(.+?):\]/e'にすれば問題なくマルチバイト混在可能になるはず。
ただUTF-8の場合は2バイト目以降全てのコードがありえるらしいから : の直後に ] があると意図しない結果になるかも。
JISは終端エスケープが完全なら問題なし。
545 :
nobodyさん :2006/01/31(火) 01:50:48 ID:b+k1eFbT
PHPにて、関数を使ってフィボナッチの計算をしてみたかったのですが、どうにもうまく できません。プログラムは以下のようにやっています。 <?php $n; $i; function fib($n){if($n==1){return 1;}else if($n==0){ return 0;}else{return fib($n-1)+fib($n-2);}} for($i=0;$i<=20;$i++){print("fib($i)");} ?> そして結果が、 fib(0) fib(1) fib(2)・・・fib(20) のようになってしまい、ちゃんとした値がでません。 計算の仕方自体は間違っていないと思うのですが、functionのあたりが間違って いるような気がしないでもありません。 echoや&をつけたりといろいろしているのですがうまくいきません。 何が違うのか、どうすればいいのかを、どうか教えて下さい。お願い致します。
>>543 PEAR の HTTP_Request を使うといいよ
>>540 人の回答を信用する気がないなら
最初から質問なんてしなきゃいいのに
>>545 print("fib($i)"); → print(fib($i));
print("fib($i)") ってのは文字列に$iの値を埋め込んで出力するって事、つまりfib()を関数として認識してない。
それと動作しないのとは関係ないけど、最初に書いてる$n; $i; は不要。$i は for($i=0; ...) で初期化されてるし、$n は使われてない。
まぁ次からは下質スレにおいで
下質住人キタコレw
550 :
545 :2006/01/31(火) 02:26:33 ID:???
>>548 ありがとうございます、おかげできちんと表示させる事ができました。
わかりやすい説明もどうもありがとうございました。
551 :
540 :2006/01/31(火) 09:12:48 ID:2n+xF/sd
ありがとうございます!
>>547 信じてなかったわけではなく、理解できなかったわけで…。
コレを機会にちゃんと勉強します。
かなり甘えすぎてしまってごめんなさい。
答えてくれた皆さん、本当にありがとうございました
m(__)m
>>551 str_replace()やpreg_replace()の置換対象の仕様なんて正規表現と何の関係もないし
553 :
543 :2006/01/31(火) 20:03:14 ID:???
>>546 おー、すごい楽そう。
使ってみます!
ありがとうございますー。
すごい楽しそうなのかと思った
$array = array("aaa","bbb","ccc"); みたいな配列を $res["aaa"]["bbb"]["ccc"] = 1; のようにするのってどうやってやる? evalは使わないで。
>>555 $res[$array[0]][$array[1]]][$array[2]]] = 1;
557 :
555 :2006/02/01(水) 00:22:23 ID:???
>>556 すんません、 $array の長さが不定なんです。
3つ固定ならそれでいいんですが。
>>555 $array = array("aaa","bbb","ccc");
$ref =& $res;
foreach($array as $k) $ref =& $ref[$k];
$ref = 1;
555じゃないけどプチ感動した。 なんかいろいろ応用できそうだ。
array_rand -- 配列から一つ以上の要素をランダムに取得する とあったのですが、 配列の1行目の要素を拾う場合は array_ なんと入れれば良いのでしょうか?
561 :
560 :2006/02/01(水) 12:15:45 ID:???
あ、すみません $data[array_rand($data)]; こういう書式だったんですが
563 :
560 :2006/02/01(水) 13:17:08 ID:???
あ、すみません <? $data_file = "data.csv"; $row = array("7"); $num = count($row); $data = file($data_file); for($j = 0; $j < $num; $j++) { $result = $data[array_rand($data)]; $val = explode("\t", $result); echo $val[$row[$j]] . "<br>"; } ?> こういうプログラムで、data.csvの一番上のデータ行の、8列目の文字列を取り出す、 というのをやりたいんですが $result = $data[array_shift($data)]; ではダメだった…
えーっと、$data[0]ってことかな?
565 :
529 :2006/02/01(水) 13:53:53 ID:???
memory_limit の問題にハマっています。 ご存じの方、教えて下さい。 このコードは8M超のファイルがDownload可能である事を確認しました。 --------- [php.ini] memory_limit = 8M ------------ [test.php] $content_size = filesize("$FNAME"); header("Content-Type: application/octet-stream;"); header("Content-Length: ".$content_size); header("Content-Disposition: attachment; filename=\"$SRCFILE_SJIS\""); flush(); ob_end_flush(); readfile($FNAME); ------------ しかし、上記と全く同じものを、ファイル名($FNAME)選択する PHP中に含ませると下記のエラーが出ます。 Allowed memory size of 8388608 bytes exhausted (tried to allocate 8209774 bytes) php.ini の memory_limit を超えてDownlloadできる方法は これで合っているのですが、解決方法や問題点をご存じの方、ご指摘願います。 (小さなファイルはDownload出来ています)
>>565 > ファイル名($FNAME)選択するPHP
これが何やってんだかわからん。
無駄な処理を挟んでないか?
567 :
529 :2006/02/01(水) 15:26:49 ID:???
>>566 ファイル選択の前に、ID/PASSの認証と、sessionを利用してます。(同じPHPコード内)
ロジックとして以下のフローとなっています。
認証 → .認証をSessionで保持 → ファイル選択 → .DL
もちろん、前段の部分が原因になっているとは思うのですが、
外すわけには行かず…。orz
DLに関しては、上記PHPコード部分で(ほぼ)独立した世界であると
考えておりましたが、甘かったようです。
最悪、外に fget.php を用意して、引数を与えて
DLさせるようにしてみようと思いますが、
何かしら解決手段、原因など判る方はご指摘願います。
>>567 前段でグローバル変数とか使いすぎてるんじゃないのか。
ダウンロードのとこ、readfile()で一気読み&出力しないで
fgets+fwriteのループ処理にしてやればいきなり8MBもメモリ確保するようなことはなくならない?
なんかPerl辺りじゃ常識的な省メモリ動作のロジックなのに(やらんやつはタコ呼ばわり)、
PHPの開発者って便利関数に頼りすぎて丸っきり無視する傾向にあるよな。
ファイルがあったら何でも配列に丸ごとぶちこめ!みたいな。
>>568 >PHPの開発者って便利関数に頼りすぎて
これはあるな。GETのQUERY_STRINGが自前のコードでパースできない奴とか。
便利なものを使わずに、わざわざ不便なやり方をしろとは言わないけど。
ま、それがPHPのいいとこでもあるんだがな。
571 :
529 :2006/02/01(水) 16:56:19 ID:???
>>568 レスどうも。 色々試してみた結果のご相談です。
>>529 読み込みバッファ固定+ループで吐き出し
大きなファイル×
小さなファイル ○
>>565 メモリ食わないように、強制バッファリング無し(ob_end_flush();)で吐き出し、(+flush系関数での試行錯誤。)
大きなファイル×
小さなファイル○
という結果で、路頭に迷っている訳です。
実は「強制バッファリング無し等が有効にならない条件」があって、
それにハマっているんじゃないかと思う次第です。
ともかく、下手打ってphpに100Mとか、1Gとかメモリを
食われるのはご免なので、もう少し苦しんできます。
>>571 Allowed memory size of 8388608 bytes exhausted は
PHPの変数で確保しようとしたメモリが足りないときのエラーだから
バッファリングのフラッシュとかは全然関係ないと思うぞ。
あと、ob_end_flashってob_start以降の出力制御をかけたときのフラッシュ処理で
ob_startを使ってないなら何の関係もない。
読み込みバッファ固定+ループってやつがやり方間違ってるとかじゃないの?
WinXPでshell_execでxcopyコマンド使うにはどうしたらいいでしょうか? echo shell_exec("xcopy /?"); で走らせた所 'xcopy' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出て使えませんですた
>>573 PATHが通ってないだけだろ。フルパスで書いてみれば?
>>573 普通に使える。
>php xcp.php
<?php
echo shell_exec("type xcp.php")."\n";
echo shell_exec("xcopy /?");
?>
ファイルとディレクトリ ツリーをコピーします。
[以下略]
path通してないんじゃ?
%PATH%入れてませんですたorz
577 :
nobodyさん :2006/02/02(木) 12:29:48 ID:nicG19IV
質問です。 関数やメソッドに「配列を複数の引数として渡す」のは call_user_func_arrayなどで出来ると思いますが、 new時のコンストラクタには出来ないのでしょうか。 class obj{ function obj($a,$b,$c){ echo "a=$a,b=$b,c=$c<br />\n"; } } $arr=array("a","b","c"); new obj($arr); ↑みたいにしたいのですが・・・。 よろしくお願いします。
>>577 できないと思われ。
俺も以前、割と汎用的なファクトリパターンを実現したくて(飽くまで遊びでだけど)同じこと考えたけど、できないので諦めた記憶がある。
そのときは結局、継承だかインターフェイス使うかしてinitializeっていうメソッドを加えてcall_user_func_arrayした。
作ったやつ実際どこにも使わなかったけどorz
>>577 call_user_func_array(array("obj", "obj"), $arr);
取得したリモートホストのドメインより前を隠したい(*.aaa.co.jpのように)のですが、やりかたがよくわかりません。。 ヒントください。
ただし静的呼び出し(obj::obj()と同義)なのでコンストラクタ呼び出しとしては意味なさげ。 new obj($arr); //newの戻り値無視 とは同等だけどね
特に今困ってるわけじゃないんだけど、 PHP5ってそろそろ移行しといた方が良いと思う?
好きにすればいいと思うが、「良いかどうか」と問われれば「まだ早い」と答えたい
>>577 コンストラクタ側にそういう機能を持たせたら?
class obj{
function obj($a,$b,$c){
if(is_array($a)) {
list($a, $b, $c) = $a;
}
echo "a=$a,b=$b,c=$c<br />\n";
}
}
>>577-578 こんな感じのラッパーはどうか。試してない。
instance_on_array($classname,$args) {
$args_list=join(",",$args);
eval("\$instance=$classname $args_list");
return $instance;
}
586 :
nobodyさん :2006/02/02(木) 13:24:50 ID:nicG19IV
>>580 どういう挙動にしたいかいまいちわからないけど、例えばこんな感じか?
"*" . strstr("bbb.aaa.co.jp", ".")
588 :
nobodyさん :2006/02/02(木) 14:35:36 ID:nicG19IV
結局、力技で・・・。 switch( count($arg) ){ case 0: return new $obj(); case 1: return new $obj($arg[0]); case 2: return new $obj($arg[0],$arg[1]); ...以下ひたすら延々とw 皆さんありがとうです。
589 :
529 :2006/02/02(木) 17:39:14 ID:???
結果報告 -------------------------------------- 環境 apache+mod_ssl-1.3.33+2.8.22_1 (httpsを利用) php4-4.4.2 php.ini memory_limit = 8M test.zip 25Mbytes -------------------------------------- (1)OKコード $filename = "./test.zip"; ob_end_flush(); readfile($filename); -------------------------------------- (2)NGコード $fp = fopen ("test.zip",'rb'); while(!feof($fp)){ echo fread($fp,1024*10); flush(); } fclose($fp); -------------------------------------- (1)の場合でも、session_start();を利用すると× 両NG時、memory_limit = 100MでOK、70MではNGだった。 25Mのファイル如きに、冗談かと思うメモリ消費量。 なんにせよ疲れた…。
590 :
nobodyさん :2006/02/02(木) 18:02:40 ID:v1gMyS91
PHP初心者の漏れなんだがとても困ってるので質問シマス。 実はHPを運営してるんだが、phpの掲示板を設置した しかし、設置したはいいが動作しない(ページが表示されない) 鯖はsakuraです しかし別の鯖ではうまく動作します phpはぜんぜんわからないのでご支援ヨロです。
うpして
>>590 ダウンロードした物をそのまま上げて動かないなら
文字コードかなあ。
>>590 別の鯖で動くなら、その動くほうの鯖で動かすっていう選択肢はなしなの?
594 :
590 :2006/02/02(木) 18:20:47 ID:v1gMyS91
>>592 文字コード?
>>593 別の鯖は無料の代わりに広告が入るから…。
出来ればサクラで動かしたい
同じ鯖で同じスクリプト使ってるサイトもあるのだが、
ちゃんと動作している。
それじゃソースうpしてみ。 あと「動作しない」ってのがどういうふうに動作しないのか具体的に書くよろし。 エラーメッセージが出るのか出ないのか、表示はできるけど書き込みすると変なことになるとか、文字化けがあるとか。 何をどうしたときにどう変なのか。
>>594 経験的に多いのは
FTP時に勝手に文字コードが変わったとか
設定ファイルを書換時に文字コードが変わったとかで
サーバの設定上使えない文字コードになっていたり
一部のファイルのみ文字コードが変わった結果
部分的にエラーになっている状態。
エラーメッセージ無しで真っ白なんだよね?
>>594 まぁ、恐らく「パス指定」とかデータ格納場所の「パーミッション」とかの問題だと思うね。
sakuraのPHPはCGI版だがそのことで何かミスしてるんじゃない?
599 :
590 :2006/02/02(木) 18:53:06 ID:4KM2QfVc
600 :
nobodyさん :2006/02/02(木) 18:59:28 ID:c4LX8dEo
ワロスw
多分パーミッションの設定ミスで 500 Internal Server Error が出てるんだろう。
さくらではCGIはsuExecでCGIを起動して所有者権限で動作する。
フォルダとスクリプトのパーミッションは何になってる?
777とか707じゃ動かない筈、755か705でやってみれ。
フォルダとスクリプトは755(705)、それ以外は644(604)、ブラウザで直接参照しないデータファイルなら600でok
これでならないようなら、レンタル鯖板のさくらインターネット質問スレで聞け
↓さくら使うなら一通り目を通すように
>さくらのレンタルサーバ非公式FAQ
>
ttp://faq.sakura.ne.jp/
602 :
590 :2006/02/02(木) 19:42:51 ID:4KM2QfVc
>>601 ありがとう。でもダメだったぽ
なんどやっても500エラーorz
レンタル鯖板のさくらインターネット質問スレで聞いてみることにするよ
いろいろサンクス
>>602 うーん・・ならないか。
試せる環境ないし、一息ついてから聞いてごらん
非公式FAQより
>一回、鯖上のCGIもローカル上のCGIも全部消してごらん。
>そして、コーヒーなりお茶なりで一服してごらん。
>落ち着いたら、もう一回CGIを落としてきて、
>説明書きに書いてある通りに、何も考えずにやってごらん。
>
>大混乱してるときには何やっても上手くいかないよ。
>落ち着いてマターリと。
一行目のパス指定が無いとか
>>604 書いても無視される。と公式に書いてあった
607 :
nobodyさん :2006/02/03(金) 14:37:08 ID:Rdf8V/FS
・タイトル extension_dirとMySQL ・内容 @c:/windows/php.iniファイルで、extension_dir = "c:/php/ext/" と設定しましたが、phpinfo()で確認したところ、ブラウザには extension_dirはc:\php5となっていました。c:\phpフォルダは作成済み ですが、c:\php5フォルダは作成していません。 php.iniでのextension_dir設定を反映させるにはどうしたら良いでしょうか。 また、この現象の理由も知りたいです。 Aphpinfo()による出力画面でMySQL設定項目が表示されません。 大項目「libxml」の次は「odbc」となっており、「mysql」がありません。 mysql項目がphpinfo()で表示されるにはどうしたら良いでしょう。 php.iniで下記の設定をしています。 extension_dir="c:/php/ext" extension=php_mysql.dll c:/windows/system32フォルダにはc:/php下のdllをコピーしています。 ・環境 OS:WindowsXP SP2 サーバ:Apache2 PHP:ver.5.1.2 MySQL:ver.5.0 ウィルスソフト:Norton Internet Security ・google検索したキーワード phpinfo,php.ini,extension_dir,mysql,httpd.conf アドバイスのほど、宜しくお願い致します。
609 :
607 :2006/02/03(金) 16:11:13 ID:Rdf8V/FS
>>608 C:\WINDOWS と書いてあります。
下記にはphp.iniはありませんでした。
【1】C:\Program Files\Apache Group\Apache2
【2】HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
610 :
607 :2006/02/03(金) 16:40:00 ID:Rdf8V/FS
>>607 の問題が解決しました。
Apache2の設定ファイル httpd.conf に次の行を記述したところMySQLを認識しました。
○PHPIniDir "c:\php\"
それまでは上記の行を
×PHPIniDir "c:/php/"
と書いていました。
611 :
607 :2006/02/03(金) 16:43:11 ID:Rdf8V/FS
>>608 C:\WINDOWS\php.ini となりました。
アドバイスありがとうございます。
613 :
607 :2006/02/03(金) 17:31:54 ID:Rdf8V/FS
>>612 >>610 に書いた設定をコメントアウトしてもOKでした。
#PHPIniDir "c:\php\"
PHPIniDir "c:\php\" を書いてしまっていたのが良くなかったようです。。
>>590 ローカルマシンでテストした?
コード上の問題なら手元のWindowsマシンなどでもチェックできるわけだが
615 :
nobodyさん :2006/02/03(金) 20:00:36 ID:nU0pDG8Y
【タイトル】 コンストラクタ内で、同じクラスに定義された関数の呼び出し 【Google, PHPマニュアル】 Google: オブジェクト指向、コンストラクタ、PHP5、クラス、etc... マニュ: クラスとオブジェクト(PHP 5)あたり 【環境】 XAMPP1.5.1、PHP5.1.1、WindowsXP SP2 【内容】 コンストラクタ内で、同じクラスに定義した関数を呼び出すにはどうしたらいいでしょう。 もしくは、それと同等のことを行う代替案などはないでしょうか? コンストラクタ内に全部の処理を書くと、量が多くて保守が大変そうなのです。 言葉で少し説明しづらいですが、下のような感じでやりたいのです。 本来のソースでは、関数内のコード量が多く、かつ関数がたくさんあるのですが・・・。 class testClass { private $val; public function __construct($arg){ $this->val = func($arg); } function func($arg){ return defaultFunc($arg) } }
>>615 メンバ関数内でのメンバへのアクセスは$thisを介して行う。
マニュアル読んで出直せ
617 :
nobodyさん :2006/02/03(金) 21:05:05 ID:qY0QLJ3A
preg_match_all の ereg版 は無いんですか?
618 :
615 :2006/02/03(金) 21:39:09 ID:???
>>616 undefind function、ってそういうことだったんですね・・・。
コンストラクタが呼び出された時点で、関数が作成されていないのかと思ってました。
ありがとうございます!
619 :
nobodyさん :2006/02/04(土) 03:00:52 ID:HNAkLjne
htmlspecialchars()で変換した文字列を元に戻すにはどうしたらよいでしょうか?
そろそろFAQだな。
chopで半角スペースを取るように、 全角スペースを除去する方法ありますか?
mb_ereg_replace('( )+$', '', $str)とか
623 :
622 :2006/02/04(土) 06:29:45 ID:???
>>622 解答thxです。
確かにその方法ありますよね。
実は数千件のデータ処理に使ってるのですが、
正規表現だと重いので避けたいのです。
なので関数の方が好ましいのですが・・・。
#貧弱開発環境('A`)マンクルポ
>>624 第2引数は1バイト単位のリストだから
それだと最後の文字が化ける可能性あり
--enable-mbstring Enable multibyte string support. --enable-zend-multibyte Compile with zend multibyte support. この二つのオプションの違いを教えてください。
>>626 簡単に言えば
--enable-mbstring マルチバイト関数を有効にする
--enable-zend-multibyte 通常はスクリプトの記述として使えないSJISを使用可にする
629 :
nobodyさん :2006/02/04(土) 16:35:43 ID:+uM4bJSp
質問させてください。 テキストファイルに数行のデータを書き込みます。 その時に キーワード<>データ1<>データ2<>.... というようなフォーマットで書き込んでいきます。 この時に、テキストファイルからキーワードを検索し、 そのキーワードを含む行を取ってくるようにするには どうしたらよいでしょうか。
文字列操作の関数にどんなものがあるか一通り調べてから出直してこようね
>>629 1.1行取り込む。
2.取り込んだ行の最初の<>までのデータをキーワードとして取得する。
(キーワードには<>が含まれていないこと)
3.取得したキーワードと検索キーワードを比較する
4.比較の結果マッチすれば、その行を保持する
5.ファイルの終わりまで1〜4までを繰り返す。
これを
>>630 の言うようにマニュアルの文字列関数等で
使えそうなものがないか確認しつつ実装する。
632 :
nobodyさん :2006/02/04(土) 17:47:40 ID:+uM4bJSp
下らん質問だなぁ
634 :
nobodyさん :2006/02/04(土) 22:10:43 ID:f7yaA8i8
rawurldecode()でたとえばShift_JISでエンコードされた文字を <head> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=Shift_JIS"> </head> <body> <? $str = "%82Q%82%83%82%88%82%c5%82%b7%81B"; echo rawurldecode($str); ?> </body> で表示すると”2chです”としっかり表示されますが <head> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=UTF-8"> </head> <body> <? $str = "%82Q%82%83%82%88%82%c5%82%b7%81B"; echo rawurldecode($str); ?> </body> ではUTF-8なのでしっかりと表示できません。 そこでエンコードされた値を調べUTF-8でエンコードされたのか、またはShift_JIS、EUCなのかなどを判断しUTF-8ならデコードしそのまま表示。そのほかの場合は一度デコードしUTF-8型に戻してやりしっかり表示させるにはどうしたらいいのでしょうか?
>>634 それ、decodeとか関係なく普通に文字コード処理の基本の話だから。
mb_convert系のマニュアルを頭から読み直すとよろしい。
>>629 <>区切りってのがkentのcgiっぽくてダサいなぁ。
つまり、2ちゃんねるはダサい、と。
触れちゃだめです
「,」区切りはデータのエスケープが面倒ってのは分かるけど、 TABでなく「<>」を使うってのはどういう意図?
HTMLタグは実体参照化されているのが前提だからだろ。 「<」だけでも本来なら良いはず。
HTML上では使用しないだけなら「<」でも「>」でもTABでも一緒だろ。 で、世間一般で区切り文字として標準的なのは「,」かTABだろ。 何故そこであえて「<>」を採用するのか?ってことだよ。 1人や2人なら、まぁそういう人もいるよね、好き好きだしね、で済むけど わざわざ他人の真似をしてまで採用するようなもんじゃないと思うんだが。
4月1日専用ページを作りたいなぁと思ったのだけど、その頃生きてるか解らん どうしたらいいですか?
643 :
nobodyさん :2006/02/05(日) 02:09:19 ID:uUJqicme
$footer = "<hr><p align='right'>Posted $posted|$date|<a href='$posted.html'>comment()</a>"; 中略 fputs($fp,$footer); として、投稿日時、コメント用ページへのフッターを貼り付けたいのですが、 「Posted comment()」 となってしまって時間が表示されません 回避方法はありますでしょうか・・・・・
>>643 >回避方法はありますでしょうか・・・・・
プログラマーを雇う
>>643 まあ考えられるのは$postedや$dateに値が入ってないってことくらいだろうけど。
print_rやvar_dumpを$footer = ・・・の直前でやってみたりしてごらん。
未定義か空文字かnullかfalseかその辺だろうから。
原因がわかったら$postedや$dateに値を代入している部分周りのロジックを入念にチェック。
>>641 俺はTabだと確認のとき見づらいから<>使ってる
647 :
nobodyさん :2006/02/05(日) 02:28:36 ID:uUJqicme
>>644-645 $footerを2分割して後でまとめて表示することでできました。
ありがとうございました
648 :
nobodyさん :2006/02/05(日) 02:58:11 ID:uUJqicme
<?php @〜〜〜 ?> <HTML本文> <?php A〜〜〜 ?> のように間にHTMLの本文を挟んで離れた<?php〜?>間で変数の受け渡しって可能なんですか?
頑張れば可能ですよ。 頑張らなくても可能だけど。 ただ、頑張って。 不可能は可能になるから。
>>648 下らん質問スレ行きネタだと思うが、全く問題なく同じ変数を扱える。
逆に言うと、<?php ?>タグ内でのローカル変数ってのは無い。
ローカル変数を使いたい場合は関数などにする必要がある。
651 :
nobodyさん :2006/02/05(日) 04:48:55 ID:uUJqicme
php5 で apcか zend optimizer 使ってる人いる?
0〜10000までの数字の中からランダムな数字を選ぶには、 mt_srand (microtime()*100000); $rand = mt_rand (0,9999); ですよね? これを改造して、ある任意の数字だけを選ばれないようにしたいのですが、どうしたらいいでしょう? たとえば、523と6982と7025だけはランダム結果に含めたくないとします。 このとき、「選ばれたくない数字」が固定かつ少数なら、配列に入れて$randと比較し、含まれてたら whileなどで再度1行目からやり直せばいいのですが、この「選ばれたくない数字」が多数かつ随時増えていく、としたら どう対策したらいいか分かりません。もし全部配列に入れていったら、下手したらカブらない数字が出るまで 何千回もループしちゃうわけで・・・。うまいやり方ないでしょうか? ※ちなみにこの「選ばれたくない数字」は実際にはDBに入れてあります。
あ、「0〜10000まで」じゃなくて「0〜9999まで」でしたorz
>>654 <?php
$array1 = array(10, 15, 6); //選ばれない数字の配列
$array2 = range(0, 9999); //全ての数字の配列
$array3 = array_diff($array2, $array1); //選ばれる数字のみの配列
$rand = $array3[array_rand($array3)];
echo $rand;
?>
よく考えたらキーと値は数字が同じなので $rand = $array3[array_rand($array3)]; は $rand = array_rand($array3); でも同じだった。
>>656 すいません、「神」と呼んでいいでしょうか??
ただ一つ疑問が。。。
手元にある大垣ポケリファ旧版には、「array_rand」という関数が載ってません。
これはバージョン依存の関数ですか??
659 :
nobodyさん :2006/02/06(月) 10:31:12 ID:FPpXqvwh
>>658 array_randはPHP4からなのでPHP3では使えません。
大垣本の帯には「4.3.0対応!」って書いてあるのに、載ってない・・・orz
PHPのリファレンスは本家オンラインのを使うようにした方がいいぞ
紙って便利なの・・・
Printer friendlyを印刷
664 :
nobodyさん :2006/02/06(月) 11:37:05 ID:FPpXqvwh
chmダウンロードして使ってるけど検索やリンクがあって便利だけどね。 引数確認したいときとかエディタ上でダブルクリックしてF2キーでも呼び出せるし(PHP editor)。
>>656 配列に1万個も値を入れたら、動作に支障出るよね??
っていうか、配列の限界ってどれくらいなんだろう・・・。
>>665 個数自体はPHPが変数で使用可能なメモリの限界量まで。php.iniで設定。
数値indexとしてはPHPの扱える整数の限界まで。つまり「全ての数字」の配列と同等。
配列1つに16byte使うとしても占有するメモリは160KBぐらいだろ。1マンコ程度なら
どっちかっつーと実行時間の方が怖いけど、それでも1万個くらいならやばいってほどじゃない。 3万個とかになってくると実行時間が秒単位になってくるので体感的にかなり厳しい感じ。
Javaは32kBまでだっけ。
PHPはデフォルトだと8MBだっけ
phpmyadminで文字コードの部分にutf8だけ出て euc-jpとか出ないのですが、 これは何が問題でしょうか? mysqlのujisサポートでインスコとかも繰り返しましたが、 以前症状は変わりません。
>>671 PHP 関係無い。MySQL スレへ逝け
>>672 本当に関係ないか?phpmyadmin自身の問題じゃないの?
>>668 そうだよね??
となると、
>>654 のやりたいことを解決するには、
>>656 以外の方法も考えねばならんか。。。
たとえばこれが1万個じゃなくて100万個だったら、みんなはどう解決する?
配列じゃ現実的に無理だよね。DB内で何かしなきゃならんかな・・??
>>674 order by random() limit 1
スレ違いスマソ
>>673 確かにphpで書かれてはいるが
個別ソフトの設定はスレ違いでは?
>>674 ていうか、そんな物をPHPで作らないといけなくなる状況が想像出来ない。
逆に言うと、そんな事やらないといけなくなるのは設計ミスじゃないのか?
>>674 どんな処理でも無制限にデータ量を増やそうとすれば破綻する。
逆にどんな量でも通用する仕組みを作ると今度は小さいデータのときに無駄なオーバーヘッドを生む。
あらゆる条件で通用するロジックなんて無いだろ。
自分の目的に合わせてTPOで選べないやつは単なるコーダーであって設計者とは呼べない。
>>675 んんん???
要するに
>>654 は「『選ばれたくない数字』が多数かつ随時増えていく」ってのがキモでしょ、多分。
となると、この、どんどん増えていく「除外すべき数字のリスト」に含まれる数字を、
どうやってランダム関数の結果から排除するか・・・っていうアルゴリズムが難しいな。
0〜1万程度なら
>>656 のやり方でいいだろうが、もし0〜100万の範囲となると・・・
>>678 そうだね。
じゃあ1万個程度の解決策は
>>656 方式でとりあえずOKとして、
じゃあ100万個レベルだったら、
>>679 はどうする??
設計者様ならではの思考を知りたいです。
>>679 whereで除外したい数値を指定すればいいだけじゃないのか
>>680 設計者様(藁といたしましては、範囲を区分するかね。
例えば100万だったら1万×100ブロックとして処理するとか。
>>682 その範囲の区分の仕方が難しいよね。
たとえば、「除外数字リスト」には次にどんな数字が追加されるのか
予想できれば簡単だろうけど、もしそれもランダムに増えるんだとしたら・・・
>>681 違う違う。
PHPスクリプト内でランダムに計算結果をリアルタイムで求めるんだろうから。
DBにあらかじめ何かが入ってるわけじゃなくて。
>>680 全数字を入れたテーブルをnums、除外したい数字を入れたテーブルをextとして
select num, random() as idx from nums where num not in ( select num from ext ) order by idx limit 1;
みたいな感じでいけるんじゃないの。試してないけど。
686 :
682 :2006/02/06(月) 20:32:38 ID:???
>>683 自分が仕様を理解してないのかも知れんが、
最初にどのブロックで処理をするかランダムに決定して
後はその対象となるブロックの範囲で処理するだけだよ。
当然「除外数字リスト」とやらもブロック毎に分ける。
>>684 除外値が動的に実行時に決まる、とは書いていない。
674で、DB使ったらどうなるかなと聞いてるから答えてるんでしょ。
ていうか654に選ばれたくない数字はDBに入ってるって書いてるし。
>>687 仮に動的に実行時に決まるのだとしてもDBのワークテーブルに一時的に格納すれば済む話。
オーバーヘッドの多い処理方法だが件数が極めて多いときにはそういった手法も有効。
1 2 3 4 5 略 とデータがあるのを一個ランダムで消して保存 1 2 3 5 略 となる。次はまた一個ランダムで消す。それを繰り返すだけのことでは?
>>689 そういった単純な繰り返し手法は件数が少ないときじゃないと厳しいでしょ
691 :
nobodyさん :2006/02/06(月) 23:33:22 ID:+hyQlmQi
funciton について教えて欲しいのですが、 例えば、Aというファイルにfunctionを100個定義します。 そしてBのファイルにAファイルをincludeします。 でも、BのファイルではAのファイルのfunctionのうち、1つしか呼び出しませんでした。 このとき、@BファイルはAファイルのファンクションを全て読み込むのでしょうか? ABファイルはAファイルで使用したファンクションのみを読み込むのでしょうか? (@でしたら便利だと思うのですがAの状態だと重くなってしまいますよね。) 宜しくお願いします。
はい、全て読み込みます。
693 :
nobodyさん :2006/02/07(火) 00:10:46 ID:9eIIutOU
レスありがとうございます。 どれ位の数のファンクション読み込んでもストレスを与えない程度に大丈夫なんでしょうかね。
>>693 APCとかのコードキャッシュを行うアクセラレータを組み込んでればさほど問題ないけど
何も入れてないノーマルの環境だと体感できるほど遅くなってくる場合がある。
程度は関数の数よりコードの分量と複雑さによってくると思う。
200〜300行/20KB程度のclass定義ファイルを10個くらい読み込ませると
サーバー環境にもよるだろうけど0.3秒ほどの遅延が確認できた。
「ストレスを与えない程度」は状況や規模によりけりなので自分で判断しる。
695 :
nobodyさん :2006/02/07(火) 00:24:53 ID:9eIIutOU
>>694 ご親切にありがとうございます。具体的な数字を教えて頂いて助かりました。
300行を2つくらい読み込ませようと思ってたところなんで、ガンガンFUNCを作って
プログラムやってきたいと思います^^
696 :
nobodyさん :2006/02/07(火) 00:25:10 ID:VahS1T1X
200〜300行を たった10ファイルで 0.3秒も遅くなるの!!! えぇぇぇぇ
699 :
nobodyさん :2006/02/07(火) 01:38:21 ID:vK7c16Ac
関西弁変換プログラムをつくろうと摸索中です。 <? function kansai($text){ $text=str_replace("ありがとうございました","おおきに",$text); } ?> 上記の内容のosaka.incというファイルを作成し 外部ファイルからosaka.incをrequire_once print(kansai($text)) とやると 中に入っていたはずの文字列が全て消えてしまいます。 どこがおかしいのでしょうか?使う関数が間違っているのでしょうか?
>>698 PHPは同種のスクリプト言語の中じゃ特に遅い部類なんだから
速度を気にする香具師はアクセラレータ入れて動かしな
>>699 くだらん質問をくだ質スレから持ってくんな
>>700 同種のスクリプトが何を指すかわからないけど、
そこそこ早いと思うぞ。
少なくともrubyよりは早い気がする(検証はしてない)
return $text
705 :
654 :2006/02/07(火) 03:42:33 ID:???
>>654 です。
皆さんありがとうございます。とても参考になります。
>>687 さん、私の言葉が足りませんでしたが、除外数字は動的に決まります。
具体的に言うと、ランダム関数で出た数字を一つ一つ「除外リスト」に追加していき、それをDBに保存します。
つまり、0〜10000までの範囲でそのスクリプトを1万回実行すると、最終的には除外リストに1万個の数字が入り、
もう選べる数字がなくなる・・・という風にしたいのです、
(逆に言えば、1万回のランダム計算で、常に一意の数字を選び出したい、ということなんです)
706 :
654 :2006/02/07(火) 03:48:13 ID:???
補足レスです。 「常に一意の数字を」ではちょっと言葉が足りないかもしれません。 「常に一意かつ未だ一度も選ばれてない数字を」です。
それって uniqid('',true) じゃ問題になるぐらいのユニーク性を確保しないといかんのか? 用途が分からんから「こうしろ!」って一つに絞るのは不可能だし、それを使って何がしたいのかもワケワカメ。 まさか糞重い処理をアクセス毎にやるとは言わんだろうけど、最初に作ってDBにでも放り込んでおけば?
708 :
654 :2006/02/07(火) 04:02:26 ID:???
>>707 はい、自分の意図した数字(あるいは文字)の範囲内でランダムな値を得たいので、
uniqidでは無理なんです・・・。
用途はいろいろ応用できるかと思いますが、たとえば「宝くじ番号」みたいなのを
ランダムな順番で発行したりとかにも使えますよね。
709 :
654 :2006/02/07(火) 04:09:45 ID:???
ちなみに私が最初考えた方法は、ランダム計算を実行するたびに出た数字を
DB内の「除外リスト(最初は空)」に問い合わせて、該当するものが含まれてなければ
それをリストに追加保存し、該当するものが既にあったら、再度ランダム計算をやり直す…というものでした。
この方式だと、リスト内の数字の数が少ないうちはいいのですが、
だんだん増えてくると数字がカブってランダム計算を何度もやり直してしまう確率が
どんどん上がってしまいまして・・・。
これを解決するのに、数字の範囲が〜10000程度なら
>>656 さん方式でいいのですが、
100万などとなるとやはり区分けが必要で、その区分けの仕方がうまいこと考えつかなくて・・・
アホほどメモリ食うけど100万ぐらいならこれでいけるべ。 リクエストごとにリストを作り直すような使い方には極めて不向きだけど、 結果をDBなりファイルなりに保存しとくなら許容できるっしょ。 <?php $a = range(0, 999999); var_dump(number_format(memory_get_usage())); shuffle($a); $b = array_slice($a, 0, 100); unset($a); var_dump(number_format(memory_get_usage())); $c = array_map(create_function('$n', 'return sprintf("%06d", $n);'), $b); print_r($c); ?> string(10) "60,238,624" string(6) "64,848" Array ( [0] => 354393 [1] => 080271 (中略) [98] => 030508 [99] => 717038 )
>>708 宝くじ番号をランダムに発行する必要性がないからな・・やっぱり何を作ってるのか分からない・・・。
上位桁(0〜1000)と下位桁(0〜999)に分けて、
・上位桁の既出リストをDBから取得
・それを元にランダムに一つ選ぶ
・結果から下位桁の既出リストを取得
・それを元に(ry
上位桁*1000+下位桁=ランダムな値
(もしやるなら上・中・下位桁の3段ぐらい欲しいな。)
もうちょいきれいに書いてみた $min = 0; $max = 999999; $num = 100; $fmt = sprintf("%%0%ds\n", strlen(strval($max))); // パディングは好みで $list = array_rand(range($min, $max), $num); shuffle($list); foreach ($list as $n) { printf($fmt, $n); }
そういう案件なら、まず事前に00000〜10000までの数字の配列を作ってそれをランダムに並べ替えてDBに登録しておき、 リクエストごとに頭から順に返していって「ここまで使用済み」というカウントだけ保持しときゃいいと思う。 これが1番お手軽かつ高速。
714 :
713 :2006/02/07(火) 13:00:06 ID:???
もう1つの案としては同じく00000〜10000までの配列をどんな順番でもいいのでDBに登録しておき、 リクエストごとに1個削除してそれを返していく方式とか。これならカウンタの保持も要らない。 なんにせよ、そんな案件をリアルタイムにデータ生成してるのはただのバカかと。
このネタまだ続いてたのか
>>713 たしかにそれはいいね。
でも数字だけならそれでいけるけど、これがさらに「a5fw8g」みたいに、
任意の英数字で構成される文字列が対象だと、その手法も使えないよな。
こういう予測が不可能(または無限に近い)な文字列だったら、どうする?
やっぱリアルタイム生成でうまい方法を考えるしかないっしょ・・・
>>716 それならsubstr+md5+uniqidする
かぶる可能性はかなり低くなるのでDBへの問い合わせもそんなにループしないと思う
>>717 ん? それでも「使用候補リスト」をあらかじめ作っておく方式にするの!?
いったい何百万個用意しておく気だい・・・??
しかしこのスレ、みんなのいろんなアルゴリズムが見れて楽しいなw
教えてください。 バイナリファイルを読み込んで内容を16進で出力したいんですが、 どのように出力すればいいのでしょうか? fget()で読み込んでそのままprintしただけでは 当然文字として出力されてしまいます..。 そもそも読み込み方が違うのでしょうか? 宜しくお願いします。
>>719 echo bin2hex(fgetc($fp))
桁もそろえたいなら
printf("%02X", ord(fgetc($fp)))
あたりでドゾ
>>716 自分で何を言っているのか判ってないんだろうから解説するとね。
●数学的に完全にランダム。(過去の記憶を持たない:重要)
●過去に出た文字列は出さない(過去の記憶が必要:重要)
つまりね、命題として、”リアルタイム生成”ってのは既に不可能なんだな。
なんらかの形で過去を記憶しなきゃならん。
でだ実際に君が欲しがっているものは、実は真にランダムな文字列の列じゃなくてね
n文字の組み合わせからm個とる順列のうちの一つだがね。
結論としてね、n文字の組み合わせを生成するのと、m個の順列を生成する際の
オーダーによってアルゴリズム変えなきゃならないわけ。
下らない質問か、アルゴリズムスレ(そんなの有るのか?)向けの話だと思うけどね。
>>716 それ、可能なパターンをあらかじめ全種類作る必要無いでしょ。
その文字列リストを何の目的で使うのかによるんだけど、
宝くじとかで最終的なユーザ数(リクエスト数)が想定できるなら、
使う可能性のある分だけランダムに生成した文字列をあらかじめ入れとけばいいだけでしょ。
また、これを何十年も運用し続けるというのであれば、初回に100万種類用意しといて動かし、
そのプールが尽きたら、過去の100万と被らない次の100万種類を新しいテーブルに生成。
その繰り返しで文字列生成の限界まで運用すればいいと思う。
これでもデータ生成は継続時にバックグラウンドで1回だけ行うだけだから、
それ以外の通常運用時の負荷は非常に低い。
何の問題も無いと思うが?
>>718 最終的には「使用候補リスト」→「使用済みリスト」に
置き換わって行くわけだから別に最初からリストアップしてても問題はないんじゃない?
だって運用していけば、その何百万個が入った「使用済みリスト」が出来ることは
仕様に盛り込まれてるんでしょ。
漏れも考えたのは
>>713 の方法だな。
使っていない数字数百万をどっかに保存するのと
使った数字数百万をどっかに保存するのとなら、
最大に使う容量は最終的には変わらん。
宝くじは適当な番号を生成してるんじゃなくて、
連番で作ったくじをバラバラに配っただけ。
そもそも8桁(一億程度)の数字の中で数万しか使わないのなら
適当に数字を選んで、使っていたら選びなおすというアルゴリズムでも
発生に要する時間を気にする必要も無いかと。この場合、
すでに使った数字にぶち当たる確率は最も高くて1000分の1だから、
数値を3回選ぶ必要がある事すら数回あるか無いか、な訳で・・・。
0000〜9999の数値が全くかぶらずに適当に1万種(つまり全部)出てくるのなら前者、
00000000〜99999999の数値が全くかぶらずに適当に10万種出てくるのなら後者
>>721 >命題として、”リアルタイム生成”ってのは既に不可能
言っている意味が分からないなぁ。
既出の数字を避けつつリアルタイム生成・・・って可能でしょ。
>>724 「使用候補リスト」と「使用済みリスト」はお互いにカブらないものだから、
どちらか一つあれば十分だよね。
当初は「使用済みリスト」しか考えつかなかったから、それが仕様になってたんじゃない?
>>725 宝くじってのはあくまでも一例でしょう。
俺もこの系統でいろいろ用途は思いつくぞ。
>>726 わからない?
これ”ランダム”な文字列の生成だと思ってるみたいだけど、実際には”シャッフル”の問題だと言う事。
リアルタイム生成(いまいち実体は掴めないが)に必要な条件は”過去を無視”できると言う事。
だから”ほぼ”過去を無視できるなら(つまりm個)が小さいなら、擬似的に”リアルタイム生成”
も可能だが、そうではないなら厳しいと言う話。
どこで区切るかは、それこそオーダーの話になってくるよ。
という事なんだけど、判ってもらえるかな?
>>726 >>721 は「リアルタイム生成」=「一切の元情報なしでその場で算出」と勘違いしてるだけかと。
>>725 の話は一例だとして、事前に必要数をプール→足りなくなったら補充方式でダメなケースって何?
いずれにせよ、アルゴリズムは用途に応じて最適なものを選択するものなんだから、宝くじって言われたら
それに適した解を出すべきであって、そこに無理に抽象化されたアルゴリズムを持ち出すのは無意味かと。
この方法では問題のあるケースに適したアルゴリズムを出せというなら、まずその用途を出しましょう。
>>728 >「リアルタイム生成」=「一切の元情報なしでその場で算出」と勘違いしてるだけ
違うけど…
Cか何かで既出(or未出)を保持するの作って、そいつと通信するのが一番じゃないか?
まぁ、やっぱり何に使うのか分からんわけで
>>726 それって絶対この重い処理が必要なのか、無理に使うなら山ほど浮かぶけど絶対に必要ってのは余程条件に縛りを入れないと・・
>>730 > Cか何かで既出(or未出)を保持するの作って、そいつと通信
それで1番手っ取り早くて確実なのがRDBなんじゃないの?
既出分はどんどん追加登録されていくわけで、それに対するロックとかも考えると中身はまるっきりDBだし。
俺も
>>721 はなんか「リアルタイム生成」を勘違いしてる気がする。。。
>>728 まあとりあえず想定できるケースとしては、数字の範囲が0から1万までの場合(少ない)と、
0から100万までの場合(多い)と、英字も混じるケース(多い上にランダム性が増す)の
3パターンに分けて考えるといいのでは。。。
>>727 細かいなぁ。
じゃあ、「ランダムにシャッフルする方法」って言えば納得する??
昨日から全角スペースでageてるのは
>>654 さんでござるね。
今日は半角スペースでござるか。
>>732 それと、その全部のデータを必要とするのか、一部しか使われないのかでも最適解は異なる。
おまえら釣られ過ぎ、
>>654 が来るまで待つか下質でやれ
>>732 基本的に抽出元リストと除外リストがオンメモリで扱える分量かどうかの2パターンしか無い。
全部数字なのか文字を含むのかはまったくどうでもいい話。
>>726 宝くじの例をわざわざ引っ張り出してきたのは、使い道の一例というより
アルゴリズムの思案方法が間違っている(逆)ことを指摘したかっただけ。
「すでにある数字を避けつつ選んだ適当な数値」を「宝くじに使う」と
言い出したので、その説明を出したまでのこと。
ちなみにー、宝くじ、やりようによっては 警視庁生活安全課から電話がかかるよ。。
>>736 どっちかというとくだ質は、一問一答で
軽やかに流れる質問のやりとりが身上だから。
くだらないというよりも、なさけない質問も多いが。
dnsのsoaを引いて表示したいのですが、どのような方法があるでしょうか?
>>724 digの結果を取り込むか、PEARのNet_DNSクラスと使うとか
自前で全部やるとか、色々。
>>740 だからあくまでも「例」だっつーの。
つまんないマジレスすんな。
マジレスじゃないだろそれwww
んじゃ何レス?
とある書籍で $hoge =& new xxxx(); としてあるのですが この 「=&」 はどんな意味があるのでしょうか? 単に「=」とするのとは違うのでしょうか?
defineって クラス内では宣言できないですか?
>>751 宣言できるが、まずやらない方が身の為だ。
定数はクラスの外で定義したやつでもクラス内で読めるよ。 クラス内で定義したいのならやってみたら?
メンバ変数の初期値で var a = DEFINE . "文字列"; とかできないの不便だよね。 コンストラクタでいちいちメンバ変数の初期化するの面倒&継承時に忘れそうで怖い。
function head(&$dat) の&ってなんですか?無くても大丈夫?
引数は渡された変数の参照(別名)である。 function a( & $foo ){ $foo = "A"; } function b( $foo ){ $foo = "B"; } $goo = null; a( $goo ); print $goo; // A b( $goo ); print $goo; // A のまま
なるほどわかりますたありがとうございまっす
HTML_QuickFormのaddRuleでhiddenの値(one-time token)をvalidateしたいのですが、なぜか全くできません。 仕様ですか?
>>759 defineはメソッドの中でやれば文法上できなくはないってことじゃね?
やめてほしいけどそんなこと。
761 :
nobodyさん :2006/02/09(木) 11:07:43 ID:MpGK/5Xn
SHIFT-JISで test.php ------------ <form method="post" action="test.php"> <input type="submit" value="チャーシュー" name="ラーメン"> </form> <pre> <? print_r($_POST); ?> </pre> ------------- のボタンを押すとラーメンがラ\メンになってしまいますがこれは文字コードを変えるほかは無いのですか?
>>761 name="A[ラーメン"か name="ラ-メン"で我慢する
764 :
nobodyさん :2006/02/09(木) 11:43:20 ID:MpGK/5Xn
(´;ω;`)ラーメン売るの諦めて蕎麦に変えまつ
765 :
nobodyさん :2006/02/09(木) 12:35:49 ID:sFweg2zo
ブログスクリプトを書いてるのですが、 コメントの投稿数をcomment(●) の●の部分に挿入したいなぁという構想があります。 投稿されるとHtmlを吐き出すような形で作っているんですが、 どのようなアルゴリズムというか方法で実現できますでしょうか?
2006/2/3 は 2006年2月の第1週です という変換をしたいんだけど、うまい方法ある? 地道に計算するしかない?
地道な計算といわれそうだが・・・週番号使って求めるのはNG? 2月1日の週番号と2月3日の週番号比べればすぐ出るよ。
>>767 その月の1日の週番 − 指定日の週番 +1 か!
あんた賢いな! ありがとう!
>>765 echo "comment($num)"
ってこと?
何に悩んでるのかよくわからん質問だな
コメントの保存方法にもよるとおもうけど、
コメント数を数えて
>>769 じゃないかな。
771 :
765 :2006/02/09(木) 14:43:10 ID:sFweg2zo
phpファイルを ・ blog投稿+記事Html+コメント用Html吐き出し用php ・ コメントHtmlを読み込んでコメントを書き加えていくPhp と複数に分けてるのですが、この間で値や変数を代入したり 共有したりするのってどうしたらよいのかと悩んでいます
>>771 記事とかコメントはDB(or ファイル)に保存ってとこまではOK?
それ以前の問題?
773 :
nobodyさん :2006/02/09(木) 15:42:22 ID:WmFPFh7w
Javaの instanceof演算子みたいな機能ってある? 生成されたObjectが、特定のinterfaceの実装か確認したいんだけど。 reflectionでメソッドを逐一確認するしかない?
PHPにもそのままinstanceofがあるけど
775 :
773 :2006/02/09(木) 15:56:46 ID:???
776 :
765 :2006/02/09(木) 15:57:23 ID:sFweg2zo
>>776 だったら、そのHTMLファイルの数を数えれば?
778 :
765 :2006/02/09(木) 16:05:29 ID:sFweg2zo
やっぱりコメント分だけHTML作らなきゃ今の実力じゃ実現できませんかね・・・・ HTMLのソースの中からある文字を探し出して その数を数えてHTMLに組みこみ・・・・ javascriptとの連携になっちゃいそうですね
>>778 JavaScript?使わないだろそんなの。
基礎も分からんやつがblog作ろうなんて思わない方がいい。
780 :
765 :2006/02/09(木) 16:17:36 ID:sFweg2zo
innerHTMLを使って日記記事のhtmlにコメントの数を送ろうかなんて考えてました コメント数カウントできれば完成だと思ってきましたが、仕組みの意思疎通って難しいですね どうもありがとうございました
>>778 当面はblognでもハックすれば良いと思われ。
>>778 たとえば、ファイルの中で1コメントが必ず<tr>〜</tr>で囲まれているとしたら、
str_word_count()とかでコメント数は一発で取得できるけどね。
そんなデザインとロジックが一心同体みたいなシステムは最低だけどな
784 :
765 :2006/02/09(木) 16:23:35 ID:sFweg2zo
>>782 ありがとうございます
その関数使ってみます
>>783 うおぉぉぉ 耳が痛てぇぇぇぇぇーーーー!!
>>765 ん?DBだったらselectした時点で件数出せるじゃん。
>>786 RDBMじゃ無いってんでしょが。
HTMLDBなんだってば(w
HTMLDB?ってやつのこと言ってたの? なんかよー知らんけど、件数を数えるのにも一手間かけさせるほど貧弱なシステムを導入する利点がわからん。
確かに投稿読むと
データ=HTML
なんだよなぁ。
普通は、データとHTMLは別にするもんだよ。
>>765
出力結果だけを元にデータをやり取りしようって言うんだからそりゃ無理がある
>>788 「システムを導入する」のではなくて、
「ロジック(自前)を採用して開発してる」が正解かと
まぁ、DBシステムが使えない連鯖だとか、
SQLに明るくないとか、理由は色々あるだろうけど、
せめて、CSVファイルでも良いから、データはデータとして管理して、
出力時に参照・加工・表示、っていう普通の流れにすべきだとは思ふ。
>>789 最終出力をHTMLへの書き込みで終了させ鯖への負担を軽くするのはありだが
それでもファイル破損の恐れがあるときを見積もってDBへデータバックアップとっておくのが普通かな
まぁDBにデータ保存してないなら管理もシステム構築も相当なだるい作業になるとおもうw
今からでもデータをHTMLに分離したほうが、 後々絶対役に立つと思うけどな。
間違った(少なくとも遠回りな)道を歩んでるな
俺も同じような仕組みの物を作ったことがある 対象のHTMLをデータ構造っぽく整形したり正規表現使ったりしたんだが、しんどいだけで実用性はないと思った ある意味練習にはなったけど
せめてHTMLコメントの中にCSV形式で生データ入れとくとかにして欲しいよなw
いやぁ、せめてXMLでしょう・・・v
799 :
nobodyさん :2006/02/10(金) 13:18:23 ID:oBW9CvsC
phpBBという掲示板サイトからダウンロードして掲示板を作ろうとしたんですがやり方がわかりません。 本当に失礼ですが、設置のやり方を一から教えて下さい、お願いします。 ちなみにサイトでやり方を見たんですがやり方がわかりませんでした。
>>799 一からってどこから言えばいいの?
解凍の仕方から?レンサバの借り方?Apache/PHP/DBのインストールの仕方?
ここまでできたら後は普通にアクセスしてフォーム埋めるだけだけど。
>>799 全く分からないなら諦めなよ。
もっと簡単なのから設置してみたらどう?
>>799 公式?サイトでやり方見てわからなかった人が、
こんなところ(失敬!)でのアドバイスで出来るようになるとは思えないが…
とりあえず、phpBBとやらのあり場所とか、その説明とやらが載っている場所とか、
それを見てどこが判らなかったのか?どこでつまずいているのか?
そういった情報をきちんと書いた方が良いかと。
803 :
nobodyさん :2006/02/10(金) 13:30:59 ID:oBW9CvsC
>>800 まずダウンロードして解凍までやりました。でも、これから先のやり方がわかりません。。
宜しくお願いします
>>801 いや諦めたくないです。この掲示板を使いたいので。
804 :
nobodyさん :2006/02/10(金) 13:32:15 ID:oBW9CvsC
>>802 わかりました。家帰るのが夜になるんで夜また連絡しますね。
宜しくお願いします。
806 :
nobodyさん :2006/02/10(金) 13:47:01 ID:oBW9CvsC
>>805 まぢありがとうございます!!
設定したらまた夜に来ますね。phpマスターな皆さん的には設定簡単ですよね?
808 :
nobodyさん :2006/02/10(金) 14:25:13 ID:i50XZrAk
XML形式で書かれた文字列(?)オブジェクト(?)を
Javascriptの.responseXMLプロパティで取得させるには
どうすればいいんでしょう??
ちなみに、
-----------------------PHP側(XMLを出力)
<?php
$callpath = '
http://www.exsample.com/rest.php '; //←外部RESTサービスからXMLを取得
$xml = simplexml_load_file($callpath);
print $xml;
?>
-----------------------javascript側(XMLを受信)
function callback(o){
var res = o.responseXML;
alert(res.firstChild);
}
なんて感じでやってみましたが
失敗しました。
>>808 使ったことないので知らないけど、マニュアル見た限りではsimplexml_load_fileはSimpleXMLElementオブジェクトを返すらしいから、そのままprintするのはまずいんじゃないの?
simplexml_load_fileとか呼び出さずにそのまま出力すればよさそうな気がする。
あと、JavaScriptの方でres.firstChildはオブジェクトっぽいからそのままalertにぶちこんでも[object]とか表示されそう。
ググりまくったけど全然情報が無いから質問させて下さい GD関数を用いて画像を表示するプログラムを作っているのですが、jpg,png,gifは問題なく行けていて、 bmpファイルがどうしても作成できません。 例えばjpgなら、 header("Content-Type: image/jpeg"); $image = imagecreatefromjpeg("files/a.jpg"); imagejpeg($image); とすれば出力できますが、bmpには対応する関数がありません。 どなたかbmpをブラウザに出力できる方法をご存知の方ご伝授下さい。 あとアニメーションgifに関しても教えていただければ凄く助かります(静止gifで詰まってます;
811 :
nobodyさん :2006/02/10(金) 14:46:42 ID:txESpKQg
parse_url()で取得したホスト名( www.2ch.net など)のみを表示させるにはどうしたらいいのでしょうか?
$a[0]->b = "aaa"; $a[0]->c = 11; $a[1]->b = "bbb"; $a[1]->c = 33; 今このようにして書いてるのですが これをarray関数などを使って 簡単に書くことはできないでしょうか?
>>810 BMP用の関数はないよ。
でも以前ここの過去スレかなんかで誰かが書き込んでたのを見て知ったんだけど、
http://www.php.net/imagecreate のUser Contributed Notesの中でImageCreateFromBMPを自作した人(今のところは上から2番目にある)がいるから使ってみては?
何気にちゃんと動作するよ。
出力のほう(imagebmp)は見かけたことないけど、どうしてもやりたいなら頑張って自作するか、ImageMagickを使うとかになると思う。
(話はそれるけど、PECLのimagickをcygwinでインストールしようとしたけどphpizeが成功したことがないので、誰かphp_imagick.dll持ってる人いたらうpしてもらえませんか?)
>>811 print_r($parse_url($url))してみれば道は開けるはず。
814 :
nobodyさん :2006/02/10(金) 15:08:50 ID:Gf4j4Lcn
>>812 「簡単に」の定義と、値('aaa'や'11')とキーの相関関係を述べよ
>>810 アニメーションgifはImageMagick使うしかないくさい。
>>812 どうしたいのかがイマイチわかりません。
データの出所がわかればarray_walkかarray_map適当に使えばできそうだけど、そのコードじゃワケワカメ。
817 :
810 :2006/02/10(金) 15:32:09 ID:???
>>813 レスありがd。 やはりありませんでしたか;:
少々方向性を変えてみようと試行錯誤しているのですが、ファイルを直に出力することは可能でしょうか
header("Content-Type: image/gif");
と一旦gifであることを定義して、gifファイルを出力しようと考えてます
例えばタグで言うところの<img src="a.gif">的な感じです。
そう打てれば話は早いのですが、画像ファイルの位置を分かられない様にして画像を出力させようとしています。
なのでタグだとそのタグの画像URLを直打ちされるとアウトなので;
JPGなら
header("Content-Type: image/jpeg");
$image = imagecreatefromjpeg("files/a.jpg");
imagejpeg($image);
imagedestroy($image);
とやってしまえば、メモリ上に一時的に画像が生成されるだけなので元ソースがぼかせるのですが、他の形式だと一筋縄では行かず詰まってます。
>>817 ファイルを出力するだけなら
header("Content-Type: " . image_type_to_mime_type(exif_imagetype($filename)));
readFile($filename);
って感じでできるよ。
このコードは画像限定だけど、画像ならだいたい一通りどの形式でもおk。
画像じゃなくてもcontent-typeさえ求めればいけるし。
819 :
nobodyさん :2006/02/10(金) 15:51:28 ID:O8bbZDPI
$pw = $_POST["pw"]; // (1) POSTデータを$pwに代入 if ( $pw == "hoge1" ) { } elseif ( $pw > "hoge2" ) { } 入力データチェックなどで、上のように変数代入して比較の場合が多いと思いますが、 自分はなるべく変数(変数名?)の使用を減らしたい派で、(1)の処理をなくして置換してました。 (ソース的にも見やすく理解しやすかったので) でもJavascript(DOM)の資料などを読んでいて 「エレメントの直接参照が遅いので変数に入れる」みたいなのがあったんですが、 環境変数の参照回数を減らすと速度的に良いとかありますでしょうか?
>>817 何の加工もしないのならメモリの無駄遣いじゃないか
821 :
819 :2006/02/10(金) 15:56:00 ID:O8bbZDPI
>環境変数の参照回数〜 グローバル変数・セッション変数や環境変数 に置き換えてください。すんまそん
>>819 その程度の処理ならどっちでやっても良いんじゃないの?
それよりも、そのサンプルの方が、コワイ(あくまでもサンプルでしょうけど)。
pwってパスワードだよね?
パスワードを平文で管理とか、文字列を大小比較していたり…
823 :
812 :2006/02/10(金) 16:03:40 ID:???
>>815-816 ごめんなさい。値に意味はありませんでした。
質問しなおします。
$b[0]["aa"] = "aaa";
$b[0]["bb"] = "222";
$b[1]["aa"] = "bbb";
$b[1]["bb"] = "555";
と
$a = array(
array("aa"=>"aaa","bb"=>"222"),
array("aa"=>"bbb","bb"=>"555")
);
は、同義だと思いますが
$b[0]->aa = "aaa";
$b[0]->bb = "222";
$b[1]->aa = "bbb";
$b[1]->bb = "555";
これを、arrayを使ったときのような感じで書けたら
スマートかなと思って模索しているところです。
なにか方法はないでしょうか?
>>819 憎まれ口になるが、変数名は減らしたいとか増やしたいとかではなく、変数にする(名前をつける)意味があるかどうかで決めるべきで、パフォーマンスは気にするべきではないと思う(ボトルネックになっている場合を除いて)。
それでもどうしても気になるなら一応答えておくと、$_POST["pw"]を参照するよりは$pwを参照するほうが速度的には速いわな。
($_POSTかどうかが関係あるわけではなく、配列のキーである"pw"から要素にアクセスするのに時間がかかる)
JavaScriptのエレメントの直接参照(?)ってのはよーわからん。
ソースキボンヌ。
>>823 おそらくPHPにはあなたの求める構文はありません。
825 :
810 :2006/02/10(金) 16:46:03 ID:???
レス有難う御座いました。 無事表示できました。変に周りくどくせずにこうする方法があったとは・・・お騒がせしました; exif_imagetype関数はphpインスコするとき付け忘れてましたので丁度よい機会なので今からphp-5.1.2にアップする際に入れる予定です。(今は5.0.5
826 :
819 :2006/02/10(金) 17:10:13 ID:O8bbZDPI
ああー!なるほど理解できました。
連想配列への参照速度が普通の変数より遅いだけなんですね。
これなら余程のループなどない限り気にするほどの差じゃないですね。
Cのポインタを理解して使うようになり、インタプリタでも過去の自作のを
パフォーマンスを良くするソース改善を考えてたので
>>824 さん蟻が豚でした
まあ、変数に代入したほうが見やすい場合が多いと思う
>>824 819じゃないけど、JavsScriptのはwindow.document.GetElementBiId("form").value という
「.」で繋いだ構文のことだと思うよ。
こういうのは何度も使うなら最初に1回変数に入れてからアクセスしろ、って話。
JavaScriptのオブジェクト参照はPHPの連想配列なんて比じゃないほど遅いからね。
ループでこんなの参照してたら楽に2〜3倍くらいの勢いで遅くなる。
>>826 やたら深い多次元配列とか多重リファレンスとかになるとこれはすげー遅いので、
そういうのはさすがに一時変数に格納したほうが速くてなおかつ見やすくなるかもね。
830 :
nobodyさん :2006/02/10(金) 19:20:27 ID:8/RW2vAn
PHPで変数の内容を破棄したい場合はunsetするだけで良いのでしょうか? 共有サーバー上で一時的にパスワードを入れた変数を上書きして明示的に破棄したいのですが何か方法はありませんか?
>>832 共有サーバーであることに何の問題があるのかが分からん。
ひょっとして変数ってのはCookieとかSessionとか、あるいはDBのデータのことを言ってるのか?
スレ違いかもしれませんが。 ローマ字 <=> ひらがな の相互変換ができる関数とか クラスって何処かにありませんでしょうか? ご存知の方がいましたらお教えください。
>>833 変数はPHPの変数です($passwdとか)
その共有サーバーはCコンパイラも解放されていてメモリを直接扱えるので
可能なら上書きして消したいのですが。
>>835 意味ない。
unset()か、別に$passwd='';で全然問題ない。
それ以前に、恐らく消す必要すらない。
みなさんがよく使うログイン・ログアウト処理の流れが知りたいです。 一応動くことは動くのですが、自己流なので心配で・・ ちなみに私が組むと function readuser($username,$password){ if(file_exists("$log_folder$username.dat")){ $user_dat=file("$log_folder$username.dat"); if(rtrim($user_dat[0])==md5($password)){ //いろいろ処理して変換 return $user_dat; }else return false; }else return false; こんな感じになりました。DBは分からないのでファイル管理です; よろしければ汎用のメソッドなど教えて頂けませんでしょうか?
さっき確認したらこれデータ筒抜けでしたorz なんかに使う前で良かった。。
>>834 function HOGE($str) {
ereg_replace("a", "ア", $str);
}
こんな感じで作れ。
841 :
840 :2006/02/10(金) 21:39:12 ID:???
ひらがなかよorz
>>835 そこまで気にするんだったら素直に自前で立てるべきだな
ローマ字ひらがな変換ならマルチバイト関数で出来たと思う
PEARのAuthを。
Unknow Hard Error
おはようございます。 青 赤 黄色 緑 黒 という五種類の色があった場合、全ての組み合わせを打ち出す事は出来ないでしょうか? つまり、この場合ですと、5*4*3*2*1の120通り全ての組み合わせを書き出したいのです。 ループを使おうと思いずっと考えてるのですが、どうしてもいい案が浮かびません。 宜しければ教えて頂ければ幸いです。
>>848 まず、思い浮かんだ悪い案を提示してください。
>>848 とりあえず標準的なアルゴリズムでやってみた。
function next_perm(& $list) {
$n = count($list);
if ($n < 2) return false;
for ($i = $n - 2; ! ($list[$i] < $list[$i + 1]); $i --)
if ($i <= 0) return false;
for ($j = $n - 1; ! ($list[$i] < $list[$j]); $j --);
swap($list[$i], $list[$j]);
for ($i ++, $k = $n - 1; $i < $k; $i ++, $k --) swap($list[$i], $list[$k]);
return true;
}
function swap(& $a, & $b) { $c = $a; $a = $b; $b = $c; }
$colors = array("青", "赤", "黄色", "緑", "黒");
$list = range(0, count($colors) - 1);
while (next_perm($list)) {
$arranged = array();
foreach ($list as $index) $arranged[] = $colors[$index];
echo implode(", ", $arranged), "\n";
}
>>850 すぐに何か書いちゃダメだよ。
まず本人に考えるクセをつけさせないと。
すんません!おっしゃるとおりです! (´-`).。oO(あほか・・・)
853 :
850 :2006/02/11(土) 10:04:43 ID:???
よく見たら最初の一個表示するの忘れてた。 付け加えといて。
>>852 は、
(´-`).。oO(あほだ・・・)
次の方どうぞー
>>850 ありがとうございます。
一応、自分の考えた案は、5つの数字からランダムで5つ順番に取り出し、
(一つ目を取ったら二つ目は一つ目と被らないように・・・と五つ取るのですが)
それで、一つ書き出します。同じように、まだ5つ取り出して取り出したのが既存のとかぶっていたらまたはじめから・・・
と、5*4*3*2*1個書き出されるまでループさせる案ですが、
ずらーっと書いていてあまりのスマートでなさに情けなくなってしまい、
お力添えをお願いしにきたのですorz
850さんの案の参考に記述してみようと思います。
ありがとうございました。
>>856 最初の部分でランダムに取り出すんじゃなくて、順番にとりだしてもいいんでないか?
ただしそのアルゴリズムでやると最悪かかる時間が指数関数になってしまう。
要素数が5個なら問題ないけど、要素数が7を超えたあたりでいつになっても終わらない状態になる。
(まあ要素数が8になると40320個あるから全部表示すること自体ないと思うけど)
以下参考までに。
function all_perms($list) {
$result = array();
foreach ($list as $i => $x) {
$copy = $list; unset($copy[$i]); // 順番に取り出す
foreach (all_perms($copy) as $each) {
array_unshift($each, $x); // 取り出したやつを戻す
$result[] = $each;
}
}
return $result ? $result : array(array());
}
$list = range(0, 4);
foreach (all_perms($list) as $each) echo implode(", ", $each), "\n";
>>858 ちょい便乗お願いします。
例えば5個の並べ替えなら俺でもなんとかわかるんだけど、
5C3とか「5個の中から3個を取り出す」って形だとどうすればいいの?
array_count_valuesって連想配列の中にある子配列?には適用できないんでしょうか? 例えば $hoge["哺乳類"]["猫科"][ ]="ネコ"; $hoge["哺乳類"]["猫科"][ ]="ライオン"; $hoge["哺乳類"]["猫科"][ ]="ピューマ"; $hoge["哺乳類"]["猫科"][ ]="ネコ"; $result = array_count_values($hoge["哺乳類"]["猫科"]); 結果 ("ネコ" => 2 , "ライオン" => 1 , "ピューマ" => 1) みたいな。 何か他の方法があったらよろしくおねがいします。
861 :
nobodyさん :2006/02/11(土) 17:10:43 ID:77G1MBCY
質問させてください curlを使ってHTMLを取得する際に そのままだとブラウザに出力されてしまいますが 文字列として変数にまるごと格納するためには ob_startなどを使うのでしょうか? それともなにかオプションなどあるのでしょうか? ファイルに出力するオプションしか見つかりませんでした。 よろしくお願いします
>>861 >ob_startなどを使うのでしょうか?
当たり。
その辺りもあって使いづらいので、自分は
最近だとHTTP_Requestクラスを使う事が多いな。
digコマンドを実行してその結果をブラウザで読める形にしたいのですが、どのようにしたらよいのでしょうか?
>>860 特に何も問題ないような気がするけど、いったいどうしたいの?
>>863 <pre>
<?php `dig 〜` ?>
</pre>
じゃダメなの?
865 :
861 :2006/02/11(土) 19:18:18 ID:???
>>862 ありがとー
HTTP_Requestクラス、さっそく調べてみますー
866 :
nobodyさん :2006/02/11(土) 19:41:39 ID:B3gU7sFS
system関数の戻り値って、どんな時にFALSE返すの? freebsdで動かしてるコードなんだけど、 if(FALSE==system("command")) この条件に、コマンドが成功してるハズなのにひっかかっちゃいます。 同様のコマンドをプロンプトで実行した際の$statusは0なんだけど・・・。
>>866 $statusってのはプログラムのステータスコードのこと?
だとしたらsystem()の第二引数で返ってくる。
falseがどんなときに返ってくるのかはわからないけど、たぶん実行ファイル自体が開けなかった場合かなんかじゃないかと。
>>859 ちょっと微妙だけどnCkだったらこんな感じかな。順列(nPk)よりは楽かも。
function next_comb(& $flags) {
$n = count($flags); $k = 0;
for ($i = $n - 1; $flags[$i]; $i --, $k ++) if ($i <= 0) return false;
for (; ! $flags[$i]; $i --) if ($i <= 0) return false;
$flags[$i] = false;
for ($i ++, $k ++; $k > 0; $i ++, $k --) $flags[$i] = true;
for (; $i < $n; $i ++) $flags[$i] = false;
return true;
}
function flags2list($flags) {
$result = array();
foreach ($flags as $i => $flag) if ($flag) $result[] = $i;
return $result;
}
$n = 5; $k = 3; $flags = array();
for ($i = 0; $i < $k; $i ++) $flags[$i] = true;
for (; $i < $n; $i ++) $flags[$i] = false;
echo implode(", ", flags2list($flags)), "\n";
while (next_comb($flags)) echo implode(", ", flags2list($flags)), "\n";
870 :
867 :2006/02/11(土) 20:08:34 ID:???
不覚にも笑ってしまった
半角80文字(80byte)分のデータが欲しいのですが、substrで切るとゴミが付く可能性があります。 mb_substrでは文字数になるので希望が満たせません。良い案はありませんか? $input = "あaいiうu"; $len = 7; //byte for($i=1; $i<=$len; $i++){ $out = mb_substr($input, 0, $i, SJIS); if(strlen($out) <= $len){ $output = $out; }else{ unset($out); break; } } //print $output; ちょっと微妙です。
>>869 なるほど、めちゃ助かりましたm(。。)m
ありがとうございます。
>>874 いや、869のだと多分ちゃんと算出されないと思うけどな
csvとかdatファイルの行数を数えて インクルード表示するにはどうすればいい?
echo count(file('./hoge.csv'));
879 :
ファイル操作について質問 :2006/02/12(日) 00:12:57 ID:WHPt7+3y
fsockopen、fget等を使って10MB程度のファイル(zip、lzh等)をPHPがあるサーバーに転送して、 それを1.45MBずつに分割し、さらにそれぞれのファイルの先頭に、バイナリデータを挿入するといった事は可能でしょうか?
881 :
879 :2006/02/12(日) 01:12:53 ID:???
>>880 回答ありがとうございます!これからいろいろ検索してみます。
>>873 jcode.phpの中にあるjsubstr()とか、jstrcut()とかどう?
883 :
nobodyさん :2006/02/12(日) 02:37:21 ID:nmR6R0gu
マッチしてるかどうかを判定したいんですけど、 こんな感じでカッコとかが入ってると上手くマッチ判定してくれません $hoge1="this is a pen.(cha katou) in <the drifters> on [comedian]"; $hoge2=$hoge1; if(eregi($hoge1, $hoge2))echo"hit!"; 実際は$hoge1や$hoge2は動的に変わっていくんですけど、 こういう時ってどうやればいいんでしょうか。 よろしくおねがいします。
884 :
883 :2006/02/12(日) 03:06:19 ID:???
stristrでいけました
>>873 こんなのどうでしょ?sjisかeuc限定で。utf-8とかjisだと無理。
$input = "あaいiうu"; $len = 7;
$output = substr($input, 0, ord($input{$len - 1}) & 0x80 ? $len - 1 : $len);
よろしくお願いします。 掲示板に使いたいと思うのですが、 投稿した時刻から何時間(もしくは分/秒)以内は NEWなどと表示させたい場合はどうすればいいんでしょうか? 環境はXAMPP1.5.0(Apache2.0.5.5、PHP4.4.1)です。
>>888 投稿された時間を記録しておいて、今の時間(表示された時間)との差を使えばええんでね?
てか、こんな事はすぐ思いつく筈だから何か具体的に詰まってる部分があるんだべ?
それを言ってみそ
890 :
888 :2006/02/12(日) 11:09:46 ID:???
>>889 現在年 = 投稿年
現在月 = 投稿月
であり、
現在日 = 投稿日
であった場合にNEWと表示させる。
としたのですが日にち単位でしか表示出来ず
時間単位にしたいのですが、
5時間以内(の差)はNEW表示。
としましたら、00:00になると5時間以上の差となり駄目でした。
>>890 >日にち単位でしか表示出来ず
なぜ?
>時間単位にしたいのですが、
>5時間以内(の差)はNEW表示。
>としましたら、00:00になると5時間以上の差となり駄目でした。
日にち単位でしか表示できないのに、
どうやって時間を比較した?
掲示板スクリプトは色々出回ってるから
色々調べてみることをオススメする
>>890 そういう時間差を扱う必要がある場合は、unixタイムスタンプ(time())を使うと楽だよ。
表示の時はdate()などで年月日に変換。
表示の度に変換する事に無駄を感じるなら、両方を記録しておくってのもありかと。
893 :
888 :2006/02/12(日) 11:45:07 ID:???
>>892 ありがとうございます。
やってみます。
"This is a pen."は荒井注じゃなかったか?
"This is a pen."は荒井注じゃなかったか?
896 :
888 :2006/02/12(日) 15:04:01 ID:???
投稿時刻は既に取得済($date = date(Y/m/d(D)G:i);)でしたので、 //投稿時刻分割 $t_nen = substr($date,0,4); $t_mon = substr($date,5,2); $t_day = substr($date,8,2); $t_hour = substr($date,15,2); $t_min = substr($date,18,2); //タイムスタンプ $mkt = mktime(); $t_mkt = mktime($t_zi,$t_fun,0,$t_tuki,$t_hi,$t_nen); //差 $sa = $mkt - $t_mkt; //24時間(86400秒)以内ならNEW表示 if($sa < "86400"){ $new = "NEW"; } としてみました。これでどうでしょうか?
897 :
888 :2006/02/12(日) 15:08:19 ID:???
失礼しました。こっちです。 //投稿時刻分割 $t_nen = substr($date,0,4); $t_tuki = substr($date,5,2); $t_hi = substr($date,8,2); $t_zi = substr($date,15,2); $t_fu = substr($date,18,2); //タイムスタンプ $mkt = mktime(); $t_ts = mktime($t_zi,$t_fun,0,$t_tuki,$t_hi,$t_nen); //差 $sa = $mkt - $t_ts; //24時間(86400秒)以内ならNEW表示 if($sa < "86400"){ $new = "NEW"; }
898 :
888 :2006/02/12(日) 15:10:18 ID:???
ごめんなさい。こっちです。 三回も連続投稿するなんて… //投稿時刻分割 $t_nen = substr($date,0,4); $t_mon = substr($date,5,2); $t_day = substr($date,8,2); $t_hour = substr($date,15,2); $t_min = substr($date,18,2); //タイムスタンプ $mkt = mktime(); $t_mk = mktime($t_hour,$t_min,0,$t_mon,$t_day,$t_nen); //差 $sa = $mkt - $t_mk; //24時間(86400秒)以内ならNEW表示 if($sa < "86400"){ $new = "NEW"; }
>>885 記述多分間違ってますよ。
実際動作させてみたら違ったから
>>896 日本語と英語が混じってるしwww
$t_mk = strtotime($date)ってやればsubstrとmktimeの山を全部省略できるよ。
>>899 とりあえず書いてある通りに実行したら
0, 1, 2
0, 1, 3
0, 1, 4
0, 2, 3
0, 2, 4
0, 3, 4
1, 2, 3
1, 2, 4
1, 3, 4
2, 3, 4
ってなったし、$nと$kを色々変えても特に問題ないと思うけど。
($n<$kにすると$n=$kっていう扱いになっちゃうってのはあるけど)
>>888 >892の言ってること理解してるか?
「取得済み」といってるがその部分を変更することが何らかの理由で不可能なの?
すでに運用していて変更すると互換性が失われるとか?
その場合、両方記録する方式は無理?ホントに無理?
クライアントからGetやPOSTで送られた全てのデータが 格納された配列ってなかったっけ? または、引数付きURLが格納された変数とか。
>>903 リクエストヘッダだったら$_SERVERとかapache_request_headers()あたりかな。
POSTのボディ部分のデータは$_POSTとか$_FILESで取得するしかないかも。
>>888 if($sa < "86400"){
$new = "NEW";
}
に
else{
$new = " ";
}
を追加すればおk。
掲示板によるね。コリャ。
908 :
nobodyさん :2006/02/12(日) 17:14:39 ID:kJteDCSc
ポートスキャンスクリプトが実行できません。
WinXP(SP2)IIS+PHP5.1.2で、
http://www.genie.x0.com/gtl/help/port_scan.php に掲示されている
「スクリプトソース」をコピーしたけどlocalhostの仮想ディレクトリで実行すると
Warning: fopen(./pscan_lock_list.txt) [function.fopen]: failed to open stream: Permission denied in C:\port\portscan.php on line 151
となってしまいます。
一応、pscan_lock_list.txtの空ファイルは存在してます。
原因見当つきません、アドバイスお願いします。
>>908 パーミッションエラーだって表示されてんだからパーミッション変えれ
910 :
nobodyさん :2006/02/12(日) 17:46:04 ID:BUa+WQJa
お時間のある方、テストランにご協力お願いします。
お散歩サイトです。
他の通行人に挨拶するというものです。
リンク先は、城下町彦根の町中です。
http://mailmart.info/pages/N351631E1361515N051112.htm 1. 画面右上のコントローラで適当に動き回ってください。
2. 私が、あなたに気づいたら、メッセージを送ります。
そのとき左フレームの犬のマークがメールを受け取ったサインを送ります。
3. その犬をクリックしてください。
チャット形式の画面に変わります。
4. 私の方のチェックボックスにマークをつけ、なんでもいいのでメッセージを送ってください。
以上です。数分で終わると思いますのでよろしくお願いします。
反応がおかしかったら、帰っていただいてもかまいません。
断る
912 :
nobodyさん :2006/02/12(日) 18:07:55 ID:BUa+WQJa
ありがとうございました。終了します。
ここ数日ググりまくったのですが一向に解決出来ないので質問させて下さい。 先日phpを5.1.2へ(5.0.4から)アップデートしたのですが、 それ以来「SquirrelMail」でメール送信時に.Sentへメールを移動させる作業でエラーが発生してしまいます。 メーラーでやると正常に.Sentへ送信済みメールが移動するので「SquirrelMail」に問題があるように考えております。 そこでphp5系で同様のメールソフトを利用されてる方で宜しければどのような設定にされましたか教えていただければ幸いです。 phpは5.1.2 でメールはqmail+Courier-IMAPで運用しています。 ちなみに、 エラー: エラー: メッセージを追加できません INBOX.Sent. サーバの応答: Error in IMAP command received by server. というメッセージが帰ってきます(エラーメッセージが漠然とし過ぎて原因が把握できていません;) php絡みということでこちらに質問させていただきました。
914 :
908 :2006/02/12(日) 19:08:57 ID:???
>>909 ありがとう、解決しました
IISにもパーミッション的な設定ってあるんだね。
勉強になりました
915 :
nobodyさん :2006/02/12(日) 22:09:09 ID:8opibPhp
IDキタコレ
∩ _,,..,,n,r'゙ <⌒つ ./ ゚ 3 ヽ )´ ) l ゚ ll ∩ ノ そ Σ `'ー---‐'' ( ⌒ヽ/V⌒v、/⌒ ビ・・・シメジ
flashとphpを組み合わせて遊んでいるのですが、 flashの使用上、flashファイルとphpファイルは同一ドメインに置かなければなりません。 ナントカしてそれをばらばらにおきたいのですが、 <?php readfile( $_REQUEST["url"] ); ?> というスクリプトをかまして読み込めばGETできることはわかりました。 しかしPOSTメソッドができないようですので、 POSTできるようにするにはどのようなスクリプトを書けばよいのでしょうか。 どうぞよろしくおねがいします。
>>917 最近、この手の質問が多いな。
つ[fsock]
FAQ
>>4 に追加要望を叫ぶなら900台に突入した今がチャンス!
8. ファイル入出力関数(fopen等)でリモートファイル扱う際の限界
→ fsockopenでソケット通信で解決
改め
→ fsockopenでソケット通信 or PEARのHTTP系 or CURLで解決
は必須ですね。
つかぬことを聞きたいのですが mysql_fetch_array()で受け取った配列データを見る場合 $array[hoge]ってな感じで普通はいけるのでしょうか? $array["hoge"]みたいにダブルクォーテーションいるのでしょうか? 実は今""なしで見れてたんですがsession_start()を入れると"を入れないと取れなくなりました。 いったい何が原因なんでしょうか・・
漏れはシングルクオーテーションという選択肢を選んでる。
>>921 error_reportingをE_ALLにしとけば(というかE_NOTICE立てとけば)$array[hoge]がバッドノーハウであることがわかると思う。
>>923 そうでしたか・・ありがとうございました。
>>921 そのままだと定数との区別がつかない
PHPは定数を調べて定義されていなければ配列のキー文字列としてあつかう
PHPに余計な手間をかけさせたくなければ素直に引用符で囲め
$abc = <<<ABC hogehoge hogehoge2 ABC; $abc = str_replace($abc, "", $abc); echo $abc; これでLinuxのdebian機で動作確認したら、正常に$abcが空になったのですが、 centos機で動作確認したら、$abcが空にならず、元の状態のままでした。 空白スペースなんかがまじってないか確認しつくしたのですが、 問題が解決しません。何か原因として予想できるようなことはあるでしょうか?
>>926 ちなみに
if($abc === $abc) print "OK";
は表示される?
>>926 $abc = str_replace($abc, "", $abc);
で空にならないなんてありえないです。
たぶんどっか書き間違えてるんでしょ。
>>926 両方のPHPのバージョンとphp.iniの設定は一緒?
たぶん、本当は、 hogehoge hogehoge2 とかじゃなくて、日本語文字列だったりするんだろうね。
931 :
926 :2006/02/13(月) 18:44:27 ID:???
>>928 おっしゃるとおりですね、説明を簡略化しようとしたのがまずかったです。
実際は
$abc = <<<ABC
hogehoge
hogehoge2
ABC;
$def = file_get_contents($abc_to_onaji);
$abc = str_replace($abc, "", $def);
echo $abc;
です、$abc_to_onajiは$abcと同じ内容のテキストファイルです。
文字コードが関係しているような気もするのですが。
>>929 同じです
>>930 半角英数字のみです
$var=file(./dir/text); $var=file(dir/text); これどっちが正しい記述の仕方?
>>932 どっちも正しい。
どちらかというと上の方が好まれる気がする。
「絶対姉弟」と「相対指定」を勉強するといいよ。
>>931 文字コードも疑わしいけど、改行コードとかも疑わしい気がする。
FTPでサーバーにアップロードする際の改行コード変換が
PHPソースとテキストファイルで食い違ったりしてないか?
絶対姉弟 なんか卑猥
936 :
nobodyさん :2006/02/13(月) 20:54:14 ID:FzTHijdm
2ch互換BBSの仕様書みたいなのまとめたサイト見たような気がするのですが忘れてしまいますた 今も残ってたら誘導おながいします
>>883 亀レスだけど
preg_quote();
だったかな?
>>936 んなもんdat見りゃすぐ再現できるだろ
>>938 dat取得時のUser-Agentって今でも monazilla/1.00 でないとダメなのか?
//なんかmoemoeとかでも取得できるわけだが...
横レスだが俺も知りたい
改造スレにも投げたのですが、急を要するようになってしまったので
こちらで質問させて頂きます。
http://f4.aaa.livedoor.jp/~muni/sc0403.html#his こちらの*更新履歴スクリプトなのですが、196行から
<center>
<form action={$PHP_SELF} method="POST">{$emsg}
<textarea name="body" cols="50" rows="3">$ebody</textarea><br>
<input type="submit" name="NEWPOST" value=" 投稿 "><br>
</form>
</center>
これに
<textarea name="subject" cols="50" rows="1">$esubject</textarea><br>
というフォーム要素を追加して
ログに「更新日時」,「サブジェクト(subject)」,「本文(body)」という順で書き込めるようにしたいのですが、
944 :
943 :2006/02/14(火) 00:38:03 ID:???
いくつかの見当づけた個所 70行 $newline = implode(",", array("$now,$tim,$body,\n")); を $newline = implode(",", array("$now,$tim,$subject,$body,\n")); 162行 $ebody = str_replace("<br />", "\n",$ebody); を $ebody = str_replace("<br />", "\n",$esubject,$ebody); のようにしたのですが、反映されません。 書き込み後のログファイルを見たら、 ”更新日時 , (空白) , 本文」 という感じになってしまいます。 (空白の部分にsubjectの要素が入るようにしたいのですが) どのようにすれば書き込み反映されるようにできるのでしょうか?
>>943 提示されてる部分だけしか見ないけど、
受信側のスクリプトの方で受け取り部分の項目を増やしてないんでしょ。
>>944 > $ebody = str_replace("<br />", "\n",$esubject,$ebody);
とりあえずこれは関数の書式からしておかしい。
で、多分そこはいじる必要ない。
70行目の修正と、ソースに何箇所もある list(〜) = explode(",", $〜); って部分で
片っ端からsubjectの項目を追加して回れば多分動くんじゃね?
しかし正直、そのプログラムは下手糞すぎて真面目に読む気がしない。
ちなみに70行目を含め、implode()の使い方を完全に勘違いしてる >その作者
947 :
946 :2006/02/14(火) 02:03:22 ID:???
あ、でも表示はともかくログファイルでデータが空白ってのは妙だな。 そもそもsubjectの<textarea>を追加するとこからして間違ってるんじゃないか? おまえ、PHP以前にHTMLからしてまともに読み書きできない人じゃない?
948 :
943 :2006/02/14(火) 02:16:40 ID:???
subjectというのは便宜上の名称で、実際には改行コード入りのタイトルをつけたい場合もあるので、 textareaである必要があります。またbody部と同様にhtmlタグを認識できる必要があります。 普通に考えればinput type=text ですけどね… ソースの上手い下手は自分には判りませんでした
949 :
946 :2006/02/14(火) 02:29:24 ID:???
>>948 違う。
textareaを追加することが間違ってるんじゃなく、HTMLの中にtextareaを追加した
「場所」が間違ってるんじゃないの?って話。HTMLをちゃんと読めってことだ。
でなきゃあの内容なら70行目を直すだけで少なくともログファイルには記録できてるはずだ。
すみません。 ・70行を $newline = implode(",", array("$now,$tim,$subject,$body,\n")); ・188行を list($tgtim,$etim,$esubject,$ebody,) = explode(",", $lines[$i]); ・フォーム部を <textarea name="subject" cols="50" rows="3">$esubject</textarea><br> <textarea name="body" cols="50" rows="32">$ebody</textarea><br> <input type="submit" name="NEWPOST" value=" 投稿 "><br> のようにしたところ、とりあえず書き込みまではできました。 が、更新履歴表示で本文にあたる部分が表示されません。 ログには 1139884457 , 06.02.14 , タイトル , 本文<br />, こんな感じに書き込まれています。(3列目までしか読んでいない?) どこかで何列目までを呼び出すかという定義がされているのでしょうか?
951 :
943 :2006/02/14(火) 02:53:01 ID:???
あ、すみません
953 :
936 :2006/02/14(火) 06:07:13 ID:4SX0mfpX
>>942 えろいひとおありがとう
バッチリでっす
imap関数を使ってWebメールを作ろうと思っているのですが 受信箱はできましたが送信済みや削除済み等別の箱を見るには どうすればよいのでしょうか?
955 :
943 :2006/02/14(火) 18:31:43 ID:???
$comという変数にbodyの内容が代入されてると思うのですが、
どこで代入されてるのかわかりません。
実動はこのような感じでタイトル部分だけが表示されます。
http://nekomimi.s91.xrea.com/test/his.php?mode=past phpの中身はこのように修正しました。
http://nekomimi.s91.xrea.com/test/his.php.txt list(〜) = explode(",", $〜);の部分を修正の旨アドバイス頂きましたが、
実際に書き替えようと思う個所が既に
list($no,$tim,$com,) = explode(",", $lines[$i]);
のように
変数が $com に置き換わっているのでどうして良いかわかりません。
list($no,$tim,$esubject,$com,) = explode(",", $lines[$i]); としてもダメですし…
どうかご教示お願いします。
956 :
nobodyさん :2006/02/14(火) 18:37:12 ID:ieP3tNy8
指定したURLのサイトにアクセスして<title>と</title>の間に挟まれている文字を検出、データベースに格納することは可能でしょうか? ソースなど可能でしたらよろしくお願いします。
#<title>(.+?)</title>#is
>>956 file_get_contents()
preg_match()
mysql_connect()
mysql_query()
959 :
nobodyさん :2006/02/14(火) 21:04:12 ID:G+1cEh6a
echo $_SERVER['SERVER_NAME']; を実行すると locahost が表示されます。 どうして localhost じゃないのでしょうか? 「l」はどこに行ってしまったのでしょうか?
960 :
nobodyさん :2006/02/14(火) 21:08:45 ID:??? BE:110979825-
>>959 httpサーバーをインスコするときに打ち間違えたんじゃないですか?
Apacheならhttpd.comfで変更できると思います。
そんな設定ファイルねーよw
962 :
nobodyさん :2006/02/14(火) 21:09:51 ID:??? BE:110979252-
httpd.confでした。
気になって調べちまったじゃねーか!
964 :
nobodyさん :2006/02/14(火) 21:24:41 ID:??? BE:166468853-
うるせー打ち間違えただけだよバカorz
>>961 ま、Apacheの設定ファイルの名前は、
自由に設定できるけどな。
966 :
nobodyさん :2006/02/14(火) 22:15:28 ID:b7AHDxRL
正規表現道場スレが落ちてるのでこっちで質問させていただきます。 mb_ereg の . は「あ」や「a」等の1文字にマッチしますが、 1Byteにマッチさせるにはどうすればいいのでしょうか? \C を使ってみると、illegal control-codeエラーが発生してしまいます。
"1byte"
mb_eregからeregにすればいいんじゃない?
@(0x8197)が、[\x81\x97]{1} にマッチするところからして どうも1Byteにマッチさせるというのは無理みたいですね。 >968 そうします
970 :
969 :2006/02/14(火) 22:46:17 ID:???
mb_ereg('^[\x00-\xff]$', '@') は PHP 4.4.2(xrea.com 多分Unix)だとマッチせず、 PHP 5.1.2(win32)だとマッチするようです。 どっちも . は1文字にマッチするようですが、鬼車の仕様なのかな
971 :
nobodyさん :2006/02/14(火) 22:47:47 ID:5b9bfYZ/
array( '1'=>'a.', 'null'=>'b', '2'=>'c', 'null'=>'d', ); CSVを出力するプログラムを改変したいのですが、 上記のような場合、4番目の配列が2番目の配列を上書きして しまいます。 2番目も空、4番目も空というふうにしたいのですが、 「array」では無理でしょうか?
>>971 各カラムを識別できるキーを別に設ければいいだけじゃないの?
最終的にそれでどんなCSV吐きたいのかさっぱり分からんので何とも言えないけど。
array( 1 => 'a' , 2 => null , 3 => 'c' , 4 => null ) ; じゃ駄目なんかい?
普通に考えたら array( 'a'=>'1', 'b'=>'null', 'c'=>'2', 'd'=>'null', ); じゃないのかそりゃ
975 :
nobodyさん :2006/02/15(水) 01:13:30 ID:1Wrene7g
gethostbyaddr()関数を非同期に実行する方法ってないですかね? 4つぐらい逆引きをいっぺんにやりたいんです 別にgethostbyaddrに特化してなくても、PHPでマルチスレッド的なことができればいいんですが マニュアルとか見た限り見当たりません
976 :
nobodyさん :2006/02/15(水) 01:17:26 ID:7M4XsU5Q
>>975 CLI版ならforkできる。
module版でもやってやれないことはないとマニュアルにはあるが動作は保障されていない。
978 :
nobodyさん :2006/02/15(水) 01:34:17 ID:1Wrene7g
980 :
>>879・ファイル転送の方法について質問 :2006/02/15(水) 07:30:16 ID:/tElmE9p
>>879 ですが、
あの後、PHP-Editorに付属しているマニュアルchmを見ながらいろいろ調べてみました。
fread()でファイル全体を読み込み、
fputs()でphpがあるサーバーに書き込みたいのですが、
filesize()は、リモートファイルでは動作しません。
何か他の関数を使うのでしょうか?
>>955 質問とは関係ないんだけどさ
$newline = implode(",", array("$now,$tim,$subject,$body,\n"));
は全く意味がない
$newline = implode(",", array($now,$tim,$subject,$body,\n));
か
$newline = "$now,$tim,$subject,$body,\n";
でいい
>>955 ざっと見たけど
list($no,$tim,$esubject,$com,) = explode(",", $lines[$i]);
で問題なさそうだけど
変数名を変えてあるのはただの気まぐれだから気にしない
クラスを使って何らかの処理をさせる場合, プロパティに全部格納する方法と, (1) class foo{ var var1; var var2; var sum; function add(){ $this->sum = $this->var1 + $this->var2; } } $a = new foo; $a->var1 = 1; $a->var2 = 2; $a->add(); echo $a->sum; メソッドの引数にして返り値でもらうのと, (2) class foo{ function add($var1,$var2){ return $var1 + $var2; } } $var1 = 1; $var2 = 2; $a = new foo; echo $a->add($var1,$var2); どっちが望ましい?どういう場合に使い分けてる?
984 :
959 :2006/02/15(水) 09:58:17 ID:6m4G3Lc6
>>960 ありがとうございます。
httpd.confをいじった時にスペルミスをしていたようです。
>>955 > $comという変数にbodyの内容が代入されてると思うのですが、
> どこで代入されてるのかわかりません。
って言うけど
> list($no,$tim,$com,) = explode(",", $lines[$i]);
↑これが代入の式だ。
いいかげん、勉強もしないでPHPいじるのやめれ。
>>983 やってみりゃ分かると思うが(1)と(2)では表示される値が違うぞ・・・
987 :
955 :2006/02/15(水) 11:11:14 ID:???
list($no,$tim,$esubject,$com,) = explode(",", $lines[$i]); としますと、今度は逆にタイトルが表示されず本文だけが表示されます。 どうしてこのようになってしまうのでしょう?
989 :
955 :2006/02/15(水) 11:49:17 ID:???
すみません
list(,$tim,$com0,$com,)=explode(",",$lines[$i]); //@@@@ past表示
$pastv.="[{$tim}]<br>$com0<br>$com <hr>\n"; //過去ログ一覧表示
こんな風にしてみたら表示されました。
各命令の役割自体は正確に理解できてませんが・・・
>>985 さんの指摘でピンときました。
コメント下さって有難うございます。
>>986 (1)のプロパティに$付けるの忘れてましたが,
実際にやってみたところどちらも同じ結果でしたよ?
>>989 なんか変な感じだけど。次からは多少は勉強してから来てください。
むちゃいうな
次スレ チン☆⌒ 凵\(\・∀・) まだぁ?
>>835 引っ掛かってるんだが、これってPHP(に限らんのだが)側でクリアできたとしても
Apache側でバッファリングしたPOSTデータはどうにもならんだろ?
建ててみる
996 :
995 :2006/02/16(木) 00:20:11 ID:???
ダメだったorz
997 :
nobodyさん :2006/02/16(木) 01:02:08 ID:BTLG/Hcs
PHPの勉強のためoscommerceを触っているのですが ちょっと変わった変数があり、いったい何をしているのかがわかりません 以下の変数はいったい何なのでしょうか? $$をつけるとどういう意味があるのでしょうか? $$link
999 :
nobodyさん :2006/02/16(木) 01:09:25 ID:BTLG/Hcs
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。