トップページphp
1001コメント308KB

【PHP】下らねぇ質問はID出して書き込みやがれ 81

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2009/02/18(水) 21:09:16ID:xNLzAD7T
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0002nobodyさん2009/02/18(水) 21:09:49ID:xNLzAD7T
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0003nobodyさん2009/02/18(水) 21:10:57ID:xNLzAD7T
■過去ログ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/
【PHP】下らねぇ質問はID出して書き込みやがれ 79
http://pc11.2ch.net/test/read.cgi/php/1231850905/
【PHP】下らねぇ質問はID出して書き込みやがれ 78
http://pc11.2ch.net/test/read.cgi/php/1230026935/
【PHP】下らねぇ質問はID出して書き込みやがれ 77
http://pc11.2ch.net/test/read.cgi/php/1228667259/
【PHP】下らねぇ質問はID出して書き込みやがれ 76
http://pc11.2ch.net/test/read.cgi/php/1226517332/
【PHP】下らねぇ質問はID出して書き込みやがれ 75
http://pc11.2ch.net/test/read.cgi/php/1224168721/
【PHP】下らねぇ質問はID出して書き込みやがれ 74
http://pc11.2ch.net/test/read.cgi/php/1221909788/
【PHP】下らねぇ質問はここに書き込みやがれ 73
http://pc11.2ch.net/test/read.cgi/php/1220440493/
【PHP】下らねぇ質問はここに書き込みやがれ 72
http://pc11.2ch.net/test/read.cgi/php/1218855685/
【PHP】下らねぇ質問はここに書き込みやがれ 71
http://pc11.2ch.net/test/read.cgi/php/1216291372/
【PHP】下らねぇ質問はここに書き込みやがれ 70
http://pc11.2ch.net/test/read.cgi/php/1214356448/
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
【PHP】下らねぇ質問はここに書き込みやがれ 68
http://pc11.2ch.net/test/read.cgi/php/1209822736/
【PHP】下らねぇ質問はここに書き込みやがれ 67
http://pc11.2ch.net/test/read.cgi/php/1207863515/
【PHP】下らねぇ質問はここに書き込みやがれ 66
http://pc11.2ch.net/test/read.cgi/php/1205655807/
0004nobodyさん2009/02/18(水) 21:11:25ID:xNLzAD7T
関連リンク
■本家マニュアル   http://www.php.net/manual/ja/
■日本PHPユーザ会 http://www.php.gr.jp/
■PEARマニュアル  http://pear.php.net/manual/ja/
■メーリングリスト   http://ns1.php.gr.jp/mailman/listinfo/
■ZFマニュアル    http://framework.zend.com/manual/ja/
■Smartyマニュアル  http://www.smarty.net/manual/ja/

(以下英語)
■Zend本家      http://www.zend.com/
■Zend Framework  http://framework.zend.com/
■php | architect   http://www.phparch.com/
■Smarty       http://www.smarty.net
■Smartyマニュアル http://smarty.php.net/manual/en/
■PECL本家(英語) http://pecl.php.net/
0005nobodyさん2009/02/18(水) 21:11:49ID:xNLzAD7T
【簡易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プログラムとして実行された結果になる。
0006nobodyさん2009/02/18(水) 21:12:14ID:xNLzAD7T
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に保存?
 → 好きにしてください
0007nobodyさん2009/02/18(水) 21:12:52ID:xNLzAD7T
とりあえず以上かな?
不備があれば追記してください
0008nobodyさん2009/02/18(水) 21:32:51ID:???
(。・ω・)もつかれ〜ふりふり
0009nobodyさん2009/02/19(木) 01:04:54ID:DyMy4w1i
この人引き取ってくれませんか?><。

http://mixi.jp/view_bbs.pl?id=39866490&comm_id=244081&page=all
0010nobodyさん2009/02/19(木) 01:13:59ID:???
まず僕をMIXIに入れて!話はそれからしましょ
0011nobodyさん2009/02/19(木) 01:28:40ID:???
すいません、ボクもmixiに入れてもらっていいですかね?
0012やまは ◆2ch.net/cU 2009/02/19(木) 07:17:48ID:+vYGjReT
こんにちは。

ディレクトリの中身を全て表示するスクリプトを作っています。

もし、そのディレクトリの中にディレクトリがあればそれも表示するというスクリプトを書きたいのですがうまくいきません。

open.php
/test/index.php
log.dat
test2/test.php

例えば、こうなっているとします。
現在はopen.phpにいて、test2のディレクトリのtest.phpを表示したいです。【続く】
0013やまは ◆2ch.net/cU 2009/02/19(木) 07:23:16ID:+vYGjReT
【続き】
<?php
$dir = "./";
$i=0;
while($allfile = readdir($dir)){
if($allfile !== "." && $allfile !== ".."){
#これで、現在のディレクトリ表示
echo $allfile."<br>";
if(is_dir(($dir.$allfile)){
echo $allfile;

}
}
}
?>

これでは、現在のディレクトリにある、
『test』ディレクトリと『open.php』しか表示されません。
どうすればいいでしょうか?
よろしくお願いします
0014nobodyさん2009/02/19(木) 07:49:11ID:???
>>13
再帰させる
0015nobodyさん2009/02/19(木) 09:39:52ID:???
指定ディレクトリ配下を一覧表示するのに
わざわざ再帰とかありえない
WINの場合はdirだったか?find部分をおきかえれ

$path = dirname(__FILE__);
echo str_replace($path,"",shell_exec("find ".$path));
0016nobodyさん2009/02/19(木) 09:43:41ID:???
指定ディレクトリ配下を一覧表示するのに
わざわざシェルコマンドとかありえない
0017nobodyさん2009/02/19(木) 09:47:59ID:???
>>15
そんなのでわざわざコマンドを叩く方がありえない
0018nobodyさん2009/02/19(木) 10:44:37ID:???
ディレクトリ一覧表示と階乗計算は再帰処理が一般的
0019nobodyさん2009/02/19(木) 10:48:03ID:???
指定ディレクトリ配下を一覧表示するのに
わざわざ再帰とかありえない
0020nobodyさん2009/02/19(木) 11:01:36ID:???
再帰使ってリンク数見て判断するのはプログラマーとしては定番だから覚えておいて
損はない
0021nobodyさん2009/02/19(木) 11:08:49ID:vF1JGCVl
GIGAZINEとかTechCrunchって ブログツールなに使ってるの?
両方ともPHPっぽいから Wordpress だろうか?

http://gigazine.net/
http://jp.techcrunch.com/
0022nobodyさん2009/02/19(木) 11:17:46ID:???
まぁ、コマンドもどうかと思うけど、再帰もありえんわ。
0023nobodyさん2009/02/19(木) 11:18:31ID:???
>>21
その辺のフリーツールなんて使わないよ。
スケールできないじゃん。
0024nobodyさん2009/02/19(木) 11:21:30ID:???
>>22
プロの俺が再帰でいいというんだから間違いない
0025nobodyさん2009/02/19(木) 11:23:02ID:???
>>21
Gigazineはともかく下のTechCrunchはヘッダに書いてあるじゃん
generator WordPress 2.7って
0026nobodyさん2009/02/19(木) 11:25:02ID:???
>>23

TechCrunch の方はコメント欄空でポストしたら WordPress のエラーメッセージが出た。
いろいろ改造してるのかも。

>>25
なんだ、ヘッダに書いてたか
0027nobodyさん2009/02/19(木) 11:28:57ID:???
じゃあGIGAZINEにはプログラマーがいるってことですか?
0028nobodyさん2009/02/19(木) 11:30:07ID:???
そりゃ聞いてみないとわからないだろw
その辺のCMS使ってるかもしれないしな
0029nobodyさん2009/02/19(木) 11:41:17ID:???
4gamerはCMSですか?
0030nobodyさん2009/02/19(木) 11:46:23ID:???
>>29
それはぜひ知りたい。

こういう企業向けのシステムとかあるのだろうか?
0031nobodyさん2009/02/19(木) 11:55:59ID:PiBlHerA
MVCの基礎を学びたいのですがおすすめのサイトが御座いましたら教えてください
0032nobodyさん2009/02/19(木) 11:59:37ID:2O78I8s0
linuxでローカルサーバ構築してPHPのテストしてる方に質問です
私はVirtualPCでvineを使って開発しているのですが
OpenSSLをアンインストールできなく、自分の入れたいバージョンが扱えないので不満です
同じようにlinuxを使用している方はどのディストリビューションをご使用されていらっしゃいますか?
0033nobodyさん2009/02/19(木) 12:02:03ID:???
CentOS使ってるな
でもOpenSSLアンインストールできないってどういう事?
いくらでも消せると思うんだが・・・
0034nobodyさん2009/02/19(木) 12:08:22ID:???
>>31
オブジェクト指向は理解してますか?
理解していて最初から学びたいのなら、本を買った方が早いかも。
サイトはいっぱいあるので適当に2〜3個見てみて具体的に分からないところを質問した方が良い。

>>32
PHPの質問?
0035nobodyさん2009/02/19(木) 12:39:05ID:???
MVCとオブジェクト指向って被ってる領域もあるけど直接は関係ないだろ?
0036nobodyさん2009/02/19(木) 12:57:34ID:???
オブジェクト指向のサンプル入り解説サイトはよく見かけるようになったが
MVCのサンプル入り解説サイトは見たことがないね
本でも一冊しか知らない
0037nobodyさん2009/02/19(木) 13:01:34ID:???
オブジェクト指向は
$this-> こんな感じですね
0038nobodyさん2009/02/19(木) 13:04:11ID:???
>>37
それと使う時にnewするって知っておけば、あとは何も勉強しなくていいよな。
0039nobodyさん2009/02/19(木) 13:05:03ID:???
ぶっちゃけここのスレの住民にMVC分かるやつはいない
0040nobodyさん2009/02/19(木) 13:05:21ID:???
いや、普通に使ってますがw
0041nobodyさん2009/02/19(木) 13:12:59ID:???
おれが昔から自作してたものがMVCと似通ってることに最近気付いた
0042nobodyさん2009/02/19(木) 13:14:22ID:???
***ここは初心者が初心者にハッタリで自慢するインターネットです***
0043nobodyさん2009/02/19(木) 13:22:32ID:DiCiMFeX
サーバの状態を監視するツールって何使ってますか?
できればWebで確認できるやつがあればいいんですが
0044nobodyさん2009/02/19(木) 13:23:03ID:???
ある
0045nobodyさん2009/02/19(木) 13:25:40ID:???
>>36
基本的にフレームワークの本に載ってるよ
0046nobodyさん2009/02/19(木) 13:26:02ID:???
初心者なオレがMVCをエスパーした。
MVCとは、初心者でもうm
0047nobodyさん2009/02/19(木) 13:30:04ID:???
つうか、きょうび当たり前すぎてMVCを口にするの恥ずかしいだろ
その次のアーキテクチャについて話しようぜ
0048nobodyさん2009/02/19(木) 13:37:13ID:???
すれたい が よめない ひと へ
http://pc11.2ch.net/test/read.cgi/php/1229960175/
0049nobodyさん2009/02/19(木) 14:49:45ID:Y6HkRPoJ
Ubuntu上にPEARのライブラリをインストールしたのですが、
なぜか /usr/share/php にインストールされてしまいます。
これを /usr/share/php/PEAR にしたいのですが、どのように設定すればよいのでしょうか?
0050nobodyさん2009/02/19(木) 14:51:13ID:???
パス指定してやればいいじゃん
0051nobodyさん2009/02/19(木) 14:59:40ID:4v4/gEqf
$str = '1' * 8;
print $str;

とした場合、

8

になってしまいますが、

'11111111'

のように出力させるにはどうすればよいでしょうか?
0052nobodyさん2009/02/19(木) 15:00:41ID:???
>>51
str_repeat
0053nobodyさん2009/02/19(木) 15:11:16ID:???
>>40
$str = '1' * 8

これで

'11111111'

が出力されるだろうという発想が凄い。俺には無いわ。
0054512009/02/19(木) 15:14:06ID:???
>>52
即レス、サンクス。助かりました。
0055nobodyさん2009/02/19(木) 15:15:47ID:???
>>53
rubyだと動いちゃうんですよ、それで。
0056nobodyさん2009/02/19(木) 15:17:26ID:???
>>53ってPHPしかしらないの?w
0057nobodyさん2009/02/19(木) 15:26:43ID:???
こういうゴミみたいな関数が役立つんだよな
Javaでやろうと思ったらめんどくさくてしょうがない
0058nobodyさん2009/02/19(木) 15:37:45ID:???
>>55
マジでか!
世の中何があるかわからねーな。

>>56
すまん、勉強不足だ。
C/Java/PHPしかわからないんだ、許してくれ。
0059nobodyさん2009/02/19(木) 15:38:26ID:???
perlだと
$str = '1' x 8;

うう〜ん直感的にわかりやすい
0060nobodyさん2009/02/19(木) 15:40:00ID:???
PHPの場合は''や""で囲ってあっても
計算式であればintになるし、連結であればstringになるからなぁ
0061nobodyさん2009/02/19(木) 15:40:47ID:???
>>58
vb/c/c++/java/cobol/python/ruby/perl/php/basic
これぐらい勉強してからでなおしてこい
0062nobodyさん2009/02/19(木) 15:42:39ID:???
>>61
今時VBいるか?C#だろう、そこは。
0063nobodyさん2009/02/19(木) 15:43:46ID:???
>>62
>>61は三十路VBおじさん
0064nobodyさん2009/02/19(木) 15:43:48ID:???
>>59
Perlもそれで
'11111111'
になるのか?
0065nobodyさん2009/02/19(木) 15:52:17ID:???
>>62
銀行系ではVBも使われてるの知らんのか
0066nobodyさん2009/02/19(木) 15:57:42ID:???
>>65
今時ありえねーよ。
0067492009/02/19(木) 15:58:00ID:Y6HkRPoJ
>>50
毎回指定するということでしょうか?
どこかに設定ファイルがあるのでしょうか?
0068nobodyさん2009/02/19(木) 16:02:26ID:???
>>67
いや、インストールする場所を指定しろってことだよ
何がしたいの?
/usr/share/php/PEARにインストールしたいんじゃないの?
0069nobodyさん2009/02/19(木) 16:04:55ID:???
>>66
学生は黙ってろ
0070nobodyさん2009/02/19(木) 16:06:01ID:???
>>69
待てよ。
VBつっても.netだよな?6じゃねーよな?
0071nobodyさん2009/02/19(木) 16:09:19ID:???
>>65は既存アプリのこと言ってるんだろ。既存言い出したらなんでもあるわな
0072nobodyさん2009/02/19(木) 16:22:50ID:???
>>64
http://q.hatena.ne.jp/1195018503

perlだと'1' x 8 で '11111111'で、
ruby、pythonだと'1' * 8 で '11111111'だな。
0073nobodyさん2009/02/19(木) 18:53:18ID:wRj5eNSW
ファイルの文字コードを調べたいのですが
何かそのような関数はありませんでしょうか?
0074nobodyさん2009/02/19(木) 19:09:05ID:???
>>73
マニュアルのmb_〜からはじまる関数を読み漁れば見つかりますよね
0075732009/02/19(木) 19:12:43ID:wRj5eNSW
>>74
先ほどから見てますが検討がつきません
一度文字列に格納してから調べろということなのでしょうか?
0076nobodyさん2009/02/19(木) 19:17:38ID:???
>>73
何のために調べるの?
0077732009/02/19(木) 19:21:27ID:wRj5eNSW
>>76
ファイルをPHPの内部エンコードにあわせるのが目的です
mb_convert_encodingの第三引数にautoを渡したところ
うまく動作しなかったので
取得したものを第三引数にセットしようと思った次第です
0078nobodyさん2009/02/19(木) 19:22:37ID:???
>>77
用意したファイルを内部エンコードにしておけばいいんじゃね?
0079732009/02/19(木) 19:23:17ID:wRj5eNSW
>>78
外部から第三者ガアップロードするものなので不可能なんです
0080nobodyさん2009/02/19(木) 19:33:59ID:???
>>73
ファイルを読み込む前にチェックするっていうのは現実的じゃない。
それはわかるよな?

判定コードを書くのが面倒だったら nkfに通すとか。
0081nobodyさん2009/02/19(木) 19:40:07ID:???
autoは設定されてないと使えないから
"SJIS,EUC-JP,UTF-8,JIS"みたいに書いてみそ
0082emi2009/02/19(木) 19:46:09ID:62n5Tebm
スレ違いだったらすみません。質問です。
PHPとjavascriptを連携させるにはどうしたらいいのでしょうか。
<?php
$fp = fopen('http://自分のHP/GPS/20090109.txt', 'r');
$count = 0;
$remove_row_list = array(1, 2, 3, 4);
while ($data = fgetcsv($fp, 10000)) {
if (!in_array($count % 5, $remove_row_list)) {
echo $data[1] ."<br>\n";
echo $data[2] ."<br>\n";
echo $data[4] ."<br><br>\n";
}
{
$count++;
}
}
fclose($fp);

?>
0083nobodyさん2009/02/19(木) 19:51:14ID:???
>>82
そのソースのどこにJavaScriptが出てきてるんだ?
0084822009/02/19(木) 19:53:50ID:/38upbVh
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=[APIkey]" type="text/javascript"></script>
<script src="c.php" type="text/javascript">
//<![CDATA[

function load() {
if (GBrowserIsCompatible()) {

//表したい場所の地図の表示
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(○,△), 16);
    //○=PHPのデータ $data[2]、△=PHPのデータ $data[4] を出したい
//特定の箇所にピンを立てる
var marker = new GMarker(new GLatLng(○,△));
map.addOverlay(marker);
}
}

//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 500px"></div>
</body>
</html>
これらをまとめてHTMLで表したい場合どのようにすればよいのでしょうか。
0085nobodyさん2009/02/19(木) 19:54:13ID:???
>>82
連携してJavaScriptに何やらせたいのか書かないとわからん
サーバでPHP処理→ブラウザでJavaScript実行の順番はわかってるのか?
0086nobodyさん2009/02/19(木) 19:56:22ID:???
var data2=<?=$data[2]?>;
var data4=<?=$data[4]?>;

//表したい場所の地図の表示
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(data2,data4), 16);
    //○=PHPのデータ $data[2]、△=PHPのデータ $data[4] を出したい
//特定の箇所にピンを立てる
var marker = new GMarker(new GLatLng(data2,data4));
map.addOverlay(marker);

でOK
0087732009/02/19(木) 19:56:55ID:???
>>80
レスどうもありがとうございます
kccコマンドが使えるのですができればコマンドラインは回避したいです

>>81
どうもありがとうございます
JISだとだめみたいだったのでISO-2022-JP,SJIS,EUC-JP,UTF-8
とやったところ4種類に対応することができました
全てに対応させるのは限界がありそうなので妥協してこの方法にしたいと思います

皆さんどうもありがとうございました
0088nobodyさん2009/02/19(木) 19:56:58ID:???
>>82
その手の質問はよくあるけど、結論「無理」
できても、PHPでJavaScriptを書き出すくらい(変化に応じて書き出せる)
PHPから動的に読み込むにはAjaxを使えばできる

ちなみにその辺使うなら、ある程度JavaScriptは勉強しておいたほうがいい


関係ないが、無駄にAjax使いすぎるやつがいてうぜぇ・・・
しかも、JavaScriptをPHPのechoで吐き出してるから修正すらダルい
0089nobodyさん2009/02/19(木) 20:04:10ID:???
その修正、手でやんのか?
まるっとキャプチャしちまえばいいじゃねぇか
0090nobodyさん2009/02/19(木) 20:05:07ID:nJvgqLn9
sjsやeucで作られたスクリプト中に
echo "あ";
echo 'あ';

というを"と ' を使ったら書き方をするとクロスサイトスクリプティングが発生するみたいなのですが
これはなぜでしょうか?
0091822009/02/19(木) 20:06:16ID:/38upbVh
>>85
PHPのほうのテキストデータはサーバから読み込んだものなので
ブラウザからPHPで処理できるのかと…
>>88
やはり無理なのでしょうか?
すみません初心者なものなので知識はないのですが↓
でしたらPHPで出力したデータをjavascriptで扱うにはどうすべきなのでしょう?
0092nobodyさん2009/02/19(木) 20:06:50ID:???
ダメ文字でググれ
0093nobodyさん2009/02/19(木) 20:08:25ID:???
>>91
PHPでJavaScriptを書き出せばいいんじゃね?一番簡単な方法なら


function javascript() {

<?php
for($i = 0 ; $i < 5 ; $i++) {
echo "var test[$i] = '{$array[$i]}'\n";
}
?>

}
0094nobodyさん2009/02/19(木) 20:20:19ID:???
>>90
>というを"と ' を使ったら書き方をすると
この辺日本語で頼むわ
0095902009/02/19(木) 21:13:27ID:???
すいません書き直します

echoを使うとき「"」で文字列を囲むのと、「'」で文字列を囲む記述がありますが
この"と'を統一せず、入り組んで使うとsjisとeucではクロスサイトスクリプティングになるのですがなぜなんでしょうか?


echo "テスト";
echo "こんにちは";
echo 'はじめまして';
echo "ありがとう";
0096nobodyさん2009/02/19(木) 21:17:53ID:???
>>95
その質問は間違っている。
その例に出てきたもので、XSSが起きるわけじゃない。
しかし、君にそのクイズを出した人が言わんとしていることには二つ以上の可能性がある。
一つは、htmlspecialcharsのENT_QUOTESとENT_COMPATの動作の問題
もう一つはSJISの5Cの問題。
他になんか意図があるかもしれんが、仮定が間違ってるので、何を言っても意味がないだろう。
0097nobodyさん2009/02/19(木) 21:19:55ID:???
あぁ、ちなみにHTML要素内の5CでXSSは起きない。
0098902009/02/19(木) 21:24:50ID:???
一応参考URLも載せておきます
ttp://d.hatena.ne.jp/harupu/20060328#p1
どなたかお願いします
0099nobodyさん2009/02/19(木) 21:25:53ID:SUg9mjPG
csv、tsv、xml、jsonなどのデータフォーマット以外にphpで扱えるデータフォーマットを教えてください
0100nobodyさん2009/02/19(木) 21:26:33ID:???
すいませんIDがJPG
0101nobodyさん2009/02/19(木) 21:30:18ID:???
>>98
そのURLのソース試してみたか?
問題ないぞ。
0102nobodyさん2009/02/19(木) 21:31:03ID:???
>>99
何だって良いんじゃない?
<>sv なんてのも可だし
0103nobodyさん2009/02/19(木) 21:32:32ID:???
つうか、htmlspecialcharsの第2引数と第3引数をちゃんと指定していれば問題なし。

シングルクォートとダブルクォートをミックスすると表示は崩れるがXSSはできない。
0104nobodyさん2009/02/19(木) 22:20:00ID:???
>>82
echo htmlspecialchars($data[1])
echo htmlspecialchars($data[2])
0105nobodyさん2009/02/19(木) 22:25:13ID:NhJwmPwv
DWでPHP書いてますがeclipseで開発するメリットを教えてください
0106nobodyさん2009/02/19(木) 22:27:41ID:???
ない
0107nobodyさん2009/02/19(木) 22:42:26ID:???
DWの方が絶対良い
データベースとか楽に構築できるしね
0108nobodyさん2009/02/19(木) 22:56:12ID:???
>>105
スレチと思ったが開発環境スレが落ちてるな
Eclipseのいいところは、
クラスや関数のアウトライン参照、コンテキストに沿ったコード補完、リファクタリング(まだまだ貧弱だが)、
ブレークポイントやステップ実行、その際の変数参照、
プラグインを導入すればバージョン管理システムやDBMSともIDE上から作業できる
これらに興味がなければ無理して乗り換える必要もないかな
0109nobodyさん2009/02/19(木) 23:01:15ID:???
DWでもCVSやSVNと接続できるけどな。
PDT使ったら、DWには戻れない。

まぁ、でも、サイトにすぐアップできるとか、いいよね。
でも、コードカラーリング崩れない? > DW
0110nobodyさん2009/02/20(金) 00:57:08ID:???
DWはIDEじゃないから比較するものじゃないでしょ
使ったことないから知らないけどデバッガとかついてないでしょ?
0111822009/02/20(金) 01:21:04ID:w405pQbs
>>86
>>104
ありがとうございます。
あと、たとえば$data[2]はたとえば3645.5218のような数字なのですが
桁を変えて36.455218にしたうえで10進から60進にしたいんです。
度 = int(36.455218) = 36
分 = int(0.455218 * 60) = int(27.31308) = 27
秒 = int(0.31308 * 60 *1000) / 1000 = 18.7848
= 36°27′18.7848″といったような感じにしたいんです。
0112nobodyさん2009/02/20(金) 01:37:44ID:r16tK4jF
Smartyの質問なのですが、、PHPと関連するので質問させていただきます。

テンプレートを表示する時
$smarty->display("index.html");

で表示できますが、display()の中を変数にする事って出来ないでしょうか?
それが出来たら、DBに保存しているHTMLをSmartyに反映させることが
出来るのですが、$smarty->display($html);とする方法では無理でした。
0113nobodyさん2009/02/20(金) 02:41:12ID:???
demiru
0114nobodyさん2009/02/20(金) 05:22:05ID:nLAMcH0P
PHPのメモリって勝手に開放されるのですか?
デストラクタでunsetとかしないでも大丈夫ですか?
0115nobodyさん2009/02/20(金) 07:29:32ID:???
自動的に開放する。
無闇にunsetすると非効率になることが多いらしい
が、処理時間の長いジョブとかの場合は開放した方がいい場合もある
0116nobodyさん2009/02/20(金) 08:38:58ID:???
>>112
http://www.smarty.net/manual/ja/template.resources.php#templates.from.elsewhere
これでできないか?
0117nobodyさん2009/02/20(金) 09:18:57ID:???
はい?
$template = 'index.html';
$smarty->display($template);
で普通にできるのでは?
0118nobodyさん2009/02/20(金) 10:16:20ID:P+ZCl9Zr
昨日今日からの初心者です。
<html><body>
<?php
if(!適用条件)
{ echo "適用外"; exit;}
// 適用条件内
...
?>
</body></html>
と書くと適用条件外の場合"</body></html>"が出力しないようなのですが仕様なのでしょうか?
その場合回避策としてタグの終りにジャンプとか抜けるみたなことは出来るのでしょうか?
(適用条件内を1スコープにして括弧で括る、は出来ればしたくないので…)
0119nobodyさん2009/02/20(金) 10:29:22ID:???
>>118
exitじゃなくて、goto ラベル;にしたらいいよ
0120nobodyさん2009/02/20(金) 10:39:43ID:???
>>119
5.3以降でしか使えない変な物を教えるな

>>118
条件外の時はexitしてるからそれ以降が実行されないので
それ以降の</body></html>が出力されない
そういう風に書くなら

if (適用条件) {
 条件内処理
}
else {
 条件外処理
}
にすればいい
あと、こっちのスレのがオススメ
http://pc11.2ch.net/test/read.cgi/php/1227303362/
0121nobodyさん2009/02/20(金) 10:45:06ID:???
条件内処理をブロックに入れたくないって言ってるんだから、>>120は無理でしょ。

せめて、
{ echo "適用外</body></html> "; exit;}
だな。
0122nobodyさん2009/02/20(金) 11:05:37ID:???
低級者向け:関数化すれ
中級者向け:テンプレエンジン使え
上級者向け:フレームワーク使え
0123nobodyさん2009/02/20(金) 11:05:49ID:???
いや、なんでそこでexit使うか分からんな。
>>118はexit使わなくても問題ないし。
0124nobodyさん2009/02/20(金) 11:06:54ID:/aL6hv6c
>>122
逆じゃない?PHPで自分で作れないからフレームワーク使うんだろ?
0125nobodyさん2009/02/20(金) 11:06:57ID:???
exitしないと、適用外のときでも、適用内の出力がまざっちまうじゃねぇか
0126nobodyさん2009/02/20(金) 11:08:20ID:???
まず、初心者がくくりたくないとかいうわがままを許していいのかってことじゃねぇか。
0127nobodyさん2009/02/20(金) 11:10:01ID:???
>>125
適用外のときは別途処理すればよくね?
0128nobodyさん2009/02/20(金) 11:10:28ID:???
>>118
なぜ「出来ればしたくない」のか聞かせてくれ。
0129nobodyさん2009/02/20(金) 11:18:07ID:???
>>127
詳しく
0130nobodyさん2009/02/20(金) 11:23:24ID:P+ZCl9Zr
回答・説明ありがとうございます。
取りあえず出来る書き方で書いて、天に祈りが届いたと思ってPHP5.3を待つ事にします。

>>128
Cで例外処理の場合はgoto文を使いたい(条件文が増えるとネストが深くなったりコードが重複したりするので)
みたいなものです、プログラム思想みたいなものなので余りこれ以上の突っ込みはご勘弁を…
0131nobodyさん2009/02/20(金) 11:25:54ID:???
gotoの方がよっぽど悪質だよww
0132nobodyさん2009/02/20(金) 11:34:03ID:???
try-catch
0133nobodyさん2009/02/20(金) 11:39:58ID:???
こんなところでtry-catchを持ち出そうとするからPHPerは糞だって言われるんだ
0134nobodyさん2009/02/20(金) 11:41:19ID:???
>>133
すまん
例外処理と聞いて反射的に貼り付けただけなんだ
0135nobodyさん2009/02/20(金) 11:56:07ID:???
>>130
それは貴方のロジックとかが悪いだけ
0136nobodyさん2009/02/20(金) 11:56:21ID:???
gotoが許されるのはHSPだけです
0137nobodyさん2009/02/20(金) 11:59:50ID:???
finallyを実装しなかった罪は思い
0138nobodyさん2009/02/20(金) 12:55:37ID:???
設計が悪いのにプログラム思想がうんぬん言われてもな…w
困るんだわ…w
0139nobodyさん2009/02/20(金) 13:12:10ID:???
せっ・・・けい・・・?
0140nobodyさん2009/02/20(金) 15:34:00ID:???
PHPのデバッガで、gdbのようなものはありますか?
主にコマンドラインプログラムが対象です

attachの機能(すでに起動しているものを乗っ取れる)が
必須なんですが
0141nobodyさん2009/02/20(金) 16:27:31ID:DGCUxhS+
組込Linux C/C++ なドライバ屋(PHP歴は5日w)が質問させていただきます。
// 赤の他人の尻拭い中

識者いらっしゃいましたら助けてください。
よろしくお願いします。

【OS名】Linuxカーネル 2.6.18-92 (RHEL5.3)
【PHPのバージョン】php5.1.6
【連携ソフトウェア】Akelos
【質問内容】
XHTML 1.0 / UTF-8 な日本語ページ(タイトルも日本語)を出力する view があります。
IEやFireFoxなどのブラウザ、docomo iモードでは期待する内容が表示されます。
が、ezwebで文字化けします。

UTF-8が問題かと思ったのですが、同ページをPCブラウザ上で表示させ、
ソースを xx.html として保存。
このxx.html をezwebで表示すると、文字化けせずに期待通りの表示になります。

ezweb のブラウザ側の問題の可能性もあるかもしれませんが、回避策など
ありましたら、教えてください。

--- xx.html の内容
<!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">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>たいとる</title>
// 以下略
0142nobodyさん2009/02/20(金) 16:33:21ID:???
どうしてもUTF8でやりたいのなら
ezwebだけ出力するときだけsjisに変換したら?
0143nobodyさん2009/02/20(金) 16:35:22ID:???
>>141
http://www.au.kddi.com/ezfactory/tec/spec/4_2.html
> また、EZwebでサポートする文字コードはShift-JISです。
01441412009/02/20(金) 16:44:08ID:???
>>142,143
返答ありがとうございます。
Shift-JISに変換して出力するようにします。

ですが、.html拡張子のUTF-8なページは文字化けしないのが疑問のままなのは
ちょっとモヤモヤが残ります。
識者いらっしゃいましたら、引き続きよろしくお願いします。
0145nobodyさん2009/02/20(金) 18:39:08ID:???
>>144
header送信はどうやってる?
0146nobodyさん2009/02/20(金) 18:58:54ID:QkuM0xlT
PHPの中から、apache上で走っているのか
バッチファイル的に使われているのか(シェル上で、php hoge.php)を
判断する方法を教えて下さい
0147nobodyさん2009/02/20(金) 19:04:26ID:???
>>146
phpinfo保存してdiffして好きなのを使うとか
0148nobodyさん2009/02/20(金) 19:12:40ID:???
>>147
ありがとうございます
それをヒントにして$_SERVERを比較したところ
SHELLというキーが、シェルから呼んだ場合には設定されていました
0149nobodyさん2009/02/20(金) 19:17:35ID:???
http://jp.php.net/manual/ja/function.php-sapi-name.php
もろそういう用途の関数がありますよ
0150nobodyさん2009/02/20(金) 20:55:16ID:???
php_sapi_name()ならpearのgo-pearを参考にしてもいいかも。
http://pear.php.net/go-pear
0151nobodyさん2009/02/20(金) 21:07:24ID:???
めちゃめちゃPHP覚えてきた
自分の才能がコワイお(´・ω・‘)
0152nobodyさん2009/02/20(金) 21:09:59ID:???
ほう,じゃ最近学んだこと何か語ってみてくれ
0153nobodyさん2009/02/20(金) 21:34:19ID:JGeRmwBm
URLのうち、ドメイン直下の最上位ディレクトリを抽出するにはどうしたらいいですか?
str系の関数組み合わせて3個目の/が何文字目で4個目が何文字目で…
ってやれば出来るでしょうが、非効率というかアホっぽいので、正規表現でバキっと出す方法を
教えてください
よろしく御願いします
0154nobodyさん2009/02/20(金) 21:37:09ID:???
>>153
scandirが使えるバージョンならドメイン直下のディレクトリ名を取得すればおk
使えないならopendirとreaddirでググレカス
0155nobodyさん2009/02/20(金) 21:44:06ID:???
>>141
GWの文字コード変換対象はtext/〜から始まるコンテンツのみ。
SSLも変換噛まさないけ
0156nobodyさん2009/02/20(金) 22:16:34ID:???
>>152
文字コードがshift-jis、Euc-jpだとSQLインジェクションされる
かといってutf-8は安全?というとそうでもない。
0157nobodyさん2009/02/20(金) 22:24:54ID:???
php関係ねー
氏ねや
0158nobodyさん2009/02/20(金) 22:27:27ID:???
そ・・・そんなん 必死に覚えてきたお(´・ω・‘)
0159nobodyさん2009/02/20(金) 22:37:43ID:???
>>158
世の中にはいくらやっても報われないことが二つある
ひとつは賽の河原の石積み
もうひとつはお前のPHPの勉強だ
0160nobodyさん2009/02/20(金) 23:27:51ID:r16tK4jF
SQLインジェクション対策は、
基本的に外部入力値をhtmlspecialcharsしていれば良い

って考えは間違い?
0161nobodyさん2009/02/20(金) 23:31:06ID:???
>>160
大間違い
0162nobodyさん2009/02/20(金) 23:34:48ID:???
htmlspecialcharsで防げるだろ
>>161はhtmlspecialcharsを使用しても抜けられる穴について説明よろ
0163nobodyさん2009/02/20(金) 23:39:40ID:???
>>160
htmlspecialchars(,ENT_QUOTES)で防げるのは「Script Injection」。
Javascript埋め込みとかそんなヤツ。

「SQLインジェクション」は別問題。
「PHPサイバーテロの技法」を買って読んどけ。
0164nobodyさん2009/02/20(金) 23:47:18ID:???
>>162
LIKEのとこに%とか*突っ込んでみるとか。
select * from table where name like '%' ;
0165nobodyさん2009/02/21(土) 00:28:20ID:???
>112
$str = '<font size="10">でっかい</font>';
$smarty->assign('tag', $str);
$smarty->display('hoge.tpl');

---hoge.tpl---
<body>
{$tag}
</body>

とかいう意味だったら笑う。

>162
>164の変数名のところに「' OR 1=1」と入れるとレコードが全件変数に入り個人情報大暴露大会。
「'; DROP なんたらかんたら」と書くとテーブルがぶっ飛ぶ。レプリケーション先も全部死ぬからサービス復旧不能で店じまい、会社は倒産。
MySQLの設定が甘いと、管理テーブルを書き換えられてroot奪われるとかもあるな。
0166nobodyさん2009/02/21(土) 00:32:30ID:???
あーっと、ENT_QUOTESだったか。死んでくる。
0167nobodyさん2009/02/21(土) 00:38:03ID:???
>>160
addslashes
0168nobodyさん2009/02/21(土) 00:44:54ID:???
>>167
addslashesも大間違い
0169nobodyさん2009/02/21(土) 01:19:11ID:???
mysql_escape_string
0170nobodyさん2009/02/21(土) 01:34:53ID:???
>>169
それも%とかをエスケープできないので間違い
mysql_real_escape_string
0171nobodyさん2009/02/21(土) 01:47:18ID:???
可能な場合常にプレースホルダを使う、でFAだろ
クエリの9割以上はカバーできるはずだ
0172nobodyさん2009/02/21(土) 02:05:10ID:???
めんどいから ' と ; は削っちゃえ
0173nobodyさん2009/02/21(土) 02:17:42ID:???
mysql_escape_stringって%エスケープしないのか
ありえねーな
likeを使ってなかったらだいじょうぶ?
0174nobodyさん2009/02/21(土) 02:35:53ID:60WB0UqA
addslashesじゃだめなの?
ある本にmysql_escape_stringより良いって書いてあったのに、早いって。。
純朴な素人をバカにしやがって
0175nobodyさん2009/02/21(土) 02:37:42ID:???
お前は何を言ってるんだ
本にWebに書いてあることを鵜呑みにすることが「勉強」じゃないぞ?
0176nobodyさん2009/02/21(土) 02:44:35ID:???
何ぬかしてる、mysql_real_escape_string() は非推奨の mysql_escape_string() と機能は同じ
だいたいこの関数はSQLステートメントとして成立する文字列リテラルを作るためのものだ
%を勝手に殺したりする用途に使うもんじゃない
0177nobodyさん2009/02/21(土) 02:45:52ID:???
%殺されちゃたまらないな。しかも%なんてSQLインジェクションには使えないだろ
エスケープする必要ない
0178nobodyさん2009/02/21(土) 02:46:31ID:???
PDOで解決
01791762009/02/21(土) 02:46:46ID:???
悪いアンカーが抜けていた
>>176>>170,173へのレス
0180nobodyさん2009/02/21(土) 02:49:17ID:RWcdEiGu
phpでhtmlのinputのtype="text"でreadonly='true'して
printしているのですが、これってもしreadonlyに対応していない
ブラウザとかだったら変更可能ですかね?ブラウザとか関係なく、
もし確実じゃなければ、それに代わる確実な方法を実現したいのですが
何か方法があれば教えてください。
0181nobodyさん2009/02/21(土) 02:58:27ID:???
>>180
変更されてはならないものはクライアントに持たせない
セッション変数なりストレージなりに保持しておく
0182nobodyさん2009/02/21(土) 05:32:46ID:???
>>118
phpにおけるexitは強制終了。
それに続くタグとかは、一切実行も表示もされない。
0183nobodyさん2009/02/21(土) 12:05:11ID:???
>180
そもそも、ブラウザなんぞ無くともデータは送受信可能だ。
HTTPなんて、テキストデータを送受信してるだけだからな。
クライアントに渡した全ての値は改竄され得るし、クライアントから送信される値は全て信用ならない。
input type="select"の中に、選択肢にない文字列が入ってくるなんてのはよくある事だ。
0184nobodyさん2009/02/21(土) 12:05:51ID:???
<select><option>だったか。まあいいや。
0185nobodyさん2009/02/21(土) 13:04:41ID:???
ちょっと気になったんだが、>>165が書いている方法も

SELECT * FROM test WHERE name='".htmlspecialchars($_POST["name"],ENTQUOTES)."'

としていれば大丈夫なんじゃないのか?
「%」の件もlike使わなければいいわけだし。
like使う用途って「検索」が多いだろうから、表示されても良いデータだろうし。
0186nobodyさん2009/02/21(土) 13:10:29ID:???
>>183
>選択肢にない文字列が入ってくる

てっきりvalueにテキストを挿入してるかと思ったwwww
0187nobodyさん2009/02/21(土) 13:10:58ID:???
>>185
そのセンス、感服するわ。
htmlspecialcharsで変換される文字君たちは検索にかからなくなるわけだが、
SQLにlikeを使わなきゃいいって制約を追加するわけだが、
0188nobodyさん2009/02/21(土) 13:14:04ID:???
なんでそこまでしてhtmlspecialcharsに拘るのかが理解できない。
mysqlなら何も考えずmysql_real_excape_stringが一番安全確実簡単だろ。
htmlspecialchars使うと、<や>、&のような文字が全部変換されてDBに入力されてしまう。
検索なら対象がうまくヒットしなくなるし、画面表示文字列だとエスケープ/アンエスケープのタイミングを考慮しないといけない。
DBからCSVに書き出したくなったらどう変換すればいいんだ?JavaScriptに渡す時は?

mlsql_real以下略なら、入力データはそのままの形でDBに格納されるし、そのままの形で検索される。この上なく分かりやすい。
0189nobodyさん2009/02/21(土) 13:16:13ID:???
>>187
うん?クラスの処理とかすべて書けば良かったか?
単純かしたことに「こいつ馬鹿だwww」と感服したのかもしれないが。

そもそも、出力する時もフィールド指定するだろ。
だから、like使ってもパスワードが漏れないよな。
全件出力されるとか書いてたけど、普通limit指定するし。

>htmlspecialcharsで変換される文字君たちは検索にかからなくなるわけだが
かからなくていいんじゃないか?検索させない場合は、変換入れるだろうが。
0190nobodyさん2009/02/21(土) 13:16:27ID:???
未だにDBで何をエスケープしておけばいいかわからないやつ多いよな。

基本的には「'」と「\」だけでいいんだぜ
0191nobodyさん2009/02/21(土) 13:19:03ID:???
>>188
「そのままの形で格納されると困る」んだよ。

お前、WEBアプリケーション作ったことあるか?
または、会員制サイト作って誰かに利用させたことあるか?

その際、htmlspecialcharsで変換されない文字があるとどうなるかわかるだろ。
それに、htmlspecialcharsだけでも、CSV出力やJavascript(AJAX)の利用は出来る。
0192nobodyさん2009/02/21(土) 13:25:16ID:???
>>189
おいおい、
記事中から、bread&butterって検索したくてもできないじゃないか。
0193nobodyさん2009/02/21(土) 13:26:33ID:???
zend server
人柱だれかよろ
ttp://sourceforge.jp/magazine/09/02/19/2316221
0194nobodyさん2009/02/21(土) 13:27:24ID:???
>>191が作ったWebアプリケーションは穴だらけ、バグだらけだろうなぁ。
ご愁傷様
0195nobodyさん2009/02/21(土) 13:27:36ID:???
Zendワロタwwwwwwwww
よく開発続けられるよなwwwww不人気なのにwwwwwww
0196nobodyさん2009/02/21(土) 13:29:18ID:???
htmlspecialcharsをDBアクセスで使用するバカ
後輩とかに指摘されて恥かくまでずっとやってろ
0197nobodyさん2009/02/21(土) 13:30:31ID:???
俺はforeachのことを「フォレーチ」って読んでた
先輩は「フォー・イーチ」って読んでた

別に恥ずかしくないんだからねっ!これからも「フォレーチ」って読むわ
0198nobodyさん2009/02/21(土) 13:32:44ID:???
>>191
なぁ、ちょっと確認していいか?
入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
おまえこの流れは理解してるってことでいいんだよな?

0199nobodyさん2009/02/21(土) 13:34:46ID:???
xamppに代わる開発環境になるかな?
0200nobodyさん2009/02/21(土) 13:35:45ID:???
>>199
ネーミングが悪かったかもしれない
XAMPPは初心者もなじみやすい名前だから、暫くはそっちが流行ると思うな
0201nobodyさん2009/02/21(土) 13:36:24ID:???
>191
会員制の課金の発生する、バックエンドでCSVとTSVでレポートを吐くwebアプリを仕事で書いてるが、
・DBに渡す際にPDOのプレースホルダで渡す、あるいはmysql_real_escape_stringなどでクエリを構成する
・画面表示する際にはビューに渡す時点で原則全ての値をhtmlspecialcharsでエスケープ
 (タグを書き出さないといけない箇所や、HTML以外の箇所などの例外は慎重に検討したうえでエスケープせず渡す)
・DBには、例えばフォームからの入力なら入力値がそのままの形で格納される
このルールが一番分かりやすいし、安全だし、汎用性がある。

出力部で「この文字列はDBから来た値だからhtmlspecialcharsは不要、こっちはクライアントからの入力値だから必須…」とかやってると、絶対変換ミスが発生する。
何も考えずルールにさえ従ってさえいれば脆弱性が発生しない事をシステムが担保してくれる形にするのが一番安全なんだよ。
俺はMySQLでの危険文字を全て列挙すら出来ない低能だし、職場には俺以下の屑が溢れているが、このルールに従う限り絶対安全だとシステム側で保障できるコードを組める。
0202nobodyさん2009/02/21(土) 13:41:28ID:???
>>198
してるわけないだろ。関数の使いどころすらわかってないんだから
0203nobodyさん2009/02/21(土) 13:41:54ID:???
>>201
それでOKなんだけど、>>191はフィルターやバリデーターとDB登録時のエスケープを混同してるらしいからw
0204nobodyさん2009/02/21(土) 14:03:40ID:???

俺が使ってるサービスで
↓を混同してるプログラマがコード書いてませんように・・・

・DB入力時(SQLインジェクション)
・画面出力時(Scriptインジェクション)
0205nobodyさん2009/02/21(土) 14:14:16ID:???
>>193
雑談はネタ不足気味な雑談スレで。
http://pc11.2ch.net/test/read.cgi/php/1200314111/
0206nobodyさん2009/02/21(土) 14:20:49ID:???
>>198
ああ。実際に>>201が書いているようなことはしているよ。
例として>>185みたいな簡単な1行ソース出したから
「こいつ何も知らない馬鹿だなwww」と煽りたい気持ちも分かる。
だが、1から10までここに書けないだろ。

入力時、出力時にそれぞれ適切に変換するのは、初歩中の初歩だと思う。
201がああだこうだ書いてるが、俺は自作クラス作ってDB処理をしているから
変換ミスがどうのこうのはない。

ま、そういう自分の事はどうでも良くて、>>185の意見を出しただけなんだが
なぜか俺自身を煽りたい馬鹿がいるな。そんな事しても無駄だろ
0207nobodyさん2009/02/21(土) 14:22:00ID:???
>>185みたいなコードが出てくる時点でお前が一番馬鹿だよ
0208nobodyさん2009/02/21(土) 14:26:20ID:???
>>207
>だが、1から10までここに書けないだろ。

ちゃんと読めよ・・・わかりやすいように簡単に書いたって言ってるだろ

それに、htmlspecialcharsで変換しないでそのまま格納したとする
その場合、phpMyAdminなどで管理する時。どうなるかわかるよな?
0209nobodyさん2009/02/21(土) 14:27:37ID:???
>>208
こんだけ書かれてまだわかんないのか。
そこでhtmlspecialcharsはおかしいってことだろ。
代わりに何を使うべきか考えてみろ
0210nobodyさん2009/02/21(土) 14:28:10ID:???
>>206
荒れるだけだから黙っててくれ。
0211nobodyさん2009/02/21(土) 14:28:10ID:???
>>185>>191みたいなこと書いてたら馬鹿にされるのあたりまえだろ
>>206が仕事ではなく趣味でPHPいじってるだけであることを祈る
0212nobodyさん2009/02/21(土) 14:28:18ID:???
>>208
うん、あれはhtmlspecialcharsで変換されて出力されるね
ってかphpMyAdminなんか使ってるのかよ
0213nobodyさん2009/02/21(土) 14:28:48ID:???
>>209
わかる・わかんないの、俺に対しての批判はどうでも良いんだよ。
「なぜhtmlspecialcharsは駄目なんだ」って事だ

0214nobodyさん2009/02/21(土) 14:29:08ID:???
>>208
phpMyAdminをなめてんの?
別にスクリプトが混入したって何もおきないよ。
もし、そこでスクリプトインジェクションされんならIPA行きだお
0215nobodyさん2009/02/21(土) 14:30:21ID:???
>>213
> 「なぜhtmlspecialcharsは駄目なんだ」
既出
0216nobodyさん2009/02/21(土) 14:30:27ID:???
お前ら、自分の視野で物事考えすぎだよ。

「phpMyAdminなんて使ってるの?」って言葉がここで出てくると思わなかったぜw
ここのスレの役割考えろや。どうせ個人叩きしかできないくせに。
0217nobodyさん2009/02/21(土) 14:30:31ID:???
>>208
全部わかったうえで一部分だけ簡単に書いてます、って言ってるやつの文章じゃないよそれ
結局DB格納時にhtmlspecialchars使ってるんじゃん
0218nobodyさん2009/02/21(土) 14:31:22ID:???
>>216
phpMyAdmin → 画面出力時のお話

SQLインジェクションからかけ離れてきました・・・
0219nobodyさん2009/02/21(土) 14:32:07ID:???
>>206
> 俺は自作クラス作ってDB処理をしているから変換ミスがどうのこうのはない。
変換とか言ってる段階で、その自作クラスが穴だらけに1000カノッサ
0220nobodyさん2009/02/21(土) 14:36:47ID:???
> それに、htmlspecialcharsで変換しないでそのまま格納したとする
> その場合、phpMyAdminなどで管理する時。どうなるかわかるよな?

phpMyAdminは出力時サニタイズをすっかり忘れてる、ってこと?
0221nobodyさん2009/02/21(土) 14:38:07ID:???
サニタイズってトイレにでも行く気?
0222nobodyさん2009/02/21(土) 14:38:47ID:???
>>185
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
0223nobodyさん2009/02/21(土) 14:40:08ID:???
おまえらとどめは刺さないよなww
0224nobodyさん2009/02/21(土) 14:40:18ID:???
>>219
>>201が「俺はMySQLでの危険文字を全て列挙すら出来ない低能」と
言ってる意味を理解できていない、に1000カノッサ上乗せ
0225nobodyさん2009/02/21(土) 14:46:08ID:???
>>185
語る以前にエラーになる件
0226nobodyさん2009/02/21(土) 15:07:41ID:???
↓アクセスするとGoogleに飛ぶんですがどういう仕組みですか?
http://www.yahoo.xxco.jp/
0227nobodyさん2009/02/21(土) 15:11:56ID:???
%はあんまり伝わらなかったみたいだなー。
SQLとHTMLでは、特殊な扱いになる文字が違うよってことだけど。

htmlspecialchar()でも問題なく見えるのは、たまたま、だと思ったほうがいいよ。
偶然にも、置き換え対象になる文字がSQLでエスケープが必要な文字と同じだったってこと。

ついでに言えば、エスケープの仕方は実際はDB依存だから
addslashes()じゃなく、DB専用の関数を使ったほうがいい。
0228nobodyさん2009/02/21(土) 15:13:44ID:???
>>160 からの流れ、断ち切っておくか・・・

・DBに渡す際にPDOのプレースホルダで渡す、または専用関数(mysql_real_escape_string)でクエリを構成。
・html出力時にhtmlspecialchars(,ENT_QUOTES)をする。

※DBに渡す際にhtmlspecialcharsするのは間違い。
→ 理由 >>188
→ それでも分からない。 >>163の本を読め。
0229nobodyさん2009/02/21(土) 15:18:48ID:???
>>226
GET / HTTP/1.1
Host: www.yahoo.xxco.jp
(略)

HTTP/1.x 302 Found
Date: Sat, 21 Feb 2009 06:15:31 GMT
Server: Apache/2.2.9 (Fedora)
X-Powered-By: PHP/5.2.6
Location: http://www.google.co.jp/
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
0230nobodyさん2009/02/21(土) 16:10:53ID:???
素人だけど、俺より酷いプロらしき人が入るのを見て安心したような不安になったような…
0231nobodyさん2009/02/21(土) 16:11:49ID:???
>>226
xxco.jpの管理人が、
www.yahooo.xxco.jpへアクセスした場合に
「Location: http://www.google.co.jp/」へリダイレクト(302)するようにしているだけ。

<?php
header('Location: http://www.google.co.jp/', True, 302);
?>
0232nobodyさん2009/02/21(土) 16:25:04ID:???
>>231
サンクス
xxcoってドメインか
0233nobodyさん2009/02/21(土) 16:35:25ID:???
べ・・・別に!
僕レンタルサーバー使ってるからね!
エスケープしなくても安全よっ!
0234nobodyさん2009/02/21(土) 19:59:23ID:230PJjNE
【OS名】MacOS X (MAMP)
【PHPのバージョン】php5.2.5
【連携ソフトウェア】mysql
【質問内容】
Webアプリケーションで、ウィンドウ毎に違う情報を引き継いで処理をしていく物を作っています。
uniqid()でセッションIDを割り振って、formのhiddenに入れると引き継げるのは分かりました。
しかしこれだと、link(aタグ)で機能を選択した場合に、セッションIDが引き継げないように
思います。ですよね??何か良い方法はありませんか?
リンクのパラメータに追加するとなると、全部のリンクに書き足す必要があって大変だし、
POSTとGETの両方の評価が必要になると煩雑だし、そもそもurlにセッションIDを出すのが
微妙に避けたいので・・・。
お知恵を拝借したいです。よろしくお願いいたします。
0235教えて2009/02/21(土) 20:15:36ID:1h/i9qY8
これだと1回で20数全部でます。1回1数でかぶらずに20回出したです。
<?php
$numbers = range(1, 20);
shuffle($numbers);
for($i = 0; $i < 20; $i++) {
echo $numbers[$i]."<br>\n";
}
?>
0236nobodyさん2009/02/21(土) 20:16:32ID:???
ふつうセッションIDはCOOKIEで渡す
ケータイの場合はGET渡ししかない
0237nobodyさん2009/02/21(土) 20:17:25ID:???
>>235
出したんなら良かったな
0238nobodyさん2009/02/21(土) 20:21:23ID:???
モバゲーで鳴らした俺はこの程度の日本語崩壊くらいなんて事は無い
モバゲーではこの程度の言語障害者珍しくも無い
マジ日本はどこへ向かうんだ

$numbers = range(1, 20);
shuffle($numbers);

echo array_pop($number);
// なんか処理
echo array_pop($number);
// なんか処理
echo array_pop($number);

1ページ内の処理ならこれでいける。
2枚以上の画面にわたって変数を持って行きたいならセッションを使うしかない。
02392342009/02/21(土) 20:33:28ID:230PJjNE
>>236
COOKIEですか・・・ちょっと調べてみます。ありがとうございます。
クライアントはパソコンなので、GETでもPOSTでも使えます。
COOKIEでもウィンドウ毎って可能なんですか?
0240nobodyさん2009/02/21(土) 20:38:24ID:???
>>239
パソコンならhiddenを使う必要ない。セッションはクッキーが勝手に確立してくれる
GETやらPOSTも意識する必要ない。セッションに少し慣れればすべて解決する

別ウインドウのことを言ってるのだとしても
リンクやフォームから作成された別ウインドウは同一セッションとなる
02412342009/02/21(土) 20:51:05ID:???
>>240
同一セッションでは困るんですが・・・ウィンドウ毎に分けたいので・・・
0242nobodyさん2009/02/21(土) 20:54:07ID:???
>>241
であればウインドウごとにID発行してそれをセッションで持ちまわす
02432422009/02/21(土) 20:58:18ID:???
ごめん、うそついた
同一セッションで別ID発行してもセッションが上書きされるだけだからダメか
0244nobodyさん2009/02/21(土) 20:59:36ID:???
入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
で質問。
入力->フィルター->エスケープ->DB -> 取り出し->
ここまではわかるが。
その後なんでまたフィルタにかけるの?
while文でたとえば
<? while ( $item = mysql_fetch_array( $result ) ) { ?>
<tr>
<td><?= $item['item_id'] ?><?= $item['item_id2'] ?></td>
<td><?= $item['item_name'] ?></td>
<td><?= $item['author_name'] ?></td>
<td><?= $item['publisher_name'] ?></td>
<td><?= date( 'Y年m月d日', strtotime( $item['release_date'] ) ) ?></td>
<td><?= $item['list_price'] ?></td>
<td><?= $item['sale_price'] ?></td>
<td><?= get_category_name( $link, $item['category_id'] ) ?></td>
<td><?= $item['quantity'] ?></td>
<td><?= $item['state'] ?></td>
<td>
<nobr>[<a href="admin_edit_item.php?item_id=<?= $item['item_id'] ?>">編集</a>]</nobr>
<nobr>[<a href="admin_del_item1.php?item_id=<?= $item['item_id'] ?>" onClick="return confirm( '完全に削除されます。よろしいですか?' )">削除</a>]</nobr>
</td>
<? $n ++; } ?>
でまわしてはいかんのかね?
0245nobodyさん2009/02/21(土) 21:09:52ID:???
>>244
俺も取り出しのあとのフィルターってのはよくわからん
DBには正しいものが入ってるはずだしな
でもhtml適合化は必要だろ。そのコードだとScript実行されるよ
02462342009/02/21(土) 21:10:06ID:???
>>243
そうなんです。>234の様にformかurlに入れれば、
とりあえずウィンドウ毎に別の情報を引き継げます。
だけど、formとurlの両立が難しい。
何か、簡単にウィンドウ毎を識別する方法があれば・・・
0247244です。2009/02/21(土) 21:15:34ID:???
htmlspecialcharsか
0248nobodyさん2009/02/21(土) 21:17:49ID:???
>234
まったく同一のページを2ウィンドウ開くのならば、URLかPOST値にセッション情報を含めないとダメだな。
手を抜くならセッションキーGET渡しで
・Smarty使ってるならポストフィルタで全サイト内リンクにセッションキーを追加する
・JavaScript経由で全リンクをセッションキー付きに書き換える
辺りか。

リンクを書き換えないなら、複数ウィンドウシステムに入った時点で
index.php/hogehoge/
index.php/fugafuga/
のような固有URLを割り振り、これをセッションキーにするのも手。
index.php/hogehoge/menu から <a href="./information">で
index.php/hogehoge/information に遷移させられるから記述が多少楽になる。
ただし、セッション情報がリクエストヘッダでだだ漏れだし、外部リンクに気を払う必要も出てくる(REFERERで漏れる)。
0249nobodyさん2009/02/21(土) 21:20:12ID:???
>>244
>入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
どこにそんなことが書いてある?

入力 -> エスケープ -> DB -> 取り出し -> サニタイズ -> 表示
これでいい
0250nobodyさん2009/02/21(土) 21:26:33ID:???
>>249
サニタイズってのは、入力値に不正な値や壊れた文字列が入っていないかをチェックするもの。
やるなら、入力の直後だが、サニタイズって言うと、>>249みたいな誤解をするやつがいるから、
入力後にやるのが、バリデート+フィルター。
0251nobodyさん2009/02/21(土) 21:28:51ID:???
DBからの取り出し後にフィルターを書ける理由
DBってのはデータストア。
収録されたデータをすべて出力していいとは限らないし、
形式によってはフィルターをかける必要がある。jk
0252nobodyさん2009/02/21(土) 21:33:13ID:???
>>250
入力段階でチェックするのはvalidate
sanitizeは表示段階で、浄化、つまり悪意のあるスクリプトやタグを無効にするもの
0253nobodyさん2009/02/21(土) 21:43:54ID:???
フィルターって要するにバリデートだろ。
エスケープやサニタイズとは別の話題。
0254nobodyさん2009/02/21(土) 21:44:23ID:???
>>252
まぁ、そう思っててもいいけどな。
それは、htmlspecialcharsをサニタイズだと思っている子たちの誤解
悪意と善意を確実に識別できるのはどこかを考えれば正解はどっちかわかるはずだが、
困ったことに、サニタイズ≒出力フィルタだと書いちまってるサイトやら本があるからなぁ。

要するに、サニタイズなんて曖昧なメタファーでプログラムを語るなってことだ。
0255nobodyさん2009/02/21(土) 21:45:32ID:???
>>253
バリデートはフィルターに含まれる。
エスケープとは別。
で、何が言いたいの?
0256nobodyさん2009/02/21(土) 21:46:05ID:???
>>251
具体的にどういうデータだったらそのフィルターとやらをかけるの?放送禁止用語とか?
0257nobodyさん2009/02/21(土) 21:47:37ID:???
>>254
htmlspecialcharsもサニタイズの一種だろ。話を難しくしすぎ
02582342009/02/21(土) 21:48:33ID:???
>>248
そうですよね。ありがとうございます。
固有URLの実装方法は分かりませんし、
そもそもフレームワークにCakePHPを使うので、そういうURLなのです。
リンクじゃなくて、全てformのボタンにするのも手ですかねぇ・・・。
0259nobodyさん2009/02/21(土) 21:49:18ID:???
>>256
放禁みたいなNGフィルター、SNS用の権限フィルター
多端末対策で文字コード変換フィルター
スクリプト許可端末、スクリプト拒否端末用の変換フィルター
タグ許可・不許可
まぁ、なんでもいいでしょ
0260nobodyさん2009/02/21(土) 22:00:32ID:???
バリデート
 検証。入力値などに問題が無いかをチェックする(チェックした後どうするかは知らない)。
フィルタ
 入力値をチェックし、ヤバいものは除去する、ないし弾く(エラーにする、無視する)。
サニタイズ
 消毒。転じて無害化。害の無いものにする。変換・置換など無害化の方法は多数あるが。。
エスケープ
 ある環境で特殊な意味を持つ値(HTMLならば<など)を、その環境のルールで規定された別の表現(<)に置き換える。
 ダブルクォート中で"の前にバックスラッシュを置くのもエスケープ。

どれがベストかというと、どの表現も曖昧さが残るので使うべきではない。
DBへの入力の無害化処理と、HTML出力への無害化処理は違うし、無害化の方法も1通りではない。
設計初期などで抽象度を残した表現をしたい時くらいしか使わないな。
>259は文脈を意図的に曲解した例。
0261nobodyさん2009/02/21(土) 22:01:28ID:???
>>257
htmlspecialchars=html適合化っていう具体的かつ正確な言葉があるのに、
曖昧かつ誤解に満ちて見解が分かれるサニタイズなんて言葉にする必要はないだろ。
0262nobodyさん2009/02/21(土) 22:01:39ID:???
俺だせえ。
> 別の表現(&lt;)に置き換える。
な。
0263nobodyさん2009/02/21(土) 22:05:41ID:???
>>260
> ダブルクォート中で"の前にバックスラッシュを置くのもエスケープ
PHPとかJSならエスケープだが、HTML中でこれができると思ってしまう奴もいるらしいからな。

HTML出力時にaddslashesするやつとか、
DBに入れる前にhtmlspecialcharsする奴とか、
入力時に両方処理する奴とか、
ほんと、ウンコだな
0264nobodyさん2009/02/21(土) 23:03:26ID:???
>>263
自分のこといってるんですね
わかります。
0265nobodyさん2009/02/21(土) 23:17:26ID:???
>>263はうんこ
0266nobodyさん2009/02/21(土) 23:33:28ID:???
ほんと、ウンコだな
0267nobodyさん2009/02/21(土) 23:47:51ID:???
叩かれる理由のない>>263を叩いてるのは
昼にhtmlspecialcharsの件で叩かれてたやつだろ
0268nobodyさん2009/02/21(土) 23:49:41ID:???
>>263はうんこ
0269nobodyさん2009/02/22(日) 00:00:19ID:???
>263
良く分からないけどやーいやーいうんこうんこー
0270nobodyさん2009/02/22(日) 00:13:17ID:???
うんこを馬鹿にしたやつ全員明日から便秘に悩む。

0271nobodyさん2009/02/22(日) 00:31:09ID:bY3v8MvV
>>270
のせいで、便秘ではないがうんこが止まらない。
この1時間で4回うんこにいっている
0272nobodyさん2009/02/22(日) 00:34:34ID:???
<?=str_repeat( 'うんこ', date('s') )?>
02732342009/02/22(日) 00:46:35ID:JUr+Er3M
リンクやPOSTで受け取るデータの他に、元のページから送られてくるデータって
何か無いかな・・・って考えてたら・・・$_SERVER['HTTP_REFERER']が使え
ないかなぁ?って思ったのですが。どうでしょうか?
例えばheaderのmetaとかでreferer urlを変更して、セッションIDを追加したり
とか出来ないでしょうか。
他にも、何か使えそうなデータって無いでしょうか?
0274nobodyさん2009/02/22(日) 01:01:49ID:???
>>273
refererは自由に変えられるし、飛ばさないブラウザもあるし信用ならないよ

まず別セッションにしたい理由がわからん
ユーザーに複数セッションを使わせたいという状況は想像できないし
自分が複数セッション使いたいならブラウザもうひとつ立ち上げればよいだけ
02752342009/02/22(日) 01:27:54ID:JUr+Er3M
>>274
refererが信用ならないのはおっしゃる通りです。ご指摘ありがとうございます。
リファラ出さないブラウザは対象外って事で良いのです。

複数セッションを使うために、別のブラウザを立ち上げれば済むのもご指摘通り。
自分だけで使うなら、その方が簡単なのですが。

例を挙げると、ウィンドウ1つに一人分の情報を表示/編集できる、マルチ・
ウィンドウの住所録ソフトみたいなものを想定しています。
ウィンドウ毎に別セッションにしないと無理じゃないかと思いました。
他に、定石があるようでしたら教えて下さい。
よろしくお願いいたします。
0276nobodyさん2009/02/22(日) 02:04:13ID:???
あなたがたは無職なのに
なんで質問に回答するときはえらそうな
態度なの?
0277nobodyさん2009/02/22(日) 03:06:25ID:3nGhqmkB
SQLite3 + PDO で、

1つ目のプロセスがトランザクション張ってて、
2つ目のプロセスがトランザクション張ろうとして、
当然1が既にデーターベースをロックしてるから、
2はロックを取得できなくて、そんで
SQLITE_BUSYが帰ってきて、
database is locked
ってわかったとき、
しばらくsleepさせて、リトライ
って処理、どうやって書けばいいの?

どっかにサンプルコードある?
0278nobodyさん2009/02/22(日) 04:28:08ID:???
>>277
そこまで分かってるならforなりでいくらでも書けそうだけど・・
具体的にどこが分からないのよ
0279nobodyさん2009/02/22(日) 18:00:44ID:???
例えばtp://test.jp/とういうサイトで、
ユーザ登録(ユーザ名をuserで登録)して、ページを開設する

tp://test.jp/user/ みたいに自分のページができる

このページを誰もがある程度操作できる(お絵かき掲示板とか、ブログのコメ投稿とか)
mixiなどのようにログインページがいらないので次回からこのページは
tp://test.jp/user/が存在する限り、だれもがこのurlから訪問することができる。

みたいなサイトみて思ったのですが、
1./user/の部分は実際にサイトの鯖でuser専用のディレクトリやそこに.phpなどを作っているのでしょうか?
2.それとも、apacheだったらhttpd.confなんかで、
tp://test.jp/mypage.php?userid=user → tp://test.jp/user/ みたいな変換をしているのでしょうか?
しかし2.の方法だと、userというページがあるかどうかをどうやって判断しているんでしょう・・
適当に、userid=tekitouとかしてみたときに、tp://test.jp/tekitou/となってしまい、そのページが
あるかないかの判断はいろんな方法でできると思うのですが、ユーザ登録が増えれば増えるほど
その判断する速度は落ちるような気がしてしまうのです・・

そもそも2の時点で他の方法でユーザを管理しているかもしれません、
上のようなサイトの、ユーザ管理とその引き出しはどう管理しているのか、
大体でもいいので教えていただけないでしょうか
よろしくお願いします
02802782009/02/22(日) 18:01:32ID:euIhPE01
id
0281nobodyさん2009/02/22(日) 18:03:04ID:???
>>279
今の主流は動的URLを性的URLに変化する

http://example.com/user/http://example.com/id=user
DBにデータを保存しておいてページのIDで呼び出す
0282nobodyさん2009/02/22(日) 18:09:47ID:euIhPE01
すいません>>280の名前は279でした

>>281
なるほど、DBを使ってユーザーのページに誰かが訪れるその度に
検索呼び出ししているということでしょうか。
なんかすっきりしましたありがとうございました
0283nobodyさん2009/02/22(日) 18:12:49ID:???
>>282
ちなみに毎回DBから同じ情報ひっぱってくるのは負荷かかるから
キャッシュを使ってるのが多いと思う
(ここはまたSmartyとか覚えたときにやってみるといい)
0284nobodyさん2009/02/22(日) 18:16:29ID:euIhPE01
>>283
Smartyですか、参考に調べてみます
ありがとうございました!
0285nobodyさん2009/02/22(日) 21:21:50ID:3nGhqmkB
>>278
while で書いたけど、
deadlockになるのです
0286nobodyさん2009/02/22(日) 21:47:52ID:???
具体的にどう書いたか見せたほうが答えてもらいやすいと思うが・・
恥ずかしがらないで
0287nobodyさん2009/02/22(日) 21:50:36ID:3nGhqmkB
>>286
1.php と 2.php と2つのファイルを用意して、
以下のテストを行いました。

「テスト1」
1.phpを単独で実行する -> OK

「テスト2」
2.phpを単独で実行する -> OK

「テスト3」
1.php -> 2.php という順番で実行する -> deadlock発生

こういう状況です。
0288nobodyさん2009/02/22(日) 21:52:30ID:3nGhqmkB
1.phpは、トランザクション中に
sleep(10);
をかませて、ゆっくり実行するようにしてあります。

このゆっくりタイムに、いそいで2.phpを実行する、という
テストです。
0289nobodyさん2009/02/22(日) 21:53:36ID:3nGhqmkB
環境は、PHP5 + PDO + SQLite3 です。

データーベース構造は、

id | name| value
1 | bond | 5

database name = test1

table name= tb1

です。
0290nobodyさん2009/02/22(日) 21:54:35ID:3nGhqmkB
1.php のソースは以下の通りです

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
// Update failed. Wait a while before trying again in the next loop
}
}
?>
0291nobodyさん2009/02/22(日) 21:55:09ID:3nGhqmkB
2.phpは、以下の通りです

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
// Update failed. Wait a while before trying again in the next loop
sleep(15);
}
}
?>
0292nobodyさん2009/02/22(日) 21:57:20ID:3nGhqmkB
1.phpと2.phpの違いは、sleep(10)があるか、ないかというだけです。
それ以外は全部同じです。

SQLiteはトランザクション中に、別のトランザクションを発生させようとすると
1秒も待たずに「database is locked」になるので、
ウエイト->リトライ、という処理を自分で書かないといけません。

これがイマイチ普及しない最大のポイントだと思いますが、
その処理の書き方についての質問です。

なぜかデッドロックになってしまうのです
0293nobodyさん2009/02/22(日) 21:57:20ID:???
え?ループ内にトランザクション?
0294nobodyさん2009/02/22(日) 21:57:55ID:3nGhqmkB
>>293
だってリトライしないといけないわけだから。
なんか間違ってる?
0295nobodyさん2009/02/22(日) 22:01:33ID:???
例外が発生するポイントは、beginかexecか調べた?
0296nobodyさん2009/02/22(日) 22:03:13ID:3nGhqmkB
>>295
例外は発生しないにょ

ずーーーっと実行中のままになって、
最後にはタイムアウトになるんだにょ

PHPのデフォルトタイムアウトが60秒だから
60秒でタイムアウトになるにょ
0297nobodyさん2009/02/22(日) 22:04:43ID:???
>>296
おいおい、
例外にならなかったら、falseが設定されるでしょうが。
例外をcatchして捨ててるだけでしょうが。
0298nobodyさん2009/02/22(日) 22:06:21ID:???
beginTransactionでオートコミットモードがオフになる。
execに失敗する。
もう一度、beginTransactionをかけるが、既にbeginされてるので例外発生
で、またループ。
beginをループの外に出すかcatchしたときにロールバックしてみたらどうかね
0299nobodyさん2009/02/22(日) 22:13:32ID:???
EC-CUBEのカスタマイズで1000万て安い?
ちなみに1年、5人担当
0300nobodyさん2009/02/22(日) 22:15:02ID:3nGhqmkB
>>297
そしたら、catchの中で、
例外をprintするように改造して
もう一回試してみるよ
0301nobodyさん2009/02/22(日) 22:15:38ID:3nGhqmkB
>>299
一人当たり200万円しかもらえないじゃん
0302nobodyさん2009/02/22(日) 22:17:17ID:3nGhqmkB
例外を補足するようにコードを改造してみました。

一番下のところに

catch (PDOException $e) {
print( $e->getMessage());
}

って入れただけですけど。

そしたら、以下のようになりました。
0303nobodyさん2009/02/22(日) 22:19:02ID:3nGhqmkB
1.php

Fatal error: Maximum execution time of 60 seconds exceeded in
C:\1.php on line 21

(さっきと同じ結果)


--------------------------------------------------------
2.php

SQLSTATE[HY000]:
General error: 5
database is locked
There is already an active transaction
There is already an active transaction
There is already an active transaction

Fatal error: Maximum execution time of 60
seconds exceeded in C:\2.php on line 28

--------------------------------------------------------
2.phpについて、いままで出ていなかった
例外がレポートされるようになりました。
0304nobodyさん2009/02/22(日) 22:22:34ID:3nGhqmkB
>>298
exec ってオートコミットモードがONでないと使えないのですか?

もしかして、

$sql="UPDATE tb1 SET value = value + 1 WHERE id = '1'";
$sth = $dbh->prepare($sql);//プリペアードステートメント
$sth->execute();//エクスキュート

とかってやればOK?
0305nobodyさん2009/02/22(日) 22:26:36ID:???
そうじゃなくて、begin済みなのにbeginするなってこと。
1.phpで例外が出ないで無限ループするのはおかしいからチェックしてみ
0306nobodyさん2009/02/22(日) 22:29:18ID:3nGhqmkB
>>305
biginをループの外に出したら意味ないのでは?

だってリトライできなくなるし。
0307nobodyさん2009/02/22(日) 22:31:48ID:???
>>306
ろーるばっくすればいいじゃん
>>298さんが正解でしょ
0308nobodyさん2009/02/22(日) 22:34:36ID:3nGhqmkB
とりあえずわけわかんなくなってきたので、
改造済みのコードを改めてはります。
0309nobodyさん2009/02/22(日) 22:35:58ID:3nGhqmkB
1.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}
$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
sleep(1);
}
catch (PDOException $e) {



print( $e->getMessage());
$oDbCxn->rollback();
}
}
?>
0310nobodyさん2009/02/22(日) 22:46:19ID:???
1.php側はループさせると、テストにならんから、
実行中のsleepだけでいいことにして、ループ外した方がよさげ。

それから、ロック以外の例外の時も無限ループしちゃうわけで・・・
まぁ、テストだからいいけど。
0311nobodyさん2009/02/22(日) 22:47:07ID:???
例外分かってないのでは?
0312nobodyさん2009/02/22(日) 22:48:00ID:???
トランザクションも怪しいw
0313nobodyさん2009/02/22(日) 23:08:50ID:3nGhqmkB
>>310
そしたらループはずしてみようかな?
0314nobodyさん2009/02/22(日) 23:17:01ID:3nGhqmkB
よく考えたら、ロールバックしろ、とかいうアドバイスは無意味だな

だってdatabase is lockedっていうエラーが出ているわけだから、
トランザクションをゲットできていないわけだから、
そもそもロールバックなんかしないわけで。
0315nobodyさん2009/02/22(日) 23:19:21ID:3nGhqmkB
ソースコードを改変したので、
3.phpと4.phpということにしました。

3.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

try {
$oDbCxn->beginTransaction();

$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
sleep(1);
}
catch (PDOException $e) {
print( $e->getMessage());
$oDbCxn->rollback();
}
?>
0316nobodyさん2009/02/22(日) 23:20:11ID:???
>>315
前よく「質問」って書いてた人?
0317nobodyさん2009/02/22(日) 23:20:13ID:3nGhqmkB
4.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
// Update failed. Wait a while before trying again in the next loop
print( $e->getMessage());
$oDbCxn->rollback();

}
}
?>
0318nobodyさん2009/02/22(日) 23:22:14ID:3nGhqmkB
3.php −> 4.php
という順番で実行する流れです

3.php −>10秒待つ
4.php −>待たないですぐに実行
0319nobodyさん2009/02/22(日) 23:22:53ID:3nGhqmkB
実験結果

3.php エラー無し
カウントアップは成功している

4.php
SQLSTATE[HY000]: General error: 5 database is locked
カウントアップは成功している
0320nobodyさん2009/02/22(日) 23:36:10ID:3nGhqmkB
あれ?
もしかして、完成?
成功している??
0321nobodyさん2009/02/22(日) 23:38:30ID:???
>>314
なんか勘違いしてないかい?
0322nobodyさん2009/02/23(月) 00:01:27ID:DYtiHKsN
これでうまくいった

7.php −> 8.php
7.php wait 10seconds
8.php wait 0

7.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}
$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);
$oDbCxn->commit();
$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
sleep(3);
$oDbCxn->rollback();
}
}
?>
0323nobodyさん2009/02/23(月) 00:02:02ID:DYtiHKsN
8.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
sleep(3);
$oDbCxn->rollback();
}
}
?>
0324nobodyさん2009/02/23(月) 00:03:11ID:DYtiHKsN
でも、8.phpの最後のほうの、

sleep(3);
$oDbCxn->rollback();


これなんだけど、せっかくsleepを入れたのに、
sleepしているようすが見られない。

7.phpの実行が終わると、即座に
間髪いれずに、8.phpの実行も終了している。

なんでだ?
3秒待ってからロールバックしてるんじゃないのか?
0325nobodyさん2009/02/23(月) 00:03:49ID:DYtiHKsN
あと、トランザクションをゲットしていないのに、
ロールバックするという意味がわからん。

いったいどこに戻っているというのだ?
0326nobodyさん2009/02/23(月) 00:16:50ID:???
database is lockedはトランザクション自体ではなく、
その中のUPDATE文に対してのエラーである。
なので、トランザクション自体は開始されているので、
一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。
0327nobodyさん2009/02/23(月) 00:17:43ID:???
>一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。
一旦ろーるばっくでトランザクションを閉じて、改めてトランザクションを開始している。
0328nobodyさん2009/02/23(月) 00:19:44ID:DYtiHKsN
>>326-327

なるほどねー
ようやくわかってきたわぁ
 きたわぁ
  きたわぁ
0329nobodyさん2009/02/23(月) 00:22:06ID:DYtiHKsN
やっぱあれだな。
SQLiteの4つのロックのうち、
すぐにロックを獲得できるのを、
明示的に書かないとだめだな。

$oDbCxn->beginTransaction();

↑これがダメってこと。
なぜなら、↑だと、デフォルトのロックが選択される。
SQLiteにおける、デフォルトのロックとは、defferd lockである。

これだと遅延するから、4つの処理をトランザクションではさみたい、
などという場合には不向き。
0330nobodyさん2009/02/23(月) 00:29:36ID:???
busy_timeoutの設定をするんじゃだめなのか?
0331nobodyさん2009/02/23(月) 00:45:25ID:DYtiHKsN
>>330
やったことある?
0332nobodyさん2009/02/23(月) 00:58:26ID:DYtiHKsN
もう一つの懸念。
SQLiteはNFSというファイルシステムを使っているマシンで実行すると
ぶっこわれるらしい。

NFSとはおもにUNIXで使われるファイルシステムらしい。
特にfreeBSDでよく使われるらしい。

自分が借りているレンタルサーバーはfreeBSDなので、
ひょっとしてSQLiteは使えないんじゃないか?
0333nobodyさん2009/02/23(月) 01:02:31ID:???
NFS使ってるレンタルサーバなんてないから安心しろw
0334nobodyさん2009/02/23(月) 01:02:40ID:???
http://jp.php.net/manual/ja/function.sqlite-open.php

>ヒント
>NFSパーティションにマウントされたSQLiteデータベースを処理すること は推奨されません。
>ロックに関してNFSは著しい問題があるので、 データベースを全くオープンすることさえできない可能性があります。
>ま た、成功した場合でも、ロックに関する動作は予測できない結果を生む可 能性があります。

だってさ。こっち調べるのが先じゃない?w
0335nobodyさん2009/02/23(月) 01:02:48ID:DYtiHKsN
SQLiteには、

deferred,
immediate,
exclusive

という3つの種類のロックがあるが、
どれを使うべきか?というのは、考えなくていいの?

$dbh->beginTransaction();

これを使うと、自動的に、デフォルトの、ロックが
選択される。SQLiteにおけるデフォルトのロックとは
deferred ロックである。

もし銀行口座などの実装をしたい場合、
exclusiveにしないとダメなのではないか?

また、immediateって、なんのためにあるんだ?
いつ使うんだ?
0336nobodyさん2009/02/23(月) 01:03:21ID:DYtiHKsN
>>333
よかった
0337nobodyさん2009/02/23(月) 01:07:02ID:???
ロックとトランザクションの違いを勉強してきたほうがいいんじゃないかな?
0338nobodyさん2009/02/23(月) 01:07:46ID:???
俺もそう思うw
0339nobodyさん2009/02/23(月) 01:29:03ID:???
こいつ前いたキティだろ
通報しましたとかsqlite関連で腐るほど書き込んでた
0340nobodyさん2009/02/23(月) 01:29:11ID:???
WikiとCMSってどう違うの
0341nobodyさん2009/02/23(月) 01:36:09ID:???
>>316をスルーしてる時点で確定
0342nobodyさん2009/02/23(月) 01:38:00ID:???
>>340
WikiもCMSの一種だよ
Wikiが他のCMSと違うのは、不特定多数によるサイト構築を主体とした構成になっている

つかPHP関係ないじゃん
0343nobodyさん2009/02/23(月) 02:23:27ID:DYtiHKsN
もしかしてwhileいらないんじゃないか?
sleepしてrollbackだけでいいんじゃないか?
0344nobodyさん2009/02/23(月) 03:33:25ID:???
こいつプログラム板の方とマルチだった
http://pc11.2ch.net/test/read.cgi/tech/1232712334/284-
0345nobodyさん2009/02/23(月) 03:44:00ID:???
派遣先の歓迎会などで、趣味を聞かれることがあります。
私の趣味は豊富で下記のとおりです。
・アニメ、エロゲ、同人誌、アニソン
・風俗、ストリップ鑑賞
・声優、秋葉系アイドルイベント参加

しかし、これを言うと、おそらくひかれてしまいます。。。
なんて言えばよいのでしょうか?

休みの日は何をしてる?と聞かれても、声優ライブの最前線で
サイリウムをもって、跳んでいるなんて言えません。
0346nobodyさん2009/02/23(月) 04:39:47ID:cBNbBaFX
$a = "aaa"

if(preg_match("/^[0-9]+$/",$a) == true){
echo "ok";
}else{
echo "dame";
}

でdameになってくれるのに(if(preg_match("/^[0-9]+$/",$a)でもいけた)、

if(preg_match("/^[0-9]+$/",$a) !== false){
echo "ok";
}else{
echo "dame";
}

だと$aを何にしても全部okになる・・
なんで><
0347nobodyさん2009/02/23(月) 04:40:33ID:cBNbBaFX
→$a = "aaa";
0348nobodyさん2009/02/23(月) 04:52:33ID:???
>>346
http://jp.php.net/preg_match
0349nobodyさん2009/02/23(月) 05:29:48ID:DYtiHKsN
<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION");

// $oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
print $e->getMessage();

$oDbCxn->rollback();
}
}
?>
0350nobodyさん2009/02/23(月) 05:30:39ID:DYtiHKsN
>>349
実行すると、なんでエラーになるの?

PHP5 + PDO + SQLite3
----------------------------------
database structure

id | name| value

1 | value| 5
-------------------------------
database name = test1

table name= tb1
0351nobodyさん2009/02/23(月) 05:33:14ID:DYtiHKsN
トランザクションをスタートするのに、
$oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION");
はダメで、
$oDbCxn->beginTransaction();
なら良い、というのはおかしい。
なぜエラーになるの?
0352nobodyさん2009/02/23(月) 06:48:25ID:c878IibK
教えて下さい。

test.txt というutf-8のファイルがあって中に文とかphpの変数とかが書いてあります。
これをsjisのtest.phpで読み込み表示させたいのですがincudeだと文字化けします。
どうすれば表示できますか?
0353nobodyさん2009/02/23(月) 06:59:44ID:???
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" />
を吐いてやる
0354nobodyさん2009/02/23(月) 07:08:52ID:???
>>353
その知識で回答しようと思えるなんて素直に感心するよ
0355nobodyさん2009/02/23(月) 07:20:40ID:cBNbBaFX
>>348
自分なりに調べてみました><
mb_eregでは !== false でいけたので、それも一緒に比べてみたら
返り値のとこが、
mb_ereg
>正規表現に一致しないか、 エラーを発生した場合に FALSE を返します。
preg_match
>preg_match() は、エラーが発生した場合にFALSEを返します。
でした。
preg_matchは正規表現に一致しないときはfalseを返してくれないので、
!== falseがスルーされたということでよいのでしょうか?><
今まで全部!== falseでできると思っててそれでやってたので変更が大変ですが
preg_matchのときは==とか何もつけないバージョンでやっておきます><
ありがとうございました
0356nobodyさん2009/02/23(月) 07:29:25ID:???
>>352
逆だUTF-8の方
両方使いたいなら変換かけるべし
0357nobodyさん2009/02/23(月) 16:02:31ID:???
OS linux
PHP ver 5.2.5
連携 とくになし
<?
//------------------------------------------------
//ペット可否
//------------------------------------------------
function GetPet_F($int)
{
$res = "";
if($int=="0") $res = "不可";
else $res = "可能";
return $res;
}
print GetPet_F(0);
?>
以上ソースコードでsyntax error, unexpected $end出るんですが何が原因なんでしょうか・・・
03583572009/02/23(月) 16:02:51ID:yJ3BEx4Z
ID出すの忘れ
0359nobodyさん2009/02/23(月) 16:12:39ID:???
あれ、流出してる?
0360nobodyさん2009/02/23(月) 16:31:29ID:???
>>352
eval(mb_convert_encoding(file_get_contents('test.txt'), 'Shift-JIS', 'UTF-8'));

>>357
構文に間違いはないから
スクリプトのエンコーディングが mbstring.script_encoding と合ってないんでしょう
0361nobodyさん2009/02/23(月) 16:37:17ID:yJ3BEx4Z
可能の能抜いたらエラー出なかったです・・・
なんなのだろう
0362nobodyさん2009/02/23(月) 16:46:30ID:???
>>357
原因は、Shift Jisの5C問題だね。
能のShift Jisのコードが94 5C
5Cはバックスラッシュ(Shift Jisだと¥)なので、
PHPのパーサが、終わりのダブルクォーテーションを文字列と認識してしまう。
結果、文字列が閉じられていないと判断されて、エラーになる。
0363nobodyさん2009/02/23(月) 17:31:12ID:???
今時SJISでスクリプト書くやつなんていんの?

話は変わるが

echo '<table 〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜';

引継ぎでプログラムのソースコード見たらこうなってた
まじ簡便してくれ・・・orz
あと、同じ要領でechoでJavaScriptとか吐き出してるのもやめてくれ

クエリはまだ許せる

仕事でプログラムするときはほかの人にわかりやすいコードにしてください
これまじでお願い
0364nobodyさん2009/02/23(月) 17:59:46ID:???
--enable-zend-multibyte付けてmbstring.script_encodingを設定すりゃ
Shift-JISだろうが何で書こうがそいつの自由だ
雑談スレに行けクズ
0365nobodyさん2009/02/23(月) 21:03:10ID:cBNbBaFX
また質問させていただきます
$aa = "AA";
$bb = "bb";

$sql = "SELECT * FROM v001upfile WHERE :AA = :BB";
$result = executeQuery($sql);
$result->bindParam(":AA",$aa,PDO::PARAM_STR);
$result->bindParam(":BB",$bb,PDO::PARAM_STR);
$result->execute();

$row = $result->fetchAll();
$rows = count($row);

のようにすると、whereに該当するデータがなく、$rowsも0になってしまいます。いろいろしていると、
$sql = "SELECT * FROM v001upfile WHERE AA = :BB";
とするとデータが得られました。
どうやらwhere :AAのbindのパラメータ、PDO::PARAM_STR
で、'AA'とされてしまっているから?、だめのような気がするのですが、
解決策ありましたらよろしくおねがいします
0366nobodyさん2009/02/23(月) 21:21:42ID:???
>>365
それ駄目だ、俺も悩んだ
WHERE $AA = ?か、 ? = ?にしたよ
SELECTでbindValueとbindParamは使わない方がいいって
グーグル先生が言ってた
0367nobodyさん2009/02/23(月) 21:33:37ID:???
PDO::PARAM_STMT
0368nobodyさん2009/02/23(月) 21:36:22ID:???
カラム名にPARAM_STR使うなよ
アホかw
0369nobodyさん2009/02/23(月) 22:03:46ID:ikSisMyc
【OS名】CentOS 5.0
【PHPのバージョン】php5.2
【連携ソフトウェア】JavaScript Smarty
【質問内容】
ユーザがログインに成功したときにセッションに値をセットして
次にページにアクセスしてきた時にSmartyで値があるか確認して初期化処理

例:
{{if $smarty.session.foo == 'bar'}}
init(); //これはJScriptの関数
{{/if}}

をしたいんですけど、ブラウザを終了するとセッションまで破棄されてしまいます。
ご教授お願いいたします。
0370nobodyさん2009/02/23(月) 22:06:30ID:cBNbBaFX
>>366
sql文に直接変数入れる方法でしました。できました。
ありがとうございました
>>367,368
やってみたのですが、反応としては356とほぼ同じでした
マニュアルのパラメータ一覧のものをいろいろ代えてやってみたのですが
どうもうまくいきませんでした。
0371nobodyさん2009/02/23(月) 22:12:39ID:???
>>369
セッションはブラウザを終了すると破棄されるものです
継続したいならクッキーを使うといいよ
0372nobodyさん2009/02/23(月) 22:28:00ID:???
>>370
そのいろいろかえてやってみた、の中に正解が入ってないわけだな。
ビット和はとったのか。まぁ、いいや。メンドクセ
0373nobodyさん2009/02/23(月) 22:55:40ID:DYtiHKsN
なぜEXCLUSIVEはトランザクション開始直後に
ジャーナルファイルを作成しないのか?
0374nobodyさん2009/02/23(月) 22:59:36ID:???
アホか
03753692009/02/23(月) 23:03:42ID:???
>>371
PHPSESSIDをクッキーに格納する仕様と勘違いしてました。
ありがとうございました。
0376nobodyさん2009/02/24(火) 00:24:39ID:r/vu3Jnx
          ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <ココまでアホばかり
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
0377nobodyさん2009/02/24(火) 07:08:35ID:???
pdoで急にinsertできなくなった・・
エラーなしで何事もなく終わってるのに肝心のinsertだけできていない・・
0378nobodyさん2009/02/24(火) 07:37:15ID:???
俺なんてPHPMYADMIN全データ文字化けしちゃった。
何もいじってないのに意味不明
03793772009/02/24(火) 07:41:12ID:???
おお!すっかりphpmyadminの存在忘れてて
そっちでやったらカラムの数と値の数が合ってないよってエラーが出てきた!
凡ミスだった。dクス
0380nobodyさん2009/02/24(火) 10:11:31ID:MqsJKVm4
画像のアップロード処理を作っているのですが、
$_['FILE']に入っているtypeはブラウザが送信するもので、
信用できないと聞きました。
そこで、アップロードされたファイルがJPEG、BMP、PNGであることを確認する方法を教えてください。
自分なりに考えてみたのは、
imagecreatefrom〜で、作成できるか確認するというものなのですが、これでもいいのでしょうか?
0381nobodyさん2009/02/24(火) 10:38:47ID:???
>>380
ttp://docs.sun.com/app/docs/doc/817-6000/6mldto822?l=ja&a=view
こういう記事を参考にして
phpでmimeタイプのチェッカーを作成するか
面倒なら外部アプリケーション(コマンド)を使用して
取得できる環境なら(おそらく色々制限がある)そうしたほうが確実で手っ取り早い
0382nobodyさん2009/02/24(火) 10:42:58ID:???
exif_imagetype
0383nobodyさん2009/02/24(火) 10:46:06ID:???
私の目標

Powered by 俺 って書けたらいいな><
0384nobodyさん2009/02/24(火) 10:52:41ID:???
getimagesizeで取得できるmimeじゃだめかな?
03853802009/02/24(火) 11:16:50ID:MqsJKVm4
レスありがとうございます。

>>381
恥ずかしながら、私には難しすぎて理解できません;
MIMEタイプについて学ぶ必要がありそうですね;;

>>382
>>384
なるほど、画像ファイルの場合はこういう専用の関数を使うといいのですね。

はじめの質問からちょっとずれてしまうのですが、画像以外の場合ではどんな方法があるのでしょうか?
たとえば、MP3ファイルの場合など。
PECLのFileinfo関数なんかは使えるのでしょうか?

後学のために教えてください。
0386nobodyさん2009/02/24(火) 11:24:58ID:???
そこまで分かってるなら、試すなりぐぐるなりすればいいと思うがw
0387nobodyさん2009/02/24(火) 11:29:20ID:???
家泊まってもいいって言われたのはフラグたったのかな?
0388nobodyさん2009/02/24(火) 12:52:56ID:???
>>385
$str = file_get_contents("example.mp3");
if (substr($str, 0, 3) == "ID3") { ... }
0389nobodyさん2009/02/24(火) 13:06:52ID:???
地味にこれが便利。

$mimetype = `file -bi $file`;
03903802009/02/24(火) 14:25:53ID:MqsJKVm4
>>386
それはそうなのですが、
たとえば、finfo_file()で得られる値は信用してよいのか、などがわからなくて;

>>388
なるほど、MP3の場合は、先頭にID3 タグの情報があるかどうかで判断できるわけですね。
しかし、MP3以外にも対応できる、もっと汎用的な方法はないのでしょうか?

>>389
linuxコマンドで取得するということでしょうか?
こんな方法もあるんですね!勉強になります。

続けて質問になってしまうのですが、ファイルサイズやファイル名などに関しても、
$_FILEの値は信用してはいけないのでしょうか?
その場合、安全な方法を教えてください。
0391nobodyさん2009/02/24(火) 14:56:33ID:???
>>390
画像だけならfreadして、どんな文字列から始まるかで判別する方法でいいんじゃないかな
JPG→\xff\xd8
PNG→\x89PNG\x0d
GIF→GIF87a or GIF89a
ビットマップは…しらねぇ('A`)
0392nobodyさん2009/02/24(火) 17:27:52ID:???
拡張子でいいじゃん。拡張子がjpgで中身がBMPとかだったら使う側の問題だろ
0393nobodyさん2009/02/24(火) 18:57:41ID:TovVFkKx
クレジット番号と、有効期限などをユーザーに入力させて、
照合(決済できるクレジットカードかどうか)するというASPってありますか?
普通にZEROとかの決済会社とかでは、決済せずに照合のみってできるんでしょうか?
0394nobodyさん2009/02/24(火) 19:01:33ID:???
>>393
CAFIS
0395nobodyさん2009/02/24(火) 19:03:02ID:TovVFkKx
>>394
早速ありがとうございます
調べてみます
0396nobodyさん2009/02/24(火) 20:13:38ID:???
配列の各データをimplodeでくっつけたいんだけど
各データをくっつけるときについでに ' ' でくくりたい。

foreach( $data1 as $d )$data2[]="'$d'";
$str = implode( ',', $data2 );
とかやってるんだけど、これダサくね? 字の数も多いし。
もっとかっこよくやりたい。
0397nobodyさん2009/02/24(火) 20:16:29ID:???
array_mapじゃね?
0398nobodyさん2009/02/24(火) 20:17:21ID:???
>>>>396
> 配列の各データをimplodeでくっつけたいんだけど
> 各データをくっつけるときについでに ' ' でくくりたい。
>
> foreach( $data1 as $d )$data2[]="'$d'";
> $str = implode( ',', $data2 );
> とかやってるんだけど、これダサくね? 字の数も多いし。
> もっとかっこよくやりたい。
0399nobodyさん2009/02/24(火) 20:19:04ID:???
>>396
$str = "'".implode("','", $data2 )."'";
0400nobodyさん2009/02/24(火) 20:37:24ID:???
>>397
コールバック関数書くのめんどくさくね?字の数増えるし。
0401nobodyさん2009/02/24(火) 20:56:11ID:9Iv6lmqO
file_get_contentsとfile関数についてですが
これらはPHP5ではバイナリセーフの関数ということであってますか?
色々調べたのですがバイナリセーフではないという記事が多くて困惑してます
マニュアルにはfileはPHP4.3でバイナリセーフになり
file_get_contentsはバイナリセーフとは書いてませんが
バイナリデータに対応してると書いてます(バイナリデータ対応=バイナリセーフ?)
実際にテストもしてみましたがヌル文字もちゃんと表示されているようでした
バイナリセーフではないというのは過去のこと(記事が古い)ということでしょうか?
0402nobodyさん2009/02/24(火) 22:07:03ID:???
>>401
PHP5.xxまでならバイナリに対応してる

PHP6以降、バイナリを突っ込めなくなるモードに設定できるようになる
0403nobodyさん2009/02/24(火) 22:33:58ID:gE9pwkM6
imagecopymergeで背景画像(jpg)にユーザがアップロードした画像(jpg/gif/png)を合成したいのですが、
pngの場合に透過部分が透過されずに塗りつぶしになってしまいます。
png-8でもpng-24でも透過できるようにしたいのですがどうすればいいのでしょう?
環境はphp5です。できればImageMagickは使わずにやりたいのですが…

現在のソースはこんな感じです。
$size = getimagesize('./front.png');
$back = imagecreatefromjpeg('../back.jpg');
$front = imagecreatefrompng('./front.png'); //fromjpgだったりgifだったり
imagetruecolortopalette($front, false, 256);
imagecopymerge($back, $front, 0, 0, 0, 0, $size[0], $size[1], 100);
header('Content-Type: image/png');
imagepng($back);
0404nobodyさん2009/02/25(水) 01:09:50ID:Ndqi56nA
sample.phpってのがあって、なんでかhttp://../sample/
みたいに.php無いのにそのページ開いてしまいます
sample.phpの場合だけ開くようにしたいのですがよろしくおねがいします
0405nobodyさん2009/02/25(水) 01:23:53ID:Ndqi56nA
やっぱり、/sample/でも開いてくれたほうが便利な気がしてきたのでやっぱこのままにしときます
0406nobodyさん2009/02/25(水) 01:43:31ID:aIiX70rd
flockで、3つのファイルを、排他ロックしたときに、
その3つのロックを開放するときの順番で、ロックをした順番ですか?
それともロックをした順番の逆順にロック開放するべきですか?

0407>>4062009/02/25(水) 01:44:45ID:aIiX70rd
すいません、誤字があったので書き直しますorz

flockで、3つのファイルを、排他ロックしたときに、
その3つのロックを開放するべき順番は、ロックをした順番ですか?
それともロックをした順番の逆順にロック開放するべきですか?

以上です
0408nobodyさん2009/02/25(水) 03:48:51ID:lXxF9gdp
private $a,
    $b,
    $c;
という書き方と、
private $a;
private $b;
private $c;
という書き方、どっちが適切ですか?
0409nobodyさん2009/02/25(水) 03:58:40ID:???
適切の基準とは?
0410nobodyさん2009/02/25(水) 04:00:27ID:???
>>406
順番は関係ない

>>408
目的もなしに手段だけ見せて適切か不適切かなんて下せる訳ない
あえて言えばコーディングスタイルの問題
宗教論争になるから好きにしろ
0411nobodyさん2009/02/25(水) 12:11:48ID:???
何でも基準とかいう奴なんなの?
答えられないんじゃないの^^;
0412nobodyさん2009/02/25(水) 12:54:52ID:Bh8pwxYs
ショッピングカートの作り方について質問です

商品名をクリックするとクッキーに商品名と金額を記録するようにしたのですが
クッキーに配列で記録することはできるのでしょうか?

$_COOKIE['sinamono']にカートの中身が全部入ってるとして解説1のような構造で取れるようにしたいですが
現在方法が分からず解説2のようにやってます
解説1のようにクッキーに記録するにはどのようにしたらよろしいかアドバイスお願いしまsう

「解説1」
$_COOKIE['sinamono'][0]['name'] これは商品Aの名前
$_COOKIE['sinamono'][0]{'okane'] これは商品Aの金額
$_COOKIE['sinamono'][1]['name'] これは商品Bの名前
$_COOKIE['sinamono'][1]{'okane'] これは商品Bの金額
以下続く・・・

「解説2」
$_COOKIE['sinamono_0_name'] これは商品Aの名前
$_COOKIE['sinamon_0_okane'] これは商品Aの金額
$_COOKIE['sinamon_1_name'] これは商品Bの名前
$_COOKIE['sinamono_1_okane'] これは商品Bの金額
0413nobodyさん2009/02/25(水) 13:30:48ID:???
>>412
商品データベースは持っていないのかな?
データベースがあるなら、記録するのは商品コードだけでよいと思う。

記録方法は、COOKIEにそのままなら配列は無理だから、CSV形式とかにする。

だが、一番手っ取り早くて、効率的なのはセッションを使うことだと思う。
0414nobodyさん2009/02/25(水) 13:33:30ID:???
$_COOKIE['sinamono_0_name']を$GOODS['sinamono'][0]['name']に変換する関数書けばいいやん
0415nobodyさん2009/02/25(水) 13:42:15ID:???
COOKIE→[abcdefg]

データベース(テーブル1)
abcdefg 商品ID
abcdefg 商品ID
abcdefg 商品ID
abcdefg 商品ID

データベース(テーブル2)
商品ID 商品名 値段 更新日
商品ID 商品名 値段 更新日
商品ID 商品名 値段 更新日
商品ID 商品名 値段 更新日
0416nobodyさん2009/02/25(水) 13:44:07ID:???
>>412
マニュアルの例3に配列での保存方法がある
http://www.php.net/manual/ja/function.setcookie.php#function.setcookie.examples
0417nobodyさん2009/02/25(水) 13:50:34ID:???
>アドバイスお願いしまsう

おまえかわいいなw
0418nobodyさん2009/02/25(水) 14:11:49ID:ZVMHOF39
data.txtファイルのマウスでつまみ、pppp.phpファイルに落とすと、
pppp.phpファイルが実行され、pppp.phpファイルに書かれた仕様でdata.txtの内容をIEに表示させる。
という、pppp.phpファイルを書く事は可能でしょうか?
可能だとすれば、どんな関数を使えばいいのか教えて下さい。
0419nobodyさん2009/02/25(水) 14:31:57ID:???
つajax
04204182009/02/25(水) 14:38:39ID:ZVMHOF39
>>419
phpでは不可能ですか?
0421nobodyさん2009/02/25(水) 14:45:54ID:???
>>418
Windowsでいいんだよな?
できるけど、いろいろと設定が必要なはず。
0422nobodyさん2009/02/25(水) 14:45:58ID:???
ごめん、何がしたいのか理解できない

PHPはサーバーサイドってことを理解したうえでの質問と見ておk?
0423nobodyさん2009/02/25(水) 14:48:21ID:???
テキストファイルをドラッグ&ドロップしてphpファイルを起動させて引数情報を得て
処理するわけだから関数以前にやることありありだな
0424nobodyさん2009/02/25(水) 14:52:22ID:???
ブラウザー上でのD&Dとは限らない。CLIでのことだろ?
デスクトップにPHPファイルを置いておいて、ドラッグ&ドロップでデータを受け入れて処理して、ブラウザを起動する。

04254182009/02/25(水) 14:55:02ID:ZVMHOF39
>>421
> Windowsでいいんだよな?
はい。

>>422
> ごめん、何がしたいのか理解できない
2ちゃんのスレッド情報の"mail""name""time""id""res"の情報がdata.txtにcvs形式で書かれています。
それを、pppp.phpファイルを使い、自分の好みの表示方法でIEに表示させたいのです。
04264182009/02/25(水) 14:56:48ID:ZVMHOF39
>>423
>テキストファイルをドラッグ&ドロップしてphpファイルを起動させて引数情報を得て処理する
そうです。 これがやりたいのです。
0427nobodyさん2009/02/25(水) 14:58:55ID:???
>>426
できなくもないが
色々しないといけない
基本的にPHPはサーバーサイド向けに作られてるから
そういうのしたいならCなりJavaなり使おうな
0428nobodyさん2009/02/25(水) 15:05:02ID:???
>>427
はぁ?
デスクトップ環境でPHPが動かないとでも?
レンサバユースしてないアフィリエーターらしい考え方だな。

できなくもないってなら、できる方法を教えてやれよ。知ってるならだが。
04294182009/02/25(水) 15:05:11ID:ZVMHOF39
>>427
了解しました、あきらめます。
0430nobodyさん2009/02/25(水) 15:08:10ID:???
>>428
何が言いたいのかわからん
0431nobodyさん2009/02/25(水) 15:27:40ID:???
pppp.batファイルを用意して

php pppp.php %1

とか書いておけばいいんじゃないの?
04324182009/02/25(水) 15:28:03ID:ZVMHOF39
http://www.html-kouza.com/html/input-file.html
じゃあ、ここにあるような、『参照』のボタンでdata.txtを読み込み、↑に書いた作業をさせるのは可能でしょうか?
0433nobodyさん2009/02/25(水) 15:28:50ID:???
>>432
お前それファイルのアップロードやんけ
0434nobodyさん2009/02/25(水) 15:37:03ID:???
ajaxを覚えればできるからさっさと勉強してこい
04354182009/02/25(水) 15:42:27ID:ZVMHOF39
>>433
こういう風に、data.txtの選択&読み込みが出来たら嬉しいんだけど、htmlにはそういう機能はないのでしょうか?
0436nobodyさん2009/02/25(水) 15:44:19ID:???
>>435
いや、それブラウザでやってるじゃん
真似してみたらいいじゃん
0437nobodyさん2009/02/25(水) 16:07:13ID:???
>>435

>>434が教えてくれてるのに君はひどい人だね
0438nobodyさん2009/02/25(水) 16:36:21ID:???
>>315>>322
どこが違うのか、わからん
0439nobodyさん2009/02/25(水) 16:42:17ID:???
失敗例はキャッチブロックにロールバックが無くて、
成功例はロールバックって書いてあるところかな?
0440nobodyさん2009/02/25(水) 17:03:04ID:???
いやどっちも書いてるやん
0441nobodyさん2009/02/25(水) 23:16:51ID:???
phpの中でjavascriptを連携させるときに、中に入るクオーテーションの種類が3つになってしまって使えん・・
オンクリックの中にさらにクオーテーション入ったときとか、functionしても、引数使うから
結局''で囲うからどうにもならね
0442nobodyさん2009/02/25(水) 23:23:13ID:???
日本語でおk。
0443nobodyさん2009/02/25(水) 23:28:33ID:+kmtnISz
PHPは実行されるまで未定義の関数(若しくは関数名TYPO)が存在するか否か分かりませんが、
ツールなどで未定義の関数や引数の間違いを静的に検出する方法はないですか?
0444nobodyさん2009/02/25(水) 23:33:06ID:???
php_check_syntaxじゃだめか?
0445nobodyさん2009/02/25(水) 23:36:40ID:???
<?php
function hoge(){
echo 'hoge';
}
hage();
?>
とかあったときに、実行前に関数hageが無い事を検出したいって事だろ。

静的解析とかダセェ事せずに自動テスト使おうぜ。
0446nobodyさん2009/02/25(水) 23:41:51ID:LSqAU6YZ
SQL文を発行するのに、

$dbh->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

以外の書き方って、ある?
------------------------
【環境】
PHP5 + PDO + SQLite3

ようはexec以外のやり方で、って意味。
0447nobodyさん2009/02/25(水) 23:43:15ID:???
>>442
クオーテーションがネストしてしまうときに、
どう対処したらいいですか、って意味だろ?

行間読もうぜ
さもないと、30才でホームレスだにょ
0448nobodyさん2009/02/25(水) 23:54:44ID:???
>>446
一発で終わりならexec、ループさせるならprepareで良いんじゃない?
0449nobodyさん2009/02/25(水) 23:59:50ID:???
>>448
ああ、prepareがあったか。
ありがと。
0450nobodyさん2009/02/26(木) 00:27:28ID:tryMdVBh
mysqlのPDOを使ってみたいのですが
php.iniのphp_mysql.dllをコメントをはずせばつかえるのでしょうか?
0451nobodyさん2009/02/26(木) 01:06:52ID:???
使える。
0452nobodyさん2009/02/26(木) 01:23:01ID:???
>>450
自宅でのテスト環境だったら、たぶんそれでいける。
確認はphp.infoを見る。

無料のレンタルサーバーではほとんど
ドライバが入っていない(ので無理)
0453nobodyさん2009/02/26(木) 01:55:08ID:???
>>441
スクリプト中でechoとかprint()使ってるのかなぁ。。
なら、heredocにすれば少しは気を使う部分が減るかもしれない。

$text = 'ちんこ' ;
echo <<<__E_O_T__
<button name="tinko" onclick="alert( '{$text}' ) ;" />
__E_O_T__


HTMLとかJavaScriptは完全に別ファイルにして
<button name="tinko" onclick="alert( '<php echo $text ?> ' ) ;" />
のほうがいいと思うけど。
0454nobodyさん2009/02/26(木) 02:05:21ID:91pUGaxV
おそらく、PHP4とPHP5での違いだと思うのですが、

<input type="text" name="test" value="">←に、test'sと入力して送信すると、

PHP4だと、
$_GET["test"]の値は、test'sとなりますが、

PHP5だと、
$_GET["test"]の値は、test\'sとなります。

送信された時点でエスケープされているのですが、これはphp.iniで変更可能でしょうか?
0455nobodyさん2009/02/26(木) 02:08:20ID:???
うん
マジックなんちゃらやね
0456nobodyさん2009/02/26(木) 02:20:57ID:???
magic_quotes_なんちゃら

SQLインジェクションの対策で
そういう変なオプションがある。

自動的に'とかを勝手にエスケープしてくれるっていう。
0457nobodyさん2009/02/26(木) 03:45:51ID:91pUGaxV
さんくす!
04584182009/02/26(木) 04:00:48ID:GtV/r+in
昨日は有り難うございました。
http://www.stackasterisk.jp/tech/php/php02_06.jsp

【form.html】
<html><body>
<form action="display.php3" method="POST">
<input type="text" name="fName" size="30"><br>
<input type="submit" value="submit">
</form>
</body></html>

【display.php3】
<html><body>
<?
print $fName;
?>
</body></html>

今日はこれにチャレンジしてみたのですが、うまく動きません。
どこが悪いのかご指摘下さい。
0459nobodyさん2009/02/26(木) 04:06:33ID:???
$_POST['fName']
そこの情報古すぎるから違うとこのほういいよ
0460nobodyさん2009/02/26(木) 04:07:45ID:???
>>458
ほんとにPHP3が動いているのか?
とかいうオチじゃないの。
0461nobodyさん2009/02/26(木) 04:08:51ID:7qsKyuky
ファイルに100って数字を入れておいて、
5分ごとに1減らす、ってどう書けばいいの?

cronとかじゃなくて。
04624182009/02/26(木) 04:08:56ID:GtV/r+in
>>459
有り難うございます。
> $_POST['fName']
をドコと入れ替えるのでしょうか?
04634182009/02/26(木) 04:10:48ID:GtV/r+in
>>460
あ、なるほど。.php3ってそういう意味なんだ。
私の環境はPHP Version 5.2.6でしたw
0464nobodyさん2009/02/26(木) 04:10:55ID:7qsKyuky
そのPHPファイルにアクセスするたびに
計算してるようなんだけど。

だから、例えばページが過疎ってて、
3日間アクセスがなかったら、その間は
計算しない感じ。

そんで3日ぶりにアクセスがあったら、
「えーーっと、、、、前回のアクセスから
3日だから、3(日)X24(時間)X12(5分の単位)
減らせばいっかな、、、」
とかって計算しているようなんだけど??
04654182009/02/26(木) 04:17:39ID:GtV/r+in
じゃあ、PHP Version 5.2.6の環境で動く、>>458を誰か書いて下さい。 お願いしますっ。
0466nobodyさん2009/02/26(木) 04:21:18ID:???
【form.html】
<html><body>
<form action="display.php3" method="POST">
<input type="text" name="fName" size="30"><br>
<input type="submit" value="submit">
</form>
</body></html>

【display.php3】
<html><body>
<?
print $_POST['fName'];
?>
</body></html>
0467nobodyさん2009/02/26(木) 04:22:17ID:???
>>465
>>459 に書いてある。
0468nobodyさん2009/02/26(木) 04:24:25ID:???
ちょっと間違えた。
【form.html】

<html><body>
<form action="display.php" method="POST">
<input type="text" name="fName" size="30"><br>
<input type="submit" value="submit">
</form>
</body></html>

【display.php】

<html><body>
<?
print $_POST['fName'];
?>
</body></html>
0469nobodyさん2009/02/26(木) 04:24:57ID:???
>>467
だからどこを変更したらいいのか
わからないから聞いてるんだろ?

自閉症もたいがいにしろや
04704182009/02/26(木) 04:42:12ID:GtV/r+in
>>468
有り難うございます。
form.htmlこれで入力枠が表示されます。
で、aaaaaとか入力して、ボタンを押すと、真っ白の画面に変わり何も表示されません。
どうしたらいいでしょうか?
0471nobodyさん2009/02/26(木) 04:44:09ID:???
<form action="display.php"

この行はあってる?

それと、
display.php
ファイル名これに変更したから。
04724182009/02/26(木) 04:47:29ID:GtV/r+in
>>471
はい。 >>468をそのままコピペしました。
0473nobodyさん2009/02/26(木) 04:51:12ID:???
>>472
アパッチは起動してる?

ブラウザのURL欄に

http://localhost/form.html

とかって入力しないとだめだよ

ダブルクリックしてブラウザで見たらだめってこと
今はURL欄に
file:///C:/display.php
とかって表示されてるでしょ?それだとだめ
04744182009/02/26(木) 04:56:26ID:GtV/r+in
>真っ白の画面に変わり何も表示されません。
つーか、この状態でソースを表示させると、
<html><body>
<?
print $_POST['fName'];
?>
</body></html>
これがマンマ表示されます。
だから、変数の中に何も代入されてなくて、print関数でnullを表示してるのではないでしょうか?
04754182009/02/26(木) 04:57:41ID:GtV/r+in
アパッチは動いてます。
http://localhost/php/phpinfo.php
これを入れると、紫色の表がずるずる出て来ます。
04764182009/02/26(木) 05:01:07ID:GtV/r+in
file:///C:/display.php
これではなく、
http://localhost/php/display.php
これになってて、真っ白の状態です。
04774182009/02/26(木) 05:24:06ID:GtV/r+in
解決しました。
<?

<?php
としました。
有り難うございました。
04784182009/02/26(木) 06:41:16ID:GtV/r+in
おかしいな、色々いじってたら、form.htmlに入力してクリックすると、
display.phpが表示されなくて、ファイルのダウンロードってのが表示されるようになったw
0479nobodyさん2009/02/26(木) 06:56:40ID:zwlsZYIS
pcntl_forkでフォークした時、
外部とのIOはどうなりますか?
たとえば、オープンしてあるファイルとか、
DBとの接続とか。
複数プロセスからファイルがオープンされているような状態になるのはまずいんじゃないかと
思うのですが・・
04804182009/02/26(木) 06:57:27ID:GtV/r+in
ああ、わかった、form.htmlをつまんで、ieに落とすだけじゃダメなんだ。
ちゃんと、http://localhost/php/form.htmlと打つと。
0481nobodyさん2009/02/26(木) 07:10:01ID:???
ワラタ
0482nobodyさん2009/02/26(木) 08:12:14ID:WDGjNsPd
DB使えないレンタル鯖で、情報をインサートする手段を考えていて、
txt、cgiや、datファイルなどなどに書き込めることがわかったのですが、
ふと、.phpにもインサートできるのかな?と疑問におもいました。
phpに書き込んで、それぞれ変数に格納していって、参照〜
みたいなのを1000件くらいしたときtxt cgi dat などと比べて速度は変わらないでしょうか?
0483nobodyさん2009/02/26(木) 09:10:36ID:???
君は何をいってるんだい?
拡張子が変わったところでプレーンテキストのデータということには変わりないんだろ?
0484nobodyさん2009/02/26(木) 09:45:22ID:???
>>482
DBが使えないといっても、txtが使えるならSQLiteぐらい使えるんじゃない?
まぁ、それが無理として、更新が重ならないという条件が付くなら、phpファイルに
var_export($hoge, true);の結果を書きこむ手はある。
速いよ。
しかし、一気に読み込むからメモリは食うけどな。メモリ割り当て次第。
0485nobodyさん2009/02/26(木) 10:20:05ID:???
>>484
なんでvar_export?
取り出すときevalすんの?しかも遅いじゃん

serializeの方が安全で高速
0486nobodyさん2009/02/26(木) 10:24:40ID:???
たかだか1000件
マイクロ秒単位の誤差などどうでもいい
好きにしろ
0487nobodyさん2009/02/26(木) 10:36:38ID:???
parse error syntax $endうんたらわけわかんね
0488nobodyさん2009/02/26(木) 10:45:56ID:???
凡ミスするやつはIDE使え
0489nobodyさん2009/02/26(木) 12:49:24ID:???
aptanastudioとPDT2がうめえwwww
0490nobodyさん2009/02/26(木) 12:49:59ID:???
僕の大好きなあぷてぃーなちゃんがこんなに進化するとは思わなかったw
dw8から乗り換えるわwwwwwwwww
0491nobodyさん2009/02/26(木) 12:50:37ID:???
PHPEclipse使ってるけどAptanaって使いやすいのか?
0492nobodyさん2009/02/26(木) 12:54:45ID:hOiLi7h5
先生方!
文字列を1byteじゃなく1bitを取得することってできますか?
0493nobodyさん2009/02/26(木) 13:06:37ID:???
できる
0494nobodyさん2009/02/26(木) 13:15:31ID:???
aptanaは単品よりaptanastudioのほうがいいよ
0495nobodyさん2009/02/26(木) 13:22:02ID:???
>>485
はぁ?
試したのかよ。$data = 付けて保存したら、includeするだけだぜ。
unserializeの方が遅いよ。
0496nobodyさん2009/02/26(木) 14:12:33ID:YD+Z+nCM
サーバー全体で404エラー画面をhtaccessで設定しています。
しかしPHP内で
header("Not Found", true, 404);
と書くと、設定している404エラー画面ではなくブラウザの404エラー画面が出ます。
設定しているエラー画面を表示させるにはどう書けばいいでしょうか?
0497nobodyさん2009/02/26(木) 14:15:08ID:???
location
0498nobodyさん2009/02/26(木) 14:22:20ID:???
locationとかMETAタグだと、ブラウザに表示されるアドレスが
404エラーのファイルになりませんか?
0499nobodyさん2009/02/26(木) 14:27:22ID:???
>>498
それならinclude(error.html);exit();で良いじゃないか
0500nobodyさん2009/02/26(木) 14:28:09ID:???
>>496
そのheaderを出した後、自前のエラー画面をreadして出力。
ブラウザは404ヘッダーと404用のソースを受け取る
0501nobodyさん2009/02/26(木) 14:35:56ID:???
>>496
その問題に関係あるか分からないけど
IEだと512バイト?以下のエラーファイルは無視して
自前のエラーファイル使うらしい。

インターネットオプションの詳細設定から変えられるけど。
0502nobodyさん2009/02/26(木) 15:03:08ID:???
>>499->>501
まとめて失礼します。
たくさん教えてくださってありがとうございます。
無事できるようになりました。
>>501
それは知りませんでした。デザイン頑張ります。
0503nobodyさん2009/02/26(木) 15:32:12ID:6qh6YAhf
2人以上のn人を3人グループと2人グループに分け、それぞれのグループ数を出すにはどうしたら良いですか?
なるべく3人グループができるようにします
関数にて処理したいと思います
よろしくおねがいします

function get_group (n) {
/*
計算するところ
*/
return array('3' => ? ,'2' => ?);
}


n=2の場合
array('3' => 0 ,'2' => 1);

n=7の場合
array('3' => 1 ,'2' => 2);

n=9の場合
array('3' => 3 ,'2' => 0);

n=11の場合
array('3' => 3 ,'2' => 1);
0504nobodyさん2009/02/26(木) 15:34:16ID:???
>>503

$a = 10 % 3;

10を3で割った余りが$aに入る($a → 1)

これ使え
0505nobodyさん2009/02/26(木) 15:35:02ID:???
nを3で割って余りが1か2で判断すればいいじゃん
0506nobodyさん2009/02/26(木) 15:37:50ID:???
switch mod
0507nobodyさん2009/02/26(木) 15:38:09ID:???
余りが1だったらどうすればいいの?
0508nobodyさん2009/02/26(木) 15:39:00ID:???
>>507
1組減らしたら何人余るか計算してみろよ
0509nobodyさん2009/02/26(木) 16:03:26ID:6qh6YAhf
すっきりしたコードではないですが、一応できましたのでのせときます
ありがとうございました

function get_group ($n) {
if((int)$n < 2) return false;
$total = (int)$n;
$sannin = 0;
$futari = 0;
$amari = $total % 3;
if($amari === 1) {
$sannin = floor(($total / 3)) - 1;
} else {
$sannin = floor($total / 3);
}
$futari = ($total - ($sannin * 3)) / 2;

return array('3' => $sannin ,'2' => $futari);
}
0510nobodyさん2009/02/26(木) 16:04:28ID:???
なにそのきめえコードwwww
0511nobodyさん2009/02/26(木) 16:06:21ID:???
いま書いてやるから待ってろ
0512nobodyさん2009/02/26(木) 16:11:53ID:???
なるべく三人グループにしたいってのになんで
n=7のときは2人グループが二つできるの?
0513nobodyさん2009/02/26(木) 16:18:30ID:???
一人ぼっちになった奴の気持ちになってみろ
0514nobodyさん2009/02/26(木) 16:21:51ID:???
function group($n) {

switch ($n) {

case 1 : return false;
case 2 : return array(0, 1);
case 3 : return array(1, 0);
case 4 : return array(0, 2);
case 5 : return array(1, 1);
case 6 : return array(2, 0);
case 7 : return array(2, 1);

・・・略

}

}
0515nobodyさん2009/02/26(木) 16:32:40ID:???
if (is_numeric($n = $_SERVER['QUERY_STRING'])) getGroup($n);
print_r(getGroup($n));
function getGroup($n) {$a=floor($n/3);$b=fmod($n,3);switch ($b) {case 0:return array('3'=>$a,'2'=>0);break;case 1:return array('3'=>$a-1,'2'=>2);break;case 2:return array('3'=>$a,'2'=>1);break;}}
0516nobodyさん2009/02/26(木) 16:33:56ID:???
GMP関数使えばもうちょっと行数減らせるけど鯖によるから今回は使わなかった
0517nobodyさん2009/02/26(木) 16:35:59ID:???
break;はreturnで返してるから書かなくてもいいけどね
あとは好きにしろ
0518nobodyさん2009/02/26(木) 16:37:58ID:???
>>515
横からだけど、fmodなんて関数あったのか
しらんかったわw
0519nobodyさん2009/02/26(木) 16:44:24ID:???
今思い出したけど、switch構文の中にreturnってなんか気持ち悪いと思うのは俺だけなんだろうか
ループ処理内にreturnもなんか違和感を感じる
0520nobodyさん2009/02/26(木) 16:46:25ID:???
>>519
俺もなんか気持ち悪い。
でも、やってる人も多いんだよね。
まぁ、好き嫌いのレベルなのんだよね。たぶん。
0521nobodyさん2009/02/26(木) 16:53:00ID:???
気持ち悪いって人は少数派だから使っとけ
ttp://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla%3Aja%3Aofficial&hs=9eG&q=return+switch+%E6%B0%97%E6%8C%81%E3%81%A1%E6%82%AA%E3%81%84&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
0522nobodyさん2009/02/26(木) 16:59:46ID:???
プログラミングっつうのはなシンプルでメンテナンスしやすいように見やすく書くことを頭に置いておくんだ
0523nobodyさん2009/02/26(木) 17:02:39ID:???
プログラムを複雑怪奇にしてオレしかメンテできないようにすれば、なかなかクビにならない。
0524nobodyさん2009/02/26(木) 17:05:39ID:???
>>523
そういって辞めたやつがいるんだがまじでしばきたい
0525nobodyさん2009/02/26(木) 17:14:45ID:???
あひゃひゃ。
もしかして、まじでオレだったりしてな。
0526nobodyさん2009/02/26(木) 17:21:44ID:???
>>524
それは、そういう奴をさっさと見抜いてクビにできなかった上司の責任。

ふつうに考えればよいコードを書く方がクビになりにくいのは自明だから、
それができなくて辞めた奴を憎んでもしょうがないべ
逆に、良いコード書いても評価されないならとっとと辞めたほうがよさげ
0527nobodyさん2009/02/26(木) 17:24:01ID:???
良いコード書くだけで評価される職場なんて終わってる
0528nobodyさん2009/02/26(木) 17:29:28ID:???
貴様らこの長くてコピペくさいコードを改良できるかな?

$fp=fopen($filename1,"a");
flock($fp,LOCK_EX);
fwrite($fp,$str)
fclose($fp);

$fp=fopen($filename2,"w");
flock($fp,LOCK_EX);
fwrite($fp,$str)
fclose($fp);
0529nobodyさん2009/02/26(木) 17:30:58ID:???
>>528
既にそれの簡易版コードあるじゃん・・・
0530nobodyさん2009/02/26(木) 17:32:11ID:???
>>528
ID出てないよ
0531nobodyさん2009/02/26(木) 17:33:13ID:???
コードゴルフしたい奴もコーディングスタイルについて語りたい奴もスレチだ
雑談でネタ振りしてろカス
0532nobodyさん2009/02/26(木) 17:38:21ID:???
>>528
function ahoaho( $filename, $filemode, $str ){
$fp=fopen($filename, $filemode); flock($fp,LOCK_EX); fwrite($fp,$str) fclose($fp);
}
ahoaho( $filename1, "a", $str1 );
ahoaho( $filename2, "w", $str2 );
0533nobodyさん2009/02/26(木) 18:02:42ID:???
継承の質問なんですが
0534nobodyさん2009/02/26(木) 18:07:13ID:???
継承の質問なんですが継承で子、孫と作っていくと
class sql {
function getUser() {}
}
class subsql extends sql {
function getParam(){}
}
class sub2sql extends subsql
0535nobodyさん2009/02/26(木) 18:12:54ID:???
sqlしか必要がないファイル、sql,subsqlが必要なファイル、全部必要なファイル
この3つからgetUserを呼び出す際
呼び出しを統一のクラスで管理したいのですがsql,subsql,sub2sqlとクラス名が違うためできません。
クラスを上書きみたいなことはできないのでしょうか?

subsqlではなくsqlの追加ファンクションとして別ファイルで定義したいのです

途中で送信してしまい変な分になってます。ごめんなさい
0536nobodyさん2009/02/26(木) 18:40:47ID:???
>>533-535
おまえさん、スレタイが読めないように、クラスのこともわからないんだろうなぁ。
自分が何を聞きたいのかもう一度整理して、ID出してやりなおしてみたらどうよ
0537nobodyさん2009/02/26(木) 20:25:10ID:???
>>512-513
。・゚・(ノД`)・゚・。
0538nobodyさん2009/02/26(木) 21:31:11ID:???
http://webhosting.yahoo.co.jp/

契約の金額が増えるほど
ディスクの容量が減る
ステキなヤフーのホスティングサービス
0539nobodyさん2009/02/26(木) 22:27:45ID:???
>519
俺は逆にswitchの中には極力return以外を置かないようにしてる。
breakも不要になるからbreak忘れ防げるし、全てのcaseが即returnになってれば読みやすい。
0540nobodyさん2009/02/26(木) 23:09:38ID:???
「ある一定の期間(例えば24時間)ごとに、何かをするにはどうしたらいい?」

って英語で質問したら、いっぱい回答きて
収拾つかなくなったよ
たすけて
どうしたらいい?

http://stackoverflow.com/questions/590464/how-do-you-write-a-process-to-do-something-every-24-hours
0541nobodyさん2009/02/26(木) 23:13:27ID:???
>>540
>>1
0542nobodyさん2009/02/26(木) 23:46:35ID:lNT2RMd9
URLが
http://example/test/
と言う場合、このディレクトリを取得する方法ってないでしょうか?
0543nobodyさん2009/02/26(木) 23:48:20ID:???
>>542
$_SERVER
0544nobodyさん2009/02/26(木) 23:55:20ID:???
>>542
testディレクトリ内で
dirname($_SERVER['SCRIPT_NAME'])
0545nobodyさん2009/02/27(金) 00:44:14ID:???
はぁ?言いたいことがよく分からん。

そのURL叩いて何らかのPHPスクリプトが実行されるのなら、__FILE__でそのスクリプトへのパスが取得出来る。
そのパスから親ディレクトリ取ってくる。

これで回答になってる?
0546nobodyさん2009/02/27(金) 00:45:08ID:???
>>545>>542への回答
0547nobodyさん2009/02/27(金) 01:05:50ID:JrfelggM
WindowsでAPC使おうと思って、pecl4win.php.netみたらサイトが死んでるんですが、
自分でビルドするしかないんでしょうか?

アプリを配布するにあたって、環境はなるべく本家(に近いところ)から落としてもらおうと思ってたんですけど。
0548nobodyさん2009/02/27(金) 02:00:01ID:GwQuSr9T
APCってシェルからPHPを呼び出した時には効かないんですか?
05495472009/02/27(金) 02:42:59ID:???
プロセス違うし、無理なんじゃない。
試しにスクリプトとして実行しても、ヒット数増えなかったし。(一応古いバージョンのなら手元にバイナリがある)

PHPのコンパイル、ワケがわからん。
試しにPHP本体も作ってみるかと思ったんだが、

http://jp.php.net/manual/ja/install.windows.building.php
≫ the Windows build tools をダウンロードし、それを C:\work に展開する

ってあるのも、いきなりリンク切れしてるし。
apcも、とりあえずVCでコンパイルしようとしたら、VCのヘッダファイルでサイズが0の配列ってエラーが出るし。

どこから手をつけたらいいものやら。
0550nobodyさん2009/02/27(金) 04:12:18ID:lL0tvrw7
http://asobi.me.land.to/uyu/1.php

このページなんだけど、
getにしたのに、リロードしたら
カウントアップしてしまうんだよ

なんで?POSTだったら、そうなるってわかるけど、
getだったら、ならないはずなのに?
0551nobodyさん2009/02/27(金) 04:15:05ID:???
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | ここでボケて!!  |
 |_________|
   ∧∧ ||
   ( ゚д゚)||
  /  づΦ
0552nobodyさん2009/02/27(金) 04:18:21ID:lL0tvrw7
>>551
慎重に選考を進めてまいりましたが、
残念ながらご希望に添えない結果と
なりましたのでご連絡申し上げます。

今後ますますのご健康とご活躍をお祈り申し上げます。
0553nobodyさん2009/02/27(金) 04:24:52ID:lL0tvrw7
フォームのアクションを別ファイルにして、1.php → 2.php へPOST
<form method=post action=2.php>

そこから元ファイルに飛ばせばフォームデータ消えるから、F5更新しても大丈夫
header("Location: http://example.com/1.php");

↑こんなめんどくさいこと
しないとだめなの?
0554nobodyさん2009/02/27(金) 04:37:23ID:???
別ファイルにしなくてもカウントアップしたらheaderで飛ばせばいいだろ
HTTPの仕様とブラウザの仕様をもう少し勉強したほうがいい
0555nobodyさん2009/02/27(金) 05:00:02ID:lL0tvrw7
ちょ、、、HP303とか押しすぎ
0556nobodyさん2009/02/27(金) 05:01:29ID:???
天才チンパンジーアイちゃんの今日のIDは lL0tvrw7 か
0557nobodyさん2009/02/27(金) 05:17:49ID:???
>>556
通報しました
0558nobodyさん2009/02/27(金) 07:02:13ID:fK1SPmyA
計算量が多く重いバッチ処理があったので、
pcntl_forkを使いフォークして複数プロセスにタスクを分配させました。
memcacheを共有メモリに使った簡易的なmap-reduceです。
プロセスを増やすほど速くなると思ったのですが、
個々のタスクの速度が落ちるだけで、
合計時間が縮まりません。
フォークを高速化目的に使うのは間違っているのでしょうか?
0559nobodyさん2009/02/27(金) 08:55:05ID:YTPFMmJE
pdoだとローを$row[0]["TEST"]みたいにして取り出せるのに
mysql_fetch_arrayでやると$row[0]["TEST"]でデータが出てこないというか
[1]["TEST"]なら1、[2]["TEST"]なら2、・・・な値が出てくるんだけどそういうもんなの?・・
0560nobodyさん2009/02/27(金) 09:17:59ID:???
>>559
var_dumpすれ
0561nobodyさん2009/02/27(金) 09:25:13ID:???
>558
本命はmemcache。memcacheは相当遅いからボトルネックになってもおかしくない。
文字列と数値以外はシリアライズされるからその分重くなる。
単純にタスクが小さすぎるか、多すぎる可能性もある。タスクが小さすぎると、タスク分割/統合のオーバーヘッドが、分割による高速化を超える。
デュアルコアなら2分割以上の分割は無駄。たとえ100分割しても、働く人間が2人なら2つずつしか捌けん。
googleが速いのは、物理的に大量のサーバーに処理を分割してるのと、オーバーヘッドになるタスクの分割/統合自体も分散処理してるから。

いっぺんボトルネックがどこか測定してみ。
xdebugかzend debuggerを使えば、どの処理が時間を食っているか見られる。
0562nobodyさん2009/02/27(金) 10:25:25ID:???
>>545
他の2名はわかってるから言いたいことがわからないのはおまえだけだよ
0563nobodyさん2009/02/27(金) 10:51:58ID:???
>>558 >>561
フォークを高速化目的に使うのは基本的には間違いじゃね?
map reduceが目的にしているのは、大量のリソースを使えるという利点。
リソースの余剰がない1サーバー内でフォークしても重くなるだけ。
むしろ、高速化したいならフォークしてしまう処理を減らしたほうがいい。
0564nobodyさん2009/02/27(金) 11:00:56ID:???
フォークして高速化できるのはウェブとかスパムとかクライアント側との通信にディレイが発生する
ときぐらいだろ
待ち状態(サーバ側負荷ほとんど無し)のあいだに別プロセスで並行して通信できる利点
0565nobodyさん2009/02/27(金) 13:02:18ID:vxQr4xVs
継承の質問なんですが継承で子、孫と作っていくと
class sql {
function getUser() {}
}
class subsql extends sql {
function getParam(){}
}
class sub2sql extends subsql{
function getAge(){}
}

sqlしか必要がないファイル、sql,subsqlが必要なファイル、全部必要なファイル
この3つからgetUserを呼び出す際
呼び出しを統一のクラスで管理したいのですがsql,subsql,sub2sqlとクラス名が違うためできません。
クラスを上書きみたいなことはできないのでしょうか?

subsqlではなくsqlの追加ファンクションとして別ファイルで定義したいのです

途中で送信してしまい変な分になってます。ごめんなさい
0566nobodyさん2009/02/27(金) 13:12:19ID:???
なんかよくわからんが、ポリモーフィズム使えばいいんじゃねーの?

$sql_obj = getSqlObj();// 必要に応じて sql,subsql,sub2sqlのインスタンスを返すメソッドね。
$sql_obj->getUser();
0567nobodyさん2009/02/27(金) 13:13:08ID:/gqrgIY6
あるクラスのメソッドの戻り値が配列の参照渡しなのですが、
値として受け取る方法ってありますか?
ソースはこんな感じです↓
class hoge{
private $hoge = array('h','o','g','e');
public function & refHoge(){ return $hoge }
}
$hogeCls = new hoge();
$rtn = $hogeCls->refHoge();
// $rtnをごにょごにょしたいが、$hogeは変えたくない

// 今は↓の処理をやってますが、もっと良いやりかたがあったら教えてほしいです
foreach($hogeCls->refHoge() as $key => $val){ $rtn[$key] = $val; }
0568nobodyさん2009/02/27(金) 13:14:25ID:laCA4GxD
utf8 + LFでfopenしたファイルに"(ダブルクウォテーション)を
fwriteすると、なぜか「\"」とバックスラッシュが入ってしまいます。
なぜでしょうか?
0569nobodyさん2009/02/27(金) 13:32:22ID:???
>>568
magic_quotes_runtimeの設定ははどうなっとるかのぉ
0570nobodyさん2009/02/27(金) 13:32:27ID:???
>>567
array_valuesとか?
0571nobodyさん2009/02/27(金) 13:42:08ID:???
>>569
原因magic_quotes_gpcでした。ありがとうございました。
0572nobodyさん2009/02/27(金) 13:42:09ID:???
>>567
php4か5で意味が変わるからバージョンぐらい記入しようぜ
0573nobodyさん2009/02/27(金) 14:16:10ID:???
>>567
array型を参照で受け取る時は、メソッドと代入する側両方が & をつけないとならない
逆に言えば何も修飾せずに代入するだけでコピーになる
$ref = &$hogeCls->refHoge(); // 参照
$copy = $hogeCls->refHoge(); // 値

http://www.php.net/manual/ja/language.references.php
0574nobodyさん2009/02/27(金) 15:39:39ID:/lC62y00
IPアドレスが割り当てられてる全てのホスト名を取得する方法ってありますか?

例えば「61.195.146.164」と入力した場合、
「jp.php.net」「pobox.packetbusiness.com」などが返ってくるイメージです。

gethostbyaddr('61.194.146.164')だと
「pobox.packetbusiness.com」しか返って来ませんでした。
0575nobodyさん2009/02/27(金) 15:47:10ID:???
日本語でおk
0576nobodyさん2009/02/27(金) 15:47:17ID:???
>>574
それ、できたらすごい便利だよね。
おれのhostsもあいつのhostsも全部解決できるわけだろ?
05775742009/02/27(金) 15:55:56ID:/lC62y00
>>575
すみません、言い直します。

IPアドレスからホスト名を取得する方法が
gethostbyaddr以外にありますでしょうか?
0578nobodyさん2009/02/27(金) 16:25:38ID:???
>>577
streamつかったり、systemを使えばできるだろうけど、結果は一緒だよ。
DNS理解してる?
0579nobodyさん2009/02/27(金) 16:37:25ID:???
>>553
WebはPOSTに弱いよな。PHPに限らず。
0580nobodyさん2009/02/27(金) 16:42:32ID:???
意味不明
05815742009/02/27(金) 16:57:55ID:???
>>578
逆引きが一意であることと、正引きが複数設定可能なことくらいです。

DNSサーバに「このIPアドレスに正引きされるホスト名を教えてくれ」っていう
問い合わせはできないってことでOKですか?
0582nobodyさん2009/02/27(金) 17:06:26ID:???
>>581
どのDNSサーバーに問い合わせるつもり?
0583nobodyさん2009/02/27(金) 17:18:56ID:???
gethostbyaddr('61.194.146.164')だと
「pobox.packetbusiness.com」しか返って来ませんでした。

あたりまえだろ
0584nobodyさん2009/02/27(金) 17:21:27ID:???
ああ、つまりそのIPで取得してるドメインを全て返したいってことじゃね?
0585nobodyさん2009/02/27(金) 17:25:52ID:???
>>581
おk
05865742009/02/27(金) 18:26:24ID:???
>>585
ありがとうございます、自分の間違えが分かりました。

>>584
はい、そのとおりです。
SPAMメールの処理周りでそのようなことが出来るかどうか
疑問に思ったので質問いたしました。

---
DNSの初歩レベルの質問になってしまい失礼しました。
ありがとうございました。
0587nobodyさん2009/02/27(金) 20:20:35ID:0buNRA0u
オブジェクトの参照を切るにはどうすればいいんだ?
$obj2=$obj1;
だと$obj1の参照になってしまうらしい。
$obj2=clone $obj1;
ってやっても、参照が渡されてしまった。助けて欲しい。
0588nobodyさん2009/02/27(金) 20:29:50ID:???
>>587
おまえ、それわざとだろ。
copy on writeは知ってるよな?
0589nobodyさん2009/02/27(金) 21:00:58ID:???
>>587
PHPのバージョンによるので答えられません
バージョンを書きましょう
0590nobodyさん2009/02/27(金) 21:56:28ID:kc9E5JKd
$txt=mb_convert_encoding('あいうえお','JIS','UTF-8');

$encoding[]=mb_detect_encoding($txt,'UTF-8,EUC-JP,SJIS,JIS');
$encoding[]=mb_detect_encoding($txt,'EUC-JP,SJIS,JIS');
$encoding[]=mb_detect_encoding($txt,'SJIS,JIS');
$encoding[]=mb_detect_encoding($txt,'JIS,UTF-8');


print("<pre>");var_dump($txt,$encoding,mb_convert_encoding($txt,'UTF-8','JIS'));die();


↓こうなる
array(3) {
[0]=>
string(5) "UTF-8"
[1]=>
string(6) "EUC-JP"
[2]=>
string(4) "SJIS"
[3]=>
string(3) "JIS"
}
0591nobodyさん2009/02/27(金) 21:58:31ID:???
ファイルはUTF-8(BOM付)で保存してます。

$txtをそおまま表示しようとすると$とか矢印みたいなのが混ざったような文字化けで表示され、
mb_convert_encoding($txt,'UTF-8','JIS')するときちんと元に戻ります。

4.4.9とXAMPPの5.2.8で確認。
これはどうすれば?
05925902009/02/27(金) 22:00:28ID:kc9E5JKd
場所間違った

あとvar_dumpの行間違えました。
var_dump($encoding)
です
0593nobodyさん2009/02/27(金) 22:09:50ID:DvviDUUZ
PHP5の普及率ってどのくらいですかね?
0594nobodyさん2009/02/27(金) 23:03:28ID:???
>>591
ID
0595nobodyさん2009/02/27(金) 23:43:16ID:???
4は既にメンテナンスすらされなくなって半年近い。新規案件なら0だろ。
レガシーシステムも2年以内にはほぼ絶滅すると思う。

ttp://labs.cybozu.co.jp/blog/akky/archives/2008/12/php5-usage-stats.html
人口比だと2008年末時点で10%を割ってる。
0596nobodyさん2009/02/28(土) 02:50:55ID:1Mc3y2O0
正規表現系の関数が糞重いことに気づきました。
正規表現ほど高度でない、
ある程度融通が利く文字列検索をしたいのですが(具体的には文字列から携帯絵文字を探す)
PHPで書くと、正規表現より遅かったり速かったりです。
Cで書かれていれば確実に正規表現より速くなるのではと思うのですが、
そういうextensionありますか?
0597nobodyさん2009/02/28(土) 02:54:37ID:???
str_replaceでもかければ?
0598nobodyさん2009/02/28(土) 08:05:42ID:???
正規表現使ったくらいで糞重くなるマシンならまずハード全取り替えだろ
0599nobodyさん2009/02/28(土) 09:48:19ID:4FEE2no0
文字列を流し込むとパスワードの安全性の目安を返してくれる
ライブラリかサンプルコードとかってありますか?
0600nobodyさん2009/02/28(土) 10:04:08ID:???
パスワードをググって結果が少なければOK
0601nobodyさん2009/02/28(土) 10:19:27ID:???
どのようなパスワードが安全かどのようなパスワードが危険かを考えればOK
パスワードは4文字以上10文字以内にしてくださいということにして

4文字→低
5〜7文字→単一種類の文字(数字or小文字or大文字)での構成は低
2種の文字しか混ざってない場合も低 3種の文字が混ざってる場合は中
8〜10文字→単一種類または2種類の文字での構成は中
3種の文字が混ざってる場合は高
例外として
記号などの特殊文字が混ざってる場合は5文字からでも高
全て同じ文字だと10文字でも低

とまぁこんな仕様を考えて実装すればいいんじゃないでしょうか
0602nobodyさん2009/02/28(土) 10:27:37ID:???
>>599
ttp://jp2.php.net/manual/ja/ref.crack.php
0603nobodyさん2009/02/28(土) 10:35:26ID:???
>>602
こんな関数あるのかーと思ったが辞書用意しないといかんのね
a
aa
aaa
aaaa
b
bb
bbb
bbbb
こんなん用意してたらキリがないよな
0604nobodyさん2009/02/28(土) 10:36:33ID:???
テキストファイルだけをアップロードできるphpのアップローダを設置しようと思い
フリーで配布されているこちらのアップローダを見つけました。
ttp://php.eweb-design.com/1502_up.html

遣ってみたところとてもシンプルで気に入ったのですがphpに関しては
素人で分からないことだらけです。
そこで質問なのですが、アップロードできるファイルを .txt だけに限定する方法
を教えていただけないでしょうか?
それと容量オーバーのときだけに表示されるコメントも付けていただければ幸いです。
現在は1Mまでの制限でそれを超えると「アップロード失敗」とだけ表示されるようです。
次レスにソース部分を明記します。よろしくお願いします。
0605nobodyさん2009/02/28(土) 10:39:19ID:???
$updir = "./up/";
?>
<?php htmlHeader(); ?>アップロード結果<BR><BR>
<TABLE border="0" width="350" cellspacing="1" cellpadding="3" bgcolor="#999999">
<TR><TD>ファイル名</TD><TD>サイズ</TD><TD>タイプ</TD></TR>
<?php
for($i=0;$i<sizeof($_FILES['fl']['name']);$i++) {
if($_FILES['fl']['name'][$i]=="") continue;
if(file_exists($updir.mb_convert_encoding($_FILES['fl']['name'][$i],"SJIS","EUC-JP"))==TRUE && $_POST['frb']=="true") {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">上書きできません</FONT></TD></TR>
<?php
} elseif(!is_uploaded_file($_FILES['fl']['tmp_name'][$i])) {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">アップロード失敗</FONT></TD></TR>
<?php
} else {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="right"><?php print($_FILES['fl']['size'][$i]); ?>Byte</TD>
<TD align="right"><?php print($_FILES['fl']['type'][$i]); ?></TD></TR>
<?php
move_uploaded_file($_FILES['fl']['tmp_name'][$i],$updir.mb_convert_encoding($_FILES['fl']['name'][$i],"SJIS","EUC-JP"));}
}
?>
</TABLE><BR>

<?php htmlFooter(); ?>

<?php function htmlHeader() { ?>
0606nobodyさん2009/02/28(土) 10:52:03ID:tCRdHOmU
>>604-605ですがIDを出し忘れていました。申し訳ありません。
0607nobodyさん2009/02/28(土) 10:52:36ID:4FEE2no0
>>601,602,603

自力で作ってみます
ありがとうございましたー!
0608nobodyさん2009/02/28(土) 10:54:20ID:???
>>605
} else {
の上に下記のように挿入



} elseif( substr( $_FILES['fl']['tmp_name'][$i], strlen($_FILES['fl']['tmp_name'][$i])-4, 4 ) != ".txt" ) {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">拡張子が.txt以外はアップロードできません</FONT></TD></TR>
<?php
} else {
0609nobodyさん2009/02/28(土) 10:54:41ID:???
>>599
PHPじゃなくJavaScriptになるが
Extの拡張ライブラリにPasswordMeterってのがあってそれが便利だぞ
http://testcases.pagebakers.com/PasswordMeter/
0610nobodyさん2009/02/28(土) 11:00:43ID:???
拡張子が.txtってだけでテキストファイル扱いするのかよwwwwwwwwwww
0611nobodyさん2009/02/28(土) 11:11:33ID:tCRdHOmU
>>608
出来ました!ありがとうございます!

もうひとつだけよろしいでしょうか?
>>605のソースだと何バイトのファイルであったかアップロード後に表示されるのですが、
何行あるのかを表示させる場合はどのようにしたらよいのでしょうか?
つまり、アップロード後にファイル名、バイト数、行数を表示したいのです。
よろしくお願いします。
0612nobodyさん2009/02/28(土) 11:22:21ID:???
>>611
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="right"><?php print($_FILES['fl']['size'][$i]); ?>Byte</TD>
<TD align="right"><?php print($_FILES['fl']['type'][$i]); ?></TD></TR>

<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="right"><?php print($_FILES['fl']['size'][$i]); ?>Byte</TD>
<TD align="right"><?php print(count(file($_FILES['fl']['tmp_name'][$i]))); ?>行</TD>
<TD align="right"><?php print($_FILES['fl']['type'][$i]); ?></TD></TR>

未検証だけどたぶん動く
0613nobodyさん2009/02/28(土) 11:23:55ID:O2VO0P3W
画像ファイルpng、gif、jpg(jpeg)の3つだけアップロードを許可するようにしたいのですが
拡張子をチェックはします
それとバイナリを見て判断したいと思うのですが、これは完ぺきなチェックができないみたいで困ってます。
どのようなチェックを取り入れたらよろしいでしょうか?
0614nobodyさん2009/02/28(土) 11:41:35ID:???
>>613
>>385あたりから読んでいってみ
0615nobodyさん2009/02/28(土) 11:49:31ID:l4IqP0fM
pear::authとかって
まだ使われてるの?
0616nobodyさん2009/02/28(土) 12:11:52ID:tCRdHOmU
>>612
本当にありがとうございました。きちんとカウントされてました。


ところで、さきほどの>>608がアップできたと思ったら
テキストでもhtmlでもアップできないんです・・・。
} else { の上にそのまま貼り付けたのですが、、、

<TR bgcolor="#eeeeee">
<TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">アップロード失敗</FONT></TD>
</TR>
<?php
} elseif( substr( $_FILES['fl']['tmp_name'][$i], strlen($_FILES['fl']['tmp_name'][$i])-4, 4 ) != ".txt" ) {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">拡張子が.txt以外はアップロードできません</FONT></TD></TR>
<?php
} else {
?>
0617nobodyさん2009/02/28(土) 12:16:06ID:???
>>610
何が言いたいんだ?
バイナリデータじゃあるまいし
0618nobodyさん2009/02/28(土) 12:17:50ID:???
>>613
>>384
0619nobodyさん2009/02/28(土) 12:17:57ID:???
>>616
あれ、一時ファイルってファイル名変わっちゃうんだっけ?これでどう?

} elseif( substr( $_FILES['fl']['tmp_name'][$i], strlen($_FILES['fl']['tmp_name'][$i])-4, 4 ) != ".txt" ) {

} elseif( substr( $_FILES['fl']['name'][$i], strlen($_FILES['fl']['name'][$i])-4, 4 ) != ".txt" ) {

.htmlがアップできないのはおまえさんの仕様だぞ
0620nobodyさん2009/02/28(土) 12:18:10ID:???
>>616
少しは自分で理解しようとしろよ
0621nobodyさん2009/02/28(土) 12:27:20ID:tCRdHOmU
>>619
ありがとうございました。バッチリでした!
0622nobodyさん2009/02/28(土) 13:06:03ID:B+Uhif0K
セキュリティに関してですが
利用者が入力するところはなし、強いて言えばリンクが○○.php?a=○&b=○の形なのでそこをいじることはできますが、
値は1桁の数字のみ通るようにしてかつそれを直接クエリに使うわけではなくswichでWHERE句用の値を選ぶようにしています。
検索もなし、セッションやクッキーは使いません。
DBはSQLiteなので.htaccessで見えないように。
エラー表示も.htaccessでphp_flag display_errors Offに。
こんな感じにしたとして、鯖自体がハッキングされたとかはのぞいてphp(html)やDBの改竄は行われる可能性はありますか?
0623nobodyさん2009/02/28(土) 13:25:32ID:iUikJcgx
教えてください。ソケットをあけて、いま届いているデータをすべて受信するにはどうすれば良いのでしょうか。
$buf=socket_read($out,2048);
で読むことはできるのですが、データが2048byteに足りていないとここで処理がブロックされてしまい、
データが2048byteの倍数でないと必ず最後でとまってしまいます。
長さを1にすれば数万回の無限ループみたいになって処理が遅いし、
長さはともかくいま届いているデータを全て読む、ブロックしない読み込み方法が見当たらなかったです。

socket_recvというメソッドもあるみたいですが、ドキュメントもまだないし
これがない時代も当然できていたはずのことなので、きっとreadで何とかする方法があるんだと思いますが…。
0624nobodyさん2009/02/28(土) 13:35:50ID:???
>622
悪魔の質問だな。
脆弱性の存在を示す事は可能だが、脆弱性が存在しない事を証明するのは至難の業。
セキュリティ対策の多くが「入力時点で全ての値を検証」「出力時点で全てエスケープ」のようにシステマチックなのはその辺に理由がある。

書かれている部分は安全に思える。ツボも押さえているし、他の部分で変な事をしない限り問題ないだろう。
強いて言うなら「入力する場所はなし」という言い方が若干不安かな。
hiddenだろうがなんだろうが全ての値は自由に改竄される、という前提でコーディングする必要がある。
0625nobodyさん2009/02/28(土) 13:47:32ID:Ho2Fi0s+
マジな質問なんですが自宅サーバーでPHP動かしてます。
今まではサーバーとルータだけでやっていたのですが今回ハブを使いPCをもう一台LAN内に追加しました。
そしたら自分のサイトの表示が極めて遅くなり
ページを切り替える毎に3秒位かかります。
LAN内だけかと思いネットカフェで試しましたがやっぱり遅かったのです。

ちなみにサーバーからLANケーブルを抜くと今まで通り高速で表示されます。
そのため初めはLANの設定の問題だと思ったのですが
同じサーバー内のPHPを使ったページでも速いページと遅いページがある事に気がつきました。
しかし遅いページがなぜこれ程遅いのかが色々いじってみたのですが分かりません。
おそらくPHPの使用関数なんかの問題だと思うのですが。
何で?知ってるやつ教えてや。
逆引きとかはしてないです。
0626nobodyさん2009/02/28(土) 14:06:43ID:???
PHP関係ねーし
0627nobodyさん2009/02/28(土) 14:09:33ID:B+Uhif0K
>>624
ありがとうございます。
>強いて言うなら「入力する場所はなし」という言い方が若干不安かな。
付け加えるとjavascriptも使わないのでプルダウンで選択とかもありません。
ほんとにリンクをクリックしていくぐらいです。
ただまあ思い当たるところは列挙しましたが洩れもあるかもしれませんし、
どちらにしろhtmlspecialchars他一応の処理はしています。
完全にとはいえないが大まかに改竄の入り口は認識できてるとみていいもんでしょうか。
0628nobodyさん2009/02/28(土) 14:27:23ID:???
>>622
数値1桁をチェックならまったく問題ない。エスケープ処理もいらない
0629nobodyさん2009/02/28(土) 14:46:51ID:AWhVh/M4
>>614,>>618
ありがとうございます
getimagesizeでは不十分と認識しておりますので他にチェックする方法をご存知でしたらご教示おねがいします
06306132009/02/28(土) 14:47:33ID:8fTqh/0P
書き込み毎にIDが変わってしまうのですいません
0631nobodyさん2009/02/28(土) 15:04:01ID:???
>>629
いや、getimagesizeでいいんだよ
それに加えて、画像の保存先ではスクリプトの実行ができないようにすればおk
0632nobodyさん2009/02/28(土) 15:29:50ID:???
>>623
無限ループしてるならsocket_read()の終了条件を間違えてないか疑うな
晒してみ
0633nobodyさん2009/02/28(土) 15:39:05ID:???
>>631
getimagesizeは信用できるものじゃない
無知お疲れ
0634nobodyさん2009/02/28(土) 16:05:48ID:???
>>627
哲学的な言い方をすると、
不安に思うようなら、脆弱性はあるかもしれないね。
他人に保証を求めるとしたら、それもまた脆弱性のひとつかもしれん。
セッションでもクッキーでも環境変数でも、それぞれがどんな形で渡ってくるか、
そして渡しているか、ブラウザの挙動はどうか、そういう理解度を深めていくしかないんじゃないか?
0635nobodyさん2009/02/28(土) 16:06:47ID:???
>>633
何が信用できないの?
0636nobodyさん2009/02/28(土) 16:08:12ID:???
>>633
ヘッダの一部しか見てない。jk
0637nobodyさん2009/02/28(土) 17:01:27ID:???
まあ、実行権限を剥奪しておけば、考えられる最大の被害は「画像が表示されない」程度なわけだし、getimagesizeで問題ないだろ。
0638nobodyさん2009/02/28(土) 17:05:42ID:???
>>637
きょうび、CMSのコミッターですらその程度の認識をしてたりするから困るよな。
実行権限をはく奪って、もともとPHPは読み込み権限で動くわけだし。
画像ファイルにスクリプトインジェクションされるってのをケアしないんだろうし。
06396252009/02/28(土) 17:18:45ID:Ho2Fi0s+
>>626
いや、最初はそう思ったのですがどうやらPHPの関数により速度が遅くなってるようなんです。
というのもPHPの関数が少ないページは高速に表示するからです。

ただ、何の関数が遅い原因なのかが割り出せません。
何なのか分かる奴よろしく。
0640nobodyさん2009/02/28(土) 17:19:10ID:???
>>635-636百回読んでから回答しろ
ttp://websec-memo.blogspot.com/2007/06/php-getimagesizephp.html
0641nobodyさん2009/02/28(土) 18:04:55ID:???
>639
つ xdebug.profiler_enable = 1
あと、Windows機があるならWinCacheGrid
0642nobodyさん2009/02/28(土) 18:05:36ID:???
Grindだった
0643nobodyさん2009/02/28(土) 19:42:43ID:Lzy3hD4E
imagecreate使って画像生成したんだけれど
画像のファイルサイズが0kb になって 保存できない・・・orz

ファイル名指定
header("Content-Disposition: attachement; filename=foo.jpg");
をつけても0kb・・・

どうしたらいいんだぁ・・・
0644nobodyさん2009/02/28(土) 20:27:57ID:???
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>635-636
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
0645nobodyさん2009/02/28(土) 22:16:18ID:???
>>644
どうみても、636は正しいと思うんだが
0646nobodyさん2009/02/28(土) 22:32:57ID:???
ヘッダの一部しか見てないって、それ以外にヘッダで判別できるところあんの?
拡張子は別にして
0647nobodyさん2009/02/28(土) 22:35:26ID:???
ヘッダーの一部しか見てないのは事実だ。
そこから、
> それ以外にヘッダで判別できるところあんの?
っていう展開が意味不明
0648nobodyさん2009/02/28(土) 22:48:34ID:???
>>647
つまり、「ヘッダの、一部しか見てない」なのか「ヘッダの一部しか、見てない」なのかってことね
0649nobodyさん2009/02/28(土) 22:49:44ID:???
何をいってるんだw
0650nobodyさん2009/02/28(土) 22:54:24ID:???
ごめん>>638は分かりにくかったわ
ヘッダの一部しか見てない って、他にも判別できる部分があるようにとれない?

ヘッダの(他にも判別するところはあるけど)一部しか見てない なのか
ヘッダの一部(で)しか見てない なのかってことね
0651nobodyさん2009/02/28(土) 22:57:46ID:???
>>650もなんか分かりにくいわ
寝てくる
0652nobodyさん2009/02/28(土) 22:58:56ID:???
>>650-651
だいたい、そのポイント先、>>638じゃなくて>>648だろ
0653nobodyさん2009/03/01(日) 00:14:40ID:???
とりあえずgetimagesizeは完ぺきじゃないってこと
>>640をよく読め
0654nobodyさん2009/03/01(日) 00:31:01ID:???
>このような攻撃は、アップロードするファイルのファイル名をそのまま(この例では、.php)にしているサイトでのみ有効となるのだが、そのようなサイトは実際多く存在する。

これで回避できるとも読めるわけだが、どうなんだろう。
0655nobodyさん2009/03/01(日) 00:31:30ID:???
635と636は自分でバイナリエディタでも開いて画像にスクリプト埋め込んでこい
0656nobodyさん2009/03/01(日) 00:32:37ID:???
>>654
日本語でおk
0657nobodyさん2009/03/01(日) 00:36:08ID:???
>>655
ここの連中じゃ画像に埋め込むこともできなそうだなw
0658nobodyさん2009/03/01(日) 01:09:42ID:???
そもそもファイルを区別する必要性がわからねえ
最終的にブラウザで表示できるんだから何でもいいだろ
0659nobodyさん2009/03/01(日) 01:18:56ID:???
画像に埋め込んだスクリプトが反応するような糞ブラウザはIEぐらいだろ
0660nobodyさん2009/03/01(日) 02:35:03ID:eUPI6W90
mb_splitで正規表現にデミリタいらないのってバグですか?
0661nobodyさん2009/03/01(日) 03:05:47ID:ircjQ+OX
パーミッションの問題なんだけど、
txtファイルや、htmlファイルは、
ユーザーにrを渡さないと
ブラウザで閲覧したときに見れないんだけど、
.phpファイルは、なぜか
ユーザーに渡す権限が0でも
ブラウザでアクセスしたときに、
動作してしまうんだけど、これってなんで?
0662nobodyさん2009/03/01(日) 03:43:41ID:???
>>661
module版かcgi版かで若干答えが変わるかなぁ。。

ユーザって誰のこと??
0663nobodyさん2009/03/01(日) 03:47:49ID:ircjQ+OX
>>662
オーナー | グループ | 末端ユーザー

こういう概念です
0664nobodyさん2009/03/01(日) 03:50:25ID:ircjQ+OX
>>662
「CGIに関しては純粋にSuExecでの動作」

「CGI版をラッパーを使用し所有者の権限にて動作させる」

と書いてあります。
0665nobodyさん2009/03/01(日) 04:31:12ID:???
>>664
答えが書いてあるよ〜。

Webサーバの一番基本的な動きは分かってるかな?

ブラウザが「このファイルくれ!」ってWebサーバにいうと
Webサーバは自分の中から探して、読みこんで、「処理して」、結果をブラウザに返す。
このときWebサーバもユーザとして動いてる。

こんだけ。
0666nobodyさん2009/03/01(日) 06:55:07ID:ircjQ+OX
pear::authのサンプルコードで、
MySQLの例ばっかりなのだが、
これってSQLiteでもできるんだよね?

コードはどう書けばいいのかな?
特にDSNのあたり。
http://oshiete1.goo.ne.jp/qa3008843.html
このサンプルで、DSNをSQLiteに変更したものを
書いてもらえますか?
0667nobodyさん2009/03/01(日) 06:59:03ID:ircjQ+OX
それから認証の実装で
pear::authを使うことの是非についても
意見を述べてもらえますか?

pearのページ見たら、認証のカテゴリだけで7つも
モジュールあるじゃないですか。
0668nobodyさん2009/03/01(日) 07:01:29ID:???
>>666
ぐぐればすぐ見つかるよ〜
0669nobodyさん2009/03/01(日) 11:45:18ID:???
どうやら
質問

の人な気がするぜ
0670nobodyさん2009/03/01(日) 13:13:02ID:???
そんなの見りゃわかるよ
0671nobodyさん2009/03/01(日) 13:42:43ID:???
------------ここまで自演でした
0672nobodyさん2009/03/01(日) 14:46:48ID:lFCp+aHu
PHPの書き方で<?=$msg?>のような書き方が可能/不可能に設定できる項目教えてください
(ググろうにも「<?=?>」のようなワードでは検索できなくて・・・)
0673nobodyさん2009/03/01(日) 14:50:54ID:lFCp+aHu
short_open_tagでした、事故解決しました
0674nobodyさん2009/03/01(日) 17:35:53ID:Jolk/1HK
phpを使いテキストの各行にある文字列(例えばここでは"hogehoge")
が含まれているかどうかを調べるにはどのようにするのがよいのでしょうか?
0675nobodyさん2009/03/01(日) 17:41:35ID:???
file
foreach
preg_match
0676nobodyさん2009/03/01(日) 17:43:35ID:???
hogehogeがあるかどうかだけならpreg_matchはおおげさだな
strstrあたりでいいと思う
0677nobodyさん2009/03/01(日) 17:43:53ID:???
preg_matchがあればわざわざfileとforeachを組み合さなくてもできます
0678nobodyさん2009/03/01(日) 17:46:03ID:Jolk/1HK
どっちなんだろう・・・
0679nobodyさん2009/03/01(日) 17:50:35ID:???
>>678
史ね
少しは与えられた材料で自分で考えろ
0680nobodyさん2009/03/01(日) 17:51:32ID:???
文字列探索といったら正規表現しか知らない奴って何なの?バカなの?
0681nobodyさん2009/03/01(日) 18:02:38ID:qwqgUI7e
>>677の言ってることはパターン修飾子か?

$list = file("hoge.txt");
for ($i = 0; $i < count($list); $i++) {
if (strpos($list[$i]), "hogehoge") {
echo $i . "行目にhogehogeが見つかりました<br>\n";
}
}

これと同じことをできるのなら俺もぜひ教えてもらいたい
06826812009/03/01(日) 18:04:25ID:???
あ、ごめん
$i行目じゃなくて$i+1か
0683nobodyさん2009/03/01(日) 18:20:01ID:???
if (strpos($list[$i]), "hogehoge") {
なんじゃこりゃ?
0684nobodyさん2009/03/01(日) 18:33:38ID:???
>>681
おれが言ってるpreg_matchがでてこないんだがアンカーミスかね
06856812009/03/01(日) 18:38:49ID:???
$list = file("hoge.txt");
for ($i = 0; $i < count($list); $i++) {
if (preg_match("/hogehoge/", $list[$i])) {
echo $i+1 . "行目にhogehogeが見つかりました<br>\n";
}
}

それじゃこれで
0686nobodyさん2009/03/01(日) 18:41:12ID:???
>>685
動作には問題ないけど
for内にcount($list)を入れると、ループ毎にcountが実行されるので、
$cnt = count($list);

$i < $cnt

みたいにするといいよー
0687nobodyさん2009/03/01(日) 19:29:13ID:???
>>685
preg_matchじゃだめだった
無駄にfileとforeachしなくてもpreg_match_all使えば一行で住む
0688nobodyさん2009/03/01(日) 19:42:54ID:???
何行目に現れるかもわかる?
0689nobodyさん2009/03/01(日) 20:20:12ID:???
わかる
0690nobodyさん2009/03/01(日) 22:47:16ID:Jolk/1HK
perlあがりでどうもphpはよく分からんのだが
datファイル(数字10桁)かどうかを調べるにはどうすりゃいいの?
これだとダメポ。

$datfile = 1234567890.dat;
$number = str_replace(".dat", "", $datfile);
if ($number != \d{10}){
 print "2chのdatじゃない";
} else {
 print "おk";
}
0691nobodyさん2009/03/01(日) 22:52:53ID:???
preg_match
0692nobodyさん2009/03/01(日) 22:54:09ID:???
>>690
$datfile = "1234567890.dat";
if (preg_match("/^\d{10}\.dat$/", $datfile)) echo "おk";
else "2chのdatじゃない";
0693nobodyさん2009/03/01(日) 22:59:06ID:Jolk/1HK
print Thx
0694nobodyさん2009/03/01(日) 23:04:31ID:???
正規表現(笑)
0695nobodyさん2009/03/01(日) 23:16:30ID:A3j42u8W
まとめてファイルをアップロードする仕組みを作りたいのですが、
PHPにZIPを解凍する関数ってあるのでしょうか?

やっぱり、フォームのfile要素をいくつも用意して
1つずつ選択して送信する方法しかないのでしょうか?
0696nobodyさん2009/03/01(日) 23:21:54ID:???
peclとかpearとか探せば色々あるよ
zipだけでもArchiveTarとかArchiveZipとかpecl zipとか色々
0697nobodyさん2009/03/01(日) 23:26:26ID:???
標準クラスであるだろうが
0698nobodyさん2009/03/01(日) 23:27:29ID:???
ArchiveTarは違ったわ
0699nobodyさん2009/03/01(日) 23:29:07ID:???
>>697
それってzip関数のことでしょ?
それはpecl
0700nobodyさん2009/03/01(日) 23:38:13ID:???
標準であるじゃん
暗号化ZIPには対応してないようだけど
0701nobodyさん2009/03/01(日) 23:40:37ID:???
そうだっけ?すまん
0702nobodyさん2009/03/01(日) 23:50:07ID:???
ID:Jolk/1HK
回答もらったらお礼ぐらい書けよksg
0703nobodyさん2009/03/02(月) 00:02:07ID:???
>>693にあるやん
0704nobodyさん2009/03/02(月) 00:07:04ID:???
ID:Jolk/1HK=>>703
07057032009/03/02(月) 00:14:22ID:???
>>704
いんや、>>692なんだけどね
別にお礼を期待して回答しているわけではないから、そんなのはどうだっていいよ
0706nobodyさん2009/03/02(月) 00:56:54ID:???
どうだっていいなら何で書くの?
0707nobodyさん2009/03/02(月) 06:17:58ID:???
アマゾンの文章を取ってきて、
一部の文を変更するプロキシみたいなの
作りたいんだけど、できる?

「この商品を買った人はこんな商品も買っています」

              ↓これを

「この商品を買ってしまったかわいそうな人はこんな商品も買っています」

みたいに変更して表示したいんだけど。

チラ見だと気がつかないって言う。
よーく見ると違いがわかるっていう。
0708nobodyさん2009/03/02(月) 06:18:54ID:???
>>1
0709nobodyさん2009/03/02(月) 06:36:54ID:xA87Qrbu
指定したディレクトリ内から、
指定したMD5(またはSHA-1)の値を持つファイルを取得したいのですが、
なにかよい方法はないでしょうか?

やはり、一度全部取得して、
ひとつひとつ確認する必要があるのでしょうか?

よろしくお願いします。
0710nobodyさん2009/03/02(月) 08:01:04ID:Kxwrby6q
$files = scandir("./doc");
$i = 2;
while($files[$i] != null ):
$files_end = $i;
$i++;
endwhile;

と、docフォルダに入っているファイル数をしらべるスクリプトですが、
while($files[$i] != null ):
の行で
Notice: Undefined offset: 5
と、Noticeが出て来ます。
この、Noticeを消すにはどうしたらいいでしょうか?
0711nobodyさん2009/03/02(月) 08:04:40ID:???
>>707
フィッシング詐欺はやめな
0712nobodyさん2009/03/02(月) 08:05:07ID:???
classの使いどころがさっぱりわからん
使えたらかっこいいんだろうなと思って
使いたい使いたいと思ってるけど結局使わないまま終わってしまう
0713nobodyさん2009/03/02(月) 08:08:31ID:???
>>712
すごい、カンタンなところからはじめれば?
0714nobodyさん2009/03/02(月) 08:10:21ID:???
>>712
変数名をclassにすればいいよ。
$class1 $class2 $class3
0715nobodyさん2009/03/02(月) 10:10:58ID:???
>>710
OUT => while($files[$i] != null ):

IN => while( isset($files[$i]) ):
0716nobodyさん2009/03/02(月) 10:18:29ID:???
>>712
無理して使わなくていいよ
所詮プログラミング手法の1つに過ぎない
世の中には全てオブジェクトにしないと扱うことができない
言語も存在するがPHPはそうではない
使いどころを意識してるうちは概念も理解できないはずだ
オブジェクト指向が何かとかは考えないで
まずはオブジェクトにしないとプログラムが動かないと思ってはじめてみるといい
0717nobodyさん2009/03/02(月) 12:30:23ID:???
クラスを使う利点を教えてください
0718nobodyさん2009/03/02(月) 12:39:55ID:???
人数が多い場合クラス分けしないと学年がばらばらごちゃごちゃになるじゃん
0719nobodyさん2009/03/02(月) 13:33:46ID:qotKuiB9
php5で動作するクラスを勉強で作ってます

class hello
{
function asa(){$word="おはよう";return $word;}
function hiru(){$word="こんにちは";return $word;}
function yoru(){$word="こんばんは";return $word;}
}

これを呼び出して挨拶を表示するときにこのように書きました
$obj=new hello;
echo $obj->asa;

クラスの使い方としてこのような用途で使用するのは正しいでしょうか?
0720nobodyさん2009/03/02(月) 13:47:22ID:yL43OBtl
MVCでアプリケーションを組もうとしています。

やはり、どうしてもクラス数が膨大になり、1ファイル1クラスにするので、
読み込むファイル数も膨大になってくるのですが、余程のことがない限り速度は気にするほど変わらないと考えても構いませんか?
0721nobodyさん2009/03/02(月) 13:56:03ID:???
おk
0722nobodyさん2009/03/02(月) 13:56:47ID:???
ウェブの場合クラス分けしてもそんなに膨大にはならんと思うけどな
0723nobodyさん2009/03/02(月) 14:02:29ID:Kxwrby6q
>>715
おお、ありがとうございます。 noticeが消えました!!
0724nobodyさん2009/03/02(月) 14:03:01ID:???
>>719
class hello {
function greeting(){ return $this->word; }
}
class asa extends hello {
var $word = "おはよう";
}
class hiru extends hello {
var $word = "こんにちは";
}

$obj = new asa(); echo $obj->greeting();
$obj = new hiru(); echo $obj->greeting();

こういうほうがより現実的。挙動を変えたければgreetingだけをいじればよいので。
0725nobodyさん2009/03/02(月) 14:13:16ID:???
$objを何度も作るのってアリなの?
0726nobodyさん2009/03/02(月) 14:29:02ID:Be8+CZVl
PDOでbindParamするときに、どうしても
PDO::PARAM_STRとPDO::PARAM_INTを同じbindで使いたくて
PDO::PARAM_STR|PDO::PARAM_INTてやってみたのですが、
こちらでエスケープしたエラーになってしまいます。
int、str片方づつならデータが取得できるのですが・・
どのような手段でできますでしょうか
よろしくお願いします
0727nobodyさん2009/03/02(月) 14:53:55ID:yL43OBtl
>>721-722
勉強がてらのものなので、クラス分けなどが、まだうまくできてないのかもしれません。

ありがとうございました
0728nobodyさん2009/03/02(月) 14:55:08ID:v7Ja9zye
フォーム内のラジオボタンがあります
<form>
<input type="radio" name="s" value="0" />ページ1
<input type="radio" name="s" value="1" />ページ2
<input type="radio" name="s" value="2" />ページ3
</form>

http://www.example/?s=1でアクセスしてきたとき、ページ2のラジオボタンを選択済みにさせたいのですが
どのように書けばよろしいのでしょうか?
0729nobodyさん2009/03/02(月) 15:00:03ID:???
if(sが1だったら){ echo 選択済み }
0730nobodyさん2009/03/02(月) 15:00:07ID:???
<input type="radio" name="s" value="0" <?if($_REQUEST["s"]=="0"){ echo "checked"; }?> />ページ1
<input type="radio" name="s" value="1" <?if($_REQUEST["s"]=="1"){ echo "checked"; }?> />ページ2
<input type="radio" name="s" value="2" <?if($_REQUEST["s"]=="2"){ echo "checked"; }?> />ページ3
0731nobodyさん2009/03/02(月) 15:02:03ID:v7Ja9zye
やっぱりそれしかないですよね、わかりました
ありがとうございます
0732nobodyさん2009/03/02(月) 15:13:43ID:Hva8cjMK
mb_convert_encodingでUTF-8の文字をSJISに変換した時、
SJISに対応する文字がない時はU+XXXXという文字列に変換されますが、
このXXXXはどういう法則に従って算出されているのでしょうか?
0733nobodyさん2009/03/02(月) 15:28:28ID:???
>>731
ライブラリやらFW使えば楽
>>732
まんま文字コードかと
0734nobodyさん2009/03/02(月) 16:54:20ID:v7Ja9zye
フレームワークで使われるキャッシュファイルについて質問です
キャッシュの作り方は以下のやり方でよろしいでしょうか?

キャッシュファイルがなかったら→キャッシュファイル作成→出力
キャッシュファイルがあったら→キャッシュファイル読み込み・出力
0735nobodyさん2009/03/02(月) 19:33:12ID:???
>>726
PDO::PARAM_STR|PDO::PARAM_INTなんて指定が仮に出来たとして
どんなSQL文になるのが望みなんだ

>>734
ok
後はキャッシュの有効期限やキャッシュの保存手段を設定できるようにしたりと
使いやすいようご自由に
0736nobodyさん2009/03/03(火) 00:38:28ID:ttnGHap+
KJ、田中ナルミ両氏による『〜スーパーサンプル 活用編 第2版』を見て、ADODBを使ってみました。
サンプルを真似しながら、何とか自分なりに扱えるようにはなったのですが、
見たことの無い記述法に戸惑ってます。

$DB = NewADOConnection($sql_type);
$DB->PConnect($server, $user, $password, $dbname);
$result = $DB->Execute('SELECT * FROM blog_articles');
echo "<pre>";
print_r($result->GetArray());
echo "</pre>";

↑このコードの中の、
$result->GetArray();
の部分です。

メソッド(変数);
とかだったら普通に見慣れた形なのですが、
変数->メソッド();
となっているようで、よくわかりません。

これはどういう記述なのでしょうか?
0737nobodyさん2009/03/03(火) 00:42:29ID:???
クラスメソッドの呼び出し
その本に書いてないの?
0738nobodyさん2009/03/03(火) 01:07:31ID:???
$DB->PConnectや$DB->Executeには疑問抱かないのか?
0739nobodyさん2009/03/03(火) 01:11:49ID:???
$DB = NewADOConnection($sql_type);
$DB->PConnect($server, $user, $password, $dbname);
も一緒じゃんw

var_dump($result);してみ
$resultが何なのか分かるから
07407362009/03/03(火) 02:10:24ID:ttnGHap+
$DBもそうですね…。
自分の知っているパターンと勘違いしていたようです。

クラススメソッドの呼び出しというと、例えば
// インスタンスの作成
$obj = new MyDBClass();
// メソッドの呼び出し
$obj->ConnectDB();
// プロパティの呼び出し
var_dump($obj->tables);

みたいなのはわかります。

ですが、ADODBのサンプルコード(>>736のような)を見ても、
newを使ってのインスタンスの作成をしているようには見えません。

それにも関わらずアロー演算子を使うのは、どのような場合なのでしょうか?
07417362009/03/03(火) 02:15:34ID:ttnGHap+
$DBをprint_rしてみると

ADODB_mysql Object
(
    [databaseType] => mysql
    [dataProvider] => mysql
    // 中略
)

というようになってました。

普通の配列だと

Array
(
    [0] => 20081231
    [1] => 20090101
)

のようになると思うんですが、変数の型自体が違うようです。
0742nobodyさん2009/03/03(火) 02:26:02ID:???
>>740
NewADOConnection() は関数
関数内でオブジェクトを生成して返していると読んでくれ
0743nobodyさん2009/03/03(火) 02:33:15ID:???
>>740-741
配列は関係ない

class Ichiro{
 function getResult(){ return "5タコ"; }
}
class Samurai{
 function getCaptain(){ return new Ichiro(); }
}
$obj = new Samurai();
$obj2 = $obj->getCaptain();
echo $obj2->getResult();   ←これ

↑こんなんと同じ。つまり
$result = $DB->Execute('SELECT * FROM blog_articles');
でインスタンス(newされたクラス)が返ってきてるんだよ
07447362009/03/03(火) 02:46:22ID:ttnGHap+
>>742,743
ありがとうございます!
自分の理解力の無さから、まだ飲み込めてはいませんが、
何となく道筋は見えた気がします。

ゆっくり理解していきたいと思います。
0745nobodyさん2009/03/03(火) 02:53:56ID:???
いやこれくらいさっさと理解して次のステップ行けよ
0746nobodyさん2009/03/03(火) 10:47:55ID:???
今気づいたんだけどPHPってセミコロンだけ書いてもパースエラーにならないんだね
0747nobodyさん2009/03/03(火) 10:53:02ID:???
>>746
行の終わりって意味だからな
0748nobodyさん2009/03/03(火) 10:58:02ID:???
rubyもpythonも;なんていらないのに
phpは旧世代の遺物だよな
0749nobodyさん2009/03/03(火) 11:15:43ID:???
それ1行で終わるときだけじゃん
0750nobodyさん2009/03/03(火) 11:36:15ID:???
インデントがなくなったらエラーになる言語なんか使わねーよ
0751nobodyさん2009/03/03(火) 11:38:44ID:e2rK5fJ7
ttp://www.next-space.jp/
で、れっつPHPの写メール掲示板を設置すると500エラーになります。
他の鯖だと大丈夫なんですが、この場合php.iniの設定を変えないといけないのでしょうか?
0752nobodyさん2009/03/03(火) 11:41:40ID:EqwXxIO6
>>751
パーミッションの問題かと思われ
どこの鯖かわからんが、スクリプトに実行権限与えてる?


話変わるけど、PHPのswitchって数値以外にも文字列で判別できるけど皆使ってる?
Javaで数値での判別に慣れてしまったせいか、PHPのswitchって何か違和感あるなぁ
0753nobodyさん2009/03/03(火) 11:44:42ID:???
Javaは文字列で判別できないと?
0754nobodyさん2009/03/03(火) 11:46:36ID:EqwXxIO6
>>753
今ググったらできるのか、知らなかった
Javaの改造してたとき、switchで必ず数値ばかりだったからそういう仕様なのかと思ってた
07557512009/03/03(火) 11:47:00ID:e2rK5fJ7
>>752
パーミッションも正しいと思うんですが、いろいろ変えてみてもエラーのままです。
0756nobodyさん2009/03/03(火) 11:47:04ID:???
switchの第二引数に厳格に判断するモード(===)の設定があればよかった
0757nobodyさん2009/03/03(火) 11:59:09ID:???
>>756
switch ($hoge) {
case "1":
break;
}

switch (true) {
case ($hoge === "1"):
break;
}
07587512009/03/03(火) 12:04:16ID:???
事故解決しました
07597092009/03/03(火) 12:17:13ID:sEyF02be
>>709 なのですが
どなたかお願いできないでしょうか?

ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
何かいいアイデアはないでしょうか?
0760nobodyさん2009/03/03(火) 12:19:10ID:???
方法1:指定したディレクトリ内のファイルを読み込んで値があるかチェック
方法2:値の入ったファイルを作成した時に、リストに書き込む

以上
あとはない
07617092009/03/03(火) 12:26:35ID:sEyF02be
やはり、MD5などをキーにして検索することはできないようですね。

ファイル名とMD5の値をデータベースに格納(方法2?)して
管理することにします。

ありがとうございました。
0762nobodyさん2009/03/03(火) 12:28:02ID:???
ファイル名をmd5にすりゃ簡単じゃん
0763nobodyさん2009/03/03(火) 12:28:24ID:???
まあ方法3もあるけど拡張しないといけないから書くのやめとく
0764nobodyさん2009/03/03(火) 12:29:04ID:???
>>762
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
0765nobodyさん2009/03/03(火) 12:55:24ID:???
md5とMD5だから違うな
0766nobodyさん2009/03/03(火) 14:43:30ID:qqtWuzTo
ここの[返信]が直リン禁止になってるけど
どうやって禁止にしているの?
ttp://nanapi.o0o0.jp/moemoe/
0767nobodyさん2009/03/03(火) 14:44:33ID:???
リファラ
0768nobodyさん2009/03/03(火) 15:09:32ID:???
リファラだけか?
0769nobodyさん2009/03/03(火) 15:12:50ID:???
>>768
そうだよ
試してから言え
07707662009/03/03(火) 15:19:28ID:???
>>769
Irvineでリファラ使ってダウンしてみたが返信ページはダウンできないよ。
0771nobodyさん2009/03/03(火) 15:22:13ID:???
スクリプト荒らし乙
07727662009/03/03(火) 15:33:49ID:???
スクリプト荒らしを防ぐためなんだろこれは?
だからそれを真似たいんだよ。
07737092009/03/03(火) 15:46:24ID:sEyF02be
連続して質問失礼します。

MySQLのカラムにPHPでserializeした配列を入れてあるとき、
たとえば、

array(
'id' => 1,
'username' => 'hogehoge',
'password' => 'fugafuga'
);

というような配列をシリアライズしたものがuserテーブルのdataカラムに入ってるとして、
dataのなかのusernameがxxxのものを取り出すといったことはできますでしょうか?
正規化しろ!というのはなしでお願いします。

スレ違いでしょうかね;;

よろしくお願いします。
0774nobodyさん2009/03/03(火) 16:01:26ID:???
>>773
無理っすー
0775nobodyさん2009/03/03(火) 16:17:45ID:tFVuo7P+
phpで指定された任意の外部URLを読み込み、それをコピーするって可能ですか?
例えばこのスレは
http://pc11.2ch.net/php/dat/1234958956.dat
で、これをそのままコピーし任意のフォルダに保存するということです。
0776nobodyさん2009/03/03(火) 16:18:48ID:???
>>775
可能ですよ
●対応も普通になんとかなる
0777nobodyさん2009/03/03(火) 16:22:28ID:???
>>773
なんでそんなことをしようとするのか分からん

>>775
User-Agentにmonazillaが含まれないと駄目じゃなかったけ?
0778nobodyさん2009/03/03(火) 17:53:07ID:???
>>770
ブラウザじゃないから別の理由ではじかれたんじゃない?
0779nobodyさん2009/03/03(火) 17:59:07ID:???
http、ttp という文字列が混在しているところで
「ttp」だけを「http」に置換させたいのですが、単純に行うと
httpが「hhttp」と置換されてしまいます。
何かいい方法はないでしょうか?
0780nobodyさん2009/03/03(火) 18:07:02ID:???
str_replace( "hhttp", "http", str_replace( "ttp", "http", $str ) )
0781nobodyさん2009/03/03(火) 18:10:01ID:???
別にhttp;//はつけなくてもページは見れるよ

2ch.net←これブラウザに貼り付けて来いよ
0782nobodyさん2009/03/03(火) 18:11:32ID:???
>>781
ttp://2ch.net がエラーなるから言ってるんだろ
0783nobodyさん2009/03/03(火) 18:12:54ID:???
strtr($s, array('http'=>'http', 'ttp'=>'http'));
0784nobodyさん2009/03/03(火) 18:15:24ID:???
>>770
それは単にリファラが空になってるだけじゃね?
リファラをルートURLに書き換えてみ
0785nobodyさん2009/03/03(火) 18:46:52ID:???
>>782
日本語でどうぞ
0786nobodyさん2009/03/03(火) 19:38:44ID:P96ap3nl
php5でクラスの質問です
100円の商品がありまして、、この商品の消費税込みの料金を計算します
書き方は以下のような形でよろしいでしょうか?
ここはこうしたほうがいいなどありましたらご教示お願いします

class keisan
{
$tax=1.05;
function shouhizei($okane) {
return $kekka = $okane * $tax;
}
}

$obj = new keisan;
echo $obj->shouhizei(100);
0787nobodyさん2009/03/03(火) 19:45:18ID:???
var $tax=1.05;
0788nobodyさん2009/03/03(火) 19:45:59ID:???
return $okane * $tax;
07897662009/03/03(火) 19:50:41ID:???
>>784
Irvineで取れるのかい?

スレッドを開始します
nanapi.o0o0.jpが見つかりました
nanapi.o0o0.jp(59.106.13.205):80にconnect成功しました
サーバへリクエスト送信
GET /moemoe/futaba.php?res=355430 HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Connection: close
Host: nanapi.o0o0.jp
Referer: http://nanapi.o0o0.jp/moemoe/
Accept: */*
サーバからのレスポンス
HTTP/1.1 302 Moved Temporarily
X-Powered-By: PHP/5.2.8
Location: http://nanapi.o0o0.jp/moemoe/index.html
Transfer-Encoding: chunked
http://nanapi.o0o0.jp/moemoe/index.htmlにリダイレクトします
0790nobodyさん2009/03/03(火) 19:52:03ID:???
$thisは使わんのか〜い
0791nobodyさん2009/03/03(火) 22:40:59ID:???
>>786
書き方うんぬん以前に、まずきちんと動くものを書けるようになるべっきー
0792nobodyさん2009/03/03(火) 22:45:40ID:???
>>773
配列をserialize()した結果は文字列だから

'username' => 'hogehoe'

のとこがどう表現されてるかがわかれば
その文字列使って like すれば列は取れるのでわ?
0793nobodyさん2009/03/03(火) 22:50:46ID:???
>>730
やや変態ちっくかも知れないけど

$a[ $_REQUEST['s'] ] = 'checked="checked"' ;

<input type="radio" name="s" value="0" <?php echo $a[0] ?> />ページ1
<input type="radio" name="s" value="1" <?php echo $a[1] ?> />ページ2
<input type="radio" name="s" value="2" <?php echo $a[2] ?> />ページ3

なんてしてみたり。
0794nobodyさん2009/03/03(火) 22:51:52ID:???
'checked="checked
なんじゃこりゃ
0795nobodyさん2009/03/03(火) 22:54:57ID:???
>>794
xhtmlを一から勉強してこい
0796nobodyさん2009/03/03(火) 22:56:53ID:???
なんでそんな無駄な記述なのwww
0797nobodyさん2009/03/03(火) 23:01:08ID:???
>>794
うん?
xHTMLで書いてあったから従ったんだけどなんかヘン?

< input .... />
0798nobodyさん2009/03/03(火) 23:03:27ID:???
796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:???
なんでそんな無駄な記述なのwww
796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:???
なんでそんな無駄な記述なのwww
796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:???
なんでそんな無駄な記述なのwww
796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:???
なんでそんな無駄な記述なのwww
796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:???
なんでそんな無駄な記述なのwww
0799nobodyさん2009/03/03(火) 23:03:56ID:???
>>796
馬鹿丸出しワロタw
0800nobodyさん2009/03/03(火) 23:10:56ID:???
じゃなぜchecked="1"でも"on"でも"yes"でも"true"でもなくてchecked="checked"なのか説明してみろよ
0801nobodyさん2009/03/03(火) 23:18:39ID:???
「何故」なのかの説明は無理だな。
どういう経緯でそうなったのかは資料を漁れば可能だろうが。
0802nobodyさん2009/03/03(火) 23:20:43ID:???
>>786
それ$tax取れるんか?

class keisan
{
  var $tax=1.05;
  function shouhizei($okane) {
    return $okane * $this->tax;
  }
}
にするべき
0803nobodyさん2009/03/03(火) 23:22:15ID:???
>>800
なにか勘違いしてる気がするなぁ。。

例えば,optionタグなら
<option selected="selected">
だよ。

0804nobodyさん2009/03/03(火) 23:26:33ID:???
あ、そうか。
何故かって言われたら、XMLの決まりだからとしか答えられないかなぁ。。

http://www.w3.org/TR/xhtml1/#h-4.5
0805nobodyさん2009/03/03(火) 23:29:28ID:???
>>800
HTML なら checked だけでいいんだけど、XHTML はそういう仕様になってるだけのこと

「なんじゃこりゃ」って単に知らなかっただけでしょ
そんで記述に無駄があると後付けしてくるなんてかっこ悪いよ^^;;;;
0806nobodyさん2009/03/03(火) 23:30:40ID:???
>786
動かすだけなら、3行目を>787、5行目はreturn $okane * $this->tax;

勉強中のようなので少しだけ高めのボールで返す。俺ならこういうクラスにする。
class Item{
 private $tax_rate = 1.05;
 private $price;
 private $name;
 function __construct($name, $price){
  $this->name = $name;
  $this->price = $price;
 }
 function taxedPrice(){
  return $this->price * $this->tax_rate;
 }
}
$i_phone = new Item('IPhone', 30000);
$x_box = new Item('XBOX', 40000);
echo $i_phone->taxedPrice(); // 31500
echo $x_box->taxedPrice(); // 42000
0807nobodyさん2009/03/03(火) 23:31:51ID:???
checked="on"じゃダメなの?
08087862009/03/03(火) 23:42:14ID:???
たくさん回答いただき助かりました
どれも勉強になります
ありがとうございます
0809nobodyさん2009/03/03(火) 23:42:41ID:???
そろそろ通報されそうだなww
0810nobodyさん2009/03/03(火) 23:48:56ID:???
いまクラスについてわかりやすく教えてるサイトがあんまりないから
今ならアフィリエイトつけても許すから誰か講座サイトやってください
0811nobodyさん2009/03/04(水) 00:52:53ID:TJHoC0pm
リダイレクトのヘッダー吐いて別のサイト(URLも当然別)に飛ばしたいのですが
自分のサーバーからだと別のページに飛んでくれます。
しかし外部のPCからそのページにアクセスすると、別のサイトには飛ばずにうちのサーバーのルートに飛びます。
何でですか?
0812nobodyさん2009/03/04(水) 01:01:52ID:???
>>811
絶対URLで指定してみ
0813nobodyさん2009/03/04(水) 03:50:16ID:pWv0VEvt
phpで画面を初期化するにはどうしたらいいですか?
0814nobodyさん2009/03/04(水) 03:51:03ID:???
初期化って?
08158132009/03/04(水) 03:54:02ID:pWv0VEvt
>>814
画面をクリア、真っ白にしたいのです。
0816nobodyさん2009/03/04(水) 04:16:39ID:???
BASICと間違えているのでは?
0817nobodyさん2009/03/04(水) 04:18:34ID:???
displays_error = offにしてfatal errorを出す
08188132009/03/04(水) 04:24:16ID:pWv0VEvt
エラーを消したいのではなく、printやechoで画面に表示させたものを消したいのです。
0819nobodyさん2009/03/04(水) 04:28:27ID:???
ob_*系の出力バッファリングを使う
0820nobodyさん2009/03/04(水) 04:29:25ID:???
送った後なら、JSで処理だろうな
08218132009/03/04(水) 04:39:39ID:pWv0VEvt
>>819-820
具体的にどうすればいいのか教えて下さい。
0822nobodyさん2009/03/04(水) 05:11:41ID:???
断る
0823nobodyさん2009/03/04(水) 05:57:21ID:???
>>821
具体的にどうしたいのか分からんから答えようがない
0824nobodyさん2009/03/04(水) 06:42:13ID:???
<?php
/*
$hoge = "hoge";
・・・
・・・
・・・
*/
?>
0825nobodyさん2009/03/04(水) 07:42:58ID:???
【豆知識】

<?php

$a=get_defined_constants();

foreach($a as $a=>$b){

print "[$a] => [$b]";
print "<br>";

}
?>

を実行すると大変なことになる
0826nobodyさん2009/03/04(水) 11:21:01ID:fYg53wem
出力はSJIS、DBはUTF8で運用しています
SJIS-winをUTF8に変換した時に
W932+とかBAD+とかJIS+とかで始まる文字列になる場合がありますが、
そういう時どう処理していますか?
0827nobodyさん2009/03/04(水) 11:30:23ID:???
UTF−8は使わないようにしてる
0828nobodyさん2009/03/04(水) 13:02:05ID:???
SJISを使うな
0829nobodyさん2009/03/04(水) 13:14:42ID:???
SJIS(笑)
0830nobodyさん2009/03/04(水) 13:17:13ID:???
PC版しか開発しないやつらはラクでいいな
0831nobodyさん2009/03/04(水) 13:30:50ID:???
携帯(笑)
0832nobodyさん2009/03/04(水) 13:38:25ID:???
というか、今時携帯でも見れないサイト開発するとか終わってるな
0833nobodyさん2009/03/04(水) 13:44:27ID:???
くだらない煽り合いはどうでもいいです
経験者のみ回答して下さい
0834nobodyさん2009/03/04(水) 13:54:05ID:???
encoding_translation
0835nobodyさん2009/03/04(水) 16:21:34ID:???
encodeing_mobile
0836nobodyさん2009/03/04(水) 16:33:55ID:???
間違えて書き込んだの消すのってどうやってやるか教えてください
0837nobodyさん2009/03/04(水) 16:38:37ID:???
┌──-┐
|Back |
|space|
└──-┘
0838nobodyさん2009/03/04(水) 19:20:19ID:F5lJueso
php5.2.8使ってます
phpはc:\php5にインストールしてます
このディレクトリの中にphp.exeがあります

コンソールでphpを使って「こんにちは」と表示させたいのですがパースエラーになってしまいます

c:\php5>php.exe -r echo "こんにちは";

どのように書き直したらよろしいでしょうか?
0839nobodyさん2009/03/04(水) 19:26:35ID:???
c:\php5>php.exe -r "echo \"こんにちは\";"
08408382009/03/04(水) 19:35:43ID:???
できました、ありがとうございます
コード自体を囲まないといけないのですね勉強になりました
0841nobodyさん2009/03/04(水) 19:48:31ID:???
>>826
UnicodeのPrivate Use Areaと相互変換したり
mbstring.substitute_character = none にしてばっさり切り落としてしまうなり
要求次第
0842nobodyさん2009/03/04(水) 20:55:52ID:P0bBQCst
phpとajaxの組み合わせのとき、データファイルはJSONが一番簡単ですか?
0843nobodyさん2009/03/04(水) 21:15:34ID:???
まあ、JSONでいいんじゃないか?バランス取れてるし。

送出するデータによるし、どっちが得意かにもよる。
例えばJavaScriptの比重を極限まで減らしたいなら、PHPでHTMLまで生成して送りつけたほうが当然JSでやる事が減る。

それと、変更が入った場合の修正の手間だな。
JSONだと、データが追加になったらJSとPHP両方修正が必要になる。
PHPでHTMLを書き出すと、画面表示の変更の際にPHPに手を入れないといけなくなる。
0844nobodyさん2009/03/05(木) 09:51:15ID:HLFGjq1S
ifから抜ける方法についての質問です。
ifの中で、デバッグ時、意図的に以降のコードを残したいとき等にifから抜けさせる方法はどうしたらいいでしょうか?
具体的には(実際にはbreakが通りませんが)下記のようなコードを書きたいです。
コメントアウトだとながーいif文の時に困りそうなので他の手段を考えています。


if(true){
echo "if no naka fuck ass\n";
break;
echo "mada naka my godness\n";
}
echo "detayo holy shit\n";
0845nobodyさん2009/03/05(木) 10:04:29ID:???
ネタ乙ww
後藤に聞け
0846nobodyさん2009/03/05(木) 10:06:31ID:???
>>844
これでいいやん・・・

echo "if no naka fuck ass\n";
if(false){
echo "mada naka my godness\n";
}
echo "detayo holy shit\n";
08478442009/03/05(木) 10:17:06ID:HLFGjq1S
>>846
すみません、コメントアウトだとって書きましたが、ifで囲うのも同様に辛いです><
処理させないのではなくて抜けさせるコードが無いかなぁ、と思ったんです。
0848nobodyさん2009/03/05(木) 10:17:43ID:???
>>844
汚いコードだな
0849nobodyさん2009/03/05(木) 10:29:40ID:???
条件制御をコメント代わりにすんなや
0850nobodyさん2009/03/05(木) 10:39:14ID:???
え?もしかしてただコメントアウトしたいだけとか・・・?

/*
* コメントアウト
*/

// コメントアウト

# コメントアウト

これでいいの?それとも別の何か?


0851nobodyさん2009/03/05(木) 10:44:30ID:???
<?php

for ($i=1;$i<10;$i++){
print microtime();
print "<br>";

}
?>


このコードを実行すると、

0.97075300 1236217379
0.97083700 1236217379
0.97084800 1236217379
0.97085700 1236217379
0.97086500 1236217379
0.97087300 1236217379
0.97088200 1236217379
0.97089000 1236217379
0.97089800 1236217379

ってなるんだけど、結局、1個のループ処理をするのに、
何マイクロ秒かかってるの?
0852nobodyさん2009/03/05(木) 10:50:37ID:u8y4hmKR
>>851
リファレンス読んだら分かるけど
0.97089800 1236217379
 ↑秒      ↑現在のPCの時間

半角スペースの前後で意味が違う
0853nobodyさん2009/03/05(木) 10:58:03ID:???
質問とは関係はないけど
マイクロ秒とミリ秒って世間的に同じ意味なの?
10^-6と10^-3だと思っていたが
原語マニュアル見たりぐぐったりしてみるとどうも混同して扱われてる気がする
0854nobodyさん2009/03/05(木) 11:02:47ID:???
>>853
マニュアルのどこで混同してるの?
0855nobodyさん2009/03/05(木) 11:12:14ID:???
<?php

$a=0.97075300;
$b=0.97083700;
$c=$b-$a;
$d=sprintf("%.f", $c);
print $d;



?>

これを実行すると、
0.000084
ってなるんだけど、
0.000084秒
かかった、って理解でいいの?
0856nobodyさん2009/03/05(木) 11:13:48ID:???
>>855
>>1
0857nobodyさん2009/03/05(木) 11:48:05ID:QryPG+0b
PHPでアクセスログを取得したいと思っています。
以下の質問者のような状況なのですが
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1223035602

それに対する回答では「じゃ、どうすればいいのか」
と言う答えが書かれて無くて、自分でも解決策がわかりません。

どうすれば上記URLの方法で、リンク元を取得できるのでしょうか?
0858nobodyさん2009/03/05(木) 11:49:32ID:???
>>857
どうすればの前にお前はどうしたんだ?
0859nobodyさん2009/03/05(木) 11:50:35ID:???
aaa.jpで取得したリファラをaccesslog.phpのGETにでもつけてやったら?
0860nobodyさん2009/03/05(木) 11:51:59ID:???
ああすまんaaa.jpのほうは静的htmlなのか
どっかの既存スクリプトのソースでも見てみればいいんでないかね
08618572009/03/05(木) 11:55:26ID:???
>>860
WEBサービスなどの既存スクリプトを見ると
<script type="text/javascript" src="アクセス解析のURL">

となっているだけ、それでどうやって取得しているのか予測できないんです。。

0862nobodyさん2009/03/05(木) 11:59:23ID:???
いやだからその中身です
0863nobodyさん2009/03/05(木) 12:13:20ID:???
>>861
"アクセス解析のURL"をアドレスバーにぶっこめばソース見れるでしょ
0864nobodyさん2009/03/05(木) 12:36:30ID:???
解析対象のページに直接貼り付ければおk
08658572009/03/05(木) 12:37:02ID:???
見れました。Javascriptのソースが出ます。
処理を予測すると、

Javascriptでアクセス情報を取得→PHPで受け取って→DBなどに保存

だと思います。
Javascriptでアクセス情報を取得する方法はわかりますが、
PHPに渡す方法がわかりません。AJAXで通信するというのは聞いたことありますが。。

かなり規模が大きくなりそうなので、別の方法を考えます。
0866nobodyさん2009/03/05(木) 12:40:39ID:???
なんでソース見れてるのに渡す方法がわからないの?jsが膨大なのか?
0867nobodyさん2009/03/05(木) 12:44:57ID:Ai8YQiii
http://www.example.com/index.php/test/100

上記でアクセスし$_SERVER['PATH_INFO']を使って以下のようにします

$path1 // testを代入
$path2 //100を代入

1.この値をhtmlに出力するときにhtmlspecialcharsをするべきでしょうか?
2.この値を<a href="get.html?mode=<?php echo $path1;?>"?>のようにソースに書くときもhtmlspecialcharsは必要でしょうか?
3.この値を利用して$file=file($path1.".log") or die("エラー");とするとき、$path1をhtmlspecialcharsをするべきでしょうか?
0868nobodyさん2009/03/05(木) 12:49:09ID:???
>>867
XSSでぐぐれ
0869nobodyさん2009/03/05(木) 13:13:08ID:7kExiJxs
kokugo.logをfile関数で開くとき、以下のようにしました
$file=file("kokugo.log");

もしファイルが存在しなかった場合ワーニングになるのですが
file関数で開く前にkokugo.logが存在して読み込み可能かチェックしたほうがいいのでしょうか?
0870nobodyさん2009/03/05(木) 13:16:09ID:???
>>867
上2つは XSSになりえる。
html..でおk

残り1つは DirectoryTraserval になりえる。
これは html.. じゃ防げない。
パスに関する文字を消す処理を挟むべき。
08718702009/03/05(木) 13:18:10ID:???
すまん、スペルに自信がない。

日本語だと ディレクトリ遡り攻撃ね。
0872nobodyさん2009/03/05(木) 13:39:41ID:2sUk8Kdm
3のほうを検証してみたのですが
http://www.example.com/index.php/../test/100とすると
ページがNot Foundになります


以下のようにしてみたのですがこれは対策になってますでしょうか?
$path = split("/",$_SERVER['PATH_INFO']);
print_r($path);
08738672009/03/05(木) 13:40:24ID:2sUk8Kdm
すいません電話回線なので再接続でID変わってしまいました
すみません
0874nobodyさん2009/03/05(木) 13:49:36ID:???
最近になって思い始めた
ヒアドキュメントはSQLを書くためにあるものじゃないのかと
0875nobodyさん2009/03/05(木) 14:16:58ID:???
PEAR::MDB2のexecuteで
Call to a member function execute() on a non-object
とエラーが出ます。

クエリミスや引数ミスでこのエラーが出るのですが、
実行前にデバッグしたいのですが、クエリを参照する方法がわかりません。

$sth->execute($data);の段階でエラーが出るのですが、
それ以前にダンプしてもクエリが作成されてなく、確認ができません。

何か方法はないでしょうか
0876nobodyさん2009/03/05(木) 14:17:30ID:???
ごめんなさい、ID忘れました
08778752009/03/05(木) 14:18:27ID:u8y4hmKR
また忘れました><。
0878nobodyさん2009/03/05(木) 14:35:56ID:UILw4QgF
定義した関数を$kansuに代入して、呼び出したいところで定義した関数を実行したいのですが
$kansu = hello();の時点で実行されてしまいます
どのようにしたらよろしいでしょうか?

function hello() {return "こんにちは";}
$kansu = hello();
〜他の処理〜
echo $kansu;
0879nobodyさん2009/03/05(木) 14:39:01ID:???
>>878
$kansu = function {return "こんにちは";};
0880nobodyさん2009/03/05(木) 14:54:19ID:???
>>879
php5.3限定かよ
0881nobodyさん2009/03/05(木) 14:58:09ID:???
$kansu = create_function('', 'return "こんにちは";');
0882nobodyさん2009/03/05(木) 16:47:02ID:hzERq96A
if (substr($var, 0, 1) != '#') { ... }
という、先輩が書いたコードがあるんですけど、これって
if ($var[0] != '#') { ... }
と等価でしょうか。
なにか違う点がありましたら教えてください。
0883nobodyさん2009/03/05(木) 16:55:02ID:???
上は1文字目を取り出してる
下は配列の一つ目を取り出してる
意味は全く違う
0884nobodyさん2009/03/05(木) 16:57:21ID:???
$varが数値だと違いは出るけど。

$var = 123;
echo substr($var,0,1); #=> 1
echo $var[0]; #=> NULL
0885先輩2009/03/05(木) 16:57:35ID:???
>>882
おいおい仕事中になにやってんだてめえ
0886nobodyさん2009/03/05(木) 16:58:05ID:???
$varが文字列なら等価だと思いたいんだろうが、
$varが配列や、ダブルバイトなら使えん。
素人はこれだから困るという先輩の顔が目に浮かぶw
0887nobodyさん2009/03/05(木) 17:01:58ID:???
言語仕様がスカラーも配列も連想配列も見た目同じ$始まりだから違和感あるのは解かるよ
0888nobodyさん2009/03/05(木) 17:03:54ID:???
デターwwww
0889nobodyさん2009/03/05(木) 17:25:19ID:???
mb_substrでないから同じジャン
0890nobodyさん2009/03/05(木) 17:37:55ID:???
そろそろ闘技場でも行こうか
0891nobodyさん2009/03/05(木) 17:57:10ID:???
まぁ、
$var = array("#", "any");
で、>>882は終了してるけどな。
0892nobodyさん2009/03/05(木) 17:58:45ID:???
>>882
上記は文字列として比較
下記は配列として比較
0893nobodyさん2009/03/05(木) 18:36:23ID:0C8jTvwA
正規表現で僕の彼女を探したいのですがどのように書けばよろしいでしょうか?
よろしくお願いします
0894nobodyさん2009/03/05(木) 18:37:50ID:???
preg_match("/僕の彼女/", $str)
0895nobodyさん2009/03/05(木) 18:38:39ID:???
センスねえな
0896nobodyさん2009/03/05(木) 19:11:16ID:???
まず、ちんこを出してだな。
0897nobodyさん2009/03/05(木) 19:46:42ID:???
>>882
substr() は mbstring.func_overload に影響を受ける
http://www.php.net/manual/ja/mbstring.overload.php

オフセット参照は変数の型に影響を受ける
http://www.php.net/manual/ja/language.types.string.php#language.types.string.substr
08988822009/03/05(木) 19:55:19ID:???
>>883
ここでは$varは配列ではなく文字列です。
>>884
なるほど、$varが文字列以外の場合、substr() だと$varが自動的に文字列に変換されるわけですね。
参考になります。ありがとうございました。
>>885
おこるぐらいならもっとましなコード書いてください。
0899nobodyさん2009/03/05(木) 19:57:58ID:???
>>898
だったら、!is_string($var) ならexit()とか入れとけ。
ソースにないもんをエスパーできるかよw

にしたって、strposを使うケースだけどな。$var[0]とか狂ってる。
0900nobodyさん2009/03/05(木) 20:23:31ID:???
>>899
いや、そこはstrncmpだろ
0901nobodyさん2009/03/05(木) 20:29:27ID:???
いや、そこはstrpbrkだろ
0902nobodyさん2009/03/05(木) 20:33:26ID:???
>>899
>>897を理解してる上で使う分には間違っちゃいない
$a = array(); $a[] = 1; は許すのに $a = ''; $a[1] = 'a'; は許さないとか
シンタックスシュガーを利用するしないはコーディング規約で決めるものだ

それにstrpos()は最悪文字列全体を見るまで処理を打ち切らないし
882をバカにできる奴が選ぶ手段じゃない
0903nobodyさん2009/03/05(木) 20:41:00ID:???
>>901
strpbrkはないわw
0904nobodyさん2009/03/05(木) 20:41:26ID:???
substrは文字列にしか使えない。
$str[0]は配列にも使える。
従って文字列へのアクセスならば、substrのほうが分かりやすい。
スレが軽く荒れたところを見ても、角括弧が混乱を招きやすい表記だという事は分かるだろ。
ちょっとコードの見た目がスッキリするとか、何ナノ秒処理が早くなるだとか、そんなメリットと引き換えにしていいレベルじゃない。
0905nobodyさん2009/03/05(木) 21:11:52ID:???
マヌアルのどっかでstrposはメモリの使用量も小さくオヌヌメなんて書いてあったよな
んなもん、strposが最適解だと思うだろjk
オライリの詳説正規表現の効率云々みたいに解説本でも欲しいところだなw
0906nobodyさん2009/03/05(木) 21:20:58ID:???
>>905
何文字目とか分かってるなら、substrかstrncmpだろ
0907nobodyさん2009/03/05(木) 21:24:16ID:???
なんだかんだで、substrが正解ってことだよな。
先輩乙
0908nobodyさん2009/03/05(木) 21:27:44ID:Zs/6GWof
皆さんは運用環境にxdebug入れておきますか?
それともあくまでデバッグのみに使用しますか?
0909nobodyさん2009/03/05(木) 21:28:33ID:???
別に入れといたっていいだろ。設定でOFFにするだけなんだし
0910nobodyさん2009/03/05(木) 21:43:17ID:l6IOt6/c
非常に下らない質問かもしれませんが、ご存知の方がいらっしゃったらお教えください。

配列についてなんですが、
$arr = $this -> fncName($aa);
foreach($arr as $key => $val){
$appArr[$key] = $this -> fncName2($val);
}
return $appArr;
で値を返し、ajaxでページに表示させると、何も表示されないのに、
$arr = $this -> fncName($aa);
$appArr['配列名'] = '';
foreach($arr as $key => $val){
$appArr[$key] = $this -> fncName2($val);
}
return $appArr;
と、$arr['配列名'] = '';のように初期化した値だけページに反映されるって状況の場合、
一体何が問題なのでしょうか?
当方PHP5.2.9をapache2.2.11を使用しております。
よろしくお願いいたします。
0911nobodyさん2009/03/05(木) 21:44:03ID:???
>>908
maana
0912nobodyさん2009/03/05(木) 21:54:28ID:???
>>910
他人に非常に分かりにくい文章です
できればもう一度整理して質問し直して下さい
0913nobodyさん2009/03/05(木) 22:03:45ID:???
>>912
sine tinpo yarou
0914nobodyさん2009/03/05(木) 22:23:07ID:???
>>910
配列初期化してないってこと?
$appArr = array(); の方がいいとは思うけど。
0915nobodyさん2009/03/05(木) 22:42:02ID:l6IOt6/c
>>914
それしても、入力されません。
具体的に配列のkeyを直接入力しなければ入らないのです。
また、$arr['key']には、htmlの要素がいっぱい入っています
(<span>や<div><form>など)
それが入っていない場合は、普通に表示されます。
なぜなんでしょ?
0916nobodyさん2009/03/05(木) 22:54:40ID:???
$arr = $this -> fncName($aa);
$appArr = array();
foreach($arr as $key => $val){
$appArr[$key] = $this -> fncName2($val);
}
return $appArr;

↑でダメならvar_dumpかprint_rしながら
$appArrに求めてる値が入ってるか確認してみた方がいいかも。
0917nobodyさん2009/03/05(木) 22:57:16ID:???
>>910
$arrが空っぽ または $this->fncName2($val)が値を返さない

というか後者は $this->fncName2($key) じゃなくていいの?
0918nobodyさん2009/03/05(木) 23:26:53ID:???
おれさ、人と話してないんだよね
このスレだけが俺の生きがいだからかそらないでくれたまえ
0919nobodyさん2009/03/05(木) 23:28:36ID:???
じゃあかなりPHPの実力ついてるんじゃないか?
解説サイトとかつくって人呼べばいいじゃん^^
0920nobodyさん2009/03/05(木) 23:35:44ID:???
そういやぁ、俺も人と話してないやw
0921nobodyさん2009/03/06(金) 02:07:01ID:???
phpの欠点を挙げてるサイトで、「文字列操作系の関数で、似たようなことをするのに引数の順番がバラバラ」みたいなことを書いてるサイトを探してるのですが、知りませんか?
もしくは、どの関数のことを言ってるのか想像つきますか?
0922nobodyさん2009/03/06(金) 02:11:16ID:???
>>921
in_arrayとstrposとかかな
0923nobodyさん2009/03/06(金) 02:32:04ID:cF17z8wj
HTML側
<img src="img.php">

PHP側
header("Content-type: image/jpeg");

とだけしました。しかし、IE6で見ると×が表示されて
画像として読み込めていないようです。
これはどうしてでしょうか?
0924nobodyさん2009/03/06(金) 02:36:58ID:???
中身が何もないからでは?
0925nobodyさん2009/03/06(金) 02:42:04ID:cF17z8wj
中身は表示させたくなくて、PHPの処理がしたいので
>>923のようにしているのですが、
やはりimgタグの方にwidth="1" height="1"と指定するか、
readfileで透明な1ピクセルのファイルを読み込む方法しかないのでしょうか?
0926nobodyさん2009/03/06(金) 02:45:51ID:???
>>921
Ruby作者だろw
0927nobodyさん2009/03/06(金) 03:08:35ID:???
Rubyの良さはJavaとPHPの欠点を挙げないと見えてこないからなw
0928nobodyさん2009/03/06(金) 03:08:41ID:???
そんな細かいことをあげつらうんだよなぁPHPディス者ってのは
0929nobodyさん2009/03/06(金) 03:11:50ID:???
JavaからRubyへって本読んだけど精神的にマイナス思考に追い込んで
自分たちの領域に引き込む宗教本みたいだったぜ
どんだけJavaの生産性が低いかの説明ばっかり
0930nobodyさん2009/03/06(金) 03:45:28ID:???
>>922
ぐぐったらまさにそれっぽいんですが、関数の中身(文字列の結合、分解)とかにまで触れてた記事は無かったでしょうか?
0931nobodyさん2009/03/06(金) 04:01:35ID:???
>>929
宗教本っていうか、
rubyの作者自体がモルモン教徒だから。

(1)rubyをやらせる
     ↓
(2)モルモンに入信させる
     ↓
(3)ニュースキン、ニューウェイズをやらせる

こういうビジネスモデルだから。
0932nobodyさん2009/03/06(金) 05:36:30ID:???
豆知識

<?php
echo exec('notepad.exe');
?>

これを実行するとメモ帳が起動する。
0933nobodyさん2009/03/06(金) 05:40:42ID:6cUsAerc
and とかでいつも悩むんですが
2ch かつ php かどうかを比較するにはこのようにしていいのでしょうか?

if ( $a == '2ch' && $sub != ''php'){
  print "2chだけどphpスレではない";
}
0934nobodyさん2009/03/06(金) 05:56:30ID:???
>>933
うん
あと、それだったら === を使った方がいいよ
0935nobodyさん2009/03/06(金) 08:52:00ID:???
>927
>929
釣れませんね
0936nobodyさん2009/03/06(金) 08:58:45ID:???
どう見ても釣れてるようにしか見えない
というか事実だから釣りでも何でもないだろうけど
0937nobodyさん2009/03/06(金) 09:03:29ID:???
935みたいのがRuby信者か
0938nobodyさん2009/03/06(金) 09:05:57ID:???
酷そうな本だなこれw
http://d.hatena.ne.jp/higayasuo/20080311/1205228639
0939nobodyさん2009/03/06(金) 11:17:48ID:???
C言語からPHP移ったら違和感を感じた
0940nobodyさん2009/03/06(金) 11:23:57ID:???
古来より適応力のない生物は絶滅する運命

それより、移るってどういうことよ。
おれはCだろうがPHPだろうが、適材適所で使い分けてるけど、
移ったらってことは、Cを捨てるのか、いや捨てられたのか。あ、そか。
きっとPHPも君を捨てるだろう。
0941nobodyさん2009/03/06(金) 11:48:17ID:???
ruby真理教必至だな
0942nobodyさん2009/03/06(金) 11:57:16ID:???
違和感ってどんなとこに?
0943nobodyさん2009/03/06(金) 12:02:29ID:???
C言語からRubyだと違和感どころじゃ済まないけどな
0944nobodyさん2009/03/06(金) 12:04:02ID:???
ちょっと前にある会社面接行ったら
面接官が言葉の端々で最近はRubyしか使わないを連呼してたので断ったわ
RoRで作っても後に痛い目に遭うのは確実だし
あんなメモリ食いまくる仕組みがなんで流行ってるのか理解に苦しむ
0945nobodyさん2009/03/06(金) 14:03:24ID:???
ircで部屋たてたから誰かきてー
24時間つなぐぜ

http://irc.2ch.net/
#WEB制作板
0946nobodyさん2009/03/06(金) 14:17:45ID:???
何を語るんだ
0947nobodyさん2009/03/06(金) 15:22:09ID:k96rJD9y
PHP5.2.8です

class keisan {
function tasizan($a,$b) {return $a+$b;}
function hikizan($a,$b) {return $a-$b;}
function kakezan($a,$b) {return $a*$b;}
function warizan($a,$b) {return $a/$b;}
}

$obj=new keisan;
$tasizan_kekka = $obj->tasizan(10+5);
$obj->kakezan($tasizan_kekka,20);

tasizan関数で足し算の結果をkakezan関数の$aに使いたいのですが
このような書き方でよろしいでしょうか?
もっと効率的・スマートな書き方がございましたらご教示お願いいたします。
0948nobodyさん2009/03/06(金) 15:23:34ID:???
echo keisan::kakezan(keisan::tasizan(10,5),20));
0949nobodyさん2009/03/06(金) 16:07:43ID:???
>>947
計算結果を内部に持っても良いのなら、以下のようなのはどう?

class keisan {
private $result;
function __construct($a) {
$result = $a;
}
function tasizan($b) {
$this->result += $b;
retun $this;
}
function hikizan($b) {
$this->result -= $b;
return $this;
}
function kakezan($b) {
$this->result *= $b;
return $this;
}
function warizan($a,$b) {
$this->result /= $b;
return $this;
}
function kekka {
retun $this->result;
}
}

$obj=new keisan;
$kekka = $obj->tasizan(5)->kakezan(20)->kekka();
0950nobodyさん2009/03/06(金) 16:10:52ID:???
>>949ちょっと違ってた。
$obj=new keisan(10);
$kekka = $obj->tasizan(5)->kakezan(20)->kekka();
0951nobodyさん2009/03/06(金) 16:21:58ID:ox3YTIPG
モジュールで動作していてセーフモードで動いてるサーバではPHPでディレクトリを作成することができないので
FTPでいつも手動でディレクトリを作成してます
一つのディレクトリの中に10000ファイルためる場合、処理が遅くなりますか?
0952nobodyさん2009/03/06(金) 16:23:10ID:???
質問もアレだが、答えもアレだな。
メソッドチェーン覚えました〜〜って香ばしい匂いが
0953nobodyさん2009/03/06(金) 16:24:03ID:???
>>951
1ディレクトリに10000ファイルも溜めたら、apacheだって重くなるよ。
0954nobodyさん2009/03/06(金) 16:24:37ID:???
>>949のが一番すごいだろ
0955nobodyさん2009/03/06(金) 16:25:07ID:ox3YTIPG
>>953
ありがとうございます
手動で定期的にファイルを移動させます
0956nobodyさん2009/03/06(金) 17:26:24ID:???
apacheだFTPだじゃなくてファイルシステムがどうかだな
ext3とかなら確実にアウトだ
0957nobodyさん2009/03/06(金) 17:32:06ID:???
だよな
いまどきlinuxでext3を教えてる教本があるから困る
いまはFATだろが
0958nobodyさん2009/03/06(金) 18:17:51ID:???
まさか面白いと思って書いてないよね
0959nobodyさん2009/03/06(金) 20:49:00ID:???
>>944
まぁフレームワークに固執する時点で技術レベルわかるけどな
0960nobodyさん2009/03/06(金) 23:38:33ID:???
>947
>もっと効率的・スマートな書き方

$tasizan_kekka = 10+5;
$tasizan_kekka * 20;

もっと格好いい書き方
ttp://pastie.org/409335
参考文献
ttp://d.hatena.ne.jp/masayang/20081211/1229033163
0961nobodyさん2009/03/06(金) 23:51:00ID:???
>>960

>>947のような単純なものならそれがスマートなのは同意するが
質問の意図をとらえてない
0962nobodyさん2009/03/07(土) 00:16:31ID:???
>>949
$result = $a;

$this->result = a;
だな
0963nobodyさん2009/03/07(土) 00:21:07ID:???
>>947
まったく問題ない。まちがっても>>949みたいなキモいコードは書かないように。
0964nobodyさん2009/03/07(土) 11:57:49ID:???
一回しか取引が無いような相手に納品するとき
虎の子のライブラリとかどうしてる?暗号化する?
0965nobodyさん2009/03/07(土) 12:02:37ID:???
そんなご立派なライブラリをお持ちで?
0966nobodyさん2009/03/07(土) 12:18:42ID:???
ライセンスだけ自分にしておけば別に隠す必要ないだろ
0967nobodyさん2009/03/07(土) 12:26:47ID:???
以前ここで
「ライセンスで規制されてても二次利用は当たり前、パクって何が悪い?」
ってドキュソがいたなwww
0968nobodyさん2009/03/07(土) 16:03:58ID:???
その程度のスクリプトが虎の子扱いなのは、御社の技術力がだな、その
0969nobodyさん2009/03/07(土) 18:45:33ID:???
日本語でおk
0970nobodyさん2009/03/07(土) 18:49:09ID:???
御社と貴社の使い方も知らないと無知もいいところだな
0971nobodyさん2009/03/07(土) 18:59:23ID:???
そんな煽り方とは無知もいいところだな
0972nobodyさん2009/03/07(土) 19:00:07ID:???
>>968=>>971
0973nobodyさん2009/03/07(土) 19:21:18ID:???
は・ず・れ
残念でしたw
0974nobodyさん2009/03/07(土) 21:49:03ID:C+oqmm8h
アクセス解析で自分のサイトからのリファラは省くようにしたいので以下のように書きました
ifで真なら「自分サイト」、偽なら「外部サイト」と表示させたいのですが
結果が逆になってしまいます
どこを直したらよろしいのでしょうか?

$myurl = "http://localhost";
$referer = "http://www.2ch.jp/";
#$referer = "http://localhost/link.php";

if (preg_match('{^https?://[^('.$myurl.'].*$}', $referer)) {
echo "自分サイト";
} else {
echo "外部サイト";
}
0975nobodyさん2009/03/07(土) 21:55:17ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
0976nobodyさん2009/03/07(土) 22:06:13ID:???
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:???
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
0977nobodyさん2009/03/07(土) 22:07:53ID:???
>>975
ttp://www.akatsukinishisu.net/itazuragaki/perl/regex_delimiter_escaping.html
0978nobodyさん2009/03/07(土) 22:08:30ID:???
>>975
フイタw
0979nobodyさん2009/03/07(土) 22:28:21ID:???
>>977
ほー{}も対応してたのか
/でしか使ったことなかったから初めて知った、thx
0980nobodyさん2009/03/07(土) 22:34:36ID:???
/意外だと気持ち悪い
#とか
0981nobodyさん2009/03/07(土) 22:37:12ID:???
思ったけど、myurlの値違うくね?

それだと
http://http://localhost
になるんじゃね?
0982nobodyさん2009/03/07(土) 22:48:03ID:???
strpos('example.co.jp', $_SERVER['HTTP_REFERER'])
でいいんじゃないの?
0983nobodyさん2009/03/07(土) 22:52:31ID:???
>>974

$mydomein = 'exsample.com';
if(strpos($_SERVER['HTTP_REFERER'],$mydomein)){
 echo "自分サイト";
} else {
 echo "外部サイト";
}
0984nobodyさん2009/03/07(土) 22:53:01ID:???
それだと
http://localhost/example.co.jp.html
でもひっかかる
0985nobodyさん2009/03/07(土) 22:54:06ID:???
>>982
>>983
http://www.yahoo.xxco.jp/?url=example.com
みたいなとこから飛んできたらどうするんだよ
せめて先頭マッチくらいしろよ
0986nobodyさん2009/03/07(土) 22:55:59ID:???
別にアクセス解析で省くくらいの用途ならそれくらいでいいだろ
0987nobodyさん2009/03/07(土) 22:56:23ID:???
>>974
せめてここからはじめたほうがいいんじゃないか?

$myurl = $_SERVER['HTTP_HOST'];
$referer = "http://www.2ch.jp/";
#$referer = "http://localhost/link.php";

if (preg_match('{^https?://[^('.$myurl.'].*$}', $referer)) {
echo "自分サイト";
} else {
echo "外部サイト";
}
0988nobodyさん2009/03/07(土) 23:05:37ID:???
>>986
初心者乙
0989nobodyさん2009/03/07(土) 23:24:25ID:???
人生の初心者に言われたくないわ
0990nobodyさん2009/03/07(土) 23:36:26ID:???
>>982-983はギャグだろ
本気になるなよ
0991nobodyさん2009/03/08(日) 01:30:25ID:???
To : アクセス元の皆様
Subject : リファラ送出停止のお願いについて

お世話になっております。
私のサイトにアクセスする際は、当サイト内を相互移動する場合
リファラを送出しないようにお願い致します。
0992nobodyさん2009/03/08(日) 03:00:38ID:???
せっかくPHPなんだから
parse_url($_SERVER['HTTP_REFERER'])
とかしてからいろいろやった方がなにかと楽じゃない?
ちゃんとPHP使ってる?
0993nobodyさん2009/03/08(日) 03:17:30ID:???
おれ22才なんだがとりあえずこのスレおれより年上いないみたいだな
だから今から敬語使えや

ここで上下関係はっきりさせようや
0994nobodyさん2009/03/08(日) 03:21:31ID:???
オッサンwww仕事しろ
0995nobodyさん2009/03/08(日) 07:09:54ID:3tsEMQzx
pearのバージョンを入れ替えたところ2→3(PHPは4.3.11で変動無し)
AのDB切断が呼び出しもとのDBインスタンスにも反映されて
Cでエラーがでるようになったのですが、
これってpear::db仕様なんでしょうか?
回避方法あれば教えてほしいです。
<?php
require_once("DB.php"); // pear::db
class postage
{
function postage()
{
$db1 = new DBC;
$row = $db1->getRow("select * from session limit 1;");
print nl2br(print_r($row,1));// --------------@
print "@<br>\n";
$db1->disconnect(); // --------------A切断
}
}
0996nobodyさん2009/03/08(日) 07:11:47ID:3tsEMQzx

class sess
{
function sess()
{
$db2 = new DBC;
$row = $db2->getRow("select * from session limit 1;");
print nl2br(print_r($row,1)); // --------------B
print "B<br>\n";

$postage = new postage;

$row = $db2->getRow("select * from session limit 1;");
print nl2br(print_r($row,1)); // --------------C
print "C<br>\n";

$db2->disconnect();
}
}
$c = new sess;
0997nobodyさん2009/03/08(日) 07:13:48ID:3tsEMQzx
class DBC
{
var $connection;

function DBC(){
$this->connection =
DB::connect("mysql://root:pass@localhost/shop");
}

function getRow($sql){
return $this->connection->getRow($sql);
}

function disconnect(){
$this->connection->disconnect();
}
}
?>
0998nobodyさん2009/03/08(日) 07:22:16ID:???
1000
0999nobodyさん2009/03/08(日) 07:42:42ID:???
参照でインスタンス返してんじゃないの?
1000nobodyさん2009/03/08(日) 08:15:30ID:???
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。