【PHP】下らねぇ質問はここに書き込みやがれ 31
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。
まず読め→【PHP マニュアル】
http://www.php.net/manual/ja/ PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは
>>2-10 辺り
【前スレ】
【PHP】下らねぇ質問はここに書き込みやがれ 30
http://pc8.2ch.net/test/read.cgi/php/1159979905/ ◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しない)
・ サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【簡易FAQ】
1.文字コードは何を使えばいいの?
→1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
→ Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
→ cronかタスクスケジューラを使え。
7.extractって危険なの?
→変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
→ .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
10. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
→ よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 15. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
→ C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
→19.を参照
21. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
7 :
1 :2006/10/25(水) 09:16:07 ID:???
できるだけ前スレの
>>996 の意向にそったつもりだが、
時間かかりすぎるのもあれなんで、適当に修正した。
不満があるなら次スレで修正してください。
かなり乙
_.. - .._ _.. - ,ニ-冖 ⌒ 冖-ニ - _ / ノ´,. .‐.: : : ̄: :、:‐. 、`ヽ \ / //: :./: : : : : : :l: : : :.\ヽ \ < ヽ/: : : :/: : : : : : /: :.l: : :、: : :ヽ/ > 丶、/: : : ::/: : : : ::::〃:/:.|:: : :.l: : : :.', / l:l: :-:、l.: :::::::://://:∧:::._;l:-!: l:.|! ,l:l: : : ::|><__/ ' / '_,. へ:.|: l: :|::!l l:.|:|: : : ::lz=ュ ′ z=ュ.リ:://: l l: :Nヽ: : :ヽ ' /:://: : :.l l: : /il ヽ、ヽヽ /二ヽ / '// ̄`ヽ! くっだらねぇ質問は l: / il li、`` | | /' li:. ヽ ここに書き込みやがれ〜 l:/ il li `丶、ヽ-- ,' ィ .il li::. ヽ ,/ il.※.li ,.ィ`不ヽ、 il.※.li::::::.. ヽ . // .:il li // //'{l:l ヾ、il li\::::::... l、 / l/ ..::::il li ヽヽ//l>ィll:l__,ノイ li:::::::丶、:::::::...l \ |: l:::. ..:::::::::il.※.li `イl:l. {.l:「´ il.※.li:\:::::::. `` ┘ \ l:: l::::::_:::-:':´il li {l:l,><{ l:l il li\_l\::::. .::/ /,l:::.  ̄ ::::::il li、,.、,、,、{.l:ト、イ.l:l、,、,il li::::::::l:::::ヽ::. .::::/` 丶、 ,. '"´,.-l::::::::::::::::::::::/il.※.li、,、,、,、,、l:l::::::::{_l:l,、,、il.※.li、:::::::l:::::::..........:::::/ニ、ヽ、
10 :
前996 :2006/10/25(水) 09:24:41 ID:???
11 :
nobodyさん :2006/10/25(水) 10:34:39 ID:rZkuwLJp
2ゲット⊂(゚Д゚⊂⌒`つ≡
12 :
名無しさん@お腹いっぱい。 :2006/10/25(水) 11:44:27 ID:J6B8Hktu
htmlの文章を"。"が3つ出てくるごとに改行したいんですが、どうもうまく いきません。 for($i=1; i<=30; i++){ if(ereg("。","str.html"){ if($i/3==1){ それで、fwriteで\nを書き込むようなことを試みたんですが・・ よろしければ、鮮やかな処理をお見せいただきたい。
括弧もとじてないし。なんでコードがちゅうと半端なの?
>>12 よくわからんけどこういうことじゃないの?
$html = str_replace('。。。','。。。<br/>',$html);
文字列。文字列。文字列。<BR> 文字列。文字列。文字列。<BR> 文字列。文字列。文字列。<BR>
$html = str_replace('。。。','。。。<br/>',file_get_contents(str.html)); echo $html;
$v[]="abc"; echo $v{0}; この場合の{}ってどういう意味ですか?
18 :
12 :2006/10/25(水) 12:34:59 ID:J6B8Hktu
>13 関係があるところを書くと、こんなです。 $bunsyou=fopen("str.html","r+"); $kaigyou =fread($bunsyou,filesize("str.html")); for($i=1; i<=30; i++){ if(ereg("。","str.html"){ if($i/3==1){ fwrite("str.html","。\n"); } } } fclose($bunsyou); >14 すいません。言葉が足りませんでした。 例えば、 ○○○○○○○○○○○○○○。○○○○○○○○ ○○○○○○○○○○○○。○○○○○○○○○○ ○○。○○○○○○○○○○○○○○○○○○○。 といった文章があったとして、一度も改行されずに文章が記述されて いるのは読みにくいので、"。"が3度出てきたら、そこで改行したい ということです。
>> if(ereg("。","str.html"){ 正規表現をばかにしすぎ
20 :
名無しさん :2006/10/25(水) 12:57:12 ID:gy1NzvJV
申し込みフォームを作成して、申込者に確認メールを 送信する仕組みを作りました。 相手が通常のメーラーなら問題ないのですが、hotmailなどの フリーメールを使っている場合、文字化けしていることが あるようです。 どうすれば相手がフリーメールでも文字化けしないでメール 送信ができるようになるでしょうか? メール送信には、mb_send_mail関数を使っています。 この第4引数になんらかのヘッダ情報を付与すればいいのかな とも思っていますが、どうすればいいのかよくわかりません。 よろしくお願いいたします。 Windows2000Server PHP4.4.0 Webサーバ及びSMTPサーバはIISを利用。
配列を","で区切って出力してくれる関数はありませんか? ちょうどarrayで入力するときみたいに。
質問者はIDをだせ。
25 :
nobodyさん :2006/10/25(水) 13:26:19 ID:snVEf27m
すいません 訪問者がサイト内でクリックしたURLを表示したいのですが、 どんな関数がありますか?
26 :
24 :2006/10/25(水) 13:27:44 ID:???
違った。勘違いした。
改めて
>>21 var_export
携帯からメールで送られてきた時、添付禁止できないようにPHPで設定できないでしょうか?
できるかバカs
31 :
nobodyさん :2006/10/25(水) 13:42:12 ID:snVEf27m
>>27 そうですか・・・
PHPサイトでクリック履歴を表示してくれるサイトがあったのでついできるのかと
>>31 質問の仕方が悪いからでしょ。そんな「関数」はない。
そんな仕組みは作れるがな。
33 :
17 :2006/10/25(水) 13:50:16 ID:???
>>23 具体的にお願いできますでしょうか?
連想配列でも使えるようなのですが・・
34 :
nobodyさん :2006/10/25(水) 13:50:30 ID:snVEf27m
>>34 各リンク先にプログラムを仕込んで呼び出されるごとにセッションに記録していく。
>>33 $str = "abcdefg";
echo $str{3};
結果 d
連想配列で{}を使うのはPHPじゃなくPerlだろ。
GPLで配布されたソースを改造して二次配布したいのですが、 GPLの理念として、金銭を得るために使用しなければ作者に断りなくしてもいいのですよね?
39 :
nobodyさん :2006/10/25(水) 14:04:43 ID:snVEf27m
いろんな方法があるのですね。 でも、ちょっとオイラでは・・・ むずかしそうです
>>37 普通に配列要素を示すのに[]の代わりに{}を使っても動作するっぽい。
何かの互換のため?でも多分、推奨はされないから使わない方がいいよ >17
41 :
17 :2006/10/25(水) 14:34:08 ID:???
>>40 ありがとうございました。
そういう使い方をしていたソースがあったので特別な意味があるのかなと思っていました。
メンバ変数とかコンストラクタとかについて質問なんですけど、 (PHP5風に書きます) class Example {  :private $example = "hoge"; } とするのと、 class Example { private $example; function __constructor() { $this->example = "hoge"; } } この2つの違いは何でしょうか? 両方とも変数を初期化してるわけではないのですか?
>>42 2つとも変数を初期化してるだけです。
変数宣言で直接初期化する場合は式が書けないなどいくつかの制限が出ます。
逆にコンストラクタで初期化する場合、extendしたクラスでは親クラスのコンストラクタが
呼び出されなくなる場合があるため、設計に注意が必要です。
だから質問者はIDをだしなさい。 違う質問を並べてる同一人物か?
45 :
18 :2006/10/25(水) 16:32:53 ID:J6B8Hktu
48 :
18 :2006/10/25(水) 16:37:21 ID:J6B8Hktu
時が解決してくれるわけはないけど、ちょっと放置ですね。 ついでなんですけど、さっきのことで1ついいですか? 指定した文字が文章中に何回出てくるかカウントする関数 またはそれ以外の方法ってありますか?
>>20 とりあえずmb_languageが適切に設定されてるか確認しる
>>38 ライセンスくらい読めよ(´・ω・`)
>>18 書いてみた。つかってくれ。
配列を使うからforではなくforeachにしてみた。
つ[ソースコード]
$text = "あああ。いいい。ううう。えええ。おおお。かかか。ききき。くくく。";
$a = explode("。",$text);
$i=0;
foreach($a as $v){
if ($i>1) {
echo $v."。<br>";
$i=0;
} else {
echo $v."。";
$i++;
}
}
51 :
50 :2006/10/25(水) 16:53:39 ID:???
>>48 $count = count(配列が入っている変数);
echo $count;
PHP5のプログラマと、PHP4のみのプログラマの人数はどれくらい違いますか?
53 :
軟式PHP :2006/10/25(水) 16:56:36 ID:???
>>12 3つ出てくるごとなら
if($i/3==1){
ではなくて、
if(!($i%3)){
じゃないのかな。
文字をカウントするのはsubstr_count()。
>>20 どこが文字化けしてるん?サブジェクトだとは思うけど。
本文は文字化けしてないよね。
54 :
50 :2006/10/25(水) 16:59:09 ID:???
>>18 >>50 のソースは一番最後の「。」が表示されるバグがあるので
$a = explode("。",$text);
のあとに正規表現で最後の「。」をとる記述をかけば問題はないでしょう。
一番最後の文字を削ればいいだけなのであとは調べてください。
>>52 結構意味不明なんだけど、PHP5でさらに拡張された部分を
まだ勉強したことないプログラマ、って解釈でいいの?
それだと結構いそう。
もっとも、必要になったら3日でマスターできる内容なので
現場の環境が変わってないならわざわざ勉強する必要も感じないが。
57 :
18 :2006/10/25(水) 17:07:01 ID:J6B8Hktu
ご教示ありがとうございます。 早速トライします。
>>42 インスタンスを1つしか作らないなら
>>43 の言ってる事だけ気をつければok。
たくさん作るなら
$var1 = 1;
$var2 = 1;
と
$var1 = $var2 = 1;
の違いについて調べれば答えは出てくると思う。
59 :
29 :2006/10/25(水) 17:20:59 ID:9Xs/4YIO
画像に添付禁止処理をするにはどうすればいいのでしょうか? 当方PHPにて画像を取得、それを添付禁止処理して表示としたいのです。 宜しくお願いします
61 :
軟式PHP :2006/10/25(水) 17:26:36 ID:???
>>59 ちょっと文章が分かりづらいんだが・・・。
画像が添付されたメールを受信して、PHPでそれを解析して画像を取得。
その取得した画像をサイトに載せる際に、閲覧ユーザーがその画像をダウンロードして
他の人に配れないように添付禁止にしたいってこと?
62 :
29 :2006/10/25(水) 17:33:19 ID:9Xs/4YIO
>>60-61 さん
レスありがとうございます
携帯のメール添付を出来なくするということです。
auだとHTMLで保存できないように出来ますが、DoCoMoは添付禁止にするしかないんです
>>62 着メロのコピー禁止は見たことあるけど、画像でもそんなことできるんだっけ。
PHPでやる方法以前にDocomoの仕組みが分からん。どっかに説明ない?
64 :
軟式PHP :2006/10/25(水) 17:42:14 ID:???
>>62 俺が前やったやり方だけど、ImageMagickでオプションに「-comment copy="NO"」をつけて再変換したよ。
PNGの場合は、ImageMagickだと出来なかったんで、HDRチャンク、tExtチャンクを取得してバイナリ直接弄ってコメント埋め込んだよ。
Docomoだから関係はないと思うけど。
65 :
29 :2006/10/25(水) 17:53:02 ID:9Xs/4YIO
66 :
軟式PHP :2006/10/25(水) 18:14:14 ID:???
>>65 GDじゃないけど、海外のPHPモジュール使ったやり方のサイトを見つけた。
「kddi_copyright PHP GD」でググって一番初めにひっかかるやつとか参考になると思う。
「The PHP Metadata Toolkit」っていうやつを使うみたい。サンプルらしきものも載ってるんで参考になるんじゃないかな。
67 :
nobodyさん :2006/10/25(水) 18:29:57 ID:lNHbLMUd BE:434344166-2BP(0)
mb_send_mailでメールを携帯(FOMA)に送信した場合、 題名が全角9文字以降から文字化けするのですが、 対策法はありますか?
68 :
nobodyさん :2006/10/25(水) 20:46:22 ID:bFjR6zW3
POSTて受け取ったデータを表示するとき、 htmlspecialcharsとstripslashesを両方やるべきなんですか?
>>68 どういう表示のさせ方をするかにもよるがhtmlspecialcharsは大抵必須。
stripslashesはmagic_quotes_gpcがONになってる場合のみ必要。
しかしそもそもmagic_quotes_gpc自体があまりONにすべきではない。
だがそのような低レベルな質問をする人はこれをONにしておいた方がいいだろう。
70 :
nobodyさん :2006/10/25(水) 21:41:19 ID:bFjR6zW3
magic_quotes_gpcってなんでおすすめできないんですか?
検索条件から、商品一覧を表示する処理を作っているんですが、 WEBアプリケーションの本を読んだところ、一度商品一覧を全部取得してセッションにつめこんで、 ページビューごとに、件数で絞って表示させていたんですが。 普通はセッションいれませんよね? 検索結果のURL直リンで表示できなくなってしまうし。 どうなん?
>>71 なんだ、その腐った本は。
まあ商品数が極端に少ないならそれもアリかもしれないけど、
普通はそんな無駄なことしないわな。
っていうかセッション・ファイルにいちいち記録し直してたらDBの意味ないし。
>>71 ショッピングモール等の規模が大きくて商品を絞り込んでいく場合に有効
テンポラリファイルに書き出す処理を自前で実装するのと同じで
セッションに丸投げするか自分でコードを書くかの違い
規模が小さい場合、インデックスを作成して毎回検索しなおす方手もある
適材適所
>>70 余計なとこまで全部エスケープ入れちゃうから。
結局、エスケープ不要な箇所を判断していちいち外す必要が出るんだが、
それができる人なら最初から必要な箇所だけエスケープした方が早くて、
性能的にもそっちの方が速かったりして、何の意味があるんだか分からん機能。
まー、ものすごく単純なプログラムで何も考えずに作るんであれば有効。
>>73 てんぷらファイルはちょっとくらいサイズでかくても困らないが、
それを丸ごとセッション配列に格納してたら性能定価しないか?
>>74 なるほど、ありがとうございます。 ちょっと行き詰ったのでラーメン食べてきます。
>>75 ちょっと落ち着いて考えてみた
実際に比べたわけじゃないけど
テンポラリの方がよさげ
78 :
nobodyさん :2006/10/26(木) 00:20:58 ID:fW8Q3JdK
foreach関数のエラーを表示したくないのですが どこに@をつければいいんですか? foreach ($rss->items as $item ) { @foreachでは無理でした
79 :
nobodyさん :2006/10/26(木) 00:26:02 ID:5k/S84KJ
ググレ
>>78 foreachは関数じゃないと思います。
>>79 ちゃんとソース見て無いけど
カウントアップする時、整数としてキャストしてます?
型変換して配列にしてしまえ
俺もキャストして foreach ((array)@$rss->items as $item) だな。 $rss->itemsが確実にissetな状態なら@はつけなくていいけど。
87 :
78 :2006/10/26(木) 01:08:27 ID:???
どうすりゃいいの
88 :
78 :2006/10/26(木) 01:12:27 ID:???
>>86 ありがとう出来ました。
他のやつも適当にサンクス
ここのスレはいい人ばかりで大好きです。 ありがとう。
>>79 $num = ($for_num_lines[0] + 1);//それに1をプラスします
じゃなくて
$num = ($for_num_lines + 1);//それに1をプラスします
じゃないの?
92 :
nobodyさん :2006/10/26(木) 02:12:15 ID:5k/S84KJ
回答ありがとうございます。
>>83 キャストですか・・・
うーん。やってないですorz
やってみます。
>>91 $for_num_linesはたたたたたたぶん配列だと思うんですよよよよ。
>>92 $next_lines = explode("\t",$end_1);//それを分割して配列にしまいます
$for_num_lines = array_splice($next_lines,-5,1);//最後から5番目の要素(最後の$num)をとりだします。
これで配列のわけがあるかw
>>93 どうして$for_num_linesが配列だと思ったのか、話はそこからだ
95 :
94 :2006/10/26(木) 02:24:48 ID:???
>>79 の内容は見てないけど、
>>93 見た限りでは$for_num_linesは配列ジャマイカ?
俺もそう思う。 まー、普通こんな場面でarray_splice()使うやついないけどな。
>>79 とりあえず読んでみたけど、そもそも+1した$numってのは
どこの表示で使われてるの?そこが分からんかった。
99 :
42 :2006/10/26(木) 05:01:08 ID:???
>>43 >>58 レス遅れてすみません。
わかりやすい説明どうもありがとうございました。
設計に注意して書きたいと思います。
>>93 array_spliceの戻り値はarrayだよ
まあでも配列の要素を取り出したいなら素直に添え字指定して
$num = $next_lines[1] + 1;
とかの方がいいと思うが
>>98 $data = $for_num."\t".$num."\t".$name."\t".$bun."\t".$pass."\t".$host."\n";
に使われているようだ。
PHPでコマンドラインから キー入力を待ってその値を受け取り、計算して表示 みたいなことはできるのでしょうか? C言語のscanfみたいなやつです。
<?php $stdin = fopen('php://stdin', 'r'); ?>
103 :
nobodyさん :2006/10/26(木) 08:31:18 ID:ZtENe/Qs
たまにサイトで見かける、 hogehoge.php?hogehoge=hogehogehoge みたいなやつはSwitch文で作っているのでしょうか?
下のシフトジスコードの文字列を削除もしくは置換したいので PHPで下の文字コードがあった場合に反応をさせたいのですが 環境はEUCで統一されています。この場合どのように書けばいいんでしょうか? 0x8740〜0x879F 0xED40〜0xEEFC 0xFA40〜0xFC4B 0xF040〜0xF9FC
105 :
nobodyさん :2006/10/26(木) 08:52:32 ID:dpAXN0uK
PHPでテンプレートを使って動的ページを生成してる時に、ファイルの更新日を 意図的に近日に変更したいんだけど、それって、headerでLast-Modifiedを出せば いいですかね? なんでそういうことがしたいかというと、検索エンジン(具体的にはGoogle)に引っかかり やすくしたいからなんですが (ファイルの更新が頻繁に行われていると、再取得しによく来るとからしい)
>>105 実際に、htmlファイルを頻繁に更新してみてから言ってくれるかな。
>>103 はい、意味わかんね
>>104 正規表現でやったら?
つーかmb_convert_encodingでよさそうな気もするけど。
>>105 Last-modified以前にPragma: no-cacheとかExpiresをつけてたら常に更新されていると見なされるってことはないの?
検索エンジンがどうしてるのか知らないけど。
include、require文について質問なんですが、 out of dynamic memory in yy_create_buffer() というエラーがでたんですが、 #a.php <? include("b.php"); $a = "HELLO"; echo $b; ?> #b.php <?php include("a,php"); $b = "WORLD"; echo $a; ?> もしかして、相互のファイルにincludeした場合は無限ループするんですか?
>>109 無限ループする。
悪いことは言わないから、include_onceかrequire_onceにしとけ。
(つーかphpってbisonのエラーをそのまま垂れ流すんだな。初めて知った。)
>>110 やはりそうでしたか。どうもありがとうございます。
include_onceを使いたいと思います。
112 :
nobodyさん :2006/10/26(木) 11:57:22 ID:UNye5auU BE:386083384-2BP(0)
すみません、どなたか
>>67 の回答お願いできませんか。
ググっても同じ症状は見つからないのでFOMAだけなんでしょうか?
113 :
nobodyさん :2006/10/26(木) 12:01:45 ID:dpAXN0uK
>>107 日本語不自由な奴は書き込むな
>>108 >Last-modified以前にPragma: no-cacheとかExpiresをつけてたら常に更新されていると見なされるってことはないの?
no-chacheは検索エンジン無視してるみたいです。Expiresをつけても、ファイル更新日とは関係ないですよね?
(ブラウザ(クローラー)はそれに従うとは限らないらしいですし。)
少なくとも、GoogleはLast-modifiedを見てるらしいんですよね。
まぁ、もう答えは出てるのかもしれませんが、同じことをしてる人がいないかと思って質問してみました。
なにその微妙な釣り方
「PHPでテンプレートを使って動的ページを生成してる時に、ファイルの更新日を
意図的に近日に変更したいんだけど、」
俺はむしろこっちの日本語のほうがよくわからないな。
「テンプレートを使うかどうか」と「ファイルの更新日」とのあいだの関係もよくわからないし
「近日に」っていうのもよくわからない。
好意的に解釈すると、「数日前」とかいう意味合いかなあという感じだけど。
(でも「ファイルの更新が頻繁に行われていると」とつながらないし)
一番気になるのは「動的ページを生成」ってのの意味。
>>107 は「静的HTMLを書き出す」、って意味に取ったのかな?
普通に読んだら「静的なHTMLを書き出すのではなく、動的にページを生成」って意味だろうとおもうけど、
ふつうPHPで書いたら、たいていそうなるよね。
要は「なにもしなくてもよい」っていう答えが期待されているのかな?
(まあ、それだと「検索エンジンが拾ってくれないので」っていう話をしているのかもしれないけど)
しのごのいってるまに、実際にやってみればいいのに、という点では
>>107 に同意。
>>112 ヘッダーの折り返しロジックが74文字固定なので、
"Subject:"を含む最初の行が78文字を超えてRFC違反になる。
メーラによっては文字化けする。
文字化けするポイントにあらかじめ"\r\n"を入れておくとかで回避出来たはず。
ちょっと古い記憶なので最近はどうか微妙。
ここのスレはいい人ばかりで大好きです。 ありがとう。
119 :
nobodyさん :2006/10/26(木) 14:17:23 ID:dpAXN0uK
>>115 >俺はむしろこっちの日本語のほうがよくわからないな。
君は、そういう仕事をしたことがないんだよ。口を挟むなよ、邪魔だから。
ちなみに
>>107 は根本的に間違い。指摘するのも無駄。
ID:dpAXN0uK こいつのほうが邪魔だな。 みんなで嫌がらせして追い出してやろう
「no-chacheは検索エンジン無視してるみたいです。」 みたいですもなにも、意味を考えれば無視するのはむしろ当然ですね。 いい加減な仕事してるんだろうなあ
>>107 =115
乙
汚名返上したいのは分かるし、
言ってることは一理あるけど長文はやめてね
>>119 つーかもう出てこなくていいから。
どうせLast-modified吐いたとこでかわんねーよ。
PageRank自体は更新頻度には一切依存しないから。
クロールされる頻度増やしても、自分とこの帯域を無駄に浪費させるだけ。
>
>>119 これくらいも自力で出来ないくせに偉そうだな
しねよ
お前の人生出口
お前の人生 プライスレス おれの人生 プライスレス お金じゃ買えないもの プライスレス
128 :
nobodyさん :2006/10/26(木) 15:18:27 ID:50QBwnTP
php4でmbstringがphpinfoで確認できなくて困ってます。 XP使ってまして、システムパスはC:\phpに通してあり、php.iniはその中においてあります。 apacheがphpのモジュールを認識してるのでPHPは動くのですが、 mbstringが使えなくて困っています。 php.iniの設定で extension_dir = "C:/php/extensions/" もやりました extension=php_mbstring.dllも行頭の;をはずしております。 どなたかアドバイスご指摘お願いいたします。
>>128 ・php.iniをC:\WINDOWSに入れる。
・extension_dirって「extensions」だっけ?「ext」だった気がするけど。
この辺チェックしてみては?
130 :
nobodyさん :2006/10/26(木) 15:41:37 ID:50QBwnTP
できればバージョンアップするときの楽を考えてC:\phpで使いたいと思っております。 システムパスはc:\xxx\xxx\xxx;・・・省略;C:\phpと設定してあります。 php4.4.4を使っています。どのバージョンからかわかりませんが extensionsに変更されてたみたいです。 なぜmbstring.dllを読んでくれないのか原因がわからなく、お手上げです。
PHP5.2がでてますが、使ってる方どうですか?
134 :
nobodyさん :2006/10/26(木) 16:42:58 ID:5EB3cc5h
正規表現すれとマルチになります。 急ぎなのでお答えいただければ幸いです。 preg_match("/docomo\.ne\.jp$/",$host) これでdocomo.ne.jpがひっかからないのですが どうしてでしょうか?
ぼうやだからさ。
php5.2ってまだ人柱版だけどなにがよくなったの?
>>134 バックスラッシュが全角になってるからじゃん。
ちなみに「急ぎ」ってのは、回答側がきちんと検証せずに答えても文句ないって意味でおkだよな?
>>134 $host = "hagehoge.docomo.ne.jp";
if (preg_match("/docomo\.ne\.jp$/",$host)) {
$msg = "OK!";
} else {
$msg = "NG!";
}
echo $msg;
結果:OK!
どう見ても問題ありません。本当に(ry
その\が何かのネタでないのなら$hostが何かおかしいんだろ。
あと急ぎならマルチしても許されると思ってる馬鹿は死んでいいよ。
139 :
nobodyさん :2006/10/26(木) 17:00:45 ID:5EB3cc5h
>>135 本当にぼうやでした。顔真っ赤ではずかしいです。
>>137 本当に申し訳ない。
>>138 はずかしくて言葉もありません。
申し訳御座いませんでした。
まさか本当に\になってただけの話だったのかw
サンプルが\になってる解説ページ、いくつか見た。 そっからコピペしたのかもしれん。
どうでもいいけど、急ぎなので・・・の使い方おかしいだろ PHPの前に日本語からやり直せよ
恥ずかしいだろうけど原因を教えてくれw マルチしちゃうほど急いで質問したのに自己解決しちゃった原因を教えてくれw 気になって夜も眠れん!
144 :
79 :2006/10/26(木) 17:27:37 ID:5k/S84KJ
回答ありがとうございます。
>>100 Σそっちの方が・・・
っていうか私のやりかたがどう考えてもおかしかったみたいです。
$next_lines[1] + 1
のようにしてみようと思います。
回答してくださった方々、ありがとうございました。
ようつべの検索結果一覧のように、動画のサムネイルを取得出来る 関数ってPHPにありませんよね?
ない。
147 :
nobodyさん :2006/10/26(木) 17:42:26 ID:aGrSe2DE
149 :
nobodyさん :2006/10/26(木) 17:52:51 ID:5uZ/3Bq6
phpで2のn乗の数値の合計値から nの数値のリストを求めるにはどうしたらよい? 下の$arrayを出したいんですが。 $sum = 52; //(2の2乗)+(2の4乗)+(2の5乗) ↓ $array = array(2,4,5);
>>149 何か知らんが関数書いてみた。
function binlist($num) {
$result = array();
$num = abs((int) $num);
for ($r = 0; $num; $num >>= 1, $r ++) if ($num & 1) $result[] = $r;
return $result;
}
print_r(binlist(52));
151 :
149 :2006/10/26(木) 18:14:47 ID:5uZ/3Bq6
>>150 ありがとうございました。助かりました。
仕組みは良く分からないですけど・・
同じnameのcheckboxのvalue="n"を2のn乗の合計値で持ってて、それ合計値からvalueを引き出すのに苦労してました。
ここのスレはいい人ばかりで大好きです。 ありがとう。
>>149 ちゃんと検証してないがこんな感じかね。
$sum = 53;
$array = array();
$n = 0;
while ($sum > 1) {
while ($sum % 2 == 0) {
$sum = $sum / 2;
$n++;
}
$array[] = $n;
$sum--;
}
print_r($array);
/*
14: (1,2,3)
52: (2,4,5)
53: (0,2,4,5)
1000: (3,5,6,7,8,9)
1025: (0,10)
*/
ところでこれ何て夏休みの宿題?
154 :
153 :2006/10/26(木) 18:24:09 ID:???
おわ。 ちゃんとリロードしてから書き込めばよかーたよ(´・ω・)
61は(3,4,6)と(5,6)のどっちになりゃいいんだ?
156 :
149 :2006/10/26(木) 18:30:09 ID:5uZ/3Bq6
>>154 ありがとうございます。
皆さんのおかげでなんとか宿題終わりそうです。
157 :
149 :2006/10/26(木) 18:41:58 ID:5uZ/3Bq6
>>155 (3,4,6)->88
(5,6)->96
という値を持ってるので61から求めることは無いので大丈夫です。
158 :
155 :2006/10/26(木) 18:52:36 ID:???
159 :
nobodyさん :2006/10/26(木) 21:22:28 ID:50QBwnTP
次のコードにでてくるvarの意味がわかりません。 マニュアルで検索しても乗っていないのですが、 どういう意味なのでしょうか? class Shopping { var $item = "コンピュータ"; var $price = 99800; // ここまでメンバ変数の設定 function getTotal() { $tax = $this->price * 0.05; return $this->price + $tax; } // ここまでメソッドの定義 }
160 :
nobodyさん :2006/10/26(木) 21:29:26 ID:dpAXN0uK
>>121 阿呆。流れを読め
>>123 阿呆。どこにPageRank上げるって書いてあるんだよ。
クライアントが気にしてるから満足度を満たしてやってるだけだっつうの。
帯域って(w そんな細い帯域使ってないよ(笑うのも無駄
>>124 自力でやってるっつうの。header出すのは、君にはそんなに高度なのか?
161 :
nobodyさん :2006/10/26(木) 21:30:49 ID:dpAXN0uK
>>122 言ってることのどこに一理あるんだ?単に読解力がないだけだろ?
162 :
nobodyさん :2006/10/26(木) 21:32:19 ID:dpAXN0uK
あ、ここは素人に初心者が答えるスレか!ごめん、ごめん。君らよりレベル高い俺が質問しちゃったのか。
もうそんなどどうでもいいから他のスレいってやってくれ。
最近は逆ギレが流行ってるのか。
じゃあこっちも時代に合った対応をしてやらないとな。
>>162 うん、そうなのでちゅ。
ここはあなたよりれべるのひくいおこちゃまがこたえるすれなのでちゅ。
だからあなたのようなさんじげんさいきょーにつよまってきちがいじみたずのうをおもちの
ちょーぜつてんさいぷろぐらまーなかたのくらいあんとの
まんぞくどをみたす(あげるってこと?)てつだいにはならないのでちゅ。
わかったらとっととかえってくらいあんとに「じぶんにはむりでしたごめんなちゃい」って
なきながらどげざしてあやまってくだちぃ。
まず、If-Modified-Since見て304 Not Modifiedを返す事を考えてはどうだろう?
ほんっっっとうに下らないスレですね。PHPって基地外の使う言語だというのは本当のようです。
>>164 さんありがとうございます。
なるほど、関数だと思ってしました。
php4ではvarは使えるけど、php5ではE_STRICT警告がでてしまうと。
php4とphp5に共通したコードを書くのはE_STRICT警告でてしまうのですね。
う〜ん、どうにか怒られないで共存できる方法があればいいんですけどね。
残念ながら ID:dpAXN0uK のような基地外がいるのは事実・・・。 だけど、ここのスレはいい人ばかりで大好きです。 ありがとう。
>>160 どうせ更新頻度増やしても、検索結果には影響ないことには言われるまで気づかなかったんだろ。
頭胃いね。
>>168 オブジェクト指向を使う場合は互換性が全く無いものと思って
どっちかに絞って作った方がいいですよ。
>>171 ありがとうございます。
両方で動作する仕組みを作りたいのですが、
とりあえず勉強ということでどっちかのバージョンで作成を試みます。
>>170 可能な限り最新の内容を検索結果に反映させたい、ってことじゃないの?
で、とりあえず
>>105 への回答だけど、それでいいと思うよ。
googleがそれで頻繁に更新してくれるのかまでは知らんけど。
>>172 だったらオブジェクト指向は使わない、とするしかないんじゃないかな。
>>173 少なくともGoogleはLast-modifiedなんて読んでいないようだ。
If-modified-sinceに対して300台を返せば、クロール時の帯域を節約できるとは書いてあるが(160によるとそこは気にしていないようだし)、Googleのロボットがクロールする頻度を操作できるという記述はない。
FAQによれば、飽くまで「定期的」に巡回しているし、その度に更新はすぐに検出される、という記述しかない。
つーか内容の真偽以上に ID:dpAXN0uK の暴れ具合の酷さは目に余る。
GoogleはLast-Modifiedを読む。検索結果の下に出る。
あー読まないと言ったのはミスだったな。失礼。 正確にはLast-modifiedをクロール頻度の操作に使わないということ。
もーいいからよそいってくれ。ここは知識の見せ付けあいのスレじゃない。
ググれば誰でも見つかるような内容を知識の見せ合いと呼んでどうすんの?
そういうこと書くからまた荒れるんだよな。 あ、俺もか。
>>175 >>105 =
>>113 で本人が「Last-modifiedを見てる」と信じてるんだから
そこはスルーでいいんじゃないのかな。
表向き公開されてない裏仕様なんだ!とか言い出されても確認しようがないし。
ほっときゃいいじゃん。
で、
>>105 の質問はあくまで「PHPページで最終更新日時を詐称する方法」なんだから
それに対しては「header()でLast-modifiedを返せば良い」でFAだと思うんだけど。
FAっていうか、もしそうだとしたら、
>>105 の書き込み自体がかなりバカにしてると思うんだけど。
もう、まんこ
SEOとかGoogle関係とかはWeb製作じゃないか?
元の質問がSEO絡みをPHPでどう処理するかって話だから、完全に板違い・スレ違いって感じでもないんジャマイカ? あと、発狂してる人がいるけど、内容をよく吟味すればPHPでサイト構築する上ではわりと頻繁に使われるHTTP関係の話だし、そんなにめちゃくちゃに高度で専門的な話でもないよ。
>>183 そんなん無視すれ。気にしても始まらんでしょ。
あそこまで分かっててheader()でいいの?って聞いてくる辺り、
むしろオツムの弱い人だと俺は解釈してたよ。
>>185 その実装に関する話はここで合ってるよ。
>>186 誰も高度で専門的だとは言ってないと思うけどね〜
188 :
nobodyさん :2006/10/27(金) 00:59:06 ID:BT8IGUCu
>>165 逆ギレ?日本語をちゃんと使えるようにした方がいいぞ?プログラミング言語も満足に使えてないんだからさ。(煽りのレベルも低すぎ・・・)
189 :
nobodyさん :2006/10/27(金) 00:59:53 ID:BT8IGUCu
>>170 SEO対策について知らないんだな。黙ってろよ
190 :
nobodyさん :2006/10/27(金) 01:02:58 ID:BT8IGUCu
>>173 あ、まともなレスが返ってきて助かりました。
論理の通じる人がいるんだと安心できました。
191 :
nobodyさん :2006/10/27(金) 01:14:18 ID:BT8IGUCu
>>175 少し論理が通じる人が書き込んでて安心しました。
俺が暴れているというより、日本語の通じない人が書き込んでて、俺がレスを返してるだけです。
蛇足ですが、GoogleのクローラーがLast-modifiedを読むのはSEOの世界では常識です。
>>176 はい。
>>177 >正確にはLast-modifiedをクロール頻度の操作に使わないということ。
使います。経験則から更新頻度が高いと頻繁に訪れてるっぽいと判断できます。
もちろんそれは、PageRank、PagePriorityに影響しないでしょう。
>>182 >
>>105 =
>>113 で本人が「Last-modifiedを見てる」と信じてるんだから
俺はそれをここで議論する気はないよ。
>>183 すいません。日本語が使えないのにレスを返す人がいるので、少し懲らしめました。
>>187 全然高度な話じゃないので、立ち話のつもりで書き込んだら、難しくて理解できない人がいたらしいことに吃驚しました。
>>105 よく飽きずに中途半端な書き込みするな。
ちみのやっていることは、最初から無駄以外の何物でもないと早く気づきなされ。
Last-modifiedでそんな操作できると思うならソース晒してみ。
そんなオイシイ対策があるのにWeb上で誰も話題にしてないわけないだろ。
客からロボットにクロールされる頻度を上げてくれと言われたなら、その時点で「効果はない」と言えるエンジニアになろうね。
客に合わせて実装した振りするなら、そもそも質問するまでもなく、Last-modifiedでも何でも吐いときゃいいだろ。
要はお前はレベル低いの。
自治厨も我慢できなくなっちゃったみたいですw そういうのが自治すると逆に迷惑な良い例。
198 :
nobodyさん :2006/10/27(金) 01:29:55 ID:qOfMqiwc
どうせ、なんとかボンバイエだろ。
199 :
79 :2006/10/27(金) 02:23:44 ID:Q6o9pTT9
>>192 その議論はスレ違い。他所でやれ。
クロール頻度やPageRankのルールなんてしょっちゅう変わってるんだから
そんなことの是非は実装を議論する板で問うべき問題ではない。
>>199 > 書き込み部ソース:
http://source.is.land.to/s/q.phps これだけ見るとファイルに書き込んでる部分がないので原因は分からない。
なので、allの方だけ見てみるけど、
まず
> $read_1 = file($res_num_dat);//まず、読み込みます。
で読み込んだ直後に、$read_1の内容をvar_dump()して中身を確認。
それが確認できたら、
> $end_1 = end($read_1);//最後の要素を取り出します
の$end_1
> $next_lines = explode("\t",$end_1);//それを分割して配列にしまいます
の$next_lines
> $for_num_lines = array_splice($next_lines,-5,1);//最後から5番目の要素(最後の$num)をとりだします。
の$for_num_lines
> $num = ($for_num_lines[0] + 1);//それに1をプラスします
の$num
をそれぞれvar_dump()して、期待してる動作をしているのか確認する。
それがデバッグの基本。
202 :
nobodyさん :2006/10/27(金) 02:35:51 ID:BT8IGUCu
>>192 ぅゎぁ・・・びっくり・・・知らないの?(マジ吃驚)
それと、SEOについて知らないんだったら、口を挟まない方がいいよ。恥の上塗り。
>>200 俺も全くその通りだと思うね。同意。
>>200 クロール頻度がどれくらいかではなく、クロール頻度をPHPで操作できるかどうかが話題であって、しかも105からの反論がなければ、とりあえずこの場では操作できないでFAになるわけだし。
実装がコロコロ変わる、という結論もありではあるが、ソースのない話なので何とも言えませんな。
別に板違いと称する必要もなかろ。
>>202 幼稚園児みたいな口調はもう秋田から、ソース持ってこい。
205 :
201 :2006/10/27(金) 02:38:40 ID:???
で、予想だけど、 > $read_1 = file($res_num_dat);//まず、読み込みます。 ここでファイルの中身が読み込めてないと思うよ。 だから常に 0 + 1 になっちゃって結果が 1 なんでしょう。 記事ファイルってentryとかいうディレクトリにあるんでしょ? 読み込み時点ではchdirしてないしファイルパスにもディレクトリくっついてないし、 書き込みのときだけchdirしてるんだよね。 ファイル名の指定の仕方が読み込み時と書き込み時、親記事とレス記事とで どれもバラバラの手法を使ってるもんだから非常にバグを出しやすいと思う。 こういうのはちゃんと統一しましょう。 書き込み時にわざわざchdirするのはナンセンスだよ。ファイル名のパス指定で十分。
206 :
79 :2006/10/27(金) 02:40:02 ID:Q6o9pTT9
>>201 早くの回答ありがとうございます。
わかりました!
一応$numだけはダンプして見たのですが不十分ぽいですので他にも全て出力して見ます。
>>202 口を挟まない方がいいよ = 自分に都合の悪い書き込みは理解したくありません
別にもう議論することもないだろ。 質問者がキモイでFAだ。
そんなSEO無いとか反論してるやつも同じくらいキモいよ。
んなこと言ってねーよバカw
はいはいわろすわろす
また嵐が増えたな
214 :
79 :2006/10/27(金) 03:11:02 ID:Q6o9pTT9
今更ながら気づきましたが・・・。。 どうやら、親記事のすぐ後の子記事のカウントアップは成功しているようなのです。・・・たぶん。 つまり、このような感じです。 親記事:1 子記事1:2 子記事2:2 子記事3:2 子記事4:2 どうしてかは分かりませんが・・・。
>>214 親記事直後の番号は元の番号+1じゃなくて常に「START_LINE」の値みたいだけど
これは何番になってるのさ。
>>79 //
//□子記事書き込み部
//
if($_POST['res']){//子記事(レス)時
:
:
chdir('entry');//ワークディレクトリの変更
}
このchdirをもっと上にもってけ。
もしくはchdirをやめれ。
読み込んでるファイルと書き込んでるファイルが食い違ってるだろ。
(なんか釣りっぽいと感じるの俺だけ?)
>>79 データを記録するディレクトリを定義しておくとトラブルを起こしにくくなる
[config.php]
define("DATA_DIR",'entry/');
[all.php]
$res_num_dat = (DATA_DIR.$res_num.'.dat');
こんな感じにコードを弄って実験したらこんな結果になった。
test.php?res_num=1
[entry/1.dat]
?1fusianasan1本文localhost
12127.0.0.1
13127.0.0.1
14127.0.0.1
親記事は手動でファイルを作成
218 :
217 :2006/10/27(金) 04:42:41 ID:??? BE:1158559889-2BP(0)
タブ消えちゃった・・・。 \tは/に置き換えてます。 [entry/1.dat] ?/1/名前/1/本文/localhost 1/2////127.0.0.1 1/3////127.0.0.1 1/4////127.0.0.1
>>217 defineで定義してたところで、場所によって
パスにディレクトリを含めてみたり、chdirしてみたりと
やり方自体をバラバラにしてたら何の意味も無いと思うよ。
それよりはファイル名の生成を関数化する方が先決。
220 :
nobodyさん :2006/10/27(金) 14:10:28 ID:AQszo3d9
ロリポやさまざまな共有サーバで使われているsafe modeについて php.iniで設定したいのですがsafe modeをonする以外に 参考となるURLございませんでしょうか?
ユーザー定義関数中で使うと、 自身の関数名を取得できる関数はありませんか? ちょうどget_classのような
IDなんで表示しないで質問してるのかね
__FUNCTION__でいいんじゃね?
Crypt_Blowfishを使ってパスワード ’ jp ’ を暗号化 bin2hexで変換 pack('H*',$hogel)で元に戻す Crypt_Blowfishを使ってパスワードを復号化 というようなことをしようとしてるんですが、なぜか復号化 したものをもう一度bin2hexにかけると最後に 000000000000という余計なもの(ヌル文字列?)が ついてしまうんですが、packの戻し方が悪いんでしょうか? 回避するいい方法があれば教えてください<m(_)m>
3つある値をそれぞれ別の違う値にして返したいのですが if($hoge==A){echo "tanaka";}else if($hoge==B){echo "satou";}else if{($hoge==3){echo "suzuki";} みたいな形だと長いので連想配列ですると $array=array(A=>"tanaka",B=>"satou",C=>"suzuki"); echo $array[$hoge]; みたいになると思うのですが これを一行にまとめるかもっと簡略な書き方はありませんでしょうか?
>>228 なんで簡素化する必要があるの?
長くても見やすいように書くべき。
>>228 普通に考えたらそれで十分簡素だと思うけどなぁ。
俺だったらむしろ、前半の配列定義をプログラム先頭に置いておいて、
実行部分と分けちゃうけどね。
231 :
nobodyさん :2006/10/27(金) 18:41:58 ID:VglO/Vdq
正規表現で = を探したい場合はどうすればいいんですか? "=" "[=]" "(=)" "\=" とか試したけどだめでした……
232 :
231 :2006/10/27(金) 18:57:37 ID:VglO/Vdq
すみません、解決しました。 文字コードでやったらできました。
>>231 普通に preg_match('/=/, 〜 で検索できるはずだが。
if(preg_match('/=/', 'aaa=bbb')) echo "OK\n";
でも
if(ereg('=', 'aaa=bbb')) echo "OK\n";
でも結果は「OK」
できないコードを見せてみ。
234 :
233 :2006/10/27(金) 18:58:40 ID:???
orz
235 :
79 :2006/10/27(金) 19:16:03 ID:Q6o9pTT9
みなさん回答ありがとうございます。
>>205 してませんでしたorz
本当に書き込み時しかしてませんでしたorz
早急に直します。。
>>217-218 実験ありがとうございます(ぉ
早速直すべきところは直したいです。
>>219 やはりしておいたほうがいいのでしょうか・・・
いつもコード書いている時間が午前3時とかなんでいつもおかしくなっちゃってあきらめまs(ry
orz
お邪魔になるかもしれませんが、もし直りましたら一応報告したいと思いますです。
あとで、他人が見てすぐ理解できるってのは大事だな。 テクに走るオナニーは、趣味までで。
ロックファイルって何ですか?
ファイル入出力の排他制御用ダミーファイル
240 :
nobodyさん :2006/10/27(金) 20:50:36 ID:KqclDjNY
すっげーくだらない質問ですが自分は知らないもので。 どの言語にも共通のこととは思うのですが、 1万行のファイルから特定の内容を行ごとで検索するという処理と 同一ディレクトリにある1万個のファイルに特定の名前の物が存在するか? というものはどちらのほうがより高速なのでしょうか? 前者はファイルを開いて1行づつ読み込みを、後者はis_file()のような1行です。 前者はメモリを消費して、後者はHDD容量を消費しそうという印象を持っているのですが、速度面では?
php5.2ってどこからダウンロードできますか・
メールフォーム作成について ファイルは何種類にわけてますか? 自分はフォーム、チェック、送信と3つにわけてますが、 2つにしぼったほうがいいでしょうか? それとも1つで完結するべきでしょうか?
244 :
nobodyさん :2006/10/27(金) 21:06:45 ID:KqclDjNY
>>242 実験の丸投げに見えてしまいましたか。申し訳ありません。
自分は結果的にどうなのかを知らないのですが、知ってる人にとっては
実験をせずとも当然のことなのだろうと思ったので質問させてもらったんです。
>>240 そもそも同一ディレクトリに1万もファイルが置けるか、という問題がある。
ls打っても返ってこなくなるよ。
ですな。どっかで見た文献でLinuxですら膨大な量のファイルを ひとつのディレクトリに入れた場合、パフォーマンスがかなり落ちるって書いてた。
FC4で試してみた。 ファイル1万なら余裕。作るのもsshでls取るのも1秒もかからなかった。
248 :
nobodyさん :2006/10/27(金) 21:46:49 ID:KqclDjNY
自分が書いた1万という数字は具体的なものでは無いのですが、 ファイルごとに分けてしまうと処理時間は長くなると考えたほうが良いのですね。 ひとつのファイルにまとめて記述をして、そこから検索という形が 容量、速度ともに良さそうということでしょうか。 ファイルごとに分けるというのが、is_fileなどで一発なので、書くのは楽ですが オーバーヘッドが大きくなるということですか。
5000と10万じゃ、話が違うかも知れん。
250 :
nobodyさん :2006/10/27(金) 21:58:39 ID:FC6M/LoA
php.iniの設定で、[PHP]や「Session]とあるのは何ですか? この記述は何か機能があるんでしょうか?必要なんでしょうか?
削除してオケー
>>250 それはあんまり使わない機能だから消したほうがいいよ。
処理が早くなるからPCの健康にいい。
>>248 読み書きの仕方によるんでは。
毎回一万行すべて読む必要があるんなら、いっこのファイルにまとめてもいいだろうし。
3000行目と6000行目と6500行目だけアクセスする、とかいうパターンなら
一行いちファイルのほうがいいかもしれないし。
254 :
nobodyさん :2006/10/27(金) 22:31:21 ID:KqclDjNY
>>253 自分の書き方が悪かったです。
1万行の場合はその中に特定の1行が存在するかどうかのチェック
1万個の場合はその中に特定のファイルが存在するかどうかのチェック
というものです。
そのあとファイルの書き換えも行うので、その場合は1万個のほうが
オーバーヘッドが少なくて良いのでは無いかと考えているのですが、
1万個もファイルが有る場合のis_file(探したいファイル名)は重くて悪い方法
なのでは無いかということも考えられたので。分けるのが良いのか、まとめるのが良いのか
ということに関して、一般的にどうするのが良いとされているのかが気になりました。
255 :
nobodyさん :2006/10/27(金) 22:32:09 ID:kvLwzQNj
>>240 「1万行のファイルから特定の内容を行ごとで検索するという処理」
→そのアルゴリズムを線形検索という。
「同一ディレクトリにある1万個のファイルに特定の名前の物が存在するか」
→ファイルシステム(やOS)による。
バイナリツリーとか、ハッシュテーブルとか、線形検索とか、さまざまなアルゴリズムが使われている。
256 :
nobodyさん :2006/10/27(金) 22:33:17 ID:kvLwzQNj
>>254 一般的っていう話なら、
is_fileの方はOSとファイルシステムに依存し過ぎるのでまずやらない。
やったとしても独自にインデックス化してディレクトリ掘ってやるとか。
そんな面倒な事するぐらいならマトモなDBに放り込んで安心お手軽に済ますのが一般的。
もちろんシングルファイルで済むならそっちで。
258 :
nobodyさん :2006/10/27(金) 23:00:20 ID:KqclDjNY
>>255 >>256 ありがとうございます。とても参考になりました。
ファイルが1万程度で特定のファイルを探して開くというだけの作業だったら
システム任せにして作業するのが効率良さそうという印象でした。
プログラムもシンプル、メモリ消費も少ない、システムに任せた検索で高速と
考えてファイルを沢山という状態にします。
心配な場合は手前でディレクトリを更に分けておくのが良さそうでした。
259 :
nobodyさん :2006/10/27(金) 23:09:47 ID:KqclDjNY
>>257 そういえば、というくらいにMySQLなんかの話を忘れていました。
使ったことが無かったので見落としていましたが、調べてみます。ありがとうございます。
260 :
nobodyさん :2006/10/27(金) 23:30:59 ID:KHfcRMGS
なんでpostgreは人気がないんですか? mysqlみたいにライセンスも必要ないし、 postglreなら万が一組み込んでもライセンス違反にはならないのに。
>>258 実際、数が極端に多すぎなければ検索速度はis_file()の方が平均して速いよ。
一応、ハッシュを使った割とまともな検索アルゴリズムを使ってくれるから。
よほど古くさいOSでなきゃ2〜3万くらいならまだis_file()の方が余裕で速いと思う…
でも非常にシステム依存性が高くて何がトラブルの元になるか分からないんで、
コントロールしやすい仕組みで作るのがやっぱり一般的かな。
263 :
nobodyさん :2006/10/28(土) 00:42:40 ID:Y7NdvAT2
register_globals=onはセキュリティ的に推奨されないみたいですが、 グローバル変数を使うこともセキュリティ的にやめたほうが無難でしょうか?
>>263 あなたは、なぜ register_globals=on に問題があるのか学ぶべき
詳しくは検索すると山ほど出るからそっちに任せる
>>263 セキュリティは全然関係なく、設計と保守性の問題であまり推奨されない。
適材適所を踏まえて、グローバル変数が必要なシーンで使うのは全く問題ない。
あれ、register_globalsでスーパーグローバル変数の上書きかなんかのセキュリティ問題なかったっけ?
267 :
263 :2006/10/28(土) 01:11:22 ID:Y7NdvAT2
268 :
nobodyさん :2006/10/28(土) 01:11:58 ID:qYURnN+A
配列を単純に連結する(マージではなく)関数はないのでしょうか? $a = array('a','b','c'); $b = array('0','1','2'); ↓ array('a','b','c','0','1','2'); こういった動作をさせたいのですが…
269 :
265 :2006/10/28(土) 01:27:00 ID:???
>>267 言い方が悪かったんなら謝る。
俺が質問の意味を勘違いしたのかもしれないが、
「グローバル変数を使うこと"も"」ってのは
「register_globals設定の話とは別に」って意味じゃないのか?
register_globalsがONなら当然セキュリティは大問題だが、
register_globalsがOFFなら特に問題ないし、
その上でグローバル変数を使うことに問題など無いよ。
そのページの話は「register_globalsをONにしてグローバル変数を使う場合」だろ。
そんなもん、グローバル変数を使ってようと使っていなかろうと、
register_globalsがONになってる時点で全然ダメだ。
さらにグローバル変数を使っていたらより問題が悪化するというだけのことだ。
>>269 すいません、自分の書き方が悪かったと思います。
>>269 さんの解釈のとおりです。
わかりやすいです。
参考にさせていただきまして、プログラムを組んでみます。
ありがとうございました。
>>268 $a = array('a','b','c');
$b = array('0','1','2');
array_splice($a, -1, 0, $b);
var_dump($a);
結果:
array(6) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "0"
[3]=>
string(1) "1"
[4]=>
string(1) "2"
[5]=>
string(1) "c"
}
>>268 おれもわからなかったから調べてみたらこんな関数があったよ
$a = array(1,2,3);
$b = array(4,5,6);
$a = array_merge($a, $b);
273 :
271 :2006/10/28(土) 01:33:04 ID:???
すまん。なんか配列の順番を壊しちゃってたな。 array_splice($a, count($a), 0, $b); が正解。
>>272 array_mergeだと、順番が混合してしまうんですよね
>>273 置き換えをする関数で連結するとは思いつきませんでした
ありがとうございました
>>268 $a = array(1,2,3);
$b = array(4,5,6);
$c = $a[0].$a[1].$a[2].$b[0].$b[1].$b[2];
echo $c;
というかマージのほうがみやすいと思うけど。 ひとそれぞれなのか・・
>>275 > array_mergeだと、順番が混合してしまうんですよね
具体的にどういうケース??
280 :
275 :2006/10/28(土) 02:42:38 ID:???
今確かめたらarray_mergeでも順番は保たれますね 連想配列で、同じ文字列のキーがあった場合には上書きされてしまうので、 キーが数字の時も混合されてしまうと思いこんでいました。
282 :
nobodyさん :2006/10/28(土) 03:36:18 ID:VA57KDTi
下らなくない質問はどこですればいいですか?
下らなくなくはないだろう。
>>282 かつてここの本スレと呼ばれた「PHP質問スレ」が別にあった。
だが、そこにも結局下らない質問しか投下されなかったために
スレは消滅してしまった。
下らなくない質問があるというなら試しにここに投下してみるといいよ。
ニーズがあることが確認できればきっと本スレ復活もあるさ。
285 :
nobodyさん :2006/10/28(土) 04:12:50 ID:7i10sVSQ
質問です。 OS:CentOS4.4 Apache2.2.3+php5.1.6(どちらもソースから) 症状:php.iniを置くとphpが実行されない Configuration file pathに指定したディレクトリにphp.iniを置いてapacheをリスタートし、phpinfoを表示させてみると何も表示されません (ソースを見ると <? phpinfo(); ?> このように表示されてしまいます) php.iniを置かない状態だと問題なく表示されるのですが、どうしたらよいでしょうか? php.iniは、php.ini-recommendedを cp -p でコピーしただけなので設定に問題があるとは思えないのですが・・。 よろしくお願いします。
>>282 にとっては
echo "Hello World";
がくだらなくなくても・・・
おれにはくだらないんだよ。
そんなもんじゃねえのか。ここで質問したっていいじゃん。
質問者がそんな回答者を上から見下ろすような感じじゃ嫌な感じ。
1.LoadModuleの設定はしてあんのか? 2.LoadModuleで呼び出すdllパスは正しいのか、そのdllであっているのか。 それを確認してからまたレスしれ
288 :
285 :2006/10/28(土) 04:36:47 ID:7i10sVSQ
>>287 レスありがとうございます(私宛ですよね・・?)
LoadModuleは設定してあります。
php.iniを置かなければ正常に動作しますので・・。
httpd.confでの設定↓
LoadModule php5_module modules/libphp5.so
(lipphp5.soも存在します)
引き続きよろしくお願いします。
>>285 >php.iniを置かなければ正常に動作しますので・・。
php.iniをいじってない?エラーになってんじゃ?
もし修正しているなら修正していないphp.ini-distかなんかで確認
正常なら修正したとこ見る
>>288 php.iniのパーミッションってどうなってんの?
>>290 >>285 > php.iniは、php.ini-recommendedを cp -p でコピーしただけ
293 :
285 :2006/10/28(土) 04:59:54 ID:7i10sVSQ
>>291 php.iniのパーミッションは644(rw-r--r--)になっています。
>>290 php.iniはいじってないのです・・。
>>292 補足ありがとうございます。
設定はあってんのに動かないときは、 アンスコして再インスコすると解決することがある。
AddType appliationの設定もあってるよな?
>>293 試しに php.ini-dist をコピーしてみるとか。
>>285 ソースを
<?php
phpinfo();
?>
に書き直せ。
recommended設定ならshort_open_tagはOFFになってるはずだから
<? 〜 ?>ではPHPコードとして解釈されない。
299 :
285 :2006/10/28(土) 05:23:51 ID:???
>>298 おおおおおおありがとうございます!
書き直したら実行されました!勉強になりました・・。
>>296 はい、あっていました。
>>297 試していませんが、distのほうはshort_open_tagがONなので動くと思います・・。最初に試せばよかったですね・・。
>レスをくれた皆様へ
夜遅くに(もう朝ですが)ありがとうございました。
おかげで無事解決しました!
たのむ気になって寝られないんだよ。解決したら発表してくれ〜
単に「phpinfo()も動きません」ではお蔵入りになるとこだったな。<よくある ちゃんと動かないソースも晒したからこそ比較的早く解決したんだと思う。
>>299 よかった、これであと30分ごにねられる
つД`)
>>284 PHP質問スレ・・懐かしいな
1000まで埋まり次スレどうしようか?って時に、
スレ立てを躊躇して結局立てれなかったんだよなぁ・・。
あっちのスレも時々見てたけど、当時は両スレとも痛々しい空気だったな。 お互いのスレを煽りあう(?)みたいな雰囲気で。
下らねぇ質問はここに書き込みやがれスレの認定の回答者になるには いままででてきた質問に全部答えられないと認めてくれませんか?
なんだその認定の回答者ってw
ちょっと前までは質問オンリーだったんですけど、 最近は調べて回答するようにしたんです。そしたら勉強になってしまって。 回答オンリーの方はさぞご経験をつまれていると思います。 自分もそんな先輩方近づき、一人の回答者になりたいです。 それが夢でございます。
このスレにいることに誇りを感じるんです。
強引に変な流れに持って行くなw
ここのスレはいい人ばかりで大好きです。 ありがとう。
これって新手の荒らしなのか? まさかおもしろいとか思っt(ry
>>312 そういうことはあまりかかないほうがいいって
シンジラレナーイ!
ショッピングサイトとかの検索移動履歴ってどうやって保持しているのかな。 yahoo だと リクエストパラメータがすべて/で区切られていて 実際はフォルダ階層ではないだろうけど、フォルダ階層のように表示されて分かりやすいし。 Ethna使っているんだけど、そういうのは無理らしいんだよね。 かといって、たとえば 関東、東京都、渋谷区と検索した場合に、リクエストパラメータが region=01&prefecture=02&city=03 ってのは見た目が悪すぎるし。 どうすればいいの?
316 :
315 :2006/10/28(土) 16:14:39 ID:???
(;^ω^)また暴れ出しそうなタイプのバカですか?
>>317 答えられんやつのほうがバカだと思うが。
荒れる原因をつくってるだろ。この文。 (;^ω^)また暴れ出しそうなタイプのバカですか?
321 :
315 :2006/10/28(土) 16:40:18 ID:???
ちょww お前らこれで見下しているってどれだけネクラなんだよww てか俺より頭悪そうだから、もういいや(笑
えらそう
入門向けの本に載ってることを利用すればいいだけなのに・・・
発想が貧困なんですよ、きっと
>>315 はかなりのツンデレ。
自分が聞きたい事を素直に聞けないでどうしても妙に遠回しな表現にしてしまう。
多分今頃自己嫌悪で顔真っ赤。ベッドに飛び込んでじたばたしてるに違いない。
というかこんな事も分からない奴がショッピングサイトとか流石にネタだろ(´・ω・`)
その前に大前提として、質問するならIDを出せ、と。
vipperだらけかよ
レッツPHPさんの i-bbsスクリプトを使用していて、今回新たにサンプルを利用させてもらおうと思ったのですが、ローカルで掲示板に書き込みを行うと、なぜか
http://www.answers.com/のページに飛ばされてしまいます (送信ボタンを押したときなどに。ただし書き込みは正常に行われてる様子)
他のp-bbsなどでもなるので、自分のPCのせいかともおもいましたが、他サイトさんの掲示板スクリプトで試すと何の問題もありませんでした。
これって自分のPCがわるいのでしょうか?
レッツPHPさんのスクリプトを他に使ってる方でこんな症状がでるかたいますか?
WinXPでFirefox使用
なお、IEで同様にローカルで書き込みしようとすると「ページが表示できません」とでます
PHPの力で明日の天皇賞の勝ち馬を導き出せませんかね?
まぁほんとにレヴェルの高い人は2chなんて見てないしな。
331 :
250 :2006/10/28(土) 19:29:57 ID:Owjys+/6
>>251 >>252 ありがとうございます。あってもなくてもいいということですね。
でもこれには一体どんな意味や機能があるんでしょう?
>>315 POSTで渡してセッション入れとけばいい。
俺もWEB始めて1ヶ月くらいの頃はGETとかhiddenで持ち回してた。
最初の頃のソース一応持ってるけど、それ見ると「あぁ、この頃は若かった」って思うよね。
333 :
中三 :2006/10/28(土) 19:37:53 ID:???
>>329 <?php
$deep_impact = $_HORSE['WINNER'];
$fp = fopen('おまえの頭の中身.txt',w);
fputs($fp,$deep_impact);
fclose($fp);
?>
334 :
nobodyさん :2006/10/28(土) 19:52:11 ID:doQnvF3Z
フレームページでの質問ですけど 1.フレームページ index.php 2.メインページ main.php 3.トップページ top.php の構成でメインページ(main.php)で表示されている 外部HTMLページをトップページ(top.php)にあるボタンを押す事で メインページ(main.php)のファイルやURL等をを取り込んだり する事は出来るでしょうか?
>>334 もう少し分かり易い"下らねぇ質問"をすることは出来るでしょうか?
336 :
nobodyさん :2006/10/28(土) 20:15:48 ID:doQnvF3Z
すいまんせ、これ以上は・・・・ 善処いたします。
政治家かい? で、メインページに表示しているHTMLのURLとコンテンツをPHPの変数に取得したい ということか? URLが分かれば、file_get_contentsとかcurlでとれるよ
338 :
nobodyさん :2006/10/28(土) 21:18:39 ID:doQnvF3Z
おぉぉ、ありがとうですm(_'_ )m波平ペコッ そういう事をしたかったのです!!
339 :
nobodyさん :2006/10/28(土) 21:18:45 ID:RGmX0RKo
すみません PEARモジュールをインストールしてtgzをLhaplusで解凍 するとxmlになるんですが一般の解凍ソフトは無理なんでしょうか..?
xmlもまあ入ってるがそれ以外にフォルダが入ってるはずなんだが
341 :
nobodyさん :2006/10/28(土) 21:36:39 ID:xtWbOPh4
ちょっとjavaプログラミングでわからないことがあるので教えてください。 スレ違いならごめんなさい。 Stringbuffer ques1 = new Stringbuffer(100); Stringbuffer ques2 = new Stringbuffer(100); ques1.append("hoge"); ques2.append("choko"); for(i=1;i<3;i++) System.out.println(ques + "i"); とやれば、hogeとhageガ表示されると思いましたが、このままだと ただの文字列なので、ques1 ques2と表示されるだけです。 なにか、このような方法でques1と2の内容を表示する方法ないですか?
343 :
334 :2006/10/28(土) 21:44:11 ID:doQnvF3Z
ふたたびすいません。ちなみに
>>337 さんの
>で、メインページに表示しているHTMLのURLとコンテンツをPHPの変数に取得したい
>ということか?
>URLが分かれば、file_get_contentsとかcurlでとれるよ
のところで
URLが分からない場合は何か良い方法はないですか^^;
どうやって、メインページに表示してるの?
345 :
nobodyさん :2006/10/28(土) 21:48:20 ID:RGmX0RKo
>>340 xmlだけなんですよね。。なんでだろう
他の解凍ソフトでも試してみます。。
346 :
nobodyさん :2006/10/28(土) 23:17:36 ID:WdiFJULn
$name_a = array('りんご', 'ばなな', 'すいか', 'すいか', 'りんご'); $test_a = array('あか', 'きいろ', 'みどり', 'きいろ', 'あお'); for($loop = 0;$loop < count($name_a);$loop++) { echo $name_a[$loop].'は'.$test_a[$loop].'<br>'; } この場合5通り出力されますがこれを $name_aの中で重複しているものに関しては1つだけを出力し その場合の対となる$test_aからはランダムに選択したいのですが どのようにすれば良いでしょうか? 出力結果の例1 りんごはあか ばななはきいろ すいかはきいろ 出力結果の例2 りんごはあお ばななはきいろ すいかはみどり アドバイス頂けましたら幸いです。
array_unique() 配列から重複した値を削除する array_rand() 配列から一つ以上の要素をランダムに取得する マニュアルのV. 配列関数(array)嫁
348 :
334 :2006/10/28(土) 23:48:12 ID:doQnvF3Z
>>344 えっと、
1.トップのハイパーリンクからリンクしてメインに表示させて
2.メイン内で外部HTMLから更にハイパーリンク
3.ハイパーリンク行えば表示された2回目の外部HTMLの情報を
とりこみたいのですけど^^;
メインページは
<html>
<title>メインページ</title>
<frameset rows="64,*,64">
<frame name="top" scrolling="no" noresize target="contents" src="とっぷ.php">
<frameset cols="150,*">
<frame name="contents" target="main" src="メイン.php">
</frameset>
<frame name="bottom" scrolling="no" noresize target="contents" src="ind4.php">
<noframes>
<body>
<p>このページにはフレームが使用されていますが、お使いのブラウザではサポートされていません。</p>
</body>
</noframes>
</frameset>
</html>
みたいな感じです。
うーむ、また分かりにくいかもしれないですけど><
よろしこです^^;
>>346 $name_a = array('りんご', 'ばなな', 'すいか', 'すいか', 'りんご');
$test_a = array('あか', 'きいろ', 'みどり', 'きいろ', 'あお');
foreach (array_count_values($name_a) as $name => $count) {
$color = $count == 1 ? $test_a[array_search($name, $name_a)] : $test_a[array_rand($test_a)];
echo $name . 'は' . $color . '<br>';
}
350 :
nobodyさん :2006/10/28(土) 23:52:45 ID:WdiFJULn
>>347 それは理解しているのですが
組み合わせる事が出来なく困っています。
どうかヒントだけでもお願いいたします
>>348 全然意味がわからん。そもそも最初の、フレーム、トップ、メインてわけわからん。
せめてフレーム(トップ)、メニュー、コンテンツ(メイン)とかにしてくれ。
352 :
nobodyさん :2006/10/29(日) 00:04:59 ID:EYdNlx59
>>349 ありがとうございます。
出来ました。
$color = $count == 1 ? $test_a[array_search($name, $name_a)] : test_a[array_rand($test_a)];
途中の ?
と :
の意味がわからないのですが解説お願い出来ませんでしょうか?
検索のしようがなく困っています。申し訳ありません。
>>348 >せめてフレーム(トップ)、メニュー、コンテンツ(メイン)とかにしてくれ。
そこも意味がわからないが、
>2.メイン内で外部HTMLから更にハイパーリンク
"から"→"へ"でなくて?
"コンテンツ(メイン)"では、いろいろ他のサイトのコンテンツを表示させて、
裏でそのコンテンツを取得したいということか?
>>352 三項演算子でぐぐれ
頼むから言語リファレンスくらいは全部一度読んでくれ
355 :
334 :2006/10/29(日) 00:28:36 ID:nyCjtOK7
>>351 すんませんm(_'_ )m波平ペコッ修行不足なかぎりです・・・
>>353 そうです!!
裏でコンテンツを取得したいのです!!
何か良い方法ありますでしょうか・・・
356 :
nobodyさん :2006/10/29(日) 00:36:56 ID:EYdNlx59
>>352 ありがとうございます。
勉強不足でした。
>>349 今テストしているのですが
$nameと$colorが対にならないようです。
例えばりんごはきいろなどが出てきてしまいます。
357 :
nobodyさん :2006/10/29(日) 00:55:50 ID:EYdNlx59
$name_a = array('りんご', 'ばなな', 'すいか', 'すいか', 'りんご'); $test_a = array('あか', 'きいろ', 'みどり', 'きいろ', 'あお'); 説明下手ですいません。 この場合 りんごは重複しているので あか or あお のどちらかをランダムで選択 ばななは一つしかないので きいろ すいかは重複しているので みどり or きいろ のどちらかをランダムで選択 このようにしたいのですがどなたかアドバイスお願いします。
358 :
nobodyさん :2006/10/29(日) 01:04:26 ID:bVOhrU5J
マルチスレッドで利用している場合、 flock()の保障は不完全となりますか?
>>357 $name_a = array('りんご', 'ばなな', 'すいか', 'すいか', 'りんご');
$test_a = array('あか', 'きいろ', 'みどり', 'きいろ', 'あお');
foreach (array_count_values($name_a) as $name => $count) {
if ($count == 1) {
$color = $test_a[array_search($name, $name_a)];
} else {
$colors = array_keys($name_a, $name);
$color = $test_a[$colors[array_rand($colors)]];
}
echo $name . 'は' . $color . '<br>';
}
で一応いけると思うけど
果物を連想配列に直すべきだな
>>358 http://jp.php.net/manual/ja/function.flock.php 不完全みたいね
$name_a = array('りんご', 'ばなな', 'すいか', 'すいか', 'りんご'); $test_a = array('あか', 'きいろ', 'みどり', 'きいろ', 'あお'); foreach (array_count_values($name_a) as $name => $count) { $out = array(); foreach (array_keys($name_a, $name) as $name2) { $out[] = $test_a[$name2]; } $color = ($count == 1) ? $out[0] : $out[rand(0, $count-1)]; echo $name . 'は' . $color . '<br>'; }
361 :
nobodyさん :2006/10/29(日) 01:36:21 ID:EYdNlx59
>>358 flockとマルチスレッドは何の関係もないと思うよ。
ユーザ定義のエラーハンドラ関数の中では、require_once()もできないし、 __autoload()も効かないようなんですけど、どうでしょう?
364 :
315 :2006/10/29(日) 02:10:49 ID:???
>>332 まともな回答ありがとう。
セッションで実装はずいぶん前にやってましたが、
URL直リンができないので不便すぎて廃止しました。
今は一応hiddenでやってますが、以前書いたようにフォルダ階層が分かりにくい。
実際アルバイト情報サイトなどではhiddenで持ちまわっているところが多いけれど
(検索結果をブックマークに保存できるため)
yahooがどういう仕組みになっているのかが聞きたかったんですよね。
ソースに直接書く以外たぶんできないとは思いますが、
DBデータの変更の際に修正が大変なんですよね。
あと
>>325 がなんかいってたが、あんたよりできるのは確実だからw
ちなみに俺のメインはC++のWin32ゲームアプリで、WEBアプリケーションに関しては
初心者なみだけど。
気になったことが1つ。
DirectX板はかなりレベルが高いやつが多かったが、WEBアプリは基本的に低いのかな?
連想配列をランダムに全て取り出すのはどうすればよいですか?
366 :
315 :2006/10/29(日) 02:16:42 ID:???
>>322 あとPOSTもセッションと同様の理由で使いにくいですね。
ものによるとは思うけど。
367 :
315 :2006/10/29(日) 02:17:22 ID:???
連想キーと要素との関係を維持しつつ配列をランダムにする もしくは 連想配列をランダムに一つではなく全て取り出すには どうすればよいでしょうか?
369 :
315 :2006/10/29(日) 02:26:50 ID:???
>> 368 PHPマニュアルに shuffle (PHP 3 >= 3.0.8, PHP 4, PHP 5) shuffle -- 配列をシャッフルする 説明 bool shuffle ( array &array ) この関数は、(要素の順番をランダムにするために)配列をシャッフルし ます。 注意: この関数は、 array パラメータの要素に対して新しいキーを割り当てます。その際、単純にキーを並べ替える代わりに、すでに割り当てられている既存のキーを削除してしまいます。 ってあったよ。
>>369 キーを削除するって書いてあったorz
マニュアル探したらありそうな気がするんだけどなぁ
PHPってクラス化されていないから探すのがかなり面倒ではあるね。
371 :
315 :2006/10/29(日) 02:56:01 ID:???
>>368 誰も答えてなかったので作ってみたよ。
一応マニュアル調べてみたが、無いみたい。
function array_sorta(&$data) {
$cnt = count($data);
for ( $i = 0; $i < $cnt; $i++ ) {
$key = array_rand($data);
$data2[$key] = $data[$key];
unset($data[$key]);
}
$data = $data2;
}
以下テストプログラム
$data = array( "a" => "A", "b" => "B", "c" => "C");
print_r($data);
echo "<BR>";
array_sorta($data);
print_r($data);
バグあるかも。
372 :
315 :2006/10/29(日) 02:57:43 ID:???
名前 array_sorta となってたが、やってることshuffleだったw array_shuffle とでもして。
>>364 =
>>315 なにコイツ?
そこまで偉そうな態度で講釈垂れるくらいなら
こんなスレ来ないで自分で考えりゃいいのに。
必死にC++がどうこうとか言ってるあたりが痛い。
374 :
315 :2006/10/29(日) 03:02:31 ID:???
>>373 正直何も答えられないお前のほうが痛いぞ
低脳はだまってろよw
ここはもう少しレベルが高いと思って質問してみただけだ
質問したあと後悔したよ
>>368 $text = array(1,2,3,4,5);
$i = $text;
$i[] = shuffle($i);
$del = array_pop($i);
unset($del);
foreach ($i as $v)
{
echo $v."<br>";
}
377 :
375 :2006/10/29(日) 03:33:24 ID:???
$text = array(1,2,3,4,5);
$i = array_diff($text,array());
$i[] = shuffle($i);
$del = array_pop($i);
unset($del);
foreach ($i as $v)
{
echo $v."<br>";
}
>>375 はphp4用。こちらはphp4と5両方対応。
$text = array("name"=>"山田","age"=>20,"tall"=>180); すまん、訂正 $i = array_diff($text,array()); $i[][] = shuffle($i); $del = array_pop($i); unset($del); foreach ($i as $v) { echo $v."<br>"; }
380 :
375 :2006/10/29(日) 03:39:54 ID:???
2行目コメントアウトするの忘れずに。
381 :
375 :2006/10/29(日) 03:42:40 ID:???
再度確認したらキーが消えてた。 il||li_| ̄|○ il||li
382 :
375 :2006/10/29(日) 03:51:15 ID:???
>>368 uasortの比較関数でランダムに返してやりゃいいんじゃね?
uasort($arr, 'cmp_rand');
function cmp_rand() {
return rand(0, 2) - 1;
}
$r = mt_rand(0, count($array)-1); $i = 0; foreach ($array as $v) { if($i == $r) {echo $v."<br>"; break; } $i++; }
>>363 phpのバージョンとphp.iniを確認汁
しました。
387 :
nobodyさん :2006/10/29(日) 04:59:09 ID:hbSphBwD
PHPのセッションってデフォルトでブラウザ閉じるまで有効になってるはずだよな? 何か時々セッションが切れてしまうんだが・・・ ちなみにバージョンはPHP 5.1.1(Linux)
388 :
nobodyさん :2006/10/29(日) 05:00:45 ID:bPIXuHP3
php5.0.1 Apache2.2.3 を使ってphpを始めた者です。windowsXPです。 sqliteを使いたいのですが、ファイルのオープンの時にエラーが出てしまいます。 Fatal error: Call to undefined function sqlite_open() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\nenpyou\schedule.php on line 2 2行目のコードは、 $db=sqlite_open("schedule.sqlite",0666,$err); です。 php.iniは、 ; Directory in which the loadable extensions (modules) reside. extension_dir = "c:/php/ext" ;extension=php_sockets.dll extension=php_pdo.dll extension=php_sqlite.dll ;extension=php_sybase_ct.dll のように変えています。 初心者なので右も左も分からない状態ですが、よろしくお願いいたします。
389 :
nobodyさん :2006/10/29(日) 05:19:21 ID:hbSphBwD
>>388 undefinedが出てるって事は間違いなくphp.iniの設定が間違ってるな
PHPがお前にsqlite_open()って言う関数がが見つからないよ!って教
えてくれてるんだ
まずapacheはちゃんと再起動したか?
390 :
387 :2006/10/29(日) 06:08:50 ID:hbSphBwD
あ〜・・・色々凄い勘違いしてたみたい・・・ ちょっとまとめて出直してくる
> セッションで実装はずいぶん前にやってましたが、 > URL直リンができないので不便すぎて廃止しました。 > > 今は一応hiddenでやってますが、以前書いたようにフォルダ階層が分かりにくい。 こいつのおおもとの質問を読む限り、 こいつが探しているものは $_SERVER['PATH_INFO'] なのかな、って気がするが。 ただ持って回るのが検索履歴なら直林しなきゃいけない理由もよくわからんし セッションに入れとけばって感じだけど。 携帯かなんかなのかな? あ、セッションIDをURLに入れとくように設定しとけば直林できるんでは
315は「履歴」という日本語の意味を知らないんじゃないか? 履歴とかではなく、単にカテゴリ分けされた「現在地」にあたるものを、ファイルシステムのパスみたいにスラッシュ区切りで表示したいだけだと思われ。 セッションを使う必要すらない。 URLの見た目も階層的にするなら、mod_rewriteで終了。
一意な数を取得したい場合、どうやってますか? カウントファイル用意するか、 SQLでカウンタ用テーブル作成するか、 の方法取ってるんですが、もっとスマートな方法はないでしょうか?
>>393 一意ってのが後にも先にも一意っていうなら
そりゃやっぱどこかに既存値を保存しないとムリあるから
ファイルかDBになるんでないの?
自分でやるならまずその数字の使用目的と生成頻度から
本当に一意である必要があるかを問うとこからはじめる。
>>393 大概のDBには連番発行のための仕組みがあるからそれを使う
396 :
nobodyさん :2006/10/29(日) 12:14:56 ID:XBhnfX09
一意ってのがどんなもんなのかよくわからん 394と同じく使用頻度に重点を置くのが一番かと
397 :
nobodyさん :2006/10/29(日) 13:45:32 ID:c2r4qYBN
すいません、下らなくない質問ですが、本スレがないらしんでここで。 PHP側でHTTPリクエストのリクエスト内容を取得する方法ってありますか? (HTTP 1.0/1.1 のリクエストヘッダーを取得する方法です。)
>>397 下らねえよ
$_SERVER['HTTP_*']
apache_request_headers
nsapi_request_headers
399 :
388 :2006/10/29(日) 14:36:38 ID:Vho0F98z
>>389 レスありがとうございます。
ApacheはRestartしました。
php.iniで、ほかにsqlite_openに関係するところがあるのでしょうか?
それでちゃんとextension_dirにdllがあれば動くはず
apache2.2.3って phpディレクトリにちゃんとphp5apache2_2.dllが入っていることが前提で質問してるんだろうな?
402 :
388 :2006/10/29(日) 17:20:07 ID:t7v+PkcA
>>400 ,401
Cのphpのextに両方のファイルがあります。
php5apache2_2.dllも、phpに入っているのを確認しました。
さっきももう一度パソコン再起動して試してみましたが、同じ症状です。
PHPIniDirは?
って2.2ってPHP対応してなくなかったっか?忘れたけど
ぶっちゃけ、ここにいる回答者ってまともなもの作ったことないべ?
ぼうや、良く気付いたね! その年でそこまで分かるなんて本当に大したもんだよ、うん。
ここのスレはいい人ばかりで大好きです。 ありがとう。
>>402 まさかとは思うが公式版のapacheつかってないだろうな?
410 :
388 :2006/10/29(日) 19:02:32 ID:t7v+PkcA
公式版使ってるなら2.0か1.3にしな。 非公式ぐらい自分で探せないなら公式版つかってたほうが無難。
412 :
388 :2006/10/29(日) 19:20:00 ID:t7v+PkcA
すみません、410の、「簡単なsqlite以外」は、 「phpそれ自体(簡単なphpコード)」という意味です。わかりにくくてすみません。
無理に2.2.3を使う必要はない。やめとき
すいません。教えてください。
windows環境でPHP5.1.6を動かしてます。
mysqliを試してみようと思ったのですが、上手く動きません。
とりあえずphp.iniの
;extension=php_mysqli.dll
のセミコロンを外して再起動したんですが全く無反応です。
Apacheのエラーログに以下のようなメッセージが書かれてました。
PHP Warning: PHP Startup: Unable to load dynamic library 'c:\\php\\ext\\php_mysqli.dll'
このサイト見てみたら
ttp://php.s3.to/man/install.windows.extensions.html libmysqli.dllが必要(バンドル)と書いてありますが、そのようなファイルは見当たりませんでした。
どうしたらいいでしょうか?お願いします
mysqlインストールしてるか?
>>414 ・extension_dirを設定しているか
・extension_dirで設定したディレクトリにdllがあるか
417 :
388 :2006/10/29(日) 21:47:30 ID:uuNUd04h
apache2.0.59を入れてみたのですが・・・ 同じメッセージが出てしまいます。 httpd.confは、 LoadModule phhp5_module c:/php/php5apache2.dll AddDefaultCharset none AddType application/x-httpd-php .php の設定にしています。
phhp
419 :
のぐち :2006/10/29(日) 22:02:14 ID:???
なおってなかったら とりあえずもう一度apacheとphpをいれなおせ。 いれなおしたらレスしれ
420 :
414 :2006/10/29(日) 22:08:57 ID:C/SNmSN3
>>415 今まで通常のmysql_connectで繋いでたんでMySQL側の原因ではないと思います。
>>416 extension_dir = "c:\php\ext\"
としてあって同ディレクトリにphp_mysqli.dllが置いてあります。
libmysqli.dllはみんな存在してないんですか?
libmysql.dllはあるんですが・・・。
421 :
nobodyさん :2006/10/29(日) 22:33:18 ID:0I0yeegj
ダウンロードカウンタの仕組みについて質問です。 リンクをクリックしてファイルをダウンロードさせたいのですが、 ファイルのリンクを踏んだらカウントするって考えでよろしいのでしょうか? クライアントが保存をキャンセルした場合もカウントされるものですよね?
>>388 403で出てるけど、php.iniの場所は確認した?
PHPのインストールディレクトリに入ってるだけじゃだめだよ(PATHが通っているかどうかは無関係)。
・C:\WINDOWSに入れる
・httpd.confでPhpIniDirを設定する
のどちらかをやればおk。
424 :
414 :2006/10/29(日) 23:10:30 ID:C/SNmSN3
>>423 はい。何度も再起動しました。
Apacheのエラーログに
PHP Warning: PHP Startup: Unable to load dynamic library
'c:\\php\\ext\\php_mysqli.dll' - \x8ew\x92\xe8\x82\xb3\・・・
(中略)
in Unknown on line 0
と出てます。あきらめようかなorz
pdo_mysqlですか。
ちょっと勉強してみます。
PHPを最近使い始めた初心者です。(C/C++経験はあり) PHPの関数・クラス定義・変数のスコープについて悩んでいます。 関数やクラスをファイルに分けて定義し、include/requireした場合に名前衝突を起こす問題を極力避けたいと思っています。 現状では関数/変数をクラス内static定義にする事によって極力名前衝突を起こさないようにしています。 (C++でのnamespase的に使用しています。PHP5で実装予定であったものがされなかったとかなんとか・・・) こうしてある程度クラスに名前を閉じ込めたものの、クラス定義名の衝突だけは回避出来ずに困っています。 今作成している物に後からモジュール的にコードを追加して行く予定の為どうしても名前衝突問題を回避しなければ・・・ 構成的に以下のような物を予定しているます。 [メインphp] |---[モジュールAphp] |---[モジュールBphp] |---[モジュールCphp] |---[追加予定モジュールXphp] |---[追加予定モジュールXphp] ・・・・ メインphpが上から順番にモジュールPHPを読み込んで行くような構成です。 このような構成で、[モジュールXphp]各々がクラス定義phpファイルをinclude/requireすると 自身のモジュールでだけ使用する比較的どうでも良い様な物までグローバルスコープに名前が追加されていってしまうようで、 後に読み込まれるモジュール程名前の幅が狭まっていってしまいます・・・ 関数内でクラス定義をinclude/requireしたりと色々試したのですが、どうしても定義はグローバルになってしまうようです。 現状ではモジュールそれぞれがクラス名にプレフィクスを付ける規約みたいな物を作る方法しか思いついていません。 class ModuleA_class1{ } class ModuleA_class2{ } class ModuleB_class1{ } class ModuleB_class2{ } なにか良い方法はありませんでしょうか(´・ω・`)
>>424 なんか回答とその対応が混乱してるように見えるんだけど、
>>423 にあるようにlibmysqli.dllが必要なのは5.0.2まで。
だからそもそも
>>414 の
>とりあえずphp.iniの
>;extension=php_mysqli.dll
>のセミコロンを外して再起動したんですが全く無反応です。
これ自体が間違ってると思うんだがどうよ?
extensionに必要なのはlibmysql.dllだけじゃないの?
>>425 はっきり言おう、ない
クラス名に一意のprefixをつけるくらいしかない
メジャーなPHPフレームワークも大概そうしている
例えばZend Frameworkなら全クラスに
prefixで「Zend_」がついてその後にモジュール名がくる
428 :
425 :2006/10/30(月) 01:15:22 ID:???
>>427 情報ありがとうございます。
クラス(関数/変数)にprefixを付ける制限的規約を設けることにします。
おかげさまで気持ちがスッキリ割り切る事が出来ました。
これで思う存分コードを書きまくる事が出来ます(`・ω・´)
429 :
はじめまして :2006/10/30(月) 02:33:13 ID:zWlXBO6n
すみません。 ある文字列をmb_convert_encodingを使いEUC-JPに変換したいのですが、 何を指定しても常にASCIIになります。 なにか他に設定あるでしょうか?よろしくお願いいたします。 ソース:SJIS 入力値(test):"あああ" mb_detect_encoding($_POST['test'])で取れる値:SJIS $strEuc = mb_convert_encoding($_POST['test'], "EUC-JP", "SJIS");を実行 ※ちなみに変換前のコードのとこをautoやほかのにしてもだめでした・・・ mb_detect_encoding($strEuc)で取れる値:ASCII
php.iniにmbstringの項目あるじゃん、書け
>>429 実際は変換結果はどうなってんのよ。出力して確認したのか?
「変換できてない」のと「detectでEUCが判別できない」のとでは
全然意味が違うし、どっちの可能性が高いかったらdetectの方が怪しい。
>>429 mb_detect_encodingは短い文字列に対しては、期待通りの結果にならないこともあるので(内部のバイナリレベルでは人間にもコンピュータにも区別つかなかいこともあるし)、基本的に信頼をしたらだめ。
飽くまで補助的な目的に使う。
mb_convert_encodingは第2引数と第3引数が正しければ、信頼はできる(内部にバグがない限りは)。
>>429 自分でコンバート処理かけば解決。
世の中にはメールアドレスの正規表現を書いたものすごい人もいるんだから
やってみればいいじゃん
PerlならともかくPHPでそんな処理書いたら遅すぎて大変な気もするけどな。
んなこたあねえよ
文字コードの変換って、基本的にテーブルを参照しながら端から端まで1方向にスキャンするだけだから、PHPで書いてもそれほど遅くはならないと思うよ。 まあ実装しても車輪の再開発にしかならないけど。
437 :
388 :2006/10/30(月) 05:49:57 ID:QeG77sZU
>>419 ,422
Apache2.0.53とphp5.0.4を入れ直したら、
解決しました。
このバージョンでは、php.iniでsqliteの設定をしなくても
大丈夫でした。
ご協力下さった皆様、本当にありがとうございました。
変数を使ってincludeするファイル名を指定する場合、どうすればいいですか? 例えば、 $mode = "text" の時に"file_text.inc"をincludeしたいのですが、どうすればいいのでしょうか?
いえいえ、朝飯前ですよ。こまったことがればまた質問してください。
440 :
438 :2006/10/30(月) 06:18:32 ID:CYbz73Go
すみません、IDは表示しなければいけなかったのですね
>>438 何がわからないんだ・・・?
if ($mode == "text") {
include "file_text.inc";
}
442 :
438 :2006/10/30(月) 06:27:12 ID:CYbz73Go
>>441 回答ありがとうございます。
説明不足でスミマセン、例ではtextだけを上げましたがtexta,textb,textc・・・という風に生成されていく場合です。
443 :
438 :2006/10/30(月) 06:28:56 ID:???
解決しますた。ご協力ありがとうございますた。
#switchつかったほうがいいけどif文でやるなら。 if ($mode == $texta) { include "file_text.inc"; } elseif { #処理2 } elseif { 省略 ていうか最低限の勉強しないで聞くのは学校ぐらいにしておけクズ。
>>texta,textb,textc・・・という風に生成されていく場合です。
↑
>>444 のコードは自分でいじって動かしてみろ。
連想配列の勉強すればわかることだから入門書嫁ボンクラ。
446 :
438 :2006/10/30(月) 06:40:13 ID:CYbz73Go
いえ、そういう意味ではなく変数をファイル名に含んだファイルを呼び出したいんです。 444のコ−ドだとtextxが増えた場合にelseifを自分で増やさなければならないのですが
最初から最後まで意味のわからない質問だったなwww
>>446 連想配列をと変数と『.=』を使いこなせば解決します。
何でも聞くんじゃなくて自分なりにためしてみて、
それでも動かなかったらここにコードを書け。
だから質問もロクにできないグズなんだよおまえは
include "file_".$text.".inc"; include "file_{$text}.inc"; とかってことじゃないの。 ↑であってるならば、俺は最初から質問の意味理解できたけど。
451 :
450 :2006/10/30(月) 06:59:50 ID:???
あぁ、$textじゃなくて$modeか。 一気にレスついたから、全部自演に見える。
まあ解決したらしいので、心機一転、次へ行きましょうか。
この板のデータおかしくね? このスレさっきまで下の方にあったのに、すこし上にあがってる。 バグ?
>>453 その「さっき」っていう時点でスレ一覧をリロードしてなかっただけじゃね?
今のところ、ageられた時間的には
10/30(月) 06:40:13 【PHP】下らねぇ質問はここに書き込みやがれ 31
10/30(月) 03:38:12 IDにPerlが出たら神!PHPが出たらシメジ Part24
10/30(月) 03:37:15 金出すから改造してよvol.3
10/30(月) 02:44:37 SNS作ってみよう
10/30(月) 02:42:36 OpenPNE その4
10/30(月) 01:09:43 【質問】ASP.NETスレ Part3【議論】
って感じで、特におかしなとこはなさげ。
やっぱり勘違いですね、失礼いたしました。
456 :
nobodyさん :2006/10/30(月) 11:25:37 ID:Ji6bSWEi
1行で書いたほうがスッキリしていいのかな?なんて思い、 三項演算子で条件文を書いて、 現役PGの知り合いに見せたら使わないほうがいいと言われました。 理由は聞かなかったのですが、やはり見づらいからという理由なんでしょうか? 一応個人で使う分なので、別の理由かもしれませんが。 もしかしたらパフォーマンス面かな?と思ったので計測したいのですが、 計測の仕方がわかりません・・・ スクリプトの最初と最後でmicrotimeをとって、その差を求めればいいのでしょうか?
うん、意味わからんから帰れ。
>>457 煽るだけなら半年ROMってろ。
こんなんがいるから低レベル云々言われるんだよな('A`)
と、レス忘れた。
>>456 相手がプロなら、コーディング規約に沿った複数人プロジェクトもやってるはず。
となると、仕事柄見やすいソースを意識するんじゃないかと思う。
わざわざ見にくいソースを書く必要がないっていう考えでしょ。
個人で作ってると言っても、聞いてる相手に見せてるんだから、
見やすいソースを渡すべきだと思う。
ベンチマークはPEARのBenchmark
質問をでっちあげてくるやつが増え出したのはいつの日からであっただろうか@chirashi.no.ura
461 :
nobodyさん :2006/10/30(月) 12:04:41 ID:bBR787Fl
認証が必要なページで、CSVをダウンロードしたいです。
認証部分はPEAR::HTTP_Clientを使ってできました。
ですが、取得したHeaderから、ダウンロードしたいファイル名を取り出し、
ローカルに保存するやり方がわかりません。
よろしくお願いします。以下ソースとヘッダーです。
$target_url = "
https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/aiuro.php ";
$client =& new HTTP_Client( $reqParams);
$client->post( $login_url, $login_params);
$client->get( $target_url);
$response = $client->currentResponse();
print_r( $response);
Array
(
[code] => 200
[headers] => Array
(
[date] => Mon, 30 Oct 2006 02:31:03 GMT
[server] => Apache
[cache-control] => private, max-age=10800, pre-check=10800
[last-modified] => Wed, 20 Sep 2006 01:47:25 GMT
[content-disposition] => attachment; filename=item_20061030-113103.csv
[connection] => close
[transfer-encoding] => chunked
[content-type] => application/octet-stream; name=item_20061030-113103.csv //このファイルを保存したい。
)
[body] =>
)
>>461 保存したいも何も、bodyが空じゃん。
いるよね三項演算子嫌いな人。 ていうか、「そんなもの知らない」って人も結構いるし。 とりあえずPHPは、どんなレベルの奴がかかわってくるかわからんので、 素人向けの一番簡単な入門書で紹介してるレベルの内容で書き換え可能なものは 原則的に素人向けの書き方しといたほうがいいんじゃないかって気がする。 経営的な言い方すると、PGのコストを最小にしてもトラブルが少ないように。 もちろん経営的に全然逆の考え方する人もいるだろうけど。
464 :
461 :2006/10/30(月) 13:05:21 ID:bBR787Fl
>>462 このページは、通常のブラウザで見ると、
CSVファイルのダウンロードページなので、Bodyは無いのだと想います。
>>456 そもそもどういうのを三項演算子で書き直したんだ。
三項演算子は「条件で変わる代入式」をすっきり書くための演算子で
条件文を1行化するために用いるようなものじゃないよ?
意図の見えないコードは当然読みづらくなるし保守が難しくなるので
そういう意味で誤った使い方をしてるなら避けた方がいい。
ただ、それとは別にCに慣れない人や不勉強な人で
三項演算子を見慣れなくて敬遠してるだけの人も多い。
そういう人が触ることも考慮してコーディング規約なんかで
禁止してる会社も多々あるが、個人的にはどうかと思う。
なお、パフォーマンス的には何の問題もない。
>>464 は?BODYってファイル本体になるはずでしょ。
467 :
461 :2006/10/30(月) 13:31:25 ID:bBR787Fl
>>467 うん。だからこの場合、BODYはファイルそのものになるはずでしょ。
Content-Lengthが返ってないせいで取得できてないのか?
469 :
nobodyさん :2006/10/30(月) 13:59:27 ID:rTiz0489
俺、三項演算子よく使うなぁ・・・ 単に if($_POST['checkbox']){ $checked = 'checked'; }else{ $checked = false; } ってだけなら、三項演算子で書いた方がすっきりするから
470 :
nobodyさん :2006/10/30(月) 14:11:46 ID:mf7qX0dx
mb_send_mail()を使ってメールを送信するプログラムを作成しているのですが、 本文に指定した文字列の最後に改行が2つ付いてしまうのですが、 これを回避する方法ってありますか?
俺は三項演算子が大嫌い。 見通しも悪いし、別にパフォーマンスに影響ないし。 「すっきりコンパクト=見通しが良い」ではないよ。 ソースってのはいわば設計図だからな。 シンプルすぎる設計図は、建物の詳細が見えにくい。
473 :
461 :2006/10/30(月) 14:42:44 ID:bBR787Fl
>>473 俺のとこでは$response['body']に4MくらいのMP3のバイナリデータがばっちし入ってたけどな。
普通のHTMLとかは取得できるの?
>>471 姉歯物件は三項演算子で出来ているんだよ
おまえらの三項演算子雑感は聞いてねーんだよ
477 :
461 :2006/10/30(月) 16:23:10 ID:bBR787Fl
>>474 ありがとうございます!
自己解決しました。
HTTP_Clientをインストールしなおしたらいけました。
PEARってコピーするだけじゃなくてインストール作業が要るの?
include_pathが通ってるところにコピーするだけでOK
PHPは、CR+LFで保存すべきですか?
いいえ。
>>479 依存関係のことまで考えたらpearコマンドが断然楽じゃね?
483 :
nobodyさん :2006/10/30(月) 20:51:02 ID:bBR787Fl
HTTP_Clientを使ってファイルをアップロードする方法を教えてくれ。 $target_url = "ターゲットURL"; $client =& new HTTP_Client( $reqParams); $updata=array( "filename.csv", "filename.csv"); $client->post( $login_url, '', '', $updata); Warning: Missing argument 2 for addfile() in /インクルードパス/HTTP/Request.php on line 525 何卒お願い申し上げます・・・・・
>>483 $updata = array(array("filename.csv", "filename.csv"));
じゃないだろうか
後1つ目の値はフォームのエレメント名
ソースチラ見で書いてるんで外してたらすまん
アクセスログの分け方について質問です。 日別ログや週別ログ、月別ログとして管理画面から閲覧できるものがありますが、 そういうのはログファイルを日、週、月で別々に記録しているのでしょうか?
486 :
nobody :2006/10/30(月) 21:51:21 ID:LQ50Lk3U
PHPファイルと同じディレクトリにある、テキストファイルを読み出して、 文章中に含まれるカタカナの語句を全て抜き出し、コンマ区切りで別の テキストファイルに書き出すということをしたいのですが、ちょっと 手詰まりな状態です。どうか、ご教授願えませんか?
Aサーバ(Linux)・Bサーバ(UNIX)という環境があります。 AサーバのPHPスクリプトでBサーバに接続し、 Bサーバ上でシェルコマンドを打って、その結果をAサーバに 返す事は可能でしょうか。 例えば、AサーバのPHPで、ls -laというコマンドを、 Bサーバで打って、その結果をAサーバのPHPスクリプトで 表示させたいと思っています。 どなたかご助言お願い致します<(_ _)>
>>486 fopen
正規表現でカナの抜き出し→配列に保管
配列をファイルに書き込む
これでコードかいて動かなかったら質問しろ。
>>485 そりゃ作成者に聞かないとわからんが
たぶんログを表示するときに生データから欲しいログだけ抽出してんじゃないの?
>>486 今どこまでできてんの?
>>487 やればいいじゃん。試してできなかったら質問しろや基地外。
>>485 日毎のログがあれば集計して週のデータも月のデータも出せるでしょ
>>486 何で手詰まりなのか
>>487 Bでシェルから結果を受け取るスクリプトを置いて
AからBのそのスクリプトのURLをリクエストして
レスポンスを取得するようにすればいい
492 :
486 :2006/10/30(月) 23:41:30 ID:LQ50Lk3U
>>488 ,489
いまのところ、
$text=fopen("bunsyou.txt","r");
$text2=fread($text,filesize("bunsyou.txt"));
//echo "$text2<br>\n";
for($i=1; i<=10; i++){
if(eregi("[ア-ン]",$text2));
}
fclose($text);
こんな感じです。正規表現にマッチした語句の抜き出し方が、よく
わからないのでして。。。お教えいただければ、ありがたいです。
file関数使ったほうがいいんじゃないか。
494 :
487 :2006/10/30(月) 23:45:47 ID:???
>>491 レスありがとうございます<(_ _)>
> Bでシェルから結果を受け取るスクリプトを置いて
重ね重ね申し訳ありませんが、↑ってどういう風に
書けばいいのでしょうか。
関数名だけでもヒントを頂けないでしょうか。
それにforなんて使うな。foreach使えと何度i(ry
> Bでシェルから結果を受け取るスクリプトを置いて B.phpの$text="hello"をA.phpにて受け取るスクリプトを書ければわかりやすいだろう。
$text ="あいうえおアイウエオアさしすせそ"; echo "$text<br>"; if(mb_ereg("[ア-ン]+[アーン]+", $text,$str)) { echo $str; } あとは自分で調べろ、
498 :
483 :2006/10/31(火) 00:07:20 ID:lBCw+Epv
>>484 おおお!ありがとうございます!
明日試してみます。
PEARのドキュメントってどうもサンプルスクリプトがなくて
使い方がいまいち分からんと思っているのはオレだけか?
500 :
498 :2006/10/31(火) 00:48:55 ID:lBCw+Epv
501 :
487 :2006/10/31(火) 01:03:18 ID:???
>>496 ありがとうございます!試行錯誤頑張ります!
502 :
nobodyさん :2006/10/31(火) 01:05:43 ID:6V2Mcmc8
カウンターなどによる二重カウントを防止する関数を作りたいのですが if文でチェックする場合、 クライアントのIPを取得して、それを何と比較したらいいのでしょうか? コードは自力で書きますので、どなたかヒントだけご教授お願いいたします。
以前にアクセスのあったクライアントのIPと比較するに決まってるべさ
>>492 mb_eregの方がいいんじゃないかな?
>>497 それだと半角カナが先に来ないといけないし全角はア、ー、ンの3文字だけ
[ア-ンア-ン]にしても半角のァィゥェォとか全角のァヴヵヶとかがマッチしない
$text ="あいうえおアイウァィゥェォガギグパピプヴァヶさしすせそ";
echo "$text<br>";
mb_regex_encoding("sjis");
if(mb_ereg("[ヲ-゚ァ-ヶ]+", $text,$str)) {
var_dump($str);
}
皆真面目なのに、ほのかにえっちなスレですね
509 :
nobodyさん :2006/10/31(火) 08:04:06 ID:5uTR2Wor
$file = file("list.txt"); で配列に読み込んでprint_r($file)で確認すると、 インデックス0($file[0])には一行目が、インデックス1には2行目が・・(省略)格納されてしまいます。 自分がやりたいのは $file[0][0]で一行目の一つ目のデータを見たいのですがうまくいきません。 どなたかご教授お願いいたします。 list.txtの中身 green,yellow,blue,red black,red,white,orange
>>509 カンマ区切りでデータを区切りたいならそう書かないと。
PHPは表計算ソフトじゃないんだからそんなの標準でやるわけないじゃん。
すでに読み込んだデータをカンマ区切りで分解する方法と、
読み込みをカンマ区切りで行う方法とがある。
・後から区切る方法
$file = file("list.txt");
$data = explode(",", rtrim($file[0]));
echo $data[0];
・読み込み時に区切る方法
$fp = fopen("lit.tst", "r");
$file = array();
while($line = fgetcsv($fp, 1024)) {
$file[] = $line;
}
fclose($fp);
echo $file[0][0];
$fp = fopen("test.csv", "r"); $i = 0; while (($line = fgetcsv($fp, 1000, ',')) !== FALSE) { $lines[$i] = $line; $i++; } fclose($fp); $lines[0][0]みたいにね 時間ないから動作確認してないけど んじゃ
513 :
486 :2006/10/31(火) 09:34:28 ID:F9LjnucE
みなさまからのアドバイスを手がかりにとりあえず やってみます。ありがとうございました。
preg_match_all かな
マルチ氏ね
>>514 こっちの方が簡単そう。
$file = file_get_contents("ファイル名");
$file = mb_ereg_replace('[^ヲ-゚ァ-ヶ]+', ',', $file);
echo preg_replace('/^,|,$/', '', $file);
517 :
nobodyさん :2006/10/31(火) 10:25:28 ID:kTefGQaT
表示されるHtmlの文字コードをEUC-JPで表示する場合、 文字化けさせないようにするためには phpの中身(echoとかで表示される日本語)もEUC-JPで書かなければならないんですよね?
ファイルを保存するときに文字コードをEUC-JPで保存したらいいよ。
>>517 echoの前にmb_convert_encodingで文字コード変換をかけるとか、
出力データの定義だけEUCにしとくとかでも文字化けはしないけど
そんな手間をかけるくらいならEUCでソース書いた方が早いかもね。
個人的には出力データがソース中にあること自体どうかと思うけど。
520 :
nobodyさん :2006/10/31(火) 11:07:31 ID:bXmcDE+8
教えてください。 1)フレーム内にあるページでSSLにするとセッション変数が引き継げないのはどうしてなのでしょう? 2)actionでSSLのURIを指定し、methodにPOSTを指定しても、 GETを指定した時のように、アドレスに引数が表示されるのはどうでしてなのでしょうか? ご存知の方尾根逢いいたします。
521 :
nobodyさん :2006/10/31(火) 11:32:07 ID:F9LjnucE
関数の"mb_internal_encoding" 内部文字エンコーディングの 設定/取得とありますが、内部文字エンコーディングって なんでしょうか? あと、 mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); このように用いられている例があるのですが、どんな意味があるん でしょうか?
なんか「さすがくだ質!」ってくらいくだらない質問が投下されてるな
ファイル中で定義されたクラスのみ 配列で出力してくれる関数はありませんか? get_declared_classesを使ったら、 すごいたくさんクラスが出てきて困っています。
524 :
483 :2006/10/31(火) 13:20:33 ID:tsMd/rxy
525 :
nobodyさん :2006/10/31(火) 13:21:46 ID:KRBx0YqF
こういう事って出来ないんですかね… class hoge{ function foo($match){ return "123"; } function bar($match){ return "abc"; } } $before = array( "[a-z]+", "[0-9]+" ); echo preg_replace_callback($before, array(array("hoge", "foo"), array("hoge, bar")), "abc123");
>>523 この関数は、カレントのスクリプトで宣言されたクラスの名前の配列を 返します。
って書いてあるけど。
すいません。PHPからLinuxのシステムへsambaユーザーの追加を 行いたいのですが、パスワード入力の部分で対話になってしまい これをどの様に処理していいのか解らず、どなたかご存知の方 おりましたらアドバイス頂けると助かります。(>_<;
>>527 expect が使えるのならそれを使う
php 側は expect コマンドを使ったシェルスクリプトを実行するようにする
expect が使えないのなら、あきらめたほうがいいかも
>>528 有り難う御座います。調べててそこまでは辿り着きコンパイルし直して
有効にはなったんですが、peclでモジュールダウンロードしようとする
とlibexpectが無いと言われてしまい、libexpect探してるんですがどこ
に落ちてるか解らないス…orz
#PHPのインストール
version : php-4.4.4
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-versioning \
--enable-mbstring \
--with-pgsql=/usr/local/pgsql \
--enable-zend-multibyte \
--with-expect=./ext
#pecl install expect-0.2.2
〜
checking for expect support... yes, shared
configure: error: expect extension requires libexpect version >= 5.43.0
ERROR: `/tmp/tmpUKzwZQ/expect-0.2.2/configure' failed
530 :
527 :2006/10/31(火) 14:59:00 ID:???
>>528 >expect が使えないのなら、あきらめたほうがいいかも
ふぉッこれ入らなかったら厳しいんですね…(・ω・;…
やったことないんでダメかもしらんけど、 proc_open()ってのはそういうケースじゃ使えないの?
>>529 メッセージから察するにlibexpectがないんじゃなくて
libexpectのバージョンが古いんじゃないかな
aptとかrpmでexpectをアップグレードするとか
^M(Ctrl+V, Ctrl+M) を str_replace で置換(削除)したいんですが、 ^Mをどうやって指定すればいいでしょうか?
534 :
527 :2006/10/31(火) 15:52:36 ID:???
皆さん有り難う御座います。
>>531 ザッとマニュアル見てみたんですが、ちょっと後ほど試してみます。
>>532 ソースからインストールする癖がついててすっかりそうゆう便利な
物の存在を忘れていました。早速実行してみましたが、やっぱ駄目
ポでした。。。
yum install-expect
expect-5.42.1-1.i386.rpm 100% |=========================| 13 kb
アップデートのものが古いようです。orz...
>libexpect version >= 5.43.0
はぁ…よく解らない…
とりあえず引き続き調べて何かわかったら報告しまつ。(・ω・;
ちなみにOSはCentOS4.4です。
>>527 >>528 の方法は bash とかのシェルスクリプトを使って
それを shell_exec() で実行するという意味だと思うぞ
proc_open()でいけそうな気もする
>>534 expectの5.43.0が結構新しいから5.43.0用のrpmがまだstableじゃないんだろう
unstableな最新のrpm探して取ってくるかソースから自前でexpect入れるか
そういう作業に慣れてないなら
proc_open()でできるかどうかから調べた方がいいかも
538 :
nobodyさん :2006/10/31(火) 18:52:52 ID:o5P7BR6p
アップロードしたmp3ファイルのIDタグの内容を取得する方法ってありますか?
541 :
nobodyさん :2006/10/31(火) 21:57:29 ID:aqfpYPvu
アクセスログを記録したいのですが、ログに記録する時刻は秒単位まで記録するのが妥当でしょうか? 秒まで記録することは精度に信頼できるものか疑問でございます。 どなたかアドバイスお願いいたします。
>>541 何が言いたいのかよく分からん。
普通ずれないと思うけど、仮に2〜3秒ずれたとしてもそれで何か問題が?
精度に信頼っていうのが良くわからんけど 別に記録するだけ記録してもいいんじゃない? データベースで時間管理するなら秒まで記録するはず
544 :
541 :2006/10/31(火) 22:19:53 ID:???
一日のログ数によってお金がかわってしまうので精度をきちんとしたいと思いました。 UNIXタイムで記録するのとY/m/d H:i;s形式どちらが妥当でしょうか? 二つとも記録するのは無駄ですよね?
ようわからんが、Unix Time Stampでもっとけば、Y/m/d H:i;s形式に変換できるでしょ
>>544 どっちでやっても相互に変換できるし・・やっぱり何がしたいのか(ry
まぁ、鯖の時計はちゃんと合わせとけよ
ログファイルの容量が問題になるほど切迫しているわけでもないなら 両方やっとけばいいがな(´・ω・`)
>>541 >>544 「妥当」というのは目的に合致しているかで判断される。
キミの質問にはその「目的」が書かれていないので判断のしようがない。
549 :
nobodyさん :2006/10/31(火) 22:54:25 ID:Ch7IBLha
テーブル1 ボタンID 1,2,3,4,5,6,7,8,9,10 テーブル2 使用許可されたボタンID 1,2,3,4,5,6,7 テーブル3 user ボタンID 1 1 1 2 1 3 1 9 2 1 2 2 3 1 この三つのテーブルから、テーブル1と2を比較し、1〜7までグループ的に使用許可 その後、ユーザーのレコードから使用を認めるようなものが作りたいのです。(ユーザー1なら、ボタン1、2、3。ユーザー3ならボタン1のみなど) $search = strstr ($table1, $buttonID); 一生懸命考えてこんなんでましたが、もっとスマートに出来ないでしょうか? MySQLでも上手い事出来る気がしないでもないのです… どなたかエロイ人へるぷみ〜
テーブルってDB?
551 :
541 :2006/10/31(火) 22:59:30 ID:???
失礼いたしました、最初にちゃんと説明するべきですね。 あるページのアクセスログを一日単位で集計して、 そのアクセス数のよって企業からお金を頂く仕組みでございます。 ですので、23:59から0:00の間がきっちりやりたいと思っております。 アクセス数を日別に集計したファイルと、アクセスログを提出するのですが、 秒までいれるべきか迷ってしまいました。 主な目的は、一日のアクセス数を集計することと、 1時間単位のアクセス数を調べるのが目的です。
553 :
549 :2006/10/31(火) 23:02:08 ID:???
一応、課題です。いけませんか?
秒までもってればいいじゃん。何を迷う?何か制限でもあるのか? それよりも、サーバの時間を正確に保持するほうが大切じゃないの
>>553 普通、宿題というものは自力でやるもんだ(´・ω・)
>>551 何がそんなに問題なのかが分からない。
時刻を保存した場合、ログの保存にもたついたら31日のログファイルに
30日23時59分のデータが混じる事はあるかも知れんが、
曜日的なバイアスを考慮しないなら期待値は
30日のログファイルに29日のデータが混じるのとそう変わらん。
つまり厳密ではないかも知れないがそこまで深刻な違いも出ない。
1〜2件アクセス数が違ったくらいで動く金額にそんなに大きな違いが?
>>553 宿題は悩みながら自分でやるから意味がある。
他人に投げた時点でお前の道は絶たれることになる。
>>551 お前そんなレベルで金をとったら詐欺に近いよ。
っていうかそもそもアクセスログの件数で金額が決まる仕事って、なんだよそれ。ありえない。
558 :
541 :2006/10/31(火) 23:23:03 ID:???
シビアなんです、上司が。 この部分のコードを参照していただきたいのですが、 1行目の処理が23:59:59で 3行目の処理が0:00の場合、 日付、データは23:59:59として書き込まれるのでしょうか? それとも0:00として書き込まれるのでしょうか? $string =.date("Y/m/d,G:i:s") flock($file,LOCK_EX); fputs($file,$string);
$stringは23:59:59なんだから当然23:59:59と書き込まれる。 ただし$fileが23:59:59に正しく対応したものであるかどうかは別の問題だな。
>>541 Webでのアクセスの場合、通信経路によって2秒や3秒ずれることはあるわけで、
結局、取引先に通知すべきなのはログとしてカウントされた時刻でしかない。
どこで線引きをするかを指定しされているわけでなく、どうしても気になるなら先方に聞け。
>>558 前者。
$stringに格納した値が、ある時は23:59:59またある時は0:00 またある時は片目の運転手またある時は品好きのキザな紳士になってたら困るっちゅーねん
シビアてログに書き込んだ瞬間の時間の正確さなんて後からどうやって判断するんだ サーバの時計あわせだけ出来てれば問題なしとするしかないだろ そもそも最初に秒単位まで記録するかどうかを質問してるけど、分単位で記録しても仕様として通るような上司がシビアとかアフォか 適当に大丈夫ですって言いくるめとけばいいだろ
563 :
560 :2006/10/31(火) 23:34:50 ID:???
ちなみに、apacheがアクセスがあったとして扱う時刻は $_SERVER["REQUEST_TIME"] に格納されている。
564 :
541 :2006/10/31(火) 23:40:17 ID:???
一応、テストコード書いて試してみました。 当方の環境では時間差でdate()の中身は変わりませんでした。 $time =date("Y/m/d G:i:s"); echo $time; for($i=0;$i<10000000000;$i++){ echo "a"; } echo "<hr>"; echo $time;
565 :
nobodyさん :2006/10/31(火) 23:42:51 ID:Ch7IBLha
>553 うはw なりすましかよw まぁ、array_diff( )を発見したので、これで出来るかなぁ。 ちなみに宿題ちゃいますw 知り合いの会社用ですお
566 :
541 :2006/10/31(火) 23:44:43 ID:???
>>563 php5.1から使えるのですね、勉強になりました。
現在php4.4.3をしておりますので、
近いうち5.1にバージョンアップする予定なので利用させていただきます。
>>564 ×当方の環境では時間差でdate()の中身は変わりませんでした。
○当方の環境では時間差で$timeの中身は変わりませんでした。
あと、そのコードだとたとえ最適化が働くようなコンパイラであったとしても、
2行目で$timeを参照しているので、少なくとも2行目で$timeの中身は(通常なら)確定する。
もし、そうでなければ$timeの値が操作なしで変わってしまうことになる。
不確定性理論みたいなもんだ。
>>541 一日ズレたって、次の日のカウントに入るだけじゃないの?そんな深刻な問題かね?
一時間ごとにも集計するなら、その一時間ごとにもズレが出るってことだよねw
ていうかさ、わざわざログファイルを分けないで単一のファイルなりに保存しておいて 日付が変わった後で該当するデータをまとめて抜き出せばずれないよね(´・ω・) 手間がかかる割に無意味だけど。
秒単位の記録というよりは時計の精度の話じゃん
本屋のPHP参考書みてもfsockopenに関する説明が ほとんど無いのはなんで?
>>541 時計の精度とか、どの時点でアクセスされたと見なすかってのはクライアントと話し合って決める内容だろ
まぁ、マイクロ秒単位の誤差まで問題にされたら困る
>>571 ぷろぐらむ組むのは初めてです。って人に教えるには少々メンドイしページ数が増えちゃうからじゃね?
使うにしてもPHPマニュアルよりRFCの方が役立つしねぇ
>>571 PHPがWeb用途に重きを置いていて使う人もそれを求めてるから
直接ソケットいじくらず用途に応じたラップしてあるライブラリ使えってこった
>>566 どっちにしろ、通常はプログラム先頭でdate()の値を変数に取得しとけば問題にならない。
それすら分からないド素人レベルで金取るなよ詐欺師。
>>571 ソケット通信プログラミングの専門書はC用の既存の本が
いっぱいあって関数は互換があるからそれ読めばいいし、
逆にそれ読まずに使いこなすのはかなり無謀だし、
PHPのマニュアルに混ぜると半分がソケットの話になるか
下手するとそっちの方が分量がでかくなるんで無理がある。
576 :
571 :2006/11/01(水) 08:04:15 ID:???
>>575 おいおい、おれは素人じゃねえよ。
そういう本がないから聞いただけ。
サバが国内にあるとして、近いところでも20msぐらいはかかるしな。
> ちなみに、apacheがアクセスがあったとして扱う時刻は > $_SERVER["REQUEST_TIME"] 「アクセス」ってのが微妙だが、 リクエストがあった時間と客がレスポンスを見る時間は違うかもしれないと。 確かここら辺って、いろいろ複雑だったようなきがする。 Apacheがリクエストを受け取る時間とレスポンスを吐き出しはじめた時間、 レスポンスを送り終わった時間とか。どっかで読んだなあこの話。 > シビアなんです、上司が。 あなたが定義すればいいんですよね。 HTTPリクエストがあった時間を基準に課金することにするって。
> おいおい、おれは素人じゃねえよ。 プ
,.、,、,..,、、.,、,、、..,_ /i
;'`;、、:、.
>>579 : :,.: ::`゙:.:゙:`''':,'.´ -‐i
'、;: ...: ,:. :.、.∩.. .:: _;.;;.∩‐'゙  ̄  ̄
`"゙' ''`゙ //゙`´´ | |
//Λ_Λ | |
| |( ´Д`)// <うるせぇ、エビフライぶつけんぞ
\ |
| /
/ /
__ | | __
\  ̄ ̄ ̄ ̄ ̄ \
||\ \
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄||
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
このようにして、 mb_ereg("[ァ-ヴー]+", $str, $match); 正規表現で文字を抜き出して、配列に格納して表示させたら、 Array ( [0] => タイトル [1] => ツール [2] => カメラ [3] => カメラ [4] => カメラ [5] => カメラ [6] => データベース [7] => ユーザー) といった感じで、ダブっているものも検出してしまいます。 これをダブりがないように表示するには、どうすればよいでしょうか?
携帯対応CMSっていいのは?
>>582 ありがとうございました。ダブっているのをもう1回正規表現で抜き
出して、mb_ereg_replaceで置き換えるのかなぁと思って、ちょっと
困っていたところですが、実は配列の初歩的なことで解決できたん
ですね。マヌケでした。
585 :
nobodyさん :2006/11/01(水) 11:35:24 ID:egQfb3lu
まぬある嫁よ
>>581 メアド欄に空白入れてるのは「sageはしないがIDも出したくない」という意思表示?
587 :
581 :2006/11/01(水) 11:49:18 ID:???
えっ?なんのことでしょう? メアド欄に空白入るとIDが表示されなくなるんですか
こういうやつってほんと器が小さくみえる
589 :
581 :2006/11/01(水) 12:17:17 ID:???
>>588 さっきまではマジで知らなかったんですよ。別にシラをきっていた
わけでなくて。
おまえが言い訳するほど世間では器は小さくなっていくものだよ。 おまえ出世しないタイプだなw
PHP5.0.4でmmap?mm拡張モジュール?の2MBがダウンロードできないバグで困っています。 Windowsサーバなのですが、パッチはありませんか?
回答者はIDをだしてください。 回答者はIDをだしてください。 回答者はIDをだしてください。 回答者はIDをだしてください。 回答者はIDをだしてください。 回答者はIDをだしてください。 回答者はIDをだしてください。 回答者はIDをだしてください。
回答者?
594 :
581 :2006/11/01(水) 12:49:13 ID:???
>>590 日本語があまり通じないようなので、海外に移住されてはいかがですか?
偽者だろ。違うならただの池沼なんだから放っとけよ。
597 :
581 :2006/11/01(水) 13:00:26 ID:???
いきなり氏ね言われた
>>59 カワイソス(´・ω・`)
601 :
581 :2006/11/01(水) 13:22:39 ID:???
不毛なやりとりは他でどうぞ
投票スクリプトを製作中なんですが、本当に下らない質問ですいませんが教えてください。 value値を1や2と言った数値にしてます。 で、 if (is_numeric($_POST['aa'])) { if ($_POST['aa'] == 1) { echo "1です。"; } else if ($_POST['aa'] == 2) { echo "2です。"; } } else { echo "数値以外はダメ。"; } とするか、 if ($_POST['aa'] == 1) { echo "1です。"; } else if ($_POST['aa'] == 2) { echo "2です。"; } else { echo "数値以外はダメ。"; } とするか、どちらがいいでしょうか?同じですかね?
>>604 後者の場合、"数値以外はダメ。"と言うにはifがたくさん必要じゃね?
>>604 後者で、最後を「1か2以外はダメよ」にすれば?
つか自分の見やすい方にすれ。
switch使えとは誰も言わないのね
多少の拡張性を意識するなら、 $data = array(1 => '1です。', 2 => '2です。'); みたいな配列用意しとけば、許容される数値かどうかの判定はif一発で済むし、後々DB導入したとしても変更が楽かも。
質問です。Shift_JISで echo "表"; と表示させようとするとエラーが出てしまいます。 stripslashesを使用しても無理でした。 どのようにしたらちゃんと表示されるのでしょうか?
>>610 Shift_JISをやめるのが一番の近道。
612 :
610 :2006/11/01(水) 16:17:50 ID:???
<?xml version="1.0" encoding="EUC-JP"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml " xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
<meta http-equiv="Content-Style-Type" content="text/css">
<title>あいうえお</title>
</head>
<body>
あいうえお
</body>
</html>
EUC-JPを使おうと思い、このように記述したのですがなぜかIE6で文字化けしてしまいます。
Shift_JISなら大丈夫でした。カタカナで記述しても大丈夫みたいです。
文字化け→「あa・ム・」
なんでだろう。。。。
>>612 内部エンコーディングがSJISというオチかな?
>>612 ところでそれのどこがPHPと関係あるんだ?
616 :
612 :2006/11/01(水) 16:32:15 ID:???
ブラウザでページを移動するときにその前のページがEUC-JP以外だと文字化けしてしまうようです。 ためしにEUC-JPのページをお気に入りに入れてブラウザの起動と同時に表示させたら、大丈夫でした。 やはりShift_JISを使うしかないのか。。。
>>610 ソースをSJISで書くにはマルチバイト対応でコンパイルしたPHPで
mbstring.script_encodingをSJISに設定しないといかんのでは。
>>616 ブラウザの文字エンコード設定は自動判別になってる状態?
PHPのmbstring.output_encoding辺りはどういう設定になってるの?
618 :
612 :2006/11/01(水) 16:52:51 ID:???
>>617 お騒がせしました。ブラウザの文字コードは大丈夫でした。
html(php)ファイルを保存するときに保存形式がEUC-JPでなければいけない所がSJISになっていました。
ちゃんとEUC-JPで表示することができました。
619 :
nobodyさん :2006/11/01(水) 17:01:19 ID:nyPZj6d6
サーバAとサーバBがあり、両方ともPHPを動かせる環境にあります。 ファイルをアップロードするフォームを含むHTMLファイルがサーバAにあり、 それを使ってアップロードしたファイルをサーバBに保存することは可能ですか?
>>619 サーバAのHTMLのPOST先をサーバBにしとくだけじゃん
>>619 サーバーAからサーバーBにPOSTして処理すりゃいんでないの。やってから質問すれよ。
622 :
621 :2006/11/01(水) 17:06:47 ID:???
被ったOTZ
623 :
619 :2006/11/01(水) 17:16:59 ID:???
>>620-621 実はサーバAに対しての処理もあって、ファイルのアップロード先だけがサーバBなんです。
>>623 もうちっと具体的に必要なもの並べてくれんと
うまい分離の方法も思いつかん
<input type="image">の場合、 name属性で指定した文字はPOST送信されないんでしょうか? (_xと_yの座標は渡されますが)
627 :
nobodyさん :2006/11/01(水) 17:37:17 ID:uM8NHcM0
別サーバーのファイルのサイズを調べたいんですが、
filesize("
http:// 〜〜");だとエラーが返されます。
どうすればよいのでしょうか。
629 :
619 :2006/11/01(水) 18:20:37 ID:nyPZj6d6
文字列とファイル数個をPOSTで送って サーバAで文字列をMysqlのテーブルに書き込み、 サーバBにファイルを保存、 したいんです。
>>627 別サーバ側にfilesize返すスクリプトを書いてHTTP_Requestで叩け
>>628 そういう仕様だよWWWの
>>629 サーバAのスクリプト内からサーバBへHTTP_Requestで叩いてアップロードしろ
631 :
nobodyさん :2006/11/01(水) 18:40:08 ID:uM8NHcM0
>>630 こちら側から別サーバーは管理できないんです。
とりあえずfile_get_contentとstrlenの組み合わせで現在対処しましたが、
いちいち内容をダウンロードせずに、
サイズだけ図れる方法はないんでしょうか?
632 :
604 :2006/11/01(水) 18:44:19 ID:???
>>605-609 ありがとうございます。
1か2だけなんでifでもswitchでもいいんですが、DBを導入するほどのものでもないです。
ただ、
>>609 のような配列を使ってやるってのは「ああ、成る程」って感じです。
自分にはない考え方って面白いand勉強になりますね。
>>631 レスポンスヘッダでファイルサイズを教えてくれる場合もある。
>>631 last-modified付でリクエストしてキャッシュしとけ
635 :
nobodyさん :2006/11/01(水) 22:49:29 ID:Z3WwdpXH
たぶんlinuxでもwindowsでもそうだと思うんですが、 ディレクトリの更新時刻は、子ファイルの更新時刻に同期するけど、 それより下の階層のファイルの影響は受けないようですね。 対象ディレクトリの配下のすべてのファイルから最終更新時刻を一発で 取得するコマンドとかないでしょうか。
PHPで、接続中のクライアントのWindowsログオンユーザ名を 取得する方法はありますか? 社内LAN内にWebサーバがある環境です。
638 :
nobodyさん :2006/11/01(水) 23:52:59 ID:osJKunqT
>>636 Windowsのログインユーザ名は、httpでつないだサーバでは無理。
640 :
636 :2006/11/02(木) 00:14:41 ID:PZcPsbvT
だめですか。。。 ありがとうございました。
641 :
627 :2006/11/02(木) 00:50:52 ID:+NTnctYa
642 :
nobodyさん :2006/11/02(木) 01:39:23 ID:RYi0SuH1
すっげぇ下らない質問なんですが、XMLをスパッと多次元配列に格納してくれるような便利なライブラリってありますか?
そんくらいなら探すより自分で作ったほうがいいよ。
644 :
nobodyさん :2006/11/02(木) 01:51:18 ID:RYi0SuH1
>>643 早速の回答ありがとうございます。そうっすか。ありがちなんでどっかに落ちてるかと思ったので。
ちなみに、Aタグ〜/Aタグを取得しようとしたら、正規表現の後方参照で取得するのが一般的な手法ですかね?
XMLパーサーでちまちまやりますか?
>>642 PEAR::XML_Unserializer
これでいいんじゃね?
646 :
nobodyさん :2006/11/02(木) 04:39:55 ID:ObNxAJOw
>>646 PHP以前にHTMLのリンクレベルの質問だと思うけど
action="./henko.php"をaction="/henko.php"にすればいいかと。
>>647 >PHP以前にHTMLのリンクレベルの質問だと思うけど
>PHP以前にHTMLのリンクレベルの質問だと思うけど
>PHP以前にHTMLのリンクレベルの質問だと思うけど
>PHP以前にHTMLのリンクレベルの質問だと思うけど
>PHP以前にHTMLのリンクレベルの質問だと思うけど
荒れるだけだから、答えてやりましょうよ。 ../henko.php わかったらHTMLの勉強からやり直すんだな。
リンクレベルってなんですか?どういう定義なのか教えてください。
>>648-653 おまいら・・・
> action="./henko.php"をaction="/henko.php"にすればいいかと。
は前者が ./ (ドット1個) で後者は / (スラッシュのみ。つまりルート参照)ですよ。
action="../henko.php" カレントディレクトリの1個↑のディレクトリ ドットを付け忘れた
657 :
647 :2006/11/02(木) 07:23:42 ID:???
>>655 すまん。「リンクレベル」ってそんな真面目な階層とかの意味じゃなくて
「HTMLのリンクを書くことと同レベルの質問」の意味だったんだ。
クソスレの立てられるPHPコードの書き方をおしえてください。
>>659 $ita = new thread;
echo $ita->makeThread("クソスレ");
new ita じゃないか?
(笑い)
663 :
<>てすと> :2006/11/02(木) 09:50:21 ID:v/7GXWbN
test
664 :
619 :2006/11/02(木) 09:57:30 ID:D0jPHdjx
>630 そうか、HTTP_Requestを使うという方法があるんですね。 試してみます。
>>664 内容的にはHTTP_Requestを使うものでもないとおもうけどね、俺は。
ヘッダ取得だけで十分だよな。
cookieって即時呼び出し、 つまり、setcookieしたその直後に echo $_COOKIE['var'] で呼び出せないですよね? これはなぜなんでしょうか。 これが非常に不便なんですが、良い方法ないでしょうか? 今まであれもこれもSESSIONに入れてたんですが、 COOKIE値とSESSION値を明確に線引きしようと cokkieに使い変えたらこの問題が出てしまい、困っています。
>>667 sleep、クッキーセットする場所の工夫
669 :
667 :2006/11/02(木) 10:59:10 ID:???
phpマニュアルすぐ落ちるなあ
671 :
667 :2006/11/02(木) 11:23:14 ID:???
似たような話になるかもしれんのですが、 クラス内でsetcookieして、 別のクラスで$_COOKIEしても 上手く取得できません。 ほわぃ?
>>667 $_COOKIEはクライアントからのリクエストヘッダ。
setcookieはサーバからのレスポンスヘッダ(に書けという命令)。
全く別ものだから。
>>667 $_COOKIEに入るクッキーの取得はプログラムの実行前で、
setcookie()で行うクッキーのセットはプログラムの実行後という
順番の逆転があるから。($_COOKIEとsetcookieは連動しない)
setcookie()直後に$_COOKIEで扱いたいのであれば
自分で $_COOKIE['var'] = 'foo'; ってセットしちゃうしかないと思う。
ただしそれをやると、実際にはブラウザが保存してくれてないのに
プログラムで値を使ってしまってトラブルになってしまう場合がある。
(ブラウザはクッキー有効の設定でも、部分的に却下することができる)
セッションはクッキーと違って「一部を相手が受け取らなかった」という
心配をする必要がないので、$_SESSIONを使ってシームレスに扱える。
676 :
646 :2006/11/02(木) 12:28:33 ID:ObNxAJOw
678 :
646 :2006/11/02(木) 12:45:36 ID:ObNxAJOw
ありがとうございます。
>>667 おいしいクッキーの作り方と食べ方
1. クライアントからのリクエスト
http header の cookie: でクッキー送信
2. Apache が環境変数 HTTP_COOKIE に代入
3. PHPが$_COOKIEへ代入
cookieがセットされてなければ当然空
4. PHPでsetcookie();
http header の Set-cookie:として送られるのでスクリプト終了するまで送られない
↑
今ここ 当然$_COOKIEは空
5. PHPの実行が終了
6. ApacheがSet-cookieヘッダで送信
7. クライアントのブラウザが処理
配列で ARRAY { [0] = NULL [1] = NULL [2] = NULL [3] = hoge } の時、[3]のhoge以外は取り除くもしくは[3]のみ別配列に入れる事は可能でしょうか? この場合、hogeは[3]にあるとは限らないので([1]かもしれないし、[10]かもしれません) やり方に困っております
>>680 $newarray = preg_grep('/./', $array);
ただしこのやり方だと '' と NULL は区別できないけど。
foreachの中にforeachってできないんですか?? やってみたのですがうまく動きません…
>>682 > foreachの中にforeachってできないんですか??
できる。
> やってみたのですがうまく動きません…
どう書いたのかちょっと見せてみ。
foreach($data as $data_arr) { foreach($boo as $boo_arr) { if($data_arr == $boo_arr) { $log[] = $data_arr; } } }
>>684 特に変なところは無いと思うが…これで動かなかったのか?
どういう結果になることを期待したんだろ。
俺のエスパー的解読によると、 二回目のforeachのifの中の最後にbreak;しないと同じ値のデータが大量にできちゃうんじゃまいか? どういう結果を求めてるか知らんけどな。
>>685 さん
期待どおりの動きをしてくれません。。。
$dataに(1,2,3,4,5...12)
$booに(1,2,5,12)
が入っていた時
$logに(1,2,5,12)の配列を入れたいのですがなぜか12が入っていなかったりします。
あと684で間違いがありました。
正しくは
if($data_arr[num] == $boo_arr) {
$log[] = $data_arr;
}
です
688 :
670 :2006/11/02(木) 15:33:26 ID:???
>>687 そのnumってどっから出てきたの。
$data = array(1,2,3,4,5,6,7,8,9,10,11,12);
$boo = array(1,2,5,12);
foreach($data as $data_arr) {
foreach($boo as $boo_arr) {
if($data_arr == $boo_arr) {
$log[] = $data_arr;
}
}
}
var_dump($log);
結果:
array(4) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(5)
[3]=>
int(12)
}
690 :
687 :2006/11/02(木) 15:39:12 ID:???
度々の言葉足らず申し訳ないです。。 $dataは ARRAY{ [0] ARRAY{ [num] = 1 [name]= satou } [1] ARRAY{.....} と多重連想配列(?)になっています
>>690 実際にうまくいかないデータを出さないと多分分からん。
プログラム側じゃなくデータ側に問題あるんじゃないの?
>>687 > 正しくは
> if($data_arr[num] == $boo_arr) {
だったら多分
> $log[] = $data_arr;
は
$log[] = $data_arr['num'];
だろう
<p> file uploader </p> <?php $updir = "./upload/"; $filename = $_FILES['upfile']['name']; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) == FALSE){ print("Upload failed..."); print($_FILES['upfile']['error']); }else { print("<b>" . $filename . "</b> uploaded!"); } ?> </body> </html> ------------------------------------------------- 基礎PHPという本でアップローダー作ってるんですが、 上記のプログラムだと画像しかアップロードできず、 動画はアップロード出来ません。どこが問題でしょうか?
>>693 プログラム的には問題は見受けられない。
1.ファイルサイズがアップロード可能な上限を超えている
2.確認方法が間違っている
のどっちかじゃない?
ファイルサイズなどは特に明記もなく、 本のサンプルファイルをそのまま弄らずに使って確認してみたんですが、 画像だけアップロード指定先のフォルダにコピーされ、 動画だとアップロードのボタンを押したあと、永遠に何か処理しているような 感じでメーターだけ動くんですが、アップロード完了の画面が出たあと、 アップロード指定先のフォルダには何にも表示されないんです。 (指定先は画像と同じです。)
>>695 phpの設定のアップロードファイルサイズの限界を超えてるんじゃないの
>>695 PHPはデフォルトだと2MBまでしかアップロードできないよう
制限がかかってるよ。
なるほど。そうでしたか。ありがとうございます。 その設定、弄ってみます。
php.iniのupload_max_filesizeを2Mから100Mに変更してみました。 ついでに、post_max_size =も2Mから100Mにして、Apacheを再起動させてみたのですが、 ----------------- file uploader Upload failed...1 ------------------ のまま変化しません。4MBほどの軽い動画をいくつかやってみたんですが。 (先ほどメーターだけ動くと書きましたが勘違いで、何も表示されませんでした。) 画像などでは ----------------- file uploader abc.jpg uploaded! ----------------- だと表示されて成功するんです。orz
$_FILES['upfile']['error']が1ってのはupload_max_filesizeを超えてるってエラー php.iniちゃんと読み込まれてるか?phpinfoとかで確認した?
>>699 memory_limit > post_max_size > upload_max_filesize
それぞれの設定の意味はマニュアルを読んでもらうとして、memory_limitはどうなってる?
あれ?phpinfoで確認すると
post_max_size 8M 8M
upload_max_filesize 2M 2M
のままでした。
>>701 memory_limitは8MBでしたので、
今100Mにして再起動したんですが、症状変わりませんでした。
phpinfoで表示されている通り
「Configuration File (php.ini) Path C:\WINDOWS」にあるphp.iniなんですが、
なぜ、反映されてないんでしょうか?
$_SESSION = NULL ってやばいですか? できればデストロイせず、初期化したいのですが…
704 :
nobodyさん :2006/11/02(木) 19:26:28 ID:y5JIMR69
自サイトのデータをArchive_Zipで圧縮してバックアップしているのですが、 FTPソフトでWindowsにDLして解凍するとアイコンがおかしくなってます。 htmファイルなんてアイコンが無いです・・・。 普通に開く事は出来るのですが何か気持ち悪くて・・( ´Д`) どなたか原因・対処方法をご存知の方、よろしくお願い致します。
fuck you
本当にPHPの問題と思ってる?
707 :
nobodyさん :2006/11/02(木) 20:56:42 ID:py7iJRLu
ネットで色々調べてみましたが、 Configuration File (php.ini) Path のディレクトリが合ってるか確認、 そしてapacheの再起動、 それでも反映されないバグっぽいです。orz
絶対に自分は正しいってか? おかしいとすぐバグとかいう人は、向いてないよ。
709 :
nobodyさん :2006/11/02(木) 21:22:13 ID:py7iJRLu
そんな事言われても、この2箇所の確認でphp.iniが反映されなければ, もうどうしようも・・・^^; 「php.ini 反映」でググっても、同じ症状の人、いっぱいいますし。
phpとapacheのバージョンは?
>>709 それだけ書かれても分からん
一度全部消去して、書式が間違ってないか慎重に検証しながら再設定してみろ
>>707 マニュアル嫁。
C:\WINDOWSに置いていいのは縄文時代のPHP
>>709 お前じゃ話が通じん!apacheのログを出せ!
>>712 >縄文時代のPHP
想像しちまっただろうがwwwwwwww
はいはいおもしろくない。 はい、次の質問どうぞ
数行のログを横4縦∞のテーブルに 1行1セルの形で入れたいと思ってます 4行ずつ処理していけばいいと思うのですがどう書けばいいか分かりません エスパーたんお願いします
>>717 カチカチ鳴る定規使え。まだ持ってないならすぐ買いに行け。
きみがわからなくてもおれはこまらない
>>717 1.横に延々と並べるのを書く
2.適当な所で折り返す方法を考える
3.実装
724 :
nobodyさん :2006/11/03(金) 01:34:47 ID:ttso8WIJ
ディレクトリからファイル名を取得して一覧表示させたいのですが、 同一上のディレクトリですとうまくいくのですが、 階層の違うディレクトリのファイル名が取得できません。 あるディレクトリ上にfileディレクトリとindex.phpがあります。 index.phpにfileディレクトリに保存されたファイル名を取得して一覧表示させたいと思います。 どなたがアドバイスお願いいたします。 PHPは5.1.6と4.4.4の両者で確認しております。 #index.phpの中身 $dir = opendir("./file/");// #$dir = opendir("./");//←これは正常に動きました。 //readdirでファイル名を取得する正しい書き方 while(false !== ($file = readdir($dir))) { if(is_file("./$file")) { echo "$file<br>\n"; } } /* の間違った書き方 while(false !== ($file = readdir($dir))) { if(is_file("./$file")) { echo "$file<br>\n"; } } */ //ディレクトリを閉じる closedir($dir);
725 :
724 :2006/11/03(金) 01:37:46 ID:???
すいません無駄なコードとコメントはぶきました。 #index.phpの中身 $dir = opendir("./file/");// #$dir = opendir("./");//←これは正常に動きました。 while(false !== ($file = readdir($dir))) { if(is_file("./$file")) { echo "$file<br>\n"; }
たびたびすみません
>>725 の最後の業に}付け忘れました。
たいへん恐縮ですがご教授お願いいたします。
#index.phpの中身
$dir = opendir("./file/");//
#$dir = opendir("./");//←これは正常に動きました。
while(false !== ($file = readdir($dir))) {
if(is_file("./$file")) {
echo "$file<br>\n";
}
}
>>724 > 階層の違うディレクトリのファイル名が取得できません。
取得はできてると思うんだがis_file()でこけてるんだろう。
(readdir()で得られるファイル名はディレクトリを含んでいないため
違うディレクトリならディレクトリ名を連結しないと該当ファイルが見つからない)
こういった原因を切り分けるため、
1.途中でデバッグ出力を入れる
2.余計な機能を省きシンプルなもので確認する
というデバッグ手法を覚えた方がいい。
728 :
726 :2006/11/03(金) 02:39:50 ID:???
>>726 よくわかりませんが、opendirに変数を格納したら動きません。
直接opendir("./file")と書いてやったら動きました。
なんででしょう?
とりあえず事故解決しました。
なんでって言われても、具体的にどう書いたのかわからんことには…
>>728 > 直接opendir("./file")と書いてやったら動きました。
意味が分からんのだが、それは
>>726 の
> $dir = opendir("./file/");//
と何か違うのか?
731 :
nobodyさん :2006/11/03(金) 08:38:09 ID:DVjQnElN
PHPスクリプト公開してるサイトでアフィリエイト広告を頻繁に 見かけますが儲かってますか?
知らんがな
ここの方々ならアフィリエイトで成功されてる方がたくさんいそうですね。 朝のコミュニティーションな会話は置いといて・・・ ソースに function 関数(){} で定義する前に 関数(); を記述してもいいのでしょうか? はやり定義した後に記述するものなんでしょうか? 一応、どちらも動くことは動くのですが正しい記述としてはどちらが いいのか困惑しております。 アドバイスお願いいたします。
734 :
nobodyさん :2006/11/03(金) 09:02:01 ID:8kaP0u+9
すいません、733は731です。
>>733 PHPはトップレベルの関数定義を、そのファイルの実行前に先読みするから問題なし。
どちらも正しい。
ありがとうございます。
定義を後ろに書くことにしました。
自分はまだまだ勉強不足ですね。
>>735 さんみたいな回答者になりたいです。
回答者になりたい、ってアフォか
ゴールデンハンマー!
ユーザー定義関数dir()を呼び出したところ Fatal error: Cannot redeclare dir() とういエラーがでたのですが、これは何を意味しているのでしょうか? また、こういうエラーの一覧表はマニュアルに載ってないのですが どこかに参考となるサイトはございませんか?
dirは定義済み
>>739 多分こんなエラーだろう
Fatal error: Cannot redeclare dir() (previously declared in hoge.php:10) in hage.php on line 10
致命的なエラー:hage.phpの10行目でdir()が二重に定義されました。
dir()はhoge.phpの10行目で既に定義されています。
何がいけなかったのかはエラーにちゃんと書いてあるし、行数まで表示されてる。
>どこかに参考となるサイトは
エラー文でググれば解決方法が見付かると思われ
742 :
739 :2006/11/03(金) 10:20:40 ID:8kaP0u+9
こういうエラーです。 Fatal error: Cannot redeclare dir() in 絶対パスon line 105 dir() function dir(){ }←この行でエラーがでてしまいます。 ためしに}を改行して下にずらしても }のところでエラーになります dir()は二重に定義しておりません。 dirをdiraと名前を変えて定義してやると問題なく動きます。 dir()とやるとダメなので何か予約語とかなんやらのPHPの決まりなのでしょうか?
743 :
739 :2006/11/03(金) 10:31:40 ID:???
いちおう、コード削ってためしてみましたが、症状は変わらずです。 環境によるものなのでしょうか。 <?php dir(); function dir(){ echo "test"; } ?>
746 :
743 :2006/11/03(金) 10:44:49 ID:???
なるほど、そういうことだったんですね。 ありがとうございます。 私事でありますが・・ 「素人だけどバグみつけちまったぜ」 「おれって天才?」 って喜んでました。修行不足ですね・・・失礼いたしました。 il||li_| ̄|○ il||li
747 :
nobodyさん :2006/11/03(金) 10:45:15 ID:uip4CKwg
header関数でrefererのセットってできないのかね?
できるでしょ。どんな意味があるか知らないけど。
header : 鯖 -> 倉 referer : 倉 -> 鯖
750 :
nobodyさん :2006/11/03(金) 11:00:13 ID:uip4CKwg
PHP 5.2.0が正式リリースされました。
752 :
747 :2006/11/03(金) 11:04:31 ID:uip4CKwg
>>749 あ、わかった。
てことはやっぱやろうとしてることは出来ないのか。ちぇ。
>>746 私が見つけれるような単純なバグ(の様な物は)既に誰かが発見し修正している筈である。
よって、これは私のミスでありバグではない。
とまぁ、こんな事思いながらやってるなぁ・・
>>751 スレの上で出てたけど、これでPHP5.xがApache2.3.xで使えるように?
(その話題が気になったからググってみたけど、Apache2.0.x→Apache2.2.xはAPIが変更されてるとか何とか)
先月5.2いれたけど、たいして気にすることでもないかな。
5.1.7?
5.1.2でした。
php6は試した人いないの?
760 :
nobodyさん :2006/11/03(金) 12:29:29 ID:8kaP0u+9
こういうディレクトリ構造があります。 [c:\]-[public_html]--index.php | |-[local]--bbs.log Cドライブ直下にドキュメントルートpublic_htmlを置きindex.phpを作成しました。 index.phpからドキュメントルート外のbbs.logをfopenで開きたいのですが $file = file("c:/local/bbs.log","r"); と記述してもエラーがでて取得できません。 パスの書き方はc:/local/bbs.logではなくほかの書き方がございましたら ご教授お願いいたします。
761 :
761 :2006/11/03(金) 12:40:11 ID:???
自己解決しました。 ↑のパスの書き方で問題なく動きます。
コードは適当なんですが function dir_list($dir) { $dir_list = (ディレクトリ取得); foreach ($dir_list as $list) { dir_list($list); } } こういった再帰処理を無名関数で $dir_list = create_function ('$dir', '$dir_list = (ディレクトリ取得); foreach ($dir_list as $list) { $dir_list($list); } }'); のように書きたいのですが$dir_listがundefinedというエラーが出てしまいます。 functionを作らずに無名関数のような感じで実現することは出来ませんでしょうか。
>>762 > foreach ($dir_list as $list) {
で使ってる配列と
> $dir_list($list);
生成関数とで同じ変数名がバッティングしてるよ。
>>762 あとさらに付け加えるなら、
$dir_list = create_function()
で作られる$dir_listはグローバル変数な。
create_function ('$dir', '$dir_list = (ディレクトリ取得);
foreach ($dir_list as $list) {
$dir_list($list);
}
}');
とcreate_function内で使われてる$dir_listは関数内のローカル変数な。
そんだけわかりゃ何とかなるんでない?
基本的にはfunction定義で何とかできることはcreate_functionでも何とかできる。
実行エラーでバイナリ落ちそうなコードだな
766 :
nobodyさん :2006/11/03(金) 13:31:45 ID:8kaP0u+9
perlでできてphpでできないことって何ですか? 最近perlもやっとかないと時代についていけない気がして・・・
セッションIDでログインするにはどうしたらいいんですか?
そんなことしてどうする? セッションID毎にパスワードを設定するのか?
>>766 そんな状態で始めたとしても、PHPもPerl使いこなせず意味がないと思われ
どっちか1つを真面目に勉強するんだ。
>>767 セッションの使い方を聞いているのか?
マニュアル読んで分からない事だけもっかい聞きに来い
>>763 さん、
>>764 さんレスありがとうございます。
$dir_func = create_function ('$dir', '$dir_list = (ディレクトリ取得);
global $dir_func;
foreach ($dir_list as $list) {
$dir_func($list);
}
}');
こんな感じで期待通りの動作をすることが出来ました。
>>766 WEB用途でPerlに出来てPHPに出来ないこと、またはその逆ってあまり無いと思うけど
tie、thread、OOP関連(多重継承、カプセル化等)で差異を感じることはあったかな。
Perlは古臭いっすよw
771 :
nobodyさん :2006/11/03(金) 14:29:30 ID:9FoSTEPm
AとBの2つのページがあって、 Aのページで認証を通さないとBに進めないということをやりたいのですが、 特に細工しないと、BのURLを直接打ち込むとBが見えてしまいますよね? 今まではSwitchで分けてたのですが、 ソースがごちゃごちゃになるので分離したいと考えています。 どのような処理をしたら、Aからの認証のみでBに行けるようになるのでしょうか? ヒントだけでもいただけたらありがたいです。 宜しくお願いします。
773 :
nobodyさん :2006/11/03(金) 15:04:55 ID:ObEKEkGi
php.iniが認識しないのは、PHP5.1系のバグじゃなくApache2.2系のバグでした。 最新のApache2.0系を入れたら、1発で認識してくれました。どうも。
>>771 セッションに認証済みフラグを立てて
Bで認証済みかどうかチェックしたらどうかしら
Bをbasic認証にして Aでパス発行すれば?
777get, zuzaa
778 :
nobodyさん :2006/11/03(金) 16:42:53 ID:8kaP0u+9
メンテナンスのことも考えてユーザー定義関数で細かく処理をわけてますが、 あまりわけすぎると実行速度の低下や転送量が太ったりしますか?
>>778 誤差の範囲内で実行速度が僅かに低下する。
でも、メンテナンス性の方が遥かに大事。
読み易くメンテナンスしやすいように適度に分けるのは良い心がけだ。
>>773 Windows?
それならPHP5.1がApache2..2に対応してないだけでバグでもなんでもない
どうせなら最新のPHP5.2でも入れて試してみたら
>>766 最近Perl!?
JavaやRubyなら分かるが、今更Perlやってどうすんの。
と、元Perl使いが反応してみるw
PerlはPHPと違って元々はWEB無関係の汎用スクリプト言語だから
できることは確かに色々あるし性能もいいよ。
でも時代についていくために今Perlの勉強ってありえないぞ??
逆に何がしたくてPerl勉強すんのさ、と俺が問いたいw
Perlは、言語機能や速度自体は別に悪くない・・。 が、文法が継ぎ足しで汚い。
書いた本人にとっては美しいんだよ 他人が読めないだけだ
いやいや書いた本人にとってはというレベルではなくて、 オブジェクト指向部分とか、基本的に変な文法。
既存の文法と実装の延長線上でOOPを実現しようとしてるせいだよね。 実装手法の面で言えばうまい!って感じでよく考えられてるんだけど、 それはあくまでPerl側から見た話であって、OOPの側から見ると 何だかものすごく妙ちくりんな文法とお約束で成り立ってるんだよなw
Perlはそもそも文法の美しさは二の次三の次だろ。
いや、Perl使いから見るとあれはすごく美しい文法なんだよ。 ただその方向性が他の言語と違いすぎてるだけ。
PHPしか知らない俺にその変てこさを分かりやすく説明してくれ
一般的でない美しさは美しくないということにならないか?
while (<>) { chomp; print; } 美しくないか?ってあまり大した例じゃないが。
791 :
nobodyさん :2006/11/03(金) 19:10:26 ID:i9hbdjz4
美しいって何だよw
美しさは人それぞれです
美しいというより、 if (foo()) { foobar() if bar(); } ってやられるときんもーってことでしょ?
>>789 行き過ぎた芸術は一般人には理解しがたいものになりがち。そういうことだよ。
大衆芸術の方が多くの人に好まれやすいが美しさには欠ける。
>>790 やっぱ
@data = map {$_->[0]} sort {$x = ($a->[$_] <=> $b->[$_] or $a->[$_] cmp $b->[$_]) and return $x foreach (1 .. $#$a); -1} map {[$_, split /,/]} @data;
この辺りじゃない?
>>794 慣れなのかもしれないがよく解読出来るよね・・・
>>794 確かにそこまでいくと芸術性を感じる
読みやすさは微塵も感じないが。
まさに変態的という言葉が完璧にマッチするな。
1行にする必死さを感じる まさに無駄な努力
タモリいわく芸術と変態は紙一重らしいぞ
俺もPerlを使い続けている一番の理由は、中毒性の高い構文だからだろうなw 使い捨てのプログラムをさっさと書いてしまいたい時にはかなり重宝する CPANの豊富なモジュール群も捨てがたい
801 :
nobodyさん :2006/11/03(金) 20:29:23 ID:ewaQ0n7K
初めてレベルの高い回答を読んだ
ルビーとかいうのやってみたんですが それあればコピペで出来るってことですか?
803 :
nobodyさん :2006/11/03(金) 21:20:55 ID:ewaQ0n7K
>>645 色々調べたら、それだ!って感じがしました。
ところが、PEARには標準で入ってないっぽい?もしくはバージョンによる?
4.4なんですが、XMLの下にはParser.phpとRPC.phpしかないんです。
改めてgo-pear.batしたんですが、やっぱり入ってないです。
これはどうやってゲットすればいいんでしょうか?
805 :
nobodyさん :2006/11/03(金) 22:58:33 ID:ewaQ0n7K
>>804 うっ・・・ありがとうございます。ところが、
No release with state equal to: 'stable' found for 'XML_Serializer'
と表示されてます・・・
ううぅ・・・どうすればいいんでしょうか?
stableって安定版のことですよね?不安定版でも構わんのですが・・・
_, ,_ <[;゚Д゚]> ア゙ー!? PEARのマニュアルにstableじゃないものをどうインストールするか書いてあんだろ [_] < >
807 :
nobodyさん :2006/11/03(金) 23:14:32 ID:aY7QHi86
PHPでWORD形式のファイルって出力できるんでしょうか?
>>805 pear install XML_Serializer-beta
809 :
nobodyさん :2006/11/04(土) 00:39:40 ID:RV2l/KER
>>806 うぅっ・・・すいません。書いてありました。面目ないです。
>>808 くぅーっ!ありがとうございます。お蔭様でインストールできました。Windowsの方は・・・
インストールすると、XML_Utilも必要と言われたのでインストールしました。
Windowsの方は動作も確認できたので、ヤター!!って思って、Linuxにもインストールしようと
したのですが、XML_UtilとXML_Parserが必要といわれたので、両方インストールしました。
ところが、、、XML_Parserはalready installなのでSkippingと表示されてるのに、XML_Serializer
をインストールしようとすると、XML_Parserがrequiresだと言われます。。。
最後の、最後に教えて下さい。マニュアル調べました(・・・多分見落としてないと思います)
810 :
803,805 :2006/11/04(土) 00:44:01 ID:RV2l/KER
-f スイッチで強制的にインストールできるようですが、これが正解ですか?
811 :
nobodyさん :2006/11/04(土) 01:30:49 ID:AU0Zf4A1
preg_match('@
http:// ([^/]+)@', $uri, $matches);
parse_url
HTMLから語句を検索して、その語句に対してハイライトの為の タグを自動で挿入してくれるようなライブラリなどありますでしょうか? もしあったら教えてください。 お願いします。
正規表現で置換
一瞬で的確なレスが返ってくるこのスレはすごいな
別にすごいことでもなんでもないし
818 :
803,805 :2006/11/04(土) 04:02:04 ID:RV2l/KER
>>809 自己レスです。
XML_Parserをforceインストールしたらでけました。色々教えてくれてどうもありがとうでした!
>>817 場末のくだらないスレにしては、ということだ
別にすごいことでもなんでもないし
821 :
nobodyさん :2006/11/04(土) 06:56:58 ID:+mcy38xB
●ディレクトリ構成 [home]の下に[public_html](ドキュメントルート)の下に[www]ディレクトリ [home]の下に[local](ドキュメントルート外)の下に[log] wwwディレクトリにindex.phpがあり、 このファイルからlogディレクトリを指定したいのですが 間違っている指定の仕方があればご指摘ください。 1. ../../local/log 2. ../../local/log/ 3. home/local/log 4. home/local/log/ 5. /home/local/log 6. /home/local/log/
3〜6
多分homeは例のhomeなので5, 6も動くんじゃない なんで/homeの下にlocalやpublic_htmlを置いてるのか知らんが
自己解決しました。 正解は1,2,5,6でした。
826 :
nobodyさん :2006/11/04(土) 07:24:38 ID:+mcy38xB
mkdirでディレクトリ作成するときに 「変数で指定したディレクトリ名」で処理するとWarningエラーがでるのですが @で回避するのとディレクトリ名をチェックするのはどちらが妥当でしょうか?
>>826 別にどっちでも。
@で回避したあとの処理、ディレクトリの存在チェックしたあとの処理の方が重要。
fsockopneでファイルを送ることは可能でしょうか。 クライアントの依頼で受け皿を変更することなくファイルを送る必要がありまして、 通常の投稿フォームから投稿するのと同様にサーバ内のファイルを送らなければならなくなりました。 他のPOSTデータは普通に送れるのですがファイルはググってみたのですが的確なものがヒットしませんでした。 ご存知の方いらっしゃいましたらよろしくお願いします。 環境:共にFedoraCore4 PHP-5.1.4
クソスレ三段論法について説いてください。 それではよろしくお願いいたします。
>>829 pear使えばいいだけの話だろ?
楽チンじゃん。
E_RECOVERABLE_ERROR こいつのクールな使い方を教えてくれ
833 :
nobodyさん :2006/11/04(土) 10:04:36 ID:+mcy38xB
die()で処理を停止してエラーはくときにソースが全部読み込まれなくて </body></html>までソースが読まないんですけど、 die()の中に</body></html>書いておくものでしょうか? それとも処理が停止したらhtmlの文法なんて気にすることでもないのでしょうか?
>>832 $cool = "E_RECOVERABLE_ERROR ";
if (isset($cool) == "cool") {
echo "E_RECOVERABLE_ERROR はクールを使ってます";
}else{
echo "クールと勘違いしてます";
}
exit;
>>831 そうできたら楽なのですが、自分でちゃんと作って提出するのが条件とのことです。
こんな感じでヘッダー叩いて見たのですがうまく上がりませんorz
POST /test/upload.php HTTP/1.0
Host: hoge.hoge
Content-Type: multipart/form-data; boundary=test
Connection: close
Content-Length: 8
--test
Content-Disposition: form-data; name="test"; filename="test.txt"
Content-Type: text/plain
testtest
--test
>>835 おいおい同じような宿題やってるが同じクラスメイトか?
お前ら付き合っちゃえよ
839 :
nobodyさん :2006/11/04(土) 11:10:18 ID:+mcy38xB
すいません、サーバ環境と開発環境は分けてますか? linux上のサーバでないと確認できないこともあるわけで、 開発はwinでやるのは効率がわるいでしょうか? ぁたしはdreamweaverでデザインとphpの開発しております。 先人のご意見お聞かせください。
自分でちゃんと作るのが条件でしょ
そんな時のための仮想化じゃないか
842 :
835 :2006/11/04(土) 11:12:31 ID:???
宿題とか言われても俺工房だしww orz まぁ再来年辺りこういう宿題やってるかもしれんけど(´・ω・) とりあえず 「Content-Length: 8」が間違ってたようでファイルは送信できました。 と報告迄。 今度は逆にPOSTデータが受信されなくなってしまった罠。 RFC1867にこの辺について言及されてるけどPOSTデータの扱いがよく分からんかった。
何が「クライアントからの依頼」だよ馬鹿 きちんと宿題なんですぅ〜と書け
844 :
835 :2006/11/04(土) 11:23:28 ID:???
自己解決しました。 POSTも「--test」で区切る必要があったようです。 結局余りphpと関係ない部位の質問となってしまいました; スレ汚しスミマセン。
845 :
835 :2006/11/04(土) 11:24:48 ID:???
>>843 だから宿題じゃねーーーーーよwwww 普通科の工房なぬんなwwww
ていうかこんな宿題が出たらどれほど楽しいことか。 普通科とかツマラン過ぎるんだけど('A`)
まじ高専とかウラヤマシス。
>>828 まず第一の前提として、PHPのハッシュ(連想配列)というのは処理が遅いです。参照も遅いけど特に格納が。
そしてdefineというのは実態は$GLOBALSとは別のグローバル変数を保持してるに過ぎないということ。
そのため、よくある使い方としてC言語のように数十ものdefineを大量定義してるコードはかなり遅い。
しかもdefineの定義はプログラム先頭で全部まとめて行う人が多いため、このオーバーヘッドはバカにならない。
(グローバル変数を減らすよう努力する人は多いがdefineはむしろ増やしたがる傾向にある)
遅いと言ってもグローバル変数と同レベルで、それ以上には遅くも速くも無いです。
しかしC言語の感覚(Cでのdefineはプリプロセッサなので実行速度に影響せず極めて高速)では激遅と言えるでしょう。
APCのdefine_constantsとload_constansは、これを事前にメモリ展開が容易な構造で保存しておき、
必要時にキャッシュデータを丸ごと読み込んで高速にハッシュへ格納する、という仕組みのもの。
847 :
839 :2006/11/04(土) 11:35:55 ID:???
ばーちゃるPC使ってますが仮想化ってむずかしいですね 192.168.x.xでwinからlinuxのサーバへつながらないです・・
>>839 分けてない。Linux用なら開発もLinux上で行う。
ただ、エディタはWin用のを使いたいので、sambaで
LinuxサーバーにWinクライアントで直接アクセスして
ソースの編集をやってます。
これは別にFTPでやってもいいと思うけど。
BSDで自宅鯖立ってるからwinからsshしてscreenババババ開いてvimで書いてる。
>>839 linux のコマンドを使うような処理とか、一部OSの機能を使うようなものは
あきらめるが、簡単なサイト程度なら、両方で動くようなものをつくる
ただし、環境情報などは各環境で別々に設定ファイルを書いて
それを利用するようにしている
絶対パスが必要なものとか
URLが必要なものとか
>>850 使わないものまで無闇になんでもかんでも定義しない。
ってだけ。コンパイル型の言語じゃない以上、それが結論かと。
853 :
839 :2006/11/04(土) 12:27:42 ID:???
貴重なレスありがとうございました。 せっかくだからlinuxに移ろうかと思います。 ご協力ぁりがとうございます
>>852 たまに100以上ものエラーメッセージを全部define定義してる人いるよね
国際化のためにdefineや巨大配列でテキストを外出ししてるケースは結構あるよ。 やっぱgettextのほうが速いのかな。
大規模なサイトを運営しているケースで クライアントが入力した値をデータベースに書き込む場合、 データを壊さないためにもロックをかけて処理を行うことが無難でしょうか?
>>854 でもdefiner使わずに連想配列に突っ込んでも同じなんでしょ?
>>856 RDBMSにおけるロックの機能を勘違いしてるように思える。
データ間に不整合が出るケースはロックしないとそりゃダメだし(規模関係ない)、
そうでないならロックなどする必要はない。(これも規模関係ない)
というか、そういう話はデータベース板で聞いた方がいいと思うよ。
>>858 だから事前定義がダメなんだってば。
効率を意識するなら必要時に取得する方法が賢明。
>>859 ありがとうございました。データベース板で聞いてきます。
862 :
nobodyさん :2006/11/04(土) 13:46:27 ID:UuLfn9RK
トラックバックをブログフォームからではなく、自分で作成した管理ツールから
送信したいと思っています。
下記のスクリプトを作成しましたが、エラーは出ないのですが、XMLの返答メッセージ
が返ってこず、トラックバックしてくれません。
どうすればよいでしょうか?
<?php
$sock = fsockopen("app.f.cocolog-nifty.com", 80, $errno, $errstr, 60);
if (!$sock) die("$errstr ($errno)\n");
$data = "title=".urlencode("test送信");
$data .= "&url=".urlencode("
http://www.yahoo.co.jp ");
$data .= "&blog_name=".urlencode("PHPからトラバをする");
$data .= "&excerpt=".urlencode("PHPモジュールから送ってます");
$tburl="t/trackback/3950899";
fputs($sock, "POST ".$tburl." HTTP/1.1\r\n");
fputs($sock, "Host: blog.seesaa.jp\r\n");
fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($sock, "Content-length: " . strlen($data) . "\r\n");
fputs($sock, "\r\n");
fputs($sock, "$data\r\n");
$body =" ";
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
print "test";
?>
>>862 $bodyをエコーすればHTTPエラーが返ってきてるはずだが
その程度の用途ならHTMLにフォームを書いてしまえってのは禁句ですか?
866 :
nobodyさん :2006/11/04(土) 14:42:53 ID:e0EPAzx7
ユーザ関数のことで質問させてください。 環境: Redhat ES3 PHP4.3.9 参照渡しのところを省略可能な関数を作りたいのですが、可能なんでしょうか? 一応公式マニュアルの関数の項目には目を通し、ググっても見たのですが・・・。 もしやり方をご存知の方はご教授お願いします。 具体的に、 preg_match(string pattern, string subject [, array &matches [, int flags [, int offset]]] ) のarray &matches, ftp_alloc(resource ftp_stream, int filesize [, string &result]) のstring &result ようなことがしたいんです。 よろしくお願いします。
こちらこそよろしくお願いします。
>>866 function hoge(& $var = null) {
}
PHP5を使おう
869 :
nobodyさん :2006/11/04(土) 14:55:52 ID:UuLfn9RK
>>864 今、トラックバックスパムではないんですが、トラックバックを一度で複数送る
研究をしていて、それで作成したいんです。
フォームだと複数送れません。
>>863 echo してみたら、Bad requestと表示されました。
プログラムが間違っているということですかね?
でしたら、どこが間違っているか教えていただけますでしょうか?
>>869 > fputs($sock, "$data\r\n");
Content-lengthが実際のデータ長より2バイト短い
871 :
nobodyさん :2006/11/04(土) 14:58:58 ID:UuLfn9RK
>>869 上記のエラーメッセージです。
HTTP/1.1 400 Bad Request Date: Sat, 04 Nov 2006 05:53:46 GMT Server: Apache Content-Length: 226 Connection: close Content-Type: text/html; charset=iso-8859-1
Bad Request
Your browser sent a request that this server could not understand
872 :
nobodyさん :2006/11/04(土) 15:02:15 ID:e0EPAzx7
874 :
nobodyさん :2006/11/04(土) 15:14:53 ID:UuLfn9RK
>>873 思ったんですけど、このスクリプトでレンタルブログ(ココログ)などにトラックバック
って送れないですよね?
875 :
nobodyさん :2006/11/04(土) 16:14:05 ID:Z4GrE+jA
PHP で処理系に使われている文字コードを取得するにはどうしたらいいでしょうか? 環境の都合で i18n_loc_get_default は使えそうに無いです. PHP を bamcompile で exe を作っているのですが, ファイルを出力するときに OS(Windows)が使っている文字コードが分からないと 都合が良くないからです. どうせ日本でしか使われないから Shift-JIS 決め打ちでいいやっていうわけにもいかないし
まず、$_SERVERで取得できることをすべてためしてみろ。話はそれからだ。
877 :
nobodyさん :2006/11/04(土) 17:19:53 ID:Z4GrE+jA
>>876 Windows と Linux の両方で見てみましたけど
使えそうなのはありませんでした...
つか CPU 名とか分かるくせに何で文字コードとかわらないんだ...
878 :
875 :2006/11/04(土) 17:23:39 ID:Z4GrE+jA
おっと名前を忘れてた
>>875 クライアントから入力→文字コード判定→振り分け
880 :
828 :2006/11/04(土) 17:44:26 ID:???
>>846 詳しくわかりやすい解説ありがとうございます!
define()はそんなに使わないので、高速でなくともまあいいのですが、
それよりも連想配列が遅いというのは、あんまりいい気分ではないですね。
連想配列、便利なだけに。
>>880 というか、連想配列に限らずPHPの変数は全部遅いんだよ。
882 :
nobodyさん :2006/11/04(土) 17:55:22 ID:+mcy38xB
重箱の隅突付く程度のパフォーマンス知識自慢はもうウンザリ
>>882 $_SERVER['QUERY_STRING']
>>883 まぁ、元々の質問がAPC関連=PHPのパフォーマンスに不満のある人、の場合だし
885 :
875 :2006/11/04(土) 18:05:17 ID:Z4GrE+jA
>>879 スクリプトを変換した EXE にファイルを D&D する程度なんで
ユーザに入力を求めるのは少し不自然かもしれないです.
けどほかに考え付かないので使ってみようかな.
>>885 どっちかっつーとWindowsAPIな話の気がするんだが…
>>885 ファイル受け取ってどうこうするんだったらその中身調べて
キャラクタセットをdetectするのが妥当じゃないのか?
おれは、Dungeons&Dragonsかとオモタ
889 :
nobodyさん :2006/11/04(土) 18:28:00 ID:Z9X2uAOu
セッション管理の外部ファイルを作成したところ、自身のファイルをうまく
呼び出せず困っています。なにかヒントがあればお願いします。
WIN XP + Apache 2.0.50 + PHP 4.3.7
[表示用ファイル test.php]
require("session.php");
<!-- セッション部 -->
<?= $session ?>
[session.php]
//セッションが開始されていなければ、フォームを表示
$session = "<form action=" . $thisfile . " method='post'>....."
$thisfile = $_SERVER["SERVER_NAME"] . $_SERVER["PHP_SELF"];
を指定すると <print>文では、localhost//test/test.php と正しく表示されるのですが
アドレスバーの表示は h
ttp://localhost//test/localhost//test/test.php となって
しまします。ちなみに
$thisfile = $_SERVER["PHP_SELF"];
だけだと、<print>文表示は //test/test.php アドレスバーは
h
ttp://test/test1.php となってともに not found です。
>>887 中身がテキストだなんて誰も書いてないと思う
>>889 > を指定すると <print>文では、localhost//test/test.php と正しく表示されるのですが
ホスト名とパスの間が「//」なのは全然正しくないと思う。
> $thisfile = $_SERVER["PHP_SELF"];
> だけだと、<print>文表示は //test/test.php
なんかApacheの動作が変だと思う。再インストールしてダメならバージョン変えてみては?
893 :
nobodyさん :2006/11/04(土) 18:42:49 ID:Z9X2uAOu
>>891 ありがとうございます。Apache 側の設定の問題でしたかっ!
Apache の設定の方を調べてみます
894 :
nobodyさん :2006/11/04(土) 18:47:42 ID:Z9X2uAOu
>>881 そんなおまえにこれをやろう。使い道は聞くな。
function php_internal_hash_func($key)
{
$hash = 5381;
for ($i = 0; $i < strlen($key); $i++) {
$hash = 0xFFFF & (($hash << 5) + $hash + ord($key{$i}));
}
return $hash;
}
function check_symbols_hash($arr)
{
for ($mask = 8; $mask < count($arr); $mask <<= 1);
$mask--;
$ret = array();
foreach ($arr as $val) {
$ret[php_internal_hash_func($val) & $mask][] = $val;
}
ksort($ret);
return $ret;
}
896 :
nobodyさん :2006/11/04(土) 20:42:46 ID:DqH0rqVh
指定したURLのWebページのhtmlソースの取得についてお聞きしたいのですが。
PHP-Manualの例を引用すると・・
<?php
// この例ではHTTPを通してURL上のHTMLソースを取得します。
$lines = file('
http://www.yahoo.co.jp ');
// 配列をループしてHTMLをHTMLソースとして表示し、行番号もつけます。
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
?>
これで、htmlのソースが表示できるのですが、file_get_contents()を
使った場合どのように記述すれば良いのかわかりません。
よろしければ、お教え願えませんか?
$lines = explode("\n",file_get_contents('
http://www.yahoo.co.jp '));
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
898 :
nobodyさん :2006/11/04(土) 21:35:36 ID:DqH0rqVh
>>897 なるほど。ありがとうございました。
あと、file_get_contents()を使う場合は配列に読み込むわけでは
ないですよね?それで、foreachを使わずにするために、fileでは
なく、file_get_contents()はどうかと思ったんですが、他の記述
方法はないでしょうか?
foreachを何で使いたくないの? forならいいの?
>>898 ようするにループでやらずに行番号付けたいってこと?
そうなると改行コードを置換とかしないといけないと思うけど、
連番付けながら置換ってちょっと面倒くさいよ?
なんでわざわざループが必要な処理をループ使わないでやりたいなんて思うのさ。
下らない質問で申し訳ありません。 PHPでWebを作る際に出力を全てprintやecho等でやっています。 こうして動的に出力される「ページのソース」を見ると無駄な改行がたくさん入っています。 何故改行が入ってしまうのでしょうか?原因不明の問題が出ないか心配です。 と書きながら原因思いつき&判明したフォー ----------------チラシの裏---------------- \n←この部分とか \n <?php \n function example() { \n } \n \n ?>←これ以下の \n←この部分 \n ----------------チラシの裏---------------- が出力されてたとです。 PHPが埋め込みスクリプトだと再認識したとです。 良い子のみんなはこんな質問しちゃだめですよ(´・ω・`)
902 :
875 :2006/11/04(土) 22:07:42 ID:Z4GrE+jA
>>886 そうですね自分もそんな気がしてたんですがWin32apiのことは全然知らなくて...
windowsに直接ロケールとか調べるコマンドあったらsystem()とか使おうと思ったんですけど
それもちょっと分からなかったんです
>>887 >>890 さんが言うとうり扱うファイルはバイナリファイルなんで文字コードを特定できないです.
>>902 もう出力ファイルは全部英語で吐き出してしまえ。
904 :
898 :2006/11/04(土) 22:47:49 ID:DqH0rqVh
>>899 ,900
いやぁ、forならいいかなぁって。すいません。foreachの使い方
がいまいち馴染めなかったので、言ってみただけです。
905 :
898 :2006/11/04(土) 22:52:44 ID:DqH0rqVh
連続ですいません。
>>900 行番号は別にいりません。ただhtmlのソースコードを取得したい
だけです。それで、file_get_contents()を使って、もっと
あっさりできないものかと思いまして。
>>905 echo file_get_contents("URL");
というか、おまえサンプルのソースの内容を全く把握できてないだろう。
908 :
898 :2006/11/04(土) 23:06:09 ID:DqH0rqVh
みなさまありがとうございました。 もう少し建設的なやりとりを交わせるようにがんばります。
909 :
nobodyさん :2006/11/05(日) 00:07:28 ID:bwOCiosn
PDOでDBにファイルを保存したり取り出したりする場合の質問です。
create table files (
id int not null auto_increment,
file longblob,
primary key (id)
);
で作ったテーブルにファイルを格納するところまでできたのですが、以下のコードで$fpにファイルハンドルが入らず、データがそのまま文字列として入ってしまいます。
$db = new PDO('mysql:host=localhost;dbname=hogehoge', 'user', 'pass');
$stmt = $db->prepare('select id, file from files where id = 1');
if (! $stmt->execute()) {
$info = $stmt->errorInfo(); echo $info[2];
}
$stmt->bindColumn('id', $id);
$stmt->bindColumn('file', $fp, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
var_dump($fp);
//fpassthru($fp);
//fclose($fp);
http://www.php.net/manual/ja/ref.pdo.phpの例12の通りだと思うのですが 、どのように直したら$fpにファイルハンドルが入るかわかる方いますか?
なあ、eAcceleratorって5.2で動かしてるひといる?
>>909 ファイルハンドラを保存できてんの?
保存したコード解らんからなんとも言えんけど
913 :
909 :2006/11/05(日) 00:47:00 ID:bwOCiosn
>>912 ファイルハンドラを保存というか、保存されているものは文字列(というかバイナリ)です。
以下、スクリプト自身をDBに保存する摩訶不思議なスクリプトです。
よろしければ、試してもらえるたら幸いです。
(インデントは全て全角スペースで書いてあるので、置換してください)
$fp = fopen(__FILE__, 'rb');
$db = new PDO('mysql:host=localhost;dbname=hogehoge', 'user', 'pass');
$stmt = $db->prepare('insert into files set file=:file');
$stmt->bindParam('file', $fp, PDO::PARAM_LOB);
// 挿入時はちゃんとファイルハンドラが使える。
if (! $stmt->execute()) {
$info = $stmt->errorInfo(); echo $info[2];
}
914 :
nobodyさん :2006/11/05(日) 01:02:22 ID:ByyhjYSA
すいません、10円ハゲを隠すコードのサンプルか何か書いてもらえますか? 10円 ハゲ PHP エロス 辺りでググッたのですが見つかりません。
hiddenで隠すやつは素人 セッションで隠すやつは玄人
916 :
909 :2006/11/05(日) 01:47:57 ID:bwOCiosn
試しにスクリプト自身ではなく、5MBくらいのファイルを913のコードで保存しようとすると、エラーメッセージで、 MySQL server has gone away (MySQLサーバーが消えました???) と言われます。 もう何かPDOでLOB扱うのは諦めるかもしれません。 他にMySQLでファイルを保存する方法にはどんなものがありますか?
mysql_query("insert into file_table values( $id, $file ) );
>>869 > 今、トラックバックスパムではないんですが、トラックバックを一度で複数送る研究を・・・
それがトラックバックスパムなんです。研究だろうと何だろうと。
>>874 みたいに興味持っちゃうお子さんがいるでしょ。
だから公共の場で教えてあげることはできないんです。
こんな晴れた日曜の朝に動かないものに対して バグだろうがバグじゃなかろうか議論なんて問答無用な話だ
>>921 そもそもmb以外の関数にマルチバイトの動作を求められても困る。
>>921 PHP始めたばかりの初心者だけどC/C++経験者のおいらから言わせてもらえば
×バグ
△仕様
○未実装
他の文字列関数にmb系関数がある以上日本語にはmb系関数を使うのが正しい。
しかしmb_addslashesは無いので未実装扱いが正統。
Shift_JISなんぞ国個別(今回は日本語)の個別コードに過ぎないので解釈不能で仕方が無いと思う。
ついでに言うとmb_addslashesが無いのであればmb_addslashesと同等の動作の物を自分で作成するか
PHPマニュアルにもあるようにSQLサーバ固有のエスケープ関数を使用するのが正しいと思う。
それでも問題が起こるのであれば、それはまた別の話
つづく
>>921 それはバグでもなければひろみちゅの勘違いでもなくて、
指摘された元々の文章を書いた人が
「PHPではSJIS日本語のエスケープにaddslashes()を使う」
と大嘘を書いたせい。
日記やブログを書く時は、十分に吟味しないと大恥書くよ。
件の記事のリンクが繋がらないので記事の全文が見れずはっきりとは言えないが。
「今夜分かるSQLインジェクション対策,」であるのならば記事の方が正しい。
>>921 のリンク先で批判している人が間違い。
>対策に「準備された文」(prepared statement) のことを書かないのは、どういうつもりなわけ?
確かに書くべきだと思うが
1:prepared statementはDBや上位インターフェイスによっては未実装かもしれない。(そういう)意味ではエスケープもアレだが
2:prepared statementはインジェクション対策というよりプログラムからSQL文作成をする場合の簡略化に本質があるとはず。
つまりprepared statementに対応していたとしても問題文字を埋め込んだ場合に必ずしもインジェクション対策にはならないのではないかという疑問がある?
>そんな方法が「一般的になっている」なんて書くなって。そんなのは、はじめっから間違ってるって書くべきこと。
「今夜分かるSQLインジェクション対策,」、つまり分かっていない人用だし、実際にそのような対策例が多いので=一般的で良いと思われる。
というかprepared statementが正しいという前提の元で批判しているこの人が間違い。
>「方向性は正しい」と言いながら「理解していないため」というのはどういう了見なわけ? 「方向性」って何? 方向性からして間違ってるんだって。
prepared statementが正しいという前提の元で(ry
記事はエスケープをするという方向性は正しいが本質を理解していないと完全な対策が取れないという事が言いたいのであろう。
すなわち文字列やaddslashesを理解していない人には完全な対策が取れな(ry 自爆(ry
>「HTMLを生成する段階でエスケープすればよいと考えている人」って何それ?
これは記事の説明が悪い。
記事は初心者にクロスサイトスクリプティングと一緒くたにしないように注意を喚起したかったのであろう。あれもエスケープするしね。
「SQLインジェクション対策,」を説明するのが目的である以上、 SQLインジェクションとは何故起こるのかを説明しなければならない。 説明する上では文字列やエスケープについての記述が必須になる。 何故起こるのかの本質を理解せずに「prepared statementを使用すれば良い」等という書き方になると. (全てのDB,SQL,インターフェイスで対策になっているか疑問だが) addslashesがバグとかいう誤解をする人が増えてしまうのではないかと思う。 また、別の件で本質が同じである同様の間違いをおかす人も増えてしまうのではないかと思う。 SQLインジェクションの本質を理解していれば単純なクロスサイトスクリプティング脆弱性は生まれないが、 prepared statementだけでは同じ間違いをおかしかねない。 ------------ここまでチラシの裏-----------
安定性重視のXCacheか…ちょっといいな。 うちでもAPCを使ってるが、月1くらいで再起動かけないと どうも動作が不安定になることが多くてちょっと困ってる…
>>928-929 別に高木は「prepared statementを使用すれば良い」っていう
書き方をしろなんて書いてないでしょ
Webアプリケーション対策のところにprepared statementを始めとする
セキュリティが考慮された上位DB抽象インターフェイスを使う事が
説明されてないっていう事がダメって言ってるわけで
何故起こるのかを書く事は必要だけどその対策方法が
低レベルAPIの対策方法しか書かれてなくて
しかもそれらがさも「一般的な対策」であるかのように
書かれてるっていうのが問題だってのが高木の言い分だろ
@ITの記事が説明不足だっていうのは正しい指摘だと思うよ
高木の「addslashesはバグだ」ってのもちょwおまwって感じだけど
>>932 まあ、そうですね。
そんなおいらも
>>901 みたいなアフォな事やってるフォー
901=925,928,929なんです(`・ω・´)シャキーン
高木氏の文に説明書いてあるけど顔見知りみたいだし(?)書いているのは個人日記みたいだし、
高木氏本人も自分専用チラシの裏程度の感覚で書いてるのかもしれないですしね。
>>933 901はかなりバカすぎると思いまっす!w
うにこーどなら問題は発生しないからこんな感じの関数作れば解決 function mb_stripslashes($str) { $enc = mb_detect_encoding($str, 'UTF-8,EUC-JP,SJIS'); $str = mb_convert_encoding($str, 'UTF-8', $enc); $str = stripslashes($str); $str = mb_convert_encoding($str, $enc, 'UTF-8'); return $str; }
>>935 そこでstripslashesするってことはaddslashes済みのデータってことだよね?
SJISデータにaddslashesするとデータが破壊されるから正常なUTF-8には変換できないよ。
それ、addslashesの間違いなんじゃ…
結局phpをSJISなんかで動かすヤツがバカってことでおk? >件の記事の件 まぁ俺は元々UFT-8使ってるから関係ないけど。
UFT-8ね、、、 釣られたよ俺の負けだ
939 :
937 :2006/11/05(日) 19:02:15 ID:???
うはwww orz
てか、mb てのもウザい。ちゃんと国際化設計やってほしいよな。
日本語であるために浪費した時間、プライスレス。
マルチバイト実装やってるのって誰なの?
パートのおばちゃん
>>940 php6はネイティブでunicodeサポートされる予定
PHP6っていつ出るんだ?
まだ仕様をどうするかについて議論してる最中だよ。
947 :
nobodyさん :2006/11/06(月) 02:10:13 ID:NtdVX8J9
PHPでPOSTのデータを動的に作る方法を教えてください。 受け側で $_POST['a'] == 'b'; なるようなソースを教えてください。
<?php $_POST['a'] == 'b'; ?>
(´ロ`)
ああごめん、=は1個 これで以下のスクリプトでどこでも$_POST['a']がbとして使えるよ
951 :
nobodyさん :2006/11/06(月) 02:36:04 ID:NtdVX8J9
(´ロ`) ありがとう。
952 :
nobodyさん :2006/11/06(月) 03:27:09 ID:mhsSMHja
ちょっと笑った
PHP6もがらっとかわってるの? 4→5はオブジェクト周りがかなりJavaっぽくなったが、 また6で覚えなおすこと多くなるのかな。
4から5はそんなに変わってないでしょ? 6への移行はなかなか進まないんじゃないかな。 あまりしらないんだが、そんな予感。
いや、4から5はだいぶ変わったよ。 6で気になるとこはgotoとネームスペースかな。 gotoは無くていいけど、ネームスペースは欲しい。 デリミタは「:::」になるみたいね。
6では古臭い旧バージョンとの互換オプションを全部消そうぜ、 って話になってるよね。register_globalsをはじめ、関数エイリアスとか。
join()とかsizeof()使ってるよ・・・( ´Д`)
結局、PHP6でのParrot採用は提案だけで終わっちゃったのかな? 処理速度が最低5倍、最大30倍も向上するらしいって話だったけど。
デリミタ:って何で使われないのかしら
高級言語だから
962 :
nobodyさん :2006/11/06(月) 12:08:48 ID:rJsIKc5I
index.phpからhoge.phpをincludeしたとします さらにhoge.phpの中にconfig.phpをincludeする文があるのですが、 これってincludeしてくれるんでしょうか?
963 :
962 :2006/11/06(月) 12:10:06 ID:rJsIKc5I
書き忘れました、PHPです
>>962 するよ。
>>963 いや、PHP以外の質問されても困るけどさ。
どうせ書くならPHPのバージョンとかその辺りを…
perlのMethPost、ReadParseに相当するものはありますでしょうか? 参考書読んでもわからないもので。
perl知らんけど $_SERVER['REQUEST_METHOD'] / getenv('REQUEST_METHOD'') func_get_args() でどうかしら
>>966 Perlの機能で質問するならMethPost、ReadParseがどういう機能なのか説明しなよ。
なんでPHP知ってる人がPerlのしかも標準でないライブラリについて知ってると思うのさ。
MethPost → ($_SERVER['REQUEST_METHOD'] == 'POST')
ReadParse → 標準で自動的に$_GETと$_POSTに格納される。
ReadParseってGET/POSTの変数を受け取るやつだったのね
プログラムの設計について質問です。 登録フォームなどで フォーム(form.php)→入力内容失敗(フォーム上に表示)→成功・送信完了(entry.php) と言うように入力判定を登録フォーム上に表示する仕様がよく見かけますが、 これは以下のような考え方でいいのでしょうか?(form.phpに記述するとして) if($name=""){ echo"名前が入力されていません" }else{ $_SESSION[name]=$name; header(location: entry.php); }
>>972 $name = ""じゃなくて$name == ""な
俺だったらわざわざロケーションするくらいなら
同じファイルで値チェック+成功後の処理もやっちゃうけどね
974 :
972 :2006/11/06(月) 15:11:30 ID:???
>>973 すみません、結構記述ミスがありましたね。。
それで同じファイル上で値チェック+成功後の処理をすると
デザイン面などの編集がしづらいんです。
また、間に確認するページを入れた場合など。
それで、sessionで保持してロケーションするのが良いのかな?
っと思い、設計の質問をした次第です。
976 :
972 :2006/11/06(月) 15:54:43 ID:???
>>975 わかりました。胸のつかえが取れました。ありがとうございます。
>>976 entry.phpで、session_destroy(); 忘れるなよ
>>964 sesison fixation の脆弱性になるんじゃまいか?
PEARのコードで書くけど (1) $num = $db->getOne("SELECT COUNT(*) FROM hoge"); (2) if(!DB::isError($rs = $db->query("SELECT * FROM hoge"))){ $num = $rs->numRows(); } 1と2ってどっちが早い? 行数にもよると思うけど。
>>974 if($name==""){
echo"名前が入力されていません"
}else{
include "entry.php";
exit;
}
でもいいんじゃないの
次スレマダー
>>979 DB板で聞けやーって感じだが
count(*)の方がずっと速い。
行数が極端に少なければ差が出ないかも。
<head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title><?php echo "$title" ?></title> <link href="style.css" type="text/css" rel="stylesheet" /> </head> さーせん、コレで書いてるのになぜかブラウザはshift_jisで表示してしまいます。 考えられる原因は何でしょうか?
ぎゃああああああああああああ php.iniのdefault_charset変えたら行けました。 死んできます。
そこまでびびらなくても。
986 :
nobodyさん :2006/11/06(月) 17:55:24 ID:L/507IWY
携帯無料サイトなどによくある空メール機能を作りたいのですが、 メールフォームを使えば楽なのですが、携帯利用者にとって 自分のメールアドレスを打つのはご法度だと考えております。 どなたかアドバイスお願いいたします。
mailtoのリンクを用意すればいいだけだろ?
ワロタ
>>986 cronでやるのは素人
ヒント:alias .forward .qmail
男なら黙って伝書鳩
まだ伝書鳩使ってるんですか? php-5.2.0からは糸電話が実装されたので非常にセキュアです。 dos攻撃にも強いですよ。
糸電話のRFCは?。 伝書鳩 RFC 1149 鳥類キャリアによるIPデータグラム送信標準
鳥インフルエンザが心配だな。 パケットが落ちる可能性がある。 しかも、インコとか暗号しゃべれないでしょ?平文は不安だよ。 やっぱり糸電話は物理層でつながっている安心感が違うよ。 インフラでコストがかかるけど、うちは全部 ”糸”だよ。
>>986 それ、PHPの質問じゃないぞ。
.forwardとかでメールの内容をスクリプトに渡してやって
正規表現で相手のメールアドレス抽出。
PHP STDINあたりで検索かけてみ?
>>996 PHPの質問じゃないのにPHPで検索すんの?
998 :
986 :2006/11/06(月) 21:06:11 ID:???
PHPに関連した質問ですがなにか?
>>997 受け取った後は言語はなんでもいい。もちろんPHPでもできる。
問題はスクリプトにどうデータを渡すか。これはPHP全然関係ない。
1000 :
986 :2006/11/06(月) 21:07:06 ID:???
ありがとう諸君! For ever you!!!1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。