【PHP】下らねぇ質問はここに書き込みやがれ 55

このエントリーをはてなブックマークに追加
1nobodyさん
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 54
http://pc11.2ch.net/test/read.cgi/php/1189309377/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

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

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで


2nobodyさん:2007/09/29(土) 18:37:31 ID:YlkpEUW6
■過去ログ
【PHP】下らねぇ質問はここに書き込みやがれ 53
http://pc11.2ch.net/test/read.cgi/php/1188047468/
【PHP】下らねぇ質問はここに書き込みやがれ 52
http://pc11.2ch.net/test/read.cgi/php/1186794483/
【PHP】下らねぇ質問はここに書き込みやがれ 51
http://pc11.2ch.net/test/read.cgi/php/1185521566/
【PHP】下らねぇ質問はここに書き込みやがれ 50
http://pc11.2ch.net/test/read.cgi/php/1184143801/
【PHP】下らねぇ質問はここに書き込みやがれ 49
http://pc11.2ch.net/test/read.cgi/php/1182794620/
【PHP】下らねぇ質問はここに書き込みやがれ 45 (※実質48)
http://pc11.2ch.net/test/read.cgi/php/1180181033/
【PHP】下らねぇ質問はここに書き込みやがれ 47
http://pc11.2ch.net/test/read.cgi/php/1180181033/
【PHP】下らねぇ質問はここに書き込みやがれ 46
http://pc11.2ch.net/test/read.cgi/php/1178955837/
【PHP】下らねぇ質問はここに書き込みやがれ 45
http://pc11.2ch.net/test/read.cgi/php/1178955768/
【PHP】下らねぇ質問はここに書き込みやがれ 45
http://pc11.2ch.net/test/read.cgi/php/1177635762/
【PHP】下らねぇ質問はここに書き込みやがれ 44
http://pc11.2ch.net/test/read.cgi/php/1176364487/
【PHP】下らねぇ質問はここに書き込みやがれ 43
http://pc11.2ch.net/test/read.cgi/php/1175368910/
【PHP】下らねぇ質問はここに書き込みやがれ 42
http://pc11.2ch.net/test/read.cgi/php/1174217841/
【PHP】下らねぇ質問はここに書き込みやがれ 41
http://pc11.2ch.net/test/read.cgi/php/1173163186/
3nobodyさん:2007/09/29(土) 18:38:21 ID:YlkpEUW6
関連リンク
■本家マニュアル   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://smarty.php.net/
■Zend本家      http://www.zend.com/
■Zend Framework  http://framework.zend.com/
■php | architect   http://www.phparch.com/
■Smartyマニュアル http://smarty.php.net/manual/en/
■PECL本家(英語) http://pecl.php.net/
4nobodyさん:2007/09/29(土) 18:38:55 ID:YlkpEUW6
【簡易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プログラムとして実行された結果になる。
5nobodyさん:2007/09/29(土) 18:39:41 ID:YlkpEUW6
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に保存?
 → 好きにしてください
6nobodyさん:2007/09/29(土) 18:51:13 ID:???
 \/: /: : : /: /: : : : : : /: /: : |: : : : l: : : ヽ}   \
  /: /: : : /: / : : : : :://://: :∧ : : : :|: : : : |     〉
 l: |: : :  |: /: : : : :/ /" /: :/  \: : :.|: : : : |   /
 |: :ハ: : : |: |二ニ==ェニフ´   /, へ、____>':「: |: : : レ'
 ヽ:|∧: : |: |く/フこ^ヽ\ /   / _ェ‐‐、=、`|: : |: : l: :|
  ∧ヘ: : |/ |r^{:::}゚ |  "      |^{;:::}r^} 〉 |: :/: : l: :|
  /: : |\: |ヽ >ー‐'        ヾ_こ_ソ  /:/: : :/ /|
 / : : {. \ヽ :::::::     ヽ     `ー―' /イ: :/ /: |
./: : : ∧  ト >   , へ、___   :::::/ /: ///: l: |
 : : : i^ヽ *\    / /´    :::::ヽ    // ノ/: : l: |  下らねぇ質問はここに書き込みやがれ
 : : /レ⌒ヽ、.  ヽ、 ヽ、_     :::ノ  , イァー‐く`¬ : l::|  って言ってるですぅ。
 : / / / ,へ. l| ` 、    ̄ ̄ ̄, ' rーく \.  |` ト、:.l::l
 ::/ .| '  / /ヽ|    >= ァ  ̄  /^ヽ  ` ヽ. | 〈 ヽ::|
: /  |       / |  /⌒/L「\.   |       ./ /  | |
7nobodyさん:2007/09/29(土) 22:12:08 ID:m/9bviMM
お手数ですがみなさんの力を貸してください。
dat.txtにaというテキストが入っていたとしてこれを取得してaと同じならば
等しい、それ以外ならば等しくないと表示させたいのですがうまく行きません。
何か良い方法はありますか?

$fp=@fopen("dat.txt","r") or die("ファイル読み込みオープンエラー");
while(!feof($fp)){
$line=fgets($fp);

print $line."<br>";

if("a"==$line){
$error="等しいです";
}else{
$error="等しくありません";
}
}
fclose($fp);
8nobodyさん:2007/09/29(土) 22:35:37 ID:???
>>7
改行コードじゃないかな
9nobodyさん:2007/09/29(土) 22:39:46 ID:m/9bviMM
>>8
アドバイスありがとうございます。
早々アドバイス通り比較の部分にも改行コードなどを付加する等の処理を施しましたが、上手くいきませんでした。
ウインドウズ環境なので改行コードは\r\nにしました

if("a"."\r\n"==$line){
$error="等しいです";
}else{
$error="等しくありません";
}
10nobodyさん:2007/09/29(土) 22:41:00 ID:???
trim($line)
11nobodyさん:2007/09/29(土) 22:41:37 ID:???
>>7
<?php echo '等し'.(@file_get_contents('dat.txt')=='a'?'いです':'くありません');
12nobodyさん:2007/09/29(土) 22:44:39 ID:???
>>7
echo $error
13nobodyさん:2007/09/29(土) 22:50:34 ID:???
>>7
echo bin2hex($line);
を見てみ。

ファイルを読み込むのは、file_get_contents() でもできるよ。
文字列比較は、strcmp() を使う方がいいかな。
14nobodyさん:2007/09/29(土) 22:55:14 ID:vw2Lts3b
>>7
$errorの中身を表示するコードが書かれていないからです。
15nobodyさん:2007/09/29(土) 22:56:39 ID:vw2Lts3b
おっと、 >>12が先に言っていた。
16nobodyさん:2007/09/29(土) 22:57:44 ID:m/9bviMM
もうしわけありません。
print $error;が抜けておりました。しかし、これを付け加えても
等しくありませんとなってしまいます。
file_get_contents()で検索してみたのですが、これはファイル内容を
全て読み込む関数でよろしいですか?
その場合、テキストに改行して書いてあった場合その通りに表示するには
またこれ用の関数があるのでしょうか。。。
17nobodyさん:2007/09/29(土) 23:00:29 ID:vw2Lts3b
>>13
> 文字列比較は、strcmp() を使う方がいいかな。

なぜですか。
18nobodyさん:2007/09/29(土) 23:01:13 ID:YnYts4Cn
一気にやろうとするなよ
・まずファイルの中身を読み取って出力させる
・次に1行ずつ文字列と比較して真偽を見る
とか順序だててやらないとウンコ漏らすことになる
19nobodyさん:2007/09/29(土) 23:03:03 ID:m/9bviMM
やはり8さんがおっしゃっていた改行コードの問題なのでしょうか。
dat.txtにa一文字だけ書いて比較すると正常に等しいとなるのですが、
a
b
c
d
e
としてdat.txtに書き込んだ場合、aがあるにも関わらず等しくないとなるのです。
20nobodyさん:2007/09/29(土) 23:05:14 ID:???
\r\nでだめなら\rにしてみな!
21nobodyさん:2007/09/29(土) 23:05:41 ID:YnYts4Cn
$logs = file(ファイルへのパス);
foreach ($logs as $log) {
$log = rtrim($log);
if ($log == 'a') {
$print = '等しい';
} else {
$print = '等しいわけない';
}
}
print $print;

でやってみて
22nobodyさん:2007/09/29(土) 23:07:00 ID:m/9bviMM
>>20
それも試してみましたが、うまくうごきませんでした。
printでも改行コードまでは表示されないので、どう比較していいか悩んでいます
23nobodyさん:2007/09/29(土) 23:08:02 ID:m/9bviMM
>>21
丁寧なアドバイスありがとうございます。
早々試してみます。
24nobodyさん:2007/09/29(土) 23:08:19 ID:???
さっき書いたけど。
echo bin2hex($line);
を見たら改行コードが入ってるのが分かるんだけどな。
'0a' とかみたいに16進数で表示されるから。
25nobodyさん:2007/09/29(土) 23:09:26 ID:YnYts4Cn
>>23
もちろんログファイルの中身は>>19
26nobodyさん:2007/09/29(土) 23:13:05 ID:m/9bviMM
>>24
ありがとうございます。無知ゆえ、改行コードが16進数で表示されるとはわかりませんでした。
そちらも視野に入れて色々じっけんしてみます。
27nobodyさん:2007/09/29(土) 23:16:24 ID:m/9bviMM
>>24
改行コードは見えたのですが、行数によってコードが違うので比較できそうにないのですが、
これは比較の方法があるのですか?
28nobodyさん:2007/09/29(土) 23:18:17 ID:m/9bviMM
>>21
ためしてみましたが、やはり19と同じ模様です。
一行だけaが記述されていると等しくなるのですが、
a
b
c
とかってして読み込んで比較すると等しくなりませんでした
29nobodyさん:2007/09/29(土) 23:18:25 ID:???
一流のハッカーならやって見せるさ。
30nobodyさん:2007/09/29(土) 23:18:43 ID:???
>>17
今回の場合だといいかもしれないけど、PHPだと、

if ('2a' == 2)
が真になってしまうから。

=== を使うか strcmp() を使う癖を付けないと危険。
31nobodyさん:2007/09/29(土) 23:19:55 ID:???
> if ('2a' == 2)
> が真になってしまうから。

なにこの糞言語www
32nobodyさん:2007/09/29(土) 23:20:11 ID:vw2Lts3b
>>21
$printの中身を表示するコードがforeachループに外にあるのは間違いでしょう。
33nobodyさん:2007/09/29(土) 23:24:10 ID:???
30の続き。
以下の記事に詳しく書いてある。
ttp://d.hatena.ne.jp/gallu/20061108/p1
34nobodyさん:2007/09/29(土) 23:24:53 ID:m/9bviMM
>>32
21のアドバイスでも32のアドバイスもよいと思いますが、私は等しくないと何度も付加したくないので
(foreachの中にプリント入れると全ての処理に対して等しくないをつけてしまう)21のアドバイス
で納得しました
35nobodyさん:2007/09/29(土) 23:28:38 ID:m/9bviMM
>>33
へぇーこれは驚きですね。今までならってきたifの概念からすると比較できそう
にないとおもってしまいますが、こういう事実もあるのですね。
36nobodyさん:2007/09/29(土) 23:28:57 ID:vw2Lts3b
>>30
そうですね。
1つ気を付けることは、 ===演算子で比較した場合は、 同値の時にTRUEを返すのに対し、
strcmp()関数を使った場合は、 同値の時にFALSEと評価される0を返すということです。

同値かどうかを判断するなら、 ===演算子の方が分かりやすいでしょう。
37nobodyさん:2007/09/29(土) 23:31:02 ID:YnYts4Cn
>>32
スタックしてた
脳内で
吊って来る
38nobodyさん:2007/09/29(土) 23:35:00 ID:vw2Lts3b
>>34
$printの中身を表示させるコードをforeachループの外に書いてしまうと、
最後の行が "a" と等しいか等しくないかしか分かりませんよ。

>>21の言いたいことは、 trimを使って改行を削除せよということでしょう。
39nobodyさん:2007/09/29(土) 23:35:39 ID:m/9bviMM
しかし、あれやこれやと試しているのですが、なかなか上手くいかないですね・・・。
例えばパスワード登録フォームってありますよね。他の人と同じパスワードを登録
しようとすると、現在そのパスワードは使用中ですとかって出ますよね。
そういうようなプログラムを実現したいのですが、素人目の判断ではなく実際の現場では
どのように記述されているのでしょうか
40nobodyさん:2007/09/29(土) 23:37:03 ID:m/9bviMM
>>38
どうやら私の解釈がまちがっていたようです。失礼いたしました
41nobodyさん:2007/09/29(土) 23:40:58 ID:m/9bviMM
あ、でもまだクラスとかよくわかってない私が現場のスクリプトを聞くなんておごまかしいことでしたね(笑)
42nobodyさん:2007/09/29(土) 23:41:47 ID:???
>>39
> 実際の現場では

実際の現場?
パスワードを入力されたらそれをMD5などでハッシュ化しデータベースに保存。
チェック時は入力されたパスワードを再度ハッシュ化しデータベースを検索。
43nobodyさん:2007/09/29(土) 23:43:11 ID:m/9bviMM
>>42は業界の方ですか?
やっぱりパスワードとか扱う場合はテキストファイルじゃなくてデータベース使うんですね。
自分はMySQL入れています
44nobodyさん:2007/09/29(土) 23:45:09 ID:???
パスワードとか扱う場合だけじゃなくて、
ほとんどの場合データベースを使う。
テキストファイルはログ吐くぐらいにしかつかわない。
45nobodyさん:2007/09/29(土) 23:47:40 ID:???
こういう判定の仕方もある

if(strstr($line, "a") === false){
 print "等しくない";
} else {
 print "等しい!";
}

今回は一文字だけど特定の単語が含まれるかどうかの判定もできる
46nobodyさん:2007/09/29(土) 23:49:28 ID:m/9bviMM
なるほど。なるほど。
みなさんありがとうございます。今日はもう休みますが、明日また続きを
やりたいとおもいます。
47nobodyさん:2007/09/29(土) 23:55:23 ID:???
次の患者さんどぞ〜
48nobodyさん:2007/09/30(日) 00:04:09 ID:???
>>27の意味がよく分からなかったけど、聞くのを忘れてしまった。
49nobodyさん:2007/09/30(日) 01:22:21 ID:???
>>7
>>19
実はprint $error;をループの外に置いてて
ファイルの最後の行の結果で上書きされてた
ってオチじゃないの
50nobodyさん:2007/09/30(日) 01:35:44 ID:vTnMvhRC
スレッド式掲示板をつくりたいと思ってます。ログの分け方なのですが、
1スレッド1ファイルにするのと、1ファイルに全部まとめるのは
どちらがいいでしょうか?

ファイルが大量にあると鯖の動作にも影響でそうな気もしますし、
ログを1つのファイルにまとめると読み込むときに負荷が気になります。
51nobodyさん:2007/09/30(日) 01:55:03 ID:???
やってみればいいだろが
52nobodyさん:2007/09/30(日) 02:34:19 ID:???
>>50
DBに格納するのがいいと思う
53nobodyさん:2007/09/30(日) 02:56:59 ID:???
>>50
一般的な個人のページだと、
スレッド式にしたところで年間に書き込まれる数なんて合計100レスいくかいかないだろ?
だからあんまこだわらなくてもいいんじゃないかね。
とはいえやっぱファイルを分けたほうが管理しやすいだろう。
保守性を考えた組み方をしたほうがいいよ。
まぁDBを使えないとか特殊な環境以外ではDBでやったほうがいいけど。
54nobodyさん:2007/09/30(日) 03:25:14 ID:???
>>50
そのスレッドって各スレをageたりsageたりできるの?
1ファイルでやるとスレの順番の入れ替え表示は手間になるよ。
ログファイルを丸ごと配列に読み込める程度の量なら簡単だけど、
かなり分量が増えることを想定してるんでしょ?
あと、レスデータってスレごとにまとめるの?それとも行の頭にスレNo.でもつけて
単純にファイル末尾に付け足して表示のときにスレごとに集めるの?
レスの書き込みはやっぱ末尾にappendでやった方が簡単だし
出力時間が短くなる分、ファイルのクラッシュ率も低くなるけど、
スレのデータがファイル中に分散してると表示に手間食うよ。
55nobodyさん:2007/09/30(日) 15:38:25 ID:aR8s0UFr
phpをコマンド実行すると以下のエラーが出てしまいます。

$ ./hoge.php
hello
Abort trap (core dumped)

hoge.phpの中身は以下のとおりです。
#!/usr/local/bin/php
<?php
echo "hello\n";
?>


"Abort trap (core dumped)"が出ないようにするためにはどうすればよいのでしょうか?

OSは、
$ uname -r
5.4-RELEASE-p6
です。

よろしくごきょうじゅ願います。
56>>55:2007/09/30(日) 15:53:22 ID:aR8s0UFr
すいません、OSの種類かいてませんでした。。。orz

FreeBSD

となります。

57nobodyさん:2007/09/30(日) 16:04:23 ID:hOfwjY6s
こんにちは昨日質問させて頂いた7です。
皆さん昨日はありがとうございます。今日も挑戦したいとおもいます。

$logs = file("dat.txt");
foreach ($logs as $log) {
$log = rtrim($log);
print $log;
if ($log == 'd') {
$print = '等しい';
} else {
$print = '等しいわけない';
}
}
print $print;

rtrimが入っているので前後の改行・空白は取り除けているはずなのですが、
比較するとどうも等しくないと出力されてしまう症状は変わりませんでした。
引き続きアドバイスをよろしくお願いいたします。
rtrimでは取り除けない改行文字が存在するということなのでしょうか?
58nobodyさん:2007/09/30(日) 16:10:01 ID:???
ごめん、昨日の21だけどprint文をループの中に入れて
59nobodyさん:2007/09/30(日) 16:11:10 ID:???
>>57
rtrimって後ろの空白文字だけ削除でしょ。文頭に空白文字入ってるとか。
print "[".$log."]\n";
で$logの中身見れば?
もしくは$logの中身が'd'じゃなかったりw
60nobodyさん:2007/09/30(日) 16:14:30 ID:hOfwjY6s
>>21
はい。いまちょっと進展があって理由はわからないのですが、なぜかこうすると正常に判断されます。
if(isset($_POST["md5"])){
$passwd=crypt($_POST["md5"]);
$input=htmlspecialchars($_POST["md5"]);
}else{
$_POST["md5"]="";
$input="";
$passwd="";
}
$error="";
print $input."<br>";
print $passwd."<br><br>";
$dat=$input."\r\n";
$file_handle = fopen("dat.txt", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line."<br>";
if($line==$input){
$error="error";
}
}
fclose($file_handle);
if(!$error){
$file=@fopen("dat.txt","a") or die ("ファイル書き込みオープンエラー");
flock($file,LOCK_EX);
fwrite($file,$dat);
flock($file,LOCK_UN);
fclose($file);
}else{
print "使用中のパスワードです";
}
61nobodyさん:2007/09/30(日) 16:15:48 ID:hOfwjY6s
>>59
失礼しました。両方の空白はtrimでした。
62nobodyさん:2007/09/30(日) 16:18:08 ID:hOfwjY6s
どこでどう等しいと判断されたのか謎ですが、textフォームからとってきたものを
dat.txtとひかくして等しくなければ書き込み処理を行うとすると正常に動作します。
63nobodyさん:2007/09/30(日) 16:56:33 ID:hOfwjY6s
みなさんありがとうございます。悩んだ挙句何とか解決しました。いまいち釈然としませんが・・・。
私の書いたものは動き的には21と大差ないとおもうのですが、なぜ21の文法で動かないのか理解出来ませんでしたが。こうしたら等しいと出ました。
dat.txtに改行して
a
b
c
d
e
f
g
と入れます。そしてcを比較すると等しいですと出ました。

$dat="";
$fp = fopen("dat.txt", "r");
while($str = fgets($fp)) {
// 文字列比較
$str = trim($str);
if ( $str == "c" ) {
$dat="等しいです<br>";
}
}
fclose($fp);
print $dat;

64nobodyさん:2007/09/30(日) 17:00:01 ID:hOfwjY6s
因みに参照したHPはここです。
http://ml.php.gr.jp/pipermail/php-users/2004-April/021654.html
fileで一行ずつ取得しようが、fgetsで取得しようが動きは同じだと考えていたのですが
取得したときになにかあったのでしょう。(それが何かはわかりませんでしたが)
65nobodyさん:2007/09/30(日) 17:35:07 ID:Uem6Q7XY
phpでJavaのEL式みたいに書くのって${〜}だけじゃいけませんでしたっけ?
例で言うなら
<?php define("NAME","test") ?>
<html>
<body>
${NAME}
</body>
</html>
みたいな感じで。
66nobodyさん:2007/09/30(日) 17:35:09 ID:???
>>63
>>21の、rtrimをtrimに、上書き防止用にelse文以下を削除、してもダメだった?

$msg="";
$logs = file(ファイルへのパス);
foreach ($logs as $log) {
$log = trim($log);
if ($log == 'a') {
$msg = '等しい';
}
}
print "[".$msg."]<br>\n";

>>18氏の書いてるように段階的にとにかく出力させて確認した方がいい気がする
67nobodyさん:2007/09/30(日) 17:40:48 ID:???
trim使うと前後のスペースが強制的に取り除かれる。
つまりスペースを使ったパスワードに問題になる
68nobodyさん:2007/09/30(日) 17:45:27 ID:hOfwjY6s
>>66
はい。66の通り試してみたのですがうまく動作しませんでした。
とりあえず、動いたので今度は暗号化したものをテキストファイルに書き込んで
パスワードの妥当性チェックに挑戦したいと思います。
69nobodyさん:2007/09/30(日) 17:52:46 ID:???
>>67
前後に空白入りのパスワード使わせるの?
それだと空白行チェックも必要にならないかい?
70nobodyさん:2007/09/30(日) 17:53:27 ID:hOfwjY6s
素人目の判断なのでこういう記述が正しいのかわかりませんが、とりあえず形になったので書きます。
これでパスワードをmd5ハッシュで暗号化してテキストファイルにかきこみ、これを比較することで使用中のパスワードか比較することができました。*まだサニタイズ等してないので当然このままのスクリプトでアップすることはできませんが。。。
//pass.phpから比較対象のパスワードを取得
//もしこのファイルが直接読み出された場合に$_POST["md5"]はなにもはいってないので初期化
if(isset($_POST["md5"])){
$pass=$_POST["md5"];
}else{
$_POST["md5"]="";
$pass="";
}
//変数の初期化
$error="";
//テキストファイルからデータを一行ずつ読み込み
$fp = @fopen("dat.txt", "r") or die("読み込みファイルオープンエラー");
while($str = fgets($fp)) {
// 文字列比較(trimで空白を削除)
$str = trim($str);
if ( crypt($pass,$str) == $str ) {
$error="error";
}
}
fclose($fp);
//もし$errorにerrorが入っていればそのパスワードは使用中。それ以外ならば使えるパスワード
if($error){
print "現在使用中のパスワードです<br><a href=\"pass.php\">戻る</a>";
}else{
//if条件を満たしていればファイルにパスワードを書き込み
$fp=@fopen("dat.txt","a") or die("追加書き込みオープンエラー");
fputs($fp,crypt($pass)."\r\n");
fclose($fp);
print "パスワードが登録されました<br><a href=\"pass.php\">戻る</a>";
}
71nobodyさん:2007/09/30(日) 18:05:02 ID:???
>>70
$_POSTの$pass代入時にtrimしないと$str = trim($str)と整合取れない可能性あり。
$pass=trim($_POST["md5"]);

それと$_POST に代入させるのは止めた方がいい。
以後使用するなら移した$passで。

あと多分判ってるだろうけどパス未設定ならメッセージ出力して終了
72nobodyさん:2007/09/30(日) 18:23:20 ID:hOfwjY6s
>>71
おおっと、ナイスアドバイスありがとうございます。
$_POSTの$pass代入時にtrimしないと$str = trim($str)と整合取れない可能性あり。
$pass=trim($_POST["md5"]);
の件については知りませんでしたので助かりました。
73nobodyさん:2007/09/30(日) 19:03:56 ID:hOfwjY6s
>>69
勿論このままだと空白もパスワードとして登録されてしまいすので、空白は入らないように
しますよ。
74nobodyさん:2007/09/30(日) 19:05:07 ID:???
>>55
その程度のスクリプトでcoreを吐くようじゃ環境に依存しているんで
自分で原因を追究するしかないんじゃないの?

#つか、これだけでわかる奴いるのかよ…
75nobodyさん:2007/09/30(日) 19:18:44 ID:???
>>21の処理が理解できてなさそうな発言といい、自分で書いたスクリプトの
動作を把握できてなさ具合といい、プログラミングの基礎を固めるところから
やらないと後々苦労するんじゃないかと他人事ながら心配になる
76nobodyさん:2007/09/30(日) 19:41:18 ID:a9TKVxAS
Vistaにxamppを入れたんですけど、
phpでcURLというのが使えないんです。
どうやってインストールするのでしょうか?
77nobodyさん:2007/09/30(日) 19:51:53 ID:???
>>76
>>1にも書いてあるけどマニュアルをまず読め
該当するページを読め
http://www.php.net/manual/ja/ref.curl.php
78nobodyさん:2007/09/30(日) 20:56:19 ID:a9TKVxAS
見てもよくわからなかったんですよ。
xamppでインストールされたのでphpのコンパイルって
どうやってやるんだろ?みたいな。
79nobodyさん:2007/09/30(日) 21:36:10 ID:4K+ZGFPD
すみませんbmpからjpgへの変換はどうすればいいんでしょうか?
GDでは出来ませんでした。
imagemagickはレンタル鯖なので使えません。
教えてください。お願いします。
80nobodyさん:2007/09/30(日) 21:38:44 ID:???
>>79
GDで出来ます。コードを晒せば間違いを指摘してくれる素敵な人が現れるでしょう。
8179:2007/09/30(日) 21:43:46 ID:4K+ZGFPD
>>80
すみません。もうできねえやってあきらめて試したスクリプト消してしまいました・・・
せめてどの関数使うかだけでも教えていただけないでしょうか?
82nobodyさん:2007/09/30(日) 21:52:06 ID:???
間違えた答えは消さないで赤ペンで訂正って先生に教わらなかったかい?
83nobodyさん:2007/09/30(日) 21:52:32 ID:???
>>81
内容まったく見てないけど、こんなんでてきた
ttp://www.dabun-doumei.com/topix/imageConvertSource.php
8479:2007/09/30(日) 22:16:32 ID:4K+ZGFPD
GDではbmpは使えないんです。
85nobodyさん:2007/09/30(日) 23:28:06 ID:???
>>78
http://www.php.net/manual/ja/ref.curl.phpから抜粋
Win32 ユーザへの注意: このモジュールを Windows 環境で使用可能とするには、
libeay32.dll および ssleay32.dll が PATH の通った場所に存在する必要があります。

これが理解出来ない頭の構造ってのを見てみたい
PHP本家のwindows用配布物に両dllは含まれているのに何故コンパイル?
xamppには含まれないならそんな物に頼るな
86nobodyさん:2007/10/01(月) 10:43:50 ID:nNJ7ChTV
メールをトリガーにしてメールの内容を解析しているのですが、
fopen("php://stdin", "r")
で、メールの内容を解析できますが、これは一体何なんでしょ?

メール送信しなくただ単にスクリプトを実行させただけでは、
中身が空っぽです。
ただ単にHTTPリクエストを受けたときに、その受けた内容を一時的に保存しているのでしょうか。
(それだと、普通にアクセスしても情報が残りそうですが・・・。)
87nobodyさん:2007/10/01(月) 10:50:10 ID:i+Hfwjq6
>>86
それは標準入力取得。
スクリプトをSSHとかからコマンドで引数に何か与えて実行してみればわかる

php ./test.php "aiueo"

とかやれば"aiueo"が渡される
88nobodyさん:2007/10/01(月) 10:52:51 ID:nNJ7ChTV
readfile("php://stdin");
って書いたらPHPが動かなくなったorz
89nobodyさん:2007/10/01(月) 10:56:16 ID:???
>>86
標準入力です。
ですから何も入力が無ければ中身が空っぽなのは当然です。
90nobodyさん:2007/10/01(月) 12:16:45 ID:???
PHPで文字列の複合可能暗号化はロジックを自作するしかないですか?
91nobodyさん:2007/10/01(月) 12:20:32 ID:???
92nobodyさん:2007/10/01(月) 12:53:17 ID:???
こんにちは
情報が欲しいログインするタイプのサイトへ
phpで自動化しようと思ったんですけど…

返ってきたHTTPレスポンスが
------------------------------
…サインインするには JavaScript が必要です
このブラウザでは JavaScript をサポートしていないか
現在スクリプトの使用が禁止されています。…
--------------------------------


これはもしかしてphpでは無理ですか?
93nobodyさん:2007/10/01(月) 12:59:35 ID:???
94nobodyさん:2007/10/01(月) 13:03:59 ID:???
なんでISOじゃないの
95nobodyさん:2007/10/01(月) 13:45:06 ID:???
>>92
ログイン画面のJavaScriptで何やってるか解析すれば
96nobodyさん:2007/10/01(月) 13:53:58 ID:???
>>91,93
>>1
97nobodyさん:2007/10/01(月) 14:23:07 ID:???
>>96
>>1のどこを読めと?
98nobodyさん:2007/10/01(月) 14:29:23 ID:???
>>97
ID表示とか環境晒すとか基本的なことじゃない?
99nobodyさん:2007/10/01(月) 14:31:45 ID:???
>>98
それだったら安価先が違うだろ
100nobodyさん:2007/10/01(月) 14:40:06 ID:MMTKck5h
get_magic_quotes_gpcのように、register_globalsの設定を取得したいのですが
phpinfoや設定ファイルを目視する以外にやり方ございませんか?
101nobodyさん:2007/10/01(月) 14:42:47 ID:???
ini_get()
102nobodyさん:2007/10/01(月) 14:43:33 ID:???
変数名いきなり使って受け取れてるかどうか試してみたら?
103nobodyさん:2007/10/01(月) 14:51:19 ID:???
>>101
あたまいいな。

>>102
おまえはばか
104102:2007/10/01(月) 14:59:24 ID:???
>>103
設定を取得できたならいいけど。
105nobodyさん:2007/10/01(月) 15:20:50 ID:???
>>100は例も言わずに消えたか
106nobodyさん:2007/10/01(月) 15:51:28 ID:???
>>99
どこがちがうの?
>>1のテンプレに入ってるのにわけわかんね

だいたい質問以前の基本的なことができてないのに相手してもらえるわきゃないわな
107nobodyさん:2007/10/01(月) 15:55:36 ID:???
>>106
だから、>>96の安価が>>91>>93になってんだよ
それくらい見たらわかるだろ
108nobodyさん:2007/10/01(月) 15:59:45 ID:???
>>107
おまえ頭固いな〜
こいつら全員基本的なことができてないだろーがよ
「おまえらまとめて>>1の基本的なことやってから質問しろ」って意味じゃねーの?
もうちょっと自分で考えてみろよ
109nobodyさん:2007/10/01(月) 16:03:53 ID:???
>>108
論破されて悔しかったの?wwwwwwwww悔しかったの?wwwwww
110nobodyさん:2007/10/01(月) 16:07:05 ID:???
どうせ>>109=>>107 だろ
どこが論破なんかと小一時間(ry
こんな基地外どうでもいいわ
111nobodyさん:2007/10/01(月) 16:12:58 ID:???
どうでもいいのにわざわざレス返す>>110は何がしたいんだろ・・・
112nobodyさん:2007/10/01(月) 16:26:07 ID:???
>>111
お前も答えてもらえなかったからって粘着するなボケ
113nobodyさん:2007/10/01(月) 16:29:50 ID:???
>>112
勘違いしてるかもしれんが
俺の質問は答えてもらってるわけだが

ID見えないのに特定しちゃったフリですかwww
114nobodyさん:2007/10/01(月) 16:38:03 ID:???
>>113
はあ?
しかし、反論できないと笑ってごまかすんですね
115nobodyさん:2007/10/01(月) 16:41:00 ID:???
>>114
何?お前の書いたレスに反論されるような文章書いたつもりなの?www
ただの煽りなのにwwww
116nobodyさん:2007/10/01(月) 16:42:22 ID:???
基地外がいると聞いて飛んできました!
117nobodyさん:2007/10/01(月) 16:58:44 ID:???
>>115
日本語でおkですよ^^
118nobodyさん:2007/10/01(月) 17:06:53 ID:???
自演粘着うざい
119nobodyさん:2007/10/01(月) 17:07:01 ID:???
無駄にレスの進行が早いなw
120nobodyさん:2007/10/01(月) 18:14:33 ID:???
>>108
なんで回答側までID出さなきゃいけないんだよ
91と93はID出す必要ないだろ
121nobodyさん:2007/10/01(月) 19:27:40 ID:???
>>120
>「おまえらまとめて>>1の基本的なことやってから質問しろ」って意味じゃねーの?
122nobodyさん:2007/10/01(月) 19:28:37 ID:???
質問と関係ない話題でレス消費するなよ
123nobodyさん:2007/10/01(月) 19:40:00 ID:???
>>122
自演乙
124nobodyさん:2007/10/01(月) 19:46:58 ID:???
>>121
だから質問してないじゃん。
ID出さないで質問したやつに>>1嫁って指摘しただけじゃん。
125nobodyさん:2007/10/01(月) 20:34:46 ID:J4jr6C1B
久しぶりなのでID忘れていました。
情報が欲しいログインするタイプのサイトへ
phpで自動化しようと思ったんですけど…

返ってきたHTTPレスポンスが
------------------------------
…サインインするには JavaScript が必要です
このブラウザでは JavaScript をサポートしていないか
現在スクリプトの使用が禁止されています。…
--------------------------------
と、これはもしかしてphpでは無理ですか?

>>ログイン画面のJavaScriptで何やってるか解析すれば
まず有効無効のチェックに対して
phpではクッキーを持つぐらいしかできる事がありませんよね?
126nobodyさん:2007/10/01(月) 20:49:04 ID:???
んなことはない。処理次第。
127nobodyさん:2007/10/01(月) 21:22:39 ID:???
通常ブラウザで実行されているJavaScriptと同じ処理(入出力データだけでも可能かもしれない)
PHPなりRubyなり好きな言語でエミュレートしてやればいいが
JavaScriptで生成されるデータが多かったり、
セキュリティ上の制約に引っかかったりしたら難しいだろうな。
128nobodyさん:2007/10/01(月) 22:23:27 ID:???
>>125
とりあえずJavaScriptが何をしてるのかを確認すべき。
普通、JavaScriptでログイン処理なんてやらない・できないので、
それは単にユーザI/Fを構築してるに過ぎないはずなのよ。
なので、最終的なログイン方法を見つけてそれをPHPで
処理してやれば、ちゃんとログインできるはず。
129nobodyさん:2007/10/01(月) 22:42:17 ID:???
>>128
>JavaScriptでログイン処理なんてやらない・できないので
やらないのは確かだが一応できるよ
ただ非効率だしパスワードなんかもソース見れば丸見えだし
ユーザの追加やパスワードの追加は手作業で行うことになるし
(手作業でやらない場合PHP等を通すことになるのでJavaScriptでやる意味がない)
普通は誰もやらない
5年ぐらい前ならたまに見かけたけどね

>…サインインするには JavaScript が必要です
>このブラウザでは JavaScript をサポートしていないか
>現在スクリプトの使用が禁止されています。…

考えられるのはJavaScriptで取得したいなんらかの情報があるか
ログイン後の操作や処理にJavaScriptが必要だったりするからログイン前に警告出してるか
だと思う
130nobodyさん:2007/10/01(月) 22:48:33 ID:???
ログイン自体は自動でできるようになるかもしれないが、
ログイン後のアクセスは結局JavaScriptが必要である可能性が高いよな。
131nobodyさん:2007/10/01(月) 23:00:27 ID:???
JavaScriptって視覚効果を高めるための言語なんじゃないの?
132nobodyさん:2007/10/01(月) 23:09:23 ID:???
>>131
(・д・)ぽか〜ん
133nobodyさん:2007/10/01(月) 23:30:45 ID:6BDl/Ymp
凄くくだらないと思うけど質問させて
あのさ、県名で絞込みってのをフォームのプルダウンでやろうと思うんだけど、
valueの値を“北海道”と日本語にするのと“1”って数値にするのは
どう使い分けたらいいの?
DBが安定して日本語対応してたら日本語でいいのかな?
みんなはどうしてるの?
134nobodyさん:2007/10/01(月) 23:42:42 ID:???
>>133
郵便局にあったCSVをDBにつっこんでつかってるけど日本語でやってる。
何から何までUTF-8に統一して設定してるからかもしれんけど特に問題はないよ
phpはEUC、DBはUTF8とかばらばらだったらPKつけてやった方が無難かもしれない
135nobodyさん:2007/10/01(月) 23:43:41 ID:UmsoE0s2
>>133
「蝦夷」 から 「北海道」 に変わったように、 「北海道」 から別の名称に変わるかもしれませんので、
数値にすべきでしょう。
136nobodyさん:2007/10/02(火) 00:02:18 ID:???
>>129
>やらないのは確かだが一応できるよ
>ただ非効率だしパスワードなんかもソース見れば丸見えだし
(・д・)ぽか〜ん
パスワード丸見えなのにログイン処理が「一応できる」と思ってるなんて凄いな。尊敬するよ。
137nobodyさん:2007/10/02(火) 00:03:46 ID:???
>>134-135
なるほど  ありがとう
よくわかりました
138nobodyさん:2007/10/02(火) 00:20:34 ID:???
>>136
技術的にどうかという問題なわけでセキュア云々ではない
セキュアだとやらないというだけで技術的にできることには変わりはない
気休めだが一応暗号化もできるしな
PHPでSQLインジェクション抱えてるようなサイトとたいしてかわらんだろw
139nobodyさん:2007/10/02(火) 00:24:01 ID:???
もともとネットはスカスカだからな、SSLでカバーしてもサーバー側に悪い奴がいたらお終いw
140nobodyさん:2007/10/02(火) 01:05:03 ID:ykBGND+D
東京都新宿区あああ1丁目2-3 101号室
大阪府大阪市中央区いいい2丁目3-4 202号室

こういう住所があるとして、「○○○号室」だけを取り出すには
どのように正規表現のコードを書けばいいのでしょうか?
141nobodyさん:2007/10/02(火) 01:14:12 ID:???
preg_match('/[1-9][0-9]{2,3}号室/', $address, $matches);
142nobodyさん:2007/10/02(火) 01:22:06 ID:???
なんでそんなことやりたいのか意味分からんが、それ以前に正規表現だけの話だったらスレ違い
143nobodyさん:2007/10/02(火) 01:48:53 ID:???
正規表現の質問ならここかね?

正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/
144nobodyさん:2007/10/02(火) 01:51:57 ID:???
「下つき・ミミズ天井」とか「カリ太・右曲がり」とかだなそれ
145nobodyさん:2007/10/02(火) 01:53:07 ID:???
…名器表現?
146140:2007/10/02(火) 02:11:24 ID:???
>>141
出来ました!非常に勉強になりました。ありがとうございました。
147nobodyさん:2007/10/02(火) 10:31:53 ID:???
俺んちは「E号室」だけどなw
148nobodyさん:2007/10/02(火) 10:55:06 ID:???
PHPからC言語のライブラリ関数をコールする事は出来ますか?
149nobodyさん:2007/10/02(火) 10:58:26 ID:???
はい
150phpでJSありのサイトへログイン:2007/10/02(火) 11:05:23 ID:NjRsQqKR
皆さんありがとうございます。
とりあえずJSの解読からはじめます。
151148:2007/10/02(火) 11:10:47 ID:???
>>149
もし良ければ、その方法を教えていただけませんでしょうか。
PHPのマニュアルを探しましたが、それらしき記述は見つけられませんでした。
152nobodyさん:2007/10/02(火) 12:17:34 ID:???
Exceptionクラスはどのファイルに定義されていますか?
OSはFreeBSD 6.1-RELEASE
phpはPHP 5.2.0です。

この環境に限らずここら辺みろやっていうあたりでも教えていただけると幸いです。
153nobodyさん:2007/10/02(火) 12:42:31 ID:???
>>148
マニュアルに書いてあるよ!
ttp://www.php.net/manual/ja/internals2.php

...けどmysqlとかのエクステンションを読んだ方が早いかもね。
154nobodyさん:2007/10/02(火) 12:45:27 ID:???
>>150
そのJS必要なサイトを晒した方が早い気がするが反則?
155nobodyさん:2007/10/02(火) 12:54:05 ID:???
>>152
多分ソースのext/spl/spl.php
156nobodyさん:2007/10/02(火) 13:08:56 ID:sEvSh0XV
>>153
ありがとうございます。<(_ _)>
ちょっと読んでみます。
157nobodyさん:2007/10/02(火) 13:11:34 ID:vuWCHJUh
MySQLでPHPの関数を(ry
158152:2007/10/02(火) 14:10:05 ID:???
>>155 ばっちり完璧にその場所へありました、ありがとうございます。
159nobodyさん:2007/10/02(火) 14:36:45 ID:NjRsQqKR
>>154
それは…挫折してからにします。
160nobodyさん:2007/10/02(火) 16:13:41 ID:vuWCHJUh
ISO-2022-JPって半角カナ対応してないの?
UTF-8から変換すると??になるんだが・・・
161nobodyさん:2007/10/02(火) 16:15:37 ID:???
>>160
携帯で半角カナ使えるか試してみればわかる
162nobodyさん:2007/10/02(火) 16:17:23 ID:vuWCHJUh
使えなかった
携帯で半角カナが使えないというのはこういうことか・・・
163nobodyさん:2007/10/02(火) 16:35:12 ID:???
>>162
ISO-2022-JP=7ビットコード体系
使用可能=ASCII, JISX0201, JISX0208-1978, JISX0208-1983
除外=JISX0201(片仮名)
164nobodyさん:2007/10/02(火) 16:41:05 ID:???
ISO-2022-JP-MS
165nobodyさん:2007/10/02(火) 16:41:05 ID:???
うちではEUC-JPでdocomoの大抵の携帯なら文字化けなく処理できるけど
固体識別情報にezwebを吐く携帯が文字化けを引き起こしてる
mb_convert_encodingでEUC-JPにするも全くダメ
自分がその携帯を持ってないのでなんともむず痒い
166nobodyさん:2007/10/02(火) 16:44:44 ID:???
>>165
携帯サイトでEUC-JP使ってるってこと?
いや、まさかそれはないよな
167nobodyさん:2007/10/02(火) 16:49:56 ID:???
>>165
>うちではEUC-JPでdocomoの大抵の携帯なら文字化けなく処理できるけど

ありえない。
168nobodyさん:2007/10/02(火) 16:52:41 ID:???
>>165
馬鹿すぎ
169nobodyさん:2007/10/02(火) 16:57:14 ID:???
ありえない?馬鹿すぎ?なんで?
一応ここ2年以内に発売されたぐらいの携帯だときちんと見れるよ?
自分が持ってるdocomoでも見れるし投稿処理もきちんとできるよ
友人のvodaphoneでもいけてるしね
170nobodyさん:2007/10/02(火) 16:58:52 ID:???
やべぇ、>>169真剣にアホス
何でEUC-JPで作ろうなんて思ったの?
171nobodyさん:2007/10/02(火) 17:05:40 ID:???
とりあえず同じサイトを複数の文字コードで作ってみた
UTF-8、Shift_JIS、EUC-JPとやってみたんだけど、
Shift_JISは障害が多すぎて自分では手に負えなかった
んでUTF-8にしてみたんだけど原因は忘れたけど、これも問題出たからやめたはず
それに表示がEUC-JPやShift_JISに比べてなんか違和感あった
んでEUC-JPでやってみたらezwebの問題以外すべてクリアだったんでEUC-JP使ってる

なんで真剣にアホスなのか意味がわかんないので教えて
EUC-JPでいまんところそれ以外に問題なくて使えてるのにどこがいけないのかサパーリ
172nobodyさん:2007/10/02(火) 17:09:17 ID:???
>>171
個人的なサイトなんだろ?なら好きにすればいいよ
仕事で作ったサイトの話なら、今すぐ職変えろ
173nobodyさん:2007/10/02(火) 17:11:06 ID:???
>>171
別にinternalはEUC-JPで全然かまわないから
せめて出力は変換しとけ。
全機種対応してない文字コードで携帯サイトとかバカか。
174nobodyさん:2007/10/02(火) 17:12:07 ID:???
待て待て皆、これは釣りであるこれは釣りである
175nobodyさん:2007/10/02(火) 17:12:58 ID:???
むしろ、これから先がEUC-JPで統一されると見てEUC-JPを選んだかもしれないぞ!
176nobodyさん:2007/10/02(火) 17:13:56 ID:???
個人で作ったサイトだよ
1日に50万アクセスぐらいあるけど、ezwebの問題以外特にクレームとかこないよ
自分で持ってる携帯からだとちゃんと狙った感じになってるから問題ないかと思ってた
METAタグでcharset設定したらちゃんと見れるから大丈夫だとおもったんだけどなぁ。。。
177nobodyさん:2007/10/02(火) 17:14:45 ID:???
1日に50万アクセスwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
腹痛いwwww
178nobodyさん:2007/10/02(火) 17:19:10 ID:???
EUC-JPでも絵文字って化けないんだ。それはちょっと驚き。
どんなコードで飛んでくるんだろう >絵文字
179nobodyさん:2007/10/02(火) 17:21:55 ID:???
>>177
なにか面白いこと言った?

>>178
厳密には携帯専用サイトじゃなくて、普通のPCで見れるページを携帯用にも作ってる感じ
だから絵文字はPC用ページだと表示できないから排除するようにしてる
180nobodyさん:2007/10/02(火) 17:29:00 ID:SNciDcYf
本当にくだらない質問で申し訳ないけどおねがいします
ポストバックによる処理をどこに入れるかだけど、今まではHTMLの最初の方にズラッと書いていました
どこかのサンプルソースを見てみたらFunctionを使いまくっていました
ひょっとして普通はFunctionを使いまくるのでしょうか?
181nobodyさん:2007/10/02(火) 17:47:09 ID:???
>>180
し、信じられないかもしれないが有りのままを話す
何言ってんだかサッパリわからねぇ
俺もなんて答えたいのか俺自身にもわからねえんだ
182nobodyさん:2007/10/02(火) 18:39:43 ID:eqW2/Vd2
includeパスっていっぱい通すと重くなるんでしょうか?
今3つ通してるんですけど、あと3つほどとうそうかと・・・
10万〜12万PV/日ぐらいのサイトで、そこそこ重い処理をしてるので、あんまり重くなるようなら考えます

3つを6つにしてもあんまり変わらないでしょうか?
183nobodyさん:2007/10/02(火) 18:42:20 ID:???
>>178
全然問題なく化けないぜ

>>179
とりあえずお前はググる能力を身につけような
EUC-JPなんかじゃ、SoftBank(3G, SH系除く)は絵文字送信ができないぜ
184nobodyさん:2007/10/02(火) 19:12:06 ID:???
>>182
includeする際の検索順序、ファイル分割する事によるメモリへの貢献、OS自身のディスクキャッシュ、HDD自体のキャッシュ etc.
色んな影響があるので、実際に試してみるのが一番いい。
185nobodyさん:2007/10/02(火) 19:21:42 ID:???
>>183
179だけど、PCと同じページを作ってるから特殊記号入れられないように排除してるんだよ
だから絵文字の処理なんかは必要ない
ググってもShift_JISでないとキャリアが対応してないとか、絵文字がどうのとかしか
出てこないけど、今の時代Shift_JISでなくても閲覧できるし、絵文字とかわざと排除してるから
他に叩かれるような覚えはないんだよねぇ
それ以外でEUC_JPで作ってたら真性バカの烙印押される理由が知りたい
186nobodyさん:2007/10/02(火) 19:33:59 ID:???
>>182
それでどこにも存在しないファイルを検索すると重くなると思うけど、
最初の方のパスで大半が検索Hitしてる分には特に重くならないかと。
でもパス6つくらいなら全然普通のレベルだと思うけどね。
187nobodyさん:2007/10/02(火) 19:35:32 ID:???
>>185
とりあえずEUC-JP非対応のキャリア、機種くらいは判定して
そこだけSJIS出力に切り替えてやれば?
それしないで「一部機種が対応してるからそれで通す」はバカだと思うけど。
188nobodyさん:2007/10/02(火) 19:40:14 ID:???
>>180
functionにするかしないかはシステムの規模によるかな。
あんまりにも小規模ならわざわざfunctionにしない。
でも中規模以上なら関数化しといた方が後で楽。
189nobodyさん:2007/10/02(火) 20:13:22 ID:???
>>187
なるほど
つまりまともに閲覧できてない機種があるってことなんだね
docomoもvodaphoneも知人の持ってるauもいけてたから
見れてないのはないもんだと思ってたわ
html生成方式だからSJISにするのは簡単なんだけど、そういうことだったのね
でも本当に見れてないんだろうか?・・・
190nobodyさん:2007/10/02(火) 20:38:39 ID:???
携帯サイト作るなら動作確認用の実機を揃えるくらいしろよ
191nobodyさん:2007/10/02(火) 20:44:22 ID:???
>>190
お前携帯何個持ってんの?www
192nobodyさん:2007/10/02(火) 21:26:27 ID:???
さては友達少ないなオマエ
193nobodyさん:2007/10/02(火) 21:31:10 ID:???
はぁ?
194nobodyさん:2007/10/02(火) 22:01:44 ID:???
>>189
自分で「見れてない機種なんて無い」と思えるなら無視すりゃいいじゃん
195nobodyさん:2007/10/02(火) 22:47:05 ID:???
し、信じられないかもしれないが有りのままを話す
UTF-8からISO-2022-JPに変換すると半角カナが??なる
ってんで電子メイル絡みの話題かと思っていた
唐突に>>165がEUC-JPとか1日に50万アクセスとか言い出した
「なに言ってるんだ、こいつ?」
現れる必然性が俺には理解できねえ
まるで鈍器で頭を強打されたくらいの衝撃を受けた
で…ここはPHP絡みの雑談するスレだっけか?
どうも認知症の進行著しく自分がどこにいるのかもわからねえ
196nobodyさん:2007/10/02(火) 22:54:37 ID:???
>>195
perlではShift_JIS使ってうまくいってたけど、phpではそんな不具合があって
ちょうどphpの文字コードの話が出たからなんかの足しになればと思って書き込んだだけだけど
それがみんなの気分を悪くしたみたいだね
もう書き込まないから安心してください、でわでわ
197nobodyさん:2007/10/02(火) 23:06:23 ID:???
>>196
いや気分悪くなんてしてないから
釣りと間違われないよう華麗にリードすればいいから

では次の患者さん どうぞ
198nobodyさん:2007/10/03(水) 01:44:33 ID:???
phpで恋人はどうやって作れば良いでしょうか?
199nobodyさん:2007/10/03(水) 01:58:21 ID:???
>>198
mklover()
200nobodyさん:2007/10/03(水) 02:00:16 ID:???
sage
201198:2007/10/03(水) 04:20:36 ID:???
<?php
echo mklover("美代ちゃん");
?>
上記のコードを実行させてみると以下のようなエラーがでました。

Fatal error: Cherry boy cannot use function mklover() in /var/www/html/cretateGirlFriend.php on line 2

どうすれば良いでしょうか?
202nobodyさん:2007/10/03(水) 04:25:56 ID:???
>>201
エラーメッセージの通りです。
203nobodyさん:2007/10/03(水) 04:35:16 ID:???
PHPで、アニメーションGIFを分解等せずにそのまま(ヘッダの中にあるdelay値も残したまま)
トリミングしてくれるライブラリや関数は無いだろうか?
一応、gdやImagick、MagickWandの関数を調べたり実際に試したりしてみたんだが、どうも見当がつかない・・・・・・
いったんjpgに分割してトリミング後に再結合とかはできるみたいだけど、
それだと結局、delay値取得するためにヘッダを解析しなきゃならなそうでなあ。

もし何か良い方法知っていれば教えて欲しい。
204nobodyさん:2007/10/03(水) 05:10:37 ID:???
205nobodyさん:2007/10/03(水) 09:35:05 ID:I/i9layb
<?xml version = "1.0" encoding = "utf-8"?>
を入れないとValidは通るのですが入れろといわれるので、入れると
エラーがでるのでechoに入れてみるとページすべてでエラーになります。
<?xml version = "1.0" encoding = "utf-8"?>の部分をヒアドキュメントに入れても
同じようにエラーが出ます。
phpページでValidを通す時みなさんはどうしてますか?

本体のページはTransitionalで
<?xml version = "1.0" encoding = "utf-8"?>はいれずに通ります。
問題があるのがCompact HTMLの携帯ようサイトです。
206nobodyさん:2007/10/03(水) 09:44:57 ID:???
>>205
なんてエラーが出るのさ
207nobodyさん:2007/10/03(水) 10:02:24 ID:???
echo "<"."?xml version = \"1.0\" encoding = \"utf-8\"?".">";
でダメだったって事?
208nobodyさん:2007/10/03(水) 10:10:37 ID:???
拡張子がPHPだとPHPとして評価しようとするので
xml宣言の<?とphp宣言の<?がかぶってしまうため起こる問題でしょ?

<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; ?>
とviewの1行目に入れればいいんじゃない
209nobodyさん:2007/10/03(水) 10:26:22 ID:???
>>208
それならechoやヒアドキュメントではエラー出ないだろ。
根本的にどっかPHPの構文間違ってるんだよ、多分。
210nobodyさん:2007/10/03(水) 10:37:07 ID:xx+cFlmV
ここでお聞きして良いか分からないのですが、何かしらヒントを頂ければと思います。
PHPのmb_send_mail関数を使ってメール送信をしているのですが、届くドメインと届かないドメインが
あり困っています。
サーバーはロリポップを使っているのですが、
お聞きしたいのはメールサーバのログの見方です。
ググってみたりしたんですが、方法が良くわかりませんでした。。。

OSは、macOSX 10.4.10です。
どなたか、宜しくお願い致します
211nobodyさん:2007/10/03(水) 10:44:43 ID:???
>>210
mail()のがよくね?
212nobodyさん:2007/10/03(水) 10:45:07 ID:???
>>210
macってクライアントが?
クライアントは関係ないんじゃないの?
ロリポのメールサーバが何使ってるか知らないけど
サーバ側のシステムログなんてサーバ管理者しか普通見れないよ
213nobodyさん:2007/10/03(水) 10:53:12 ID:xx+cFlmV
>>210
そうなんですね。ありがとうございます。
できればmail()の利点をご教示頂けますでしょうか。。。

>>212
クライアントがmacです。
ロリポップはqmailというメールサーバを使っている様です。
色々調べてみたら、メールが届かない時はとりあえず
メールログを見ろと書いてあるところが多かったもので。。。
214nobodyさん:2007/10/03(水) 11:06:01 ID:???
xml宣言はシングルクォートで囲めばいいだけじゃん、
オッパッピ?
215nobodyさん:2007/10/03(水) 11:36:14 ID:zZ6Mc9LX
質問させてください。
たとえばメニューを登録するプログラムがあって、 menu と priceの2種類のフィールドを
DBが持ってるとします(それと自動インクリメントのID)。
これに対して、登録用フォームで3つのメニューを一度に登録したい時、
どういう処理をしたらいいんでしょう?
メニュー1:<input type="text" name="menu"> <input type="text" name="price">
メニュー2:<input type="text" name="menu"> <input type="text" name="price">
メニュー3:<input type="text" name="menu"> <input type="text" name="price"> 

これじゃダメですよね?
それぞれにユニークのフィールドを持たせるのが一番無難かもしれないですが、
なんかイヤなので…(実際には3つでなく任意の数にしたいんです)
1メニューずつ追加登録してくのがいいんでしょうか?
それとも、上記のやり方でも解決できるPHPのくみ方があれば
教えて欲しいです。

よろしくお願いします。
216nobodyさん:2007/10/03(水) 11:40:53 ID:???
>>215
menu[]
price[]
217215:2007/10/03(水) 12:33:24 ID:zZ6Mc9LX
>>216
ごめんなさい どういうことでしょう?
HTML側は上に書いた通りでよくて、PHPで用意したmenu配列とprice配列に
入れるってことですか?
DBへの登録はmenu[0]〜menu[N]までループで処理??
そんなことできるのかな? 大雑把にでも教えてもらえれば嬉しいです。
218nobodyさん:2007/10/03(水) 12:41:59 ID:???
>>217
menu[0]〜[2]
price[0]〜[2]
みたいに振り分ければ?


>そんなことできるのかな?

プログラムは「できるかな?」じゃなくやってみるんだ
やるまえに「できるかな?」と尋ねると進歩しない
219nobodyさん:2007/10/03(水) 12:43:16 ID:???
>>213
mb_send_mail()はmail()のwrapperだよ
mail()にマルチバイト文字変換処理を付加したもの=mb_send_mail()
よってメイル送信前の処理は全て自前で行わなければならない
220nobodyさん:2007/10/03(水) 12:45:37 ID:???
>>219
いつも自分で変換して送ってたわ
ってか、そっちのほうが文字化けしたときとっさに対応できるからよくね?
221nobodyさん:2007/10/03(水) 12:47:42 ID:???
>>213
レンタルサーバを利用している時点で貴方が掌握できるのは
PHPで作ったプログラム(フロントエンド)の部分だけ
バックグランドで何が起きているのか知る術は無いから諦めろ
222nobodyさん:2007/10/03(水) 12:58:51 ID:???
>>220
そうだねぇ、自分で全て面倒みれる人ならmail()の方が良いかも

mb_send_mail()はSubjectと本文しか処理しないしね
例えば"おいら<[email protected]>"ってヘッダにつけると
"おいら"が化けるから予めMIME処理しなけりゃならん
結局、手間はたいして変わらなくなる
223nobodyさん:2007/10/03(水) 13:03:01 ID:???
ってことはPEARのMail::sendも自動的に処理されてんのかな・・・
224213:2007/10/03(水) 13:59:15 ID:xx+cFlmV
>>219さん
>>221さん

ありがとうございます。大変勉強になります。

今ロリポップのサーバーからテスト運用しているのですが、
独自ドメインとgmeilの方へは送信できるのですが、
yahooアドレスや携帯のアドレスへ送信しようとすると
デーモンよりfailure noticeとして帰ってきます。

<=?ISO-2022-JP?B?省略[email protected]>:
Sorry, no mailbox here by that name. (#5.1.1)
と、宛先が文字化けしている様です。
225213:2007/10/03(水) 14:02:17 ID:xx+cFlmV
↓続き

以下にコード晒します。

mb_language("Ja");
mb_internal_encoding("UTF-8");
$mailfrom = mb_encode_mimeheader($name)."<".$email.">";
$mailto = mb_encode_mimeheader("[email protected]");
$subject = "WEBサイトよりお問い合わせです。";
$content = wordwrap($content, 70);
$header = "To: <{$mailto}>\r\n" .
"From: {$mailfrom}\r\n" .
"X-Mailer: PHP/" . phpversion();
$param = "-f" . $email;
if (mb_send_mail($mailto, $subject, $content, $header, $param))
{
echo("メール送信完了しました。");
} else {
echo("メール送信に失敗しました。");
}

$email,$nameはフォームからの入力値になります。
サーバーのphpはver.4.4.6となります。
宜しくご教示お願い致します。
226nobodyさん:2007/10/03(水) 14:21:34 ID:???
どこかのサンプルスクリプトを丸々コピペしたような感じだな・・・
ヘッダーで文字コード指定してやれば?
227213:2007/10/03(水) 14:25:09 ID:xx+cFlmV
>>226さん

ありがとうございます。
おっしゃるとおりで、コピペです。。。
ヘッダーで文字コード指定試してみます!
228nobodyさん:2007/10/03(水) 14:35:21 ID:???
>>225
$mailto = mb_encode_mimeheader("[email protected]");
こいつはMIMEエンコードをしないで$mailto = "[email protected]";

$header変数にこいつ→ "To: <{$mailto}>\r\n" を含めない
ヘッダにTo:句が重複して現れてないか?
229213:2007/10/03(水) 14:47:29 ID:xx+cFlmV
>>228さん

>>$mailto = mb_encode_mimeheader("[email protected]");
>>こいつはMIMEエンコードをしないで$mailto = "[email protected]";

これを試したら届きました!
本当にありがとうございます。
よく分からずにWEBで拾ったコードを信用していたのが原因でした。
やはりPHPマニュアル以外はあまり参考にならないのですね。

To:が重複していたのもおっしゃるとおりで、解決しました。

皆様ありがとうございました。
230nobodyさん:2007/10/03(水) 15:00:48 ID:???
231205:2007/10/03(水) 15:39:42 ID:I/i9layb
みなさんありがとうございます。
index.phpの内容は
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD Compact HTML 1.0 Draft//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>test</title>
</head>
<body>
test
</body>
</html>
です。このままだと、
Line 1, Column 0: end of document in prolog.
とでるので、<? echo '<?xml version = "1.0" encoding = "utf-8"?>'; ?>と修正すると
Line 1, Column 104: no system id specified.や
Line 3, Column 5: element "head" undefined.
などすべての行でエラーがでます。レスいただいた
<? echo "<"."?xml version = \"1.0\" encoding = \"utf-8\"?".">"; ?>
も試しましたが全く同じエラーです。
232nobodyさん:2007/10/03(水) 15:42:23 ID:???
>>231
php.iniの設定でショートタグをオフにすればいいんでね?
233nobodyさん:2007/10/03(水) 15:43:55 ID:???
ってか、エラー文くらい貼れよ
234nobodyさん:2007/10/03(水) 15:55:44 ID:???
>>231
普通にこれで通らないか?
<?php
echo "<?xml version = \"1.0\" encoding = \"utf-8\" ?>\n";
?>
235nobodyさん:2007/10/03(水) 16:00:37 ID:???
それPHPのエラーじゃないだろ
236205:2007/10/03(水) 16:36:11 ID:I/i9layb
.phpではなく.htmlにしても全く同じエラーになるようでphpの問題ではないようなので出直してきます。
それにしても、みんなどうやって通してるんだろ。
失礼しました!
237nobodyさん:2007/10/03(水) 17:17:34 ID:???
>>236
XML使うときはshort_open_tagはOFFにする。
238nobodyさん:2007/10/03(水) 17:30:19 ID:???
>>237 プッ
239nobodyさん:2007/10/03(水) 17:31:30 ID:???
>>237
これ、そういう問題じゃないぞw
240nobodyさん:2007/10/03(水) 17:37:30 ID:???
なんだ構文チェックが通らないって事かよ・・
241nobodyさん:2007/10/03(水) 17:40:55 ID:???
>>231
これ、XHTMLなのかCHTMLなのかはっきりしろよ。
242nobodyさん:2007/10/03(水) 18:00:30 ID:e5ck+SXs
配列同士(配列Aと配列Bの突合せ処理をして
配列Aだけにある値と配列Bだけにある値をとりたいのですが
どのように処理すればよいでしょうか?
243nobodyさん:2007/10/03(水) 18:07:51 ID:???
array_diff
244nobodyさん:2007/10/03(水) 18:10:23 ID:???
>>242
array_diff()
245242:2007/10/03(水) 18:13:11 ID:???
うあ、こんな便利な関数があったのですか・・・
どうもありがとうございました!!
246nobodyさん:2007/10/03(水) 18:32:30 ID:oSSk/nfV
ふと疑問に思ったのですが、検索ページなど、POSTで受け取って
改ページなどはGETで行いますよね?
その際、以下のようにして検索対象となるWHEREの内容を、作成しています。

if($_POST["name"] ){
$name =htmlspecialchars($_POST["name"]) ;
}elseif($_GET["name"]){
$name = htmlspecialchars($_GET["name"]) ;
}
$search_set ="name='$name'"; //検索用のSQLを作成
$where = "WHERE $search_set"; //MySQLのWHEREに当てはめる

見たいな感じでやっているのですが、上記だとコードが長すぎますし、
正直無駄に感じます。みなさんはどのようにしているのでしょうか?
247nobodyさん:2007/10/03(水) 19:04:28 ID:???
半角
abcdefg

全角
ABCDEF
248nobodyさん:2007/10/03(水) 20:02:08 ID:???
>>246
HTMLエンティティ化はHTML出力に対して行うものであって入力値にかけるものではない。
それから初めのうちはコードの長さなんか気にするな。ロジックを気にしろ。

249nobodyさん:2007/10/03(水) 20:04:09 ID:???
>>246
GET、POST両方で飛んでくるパラメータについては$_REQUESTで処理してる。
250246:2007/10/03(水) 20:07:41 ID:???
>>248
入力値にかけないと余計なコードを入力された場合、
対処出来ないのではないでしょうか?
>>249
REQUESTでも問題ないですかね。リファレンスでは「あまり使われていない」
って書かれていたので、上のようなコードにしていました。
251nobodyさん:2007/10/03(水) 20:12:04 ID:???
>>250
htmlspecialcharsは「HTML表示の際」に必要なエスケープであって
SQLを組み立てる場合に必要なエスケープではないでしょ。
この場合は例えばmysql_escape_stringとかを使うわけだけど、
逆にSQL用にエスケープしたものをHTML表示に使えるわけでもない。
つまり、入力値はいきなりエスケープするものではなく(汎用のエスケープというのは無い)
何かの用途に使う時点で、それぞれの目的にあった形にエスケープしなきゃダメなのよ。
252nobodyさん:2007/10/03(水) 20:34:58 ID:???
エンティティ化ってエスケープか???
253nobodyさん:2007/10/03(水) 20:44:52 ID:L+I4Rl+L
一つの質問というわけではないのですが、
最近、PHPを勉強し始めました。
もし、アドバイスしてくださる方が居れば、こちらへ宜しくお願いします。
http://php121.blog121.fc2.com/
254nobodyさん:2007/10/03(水) 20:47:20 ID:???
>>253
ここで書け
255nobodyさん:2007/10/03(水) 20:47:44 ID:???
「実体参照」自体は方式を示すものだけど、使用目的はエスケープでしょ。
256nobodyさん:2007/10/03(水) 20:56:29 ID:???
>>253 死ね
257nobodyさん:2007/10/03(水) 21:21:37 ID:???
>>246
GET、POSTのどちらで来てもいいなら$_REQUESTだけど
どちらかしか認めないような場合(特にPOST)なら分けた方がいい。

>>246の場合ならDB用にSQLエスケープでいいけど
入力値によっては妥当な(期待している)値かのチェックは必須(数値や日付等)
258nobodyさん:2007/10/03(水) 21:48:26 ID:???
>>246
POSTデータをセッションに入れるってレスがまだ出てないようなので一応書いておく
259nobodyさん:2007/10/03(水) 21:50:55 ID:???
>>258
検索ページだとブックマーク入れる可能性ないか?
260nobodyさん:2007/10/03(水) 21:57:44 ID:???
>>258
検索や改ページとかある場合だと複数ウインドウで別ページを表示する可能性が高いぞ。
261nobodyさん:2007/10/03(水) 22:01:19 ID:???
> GET、POSTのどちらで来てもいいなら$_REQUESTだけど

気をつけろ! $_REQUESTには$_COOKIEも入ってくる。orz

あと$_FILESも
262nobodyさん:2007/10/03(水) 22:13:05 ID:???
>>261
げ、マジですか! ジェットストリームアタックだw
優先順位はどうなってるのだろ? 当然高い方に上書きされるよね?
263262:2007/10/03(水) 22:16:54 ID:???
順序はvariables_orderディレクティブで定義できるようでした
264nobodyさん:2007/10/03(水) 22:19:10 ID:???
そんなあやふやなもの使わないに越した事は無い。

バグ生む原因になるだけ。
265nobodyさん:2007/10/03(水) 22:40:04 ID:gbZJiSoX
A.phpとB.phpに全く同じ関数 function hoge が定義されています。この状態で

include_once("A.php");
include_once("B.php");

とやってしまうと function hoge が二度呼び出されたことによりエラーが返されます。
なんとかうまくエラーが出ないようにする方法は無いでしょうか?

ちなみにA.phpかB.phpのどちらかから function hoge を消してしまうと他の部分で
エラーが生じてしまうのでできるだけA.phpとB.phpの中身には大幅な変更は
加えたくありません。
266nobodyさん:2007/10/03(水) 22:49:49 ID:???
>>265
二重定義のエラーは回避できない。

つ[function-exists()]
http://jp.php.net/manual/ja/function.function-exists.php
267nobodyさん:2007/10/03(水) 22:50:18 ID:???
>>265
function hogeをC.phpに移してAとBからincludeすれば?
268nobodyさん:2007/10/03(水) 23:18:29 ID:???
マズい作り方したね。
269nobodyさん:2007/10/03(水) 23:26:48 ID:???
まぁ最初の頃はありがち
270265:2007/10/03(水) 23:31:05 ID:gbZJiSoX
>>266
二重定義は回避不能でしたか・・・

>>267-269
今後プログラムするときは気をつけたいのですが>>267さんの言うとおり
関数は一つにつき一つのphpファイルの中で定義して使い回すのが
正しい作り方になるのでしょうか?
271nobodyさん:2007/10/03(水) 23:40:21 ID:???
というか用途ごとだろ
272nobodyさん:2007/10/03(水) 23:44:19 ID:???
>>267
それだと同じファイルからAとBを読み込んだ時点でエラーが生じるんでね?
273nobodyさん:2007/10/03(水) 23:47:35 ID:???
何故メインのファイルにその関数を書かない?
274nobodyさん:2007/10/04(木) 00:36:17 ID:2S6z8FqV
echoってなんなのでしょうか?
echo 1+2がなぜ3になるのですか?
echoは引数を評価する関数なんですか?
275nobodyさん:2007/10/04(木) 00:45:23 ID:???
>>272
すまん。include_once(C.php)だ (だと大丈夫だよね?)

C.php -------------------------
function hoge(){}

A.php -------------------------
include_once("C.php");

B.php -------------------------
include_once("C.php");

Main.php -------------------------
include_once("A.php");
include_once("B.php");

$foo = hoge();
276nobodyさん:2007/10/04(木) 00:45:29 ID:???
>>270
まぁ、普通は同じ関数を複数のファイルに記述したりはしないな。
277nobodyさん:2007/10/04(木) 01:00:55 ID:???
>>274
つphp.net/echo
278nobodyさん:2007/10/04(木) 01:09:13 ID:???
>>261
俺も$_REQUEST使ってた...。

じゃやっぱり$_POSTと$_GETを書いて、どちらか入力されているか
チェックして変数に入れる方がいいみたいだな。
279nobodyさん:2007/10/04(木) 01:27:57 ID:???
関数名を重複させるなんて思考なかったぜ
280nobodyさん:2007/10/04(木) 02:02:54 ID:???
prefixでも付ければ?
281nobodyさん:2007/10/04(木) 02:03:28 ID:???
検索ページならGETのみでいいんじゃないかい?
URLをそのまま他人に教えたりできるし
POST なら前ページと次ページのみのフォームボタンにする
282nobody:2007/10/04(木) 02:08:25 ID:wWWlpRkK
どうも、こんばんは。
早速質問ですが・・・
http://aki.adam.ne.jp/php/script/thumb.php
のサムネイルモジュールを使っているのですが・・・
thumb.phpで画像へのパスが設定されていませんとなってしまってサムネイル画像が×になってしまいます。

thumb.phpで画像へのパス設定って何行目ぐらいに書いてありますか?
ご回答よろしくおねがいします。
283nobodyさん:2007/10/04(木) 02:17:48 ID:???
知るかボケ
284nobody:2007/10/04(木) 02:21:00 ID:???
そうですか・・・ありがとうございます。
285nobodyさん:2007/10/04(木) 02:23:12 ID:???
>>282
おいおい・・・230行足らずのスクリプトだぞorz
しかもしょっぱなにヒントあるのに。
ソース見たり調べてないだろ
286nobodyさん:2007/10/04(木) 02:33:58 ID:VoLA0M9Q
<?php
$saza = ("$tekuno" and "$posh");
$saza1 = ("$tekuno" or "$posh");
$saza2 = ("$tekuno" != "$posh");
?>

<html><head>
<?php if ($saza){echo 'ああああ';} ?>
</head>
<body>
<?php if ($saza1){echo 'いいいい';} ?>
<?php if ($saza2){echo 'うううう';} ?>
</body><html>

これを
<saza>ああああ</saza>
<saza1>ああああ</saza>
<saza2>ああああ</saza>
と置き換えて反映させたいのですが
どうすればよいのでしょうか?

置換タグ等で調べましたがわかりませんでした。
深夜ですがよろしくお願いします。
287286:2007/10/04(木) 02:36:00 ID:VoLA0M9Q
<saza1>いいいい</saza> 
<saza2>うううう</saza> 

すみません間違えていました
288nobodyさん:2007/10/04(木) 03:28:51 ID:???
>>286
変数名を取得って事だよね? 自分も調べたけど出来なかったような記憶がある。

変数名の取得関数getVarName()があったとして↓みたいになればいいって事でしょ?
$saza = ("$tekuno" and "$posh");
if($saza) {$var = getVarName($saza); echo "<$var>ああああ</$var>";}
# =>  <saza>ああああ</saza>


可変変数使っても無駄かな?
$sz ="saza";
$saza = ("$tekuno" and "$posh");
$sz1 = "saza1";
$$sz1 = ("$tekuno" or "$posh");

if($$sz) {echo "<$sz>ああああ</$sz>";}
if($$sz1){echo "<$sz1>いいいい</$sz1>";}
289nobodyさん:2007/10/04(木) 03:38:32 ID:???
>>282
IDがすげえな
290nobodyさん:2007/10/04(木) 04:14:55 ID:???
>>270
クラス化は一つの解決方法でもあるよね。本来は抽象化が目的だけど。
俺の作ったクラスには各クラスに必ずError()があるし。
逆に↑を非効率的だ!ってイライラする人もいるけど。
(コピペがそんなに面倒かね?)
291nobodyさん:2007/10/04(木) 04:17:11 ID:???
>>278
つうかPHPって、hoge.php?test=1にpostすると、
$_GETと$_POSTの両方が取得できるよね。
292265:2007/10/04(木) 04:17:26 ID:cABdO5b9
>>290
> クラス化は一つの解決方法でもあるよね。本来は抽象化が目的だけど。

私の持っているPHPの本にはクラスのクの字も出てこなかったりしますorz・・・
おそらくクラスがPHPに策定される前に出た本を買ってきてしまったかと(´・ω・`)・・・
293nobodyさん:2007/10/04(木) 04:17:51 ID:???
コピペの関数は最初が楽なだけで
仕様変更とか入ったときに恐ろしく面倒。
バグの元にもなる。
294nobodyさん:2007/10/04(木) 04:18:30 ID:???
>>282
そのページの「設置方法」を100回読め
295nobodyさん:2007/10/04(木) 04:24:42 ID:???
>>292
クラスなんてそんなに難しい概念じゃないよ。
まぁ概念を説明してる本を読むと難しそうに(高尚そうに?)書いてあるけど。
使い方は簡単。でも、思想を理解しないと、メリットや使い方を間違えると思うけどね。

>>293
コピペすることを前提に作ってる関数は、抽象化されてるからバグの温床になったことはないなぁ。
296nobodyさん:2007/10/04(木) 04:28:21 ID:???
中途採用でスキル表にPHPが使えるって書いてある奴が
初日に -> ってなんですか?って質問してきた事を思い出した

入門書ってクラスの説明が少なかったり全く無い本が多い気がする
どうして駄目プログラマーを量産するのか
297nobodyさん:2007/10/04(木) 04:36:25 ID:???
独り言はチラシの裏にでもかいとけ
298286:2007/10/04(木) 04:48:11 ID:VoLA0M9Q
>>288

case: $sazaの場合
<saza>〜</saza>で〜を表示すると言う事です。

質問の内容の書込みが全く間違っていました。
すみませんでした。

<html><head> 
<saza>ああああ</saza>
</head> 
<body> 
<saza>ああああ</saza>
</body><html> 
ああああを表示。

299203:2007/10/04(木) 05:10:31 ID:???
すまん、ID表示も環境記載もしてなかったな。
質問したGIFアニメをそのままの状態でトリミングする方法だけど

1.imagickでGIFアニメを読み込み(バージョンはimagick2のRC4)
2.リストの中に画像全てに対してトリミング処理
3.coalesceImagesで画像を結合
4.writeImagesで引数にtrueを指定して書き出し

としてみたら何とかなった。
俺と同じような事で迷っている人ここに来るかもしれないから、一応書き残しておく。
300nobodyさん:2007/10/04(木) 06:39:53 ID:???
<?php
define ('HUGA','/tmp/huga');
if (($fp = fopen(HOGE, "w")) == FLASE)
exit;
sleep(100);
?>
というスクリプトで
自分としてはfopenの引数が違うので実行できないと思ったのですが、
なぜかエラーが出ないばかりか、
実行までできて、しかもsleepもしてしまいます。
どうしてでしょうか?
301nobodyさん:2007/10/04(木) 06:45:35 ID:???
302nobodyさん:2007/10/04(木) 06:45:41 ID:???
>>300
>自分としてはfopenの引数が違うので実行できないと思ったのですが、
間違ってないじゃん

fopen ( string $filename, string $mode [, bool $use_include_path [, resource $context]] )
303nobodyさん:2007/10/04(木) 07:21:11 ID:???
>>300
flaseってなんだよfalseだろ

マニュアルちゃんとよめよ
>エラー / 例外
>オープンが失敗するとこの関数は FALSE を返し、 E_WARNING レベルのエラーを発行します。
て書いてあるじゃん

特に設定もしなければ表示はされないが
Use of undefined constant HOGE - assumed 'HOGE
ていうNoticeレベルのエラーがちゃんと出てる

あとソースの書き方が汚いのでどうにかしてちょうだい
304nobodyさん:2007/10/04(木) 12:54:21 ID:???
>>298
オレだけかも知れないがいまいち質問がわからん。
何を作ろうとしてるの? 具体的なソース掲示した方がわかりやすいかも
305nobodyさん:2007/10/04(木) 13:10:09 ID:???
>>304
相手にしない方がいい
自分の伝えたい事を正しく表現できない奴は人の話も正しく理解できない
306298:2007/10/04(木) 14:36:56 ID:r3u5qyzl
規制中なので携帯から

>>304
どうもすみません。

<saza>ああああ</saza>
<saza1>いいいい</saza1>
<saza2>うううう</saza2>
と書いておき
$saza = 1;の場合
いいいい
のみを表示したいのです。

実際
$saza = 1;
<?php if ($saza){echo 'ああああ';} ?>
<?php if ($saza1){echo 'いいいい';} ?>
<?php if ($saza2){echo 'うううう';} ?>
echo >>いいいい
で今は動作していますが、ページ内で記述が
ごちゃごちゃになるので
自分なりの置換タグが出来れば
楽かと思い質問しました。

>>305
確かに。
これで最後にします。
307nobodyさん:2007/10/04(木) 14:56:02 ID:???
1.<>内の文字列を取る
2.その変数が1かどうかを判定する
3.タグで囲まれた部分を表示する
308nobodyさん:2007/10/04(木) 15:29:57 ID:???
>>306
つりか?突っ込んでほしいのか?代入ってわかるか?
実際以降のスクリプトだと"ああああ"しか表示されないだろ?
309nobodyさん:2007/10/04(木) 15:33:00 ID:???
コンパイルのときに configure に与えたパラメータを
phpinfo() で見ることができてたようなきがするんだが、
今見たら出力されないんだ。
俺の記憶違いかな?
確認する方法ってないのかな?

310nobodyさん:2007/10/04(木) 15:35:28 ID:???
>>309
普通に書いてあるから、よく見れ
311309:2007/10/04(木) 16:28:47 ID:???
>>310
うううー
ttp://www.linux-user.de/ausgabe/2005/08/047-php/phpinfo.png
では、Build Date の下に Configure Command あるけど、
俺のところでは これが抜けてるんだ
トリはdebian etch
sargeのときは表示されてたような希ガス
312298:2007/10/04(木) 16:32:00 ID:r3u5qyzl
>>308
すいません釣りじゃないです。
$saza = $aa
でおねがいします。
313nobodyさん:2007/10/04(木) 16:35:36 ID:WKEPKRFz
>>311
phpのバージョンとconfigureした時のオプションは?
314nobodyさん:2007/10/04(木) 16:41:17 ID:WKEPKRFz
>>311
確認したいだけなら /usr/local/src/php-5.2.1/config.status とかで見れる。
これは俺の環境でだから自分の環境でソースまでのパスの下にconfig.statusがあるってことね
315nobodyさん:2007/10/04(木) 17:05:37 ID:3TfT8CvK
質問します
会員管理システムで、ログイン後ユーザ情報編集画面に移るようにしたいんですが、
ログイン用のIDとPassは名前や電話番号などのユーザ情報テーブルの
中に入れてもいいんでしょうか?
それとも、ログイン確認用の専用のテーブルを持たせるべきでしょうか
みなさんはどのようにしていますか? 
だいたいこんな感じというのを教えてください。 よろしくお願いします
316nobodyさん:2007/10/04(木) 17:15:57 ID:???
板違い
317nobodyさん:2007/10/04(木) 17:16:38 ID:???
だいたいこんな感じ、でいいのか
318nobodyさん:2007/10/04(木) 17:17:50 ID:???
PHPに関係ない
正規化について調べて、次からデータベース板で
319nobodyさん:2007/10/04(木) 17:19:39 ID:???
>>298
$tekuno とか $posh が何なのかわからんし、書き込みの内容もいまいち理解できんのだが
本気で悩んでそうなのでなんとなくレスしてみる
見当違いの回答だったらごめんね
<?php
// $tekuno $posh が処理されていると仮定

$saza = ($tekuno && $posh) ? "<saza>ああああ</saza>" : "";
$saza.= ($tekuno || $posh) ? "<saza1>いいいい</saza1>" : "";
$saza.= ($tekuno != $posh) ? "<saza2>うううう</saza2>" : "";

echo <<< HTML
<html>
<body>
{$saza}
</body>
</html>
HTML;
?>
320309:2007/10/04(木) 17:19:41 ID:???
パッケージで入れたから
config.status
はないんだわ
ソースパッケージからみつけた
COMMON_CONFIG=--build=$(PHP5_BUILD_GNU_TYPE)-gnu --host=$(PHP5_HOST_GNU_TYPE)-gnu
--mandir=/usr/share/man --enable-memory-limit --disable-debug --with-regex=php
--disable-rpath --disable-static --with-pic --with-layout=GNU --with-pear=/usr/share/php
--enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-track-vars
--enable-trans-sid --enable-bcmath --with-bz2 --enable-ctype --with-db4 --without-gdbm
--with-iconv --enable-exif --enable-filepro --enable-ftp --with-gettext --enable-mbstring
--with-pcre-regex=/usr --enable-shmop --enable-sockets --enable-wddx
--with-libxml-dir=/usr --with-zlib --with-kerberos=/usr --with-openssl=/usr
--enable-dbx --enable-soap --enable-zip --with-mime-magic=$(MAGIC_MIME)
--with-exec-dir=/usr/lib/php5/libexec
321nobodyさん:2007/10/04(木) 17:37:46 ID:???
>>315
いいんじゃない?
passはmd5でもしとけ
322nobodyさん:2007/10/04(木) 19:17:47 ID:???
>>306
ますます何をしたいのかわからない。
そのソースは転載用に改造したものと思うけど処理の真意が伝わらない。
(>>319氏も書いてるが$tekunoも$poshも$saza*も変数名から推測できないし)
貴方の文章力だと処理をどうこうしたいじゃ理解できないから、こうしたいという具体的な目的とうまく動作しないソースを改変せずそのまま貼った方がいい。
言葉で表せないって事は当然プログラムに落とせないよ。

置換タグとはテンプレートを読み込んで置換したいのか?
「ああ」「いい」「うう」を併記しておいてその内1つだけを出力したいの?
if文かswitch文の分岐出力とも思えたりするのだが。
323nobodyさん:2007/10/04(木) 19:30:58 ID:???
>>306
ようするにデータをXMLファイルで持っておいて、
任意のカラムのデータを取り出したい、ってことの気が…
それ、全然独自じゃないよ。
あと、あくまで独自のが作りたいんなら「自分で処理しやすい形式」にしましょう。
324323:2007/10/04(木) 19:36:01 ID:???
>>306
> 実際
> $saza = 1;
> <?php if ($saza){echo 'ああああ';} ?>
> <?php if ($saza1){echo 'いいいい';} ?>
> <?php if ($saza2){echo 'うううう';} ?>
> echo >>いいいい
> で今は動作していますが、ページ内で記述が
> ごちゃごちゃになるので

ちなみにこれ、普通は
$data = array(
  'ああああ',
  'いいいい',
  'うううう',
);
echo $data[$saza];
みたいに処理します。
325nobodyさん:2007/10/04(木) 19:37:16 ID:???
>>321
ありがとうございました 一度そのやり方でやってみます。

>>316-318
済みませんでした、以後気をつけます
326nobodyさん:2007/10/04(木) 19:41:20 ID:???
>>298>>306はきっとノーベル賞を狙ってるんだな・・そうとしか思えないカキコ内容
凡人の俺には理解不能だし・・
327nobodyさん:2007/10/04(木) 19:52:47 ID:???
>>324
論理演算の結果(true/false)を$saza*に入れてるから配列はダメじゃね?
and、or、!=、の3つなら最低2つの変数は同じ値だし。
$saza = 1とか書いてるから難解になるんだよ。なぜ$saza = trueにしない

328324:2007/10/04(木) 20:09:01 ID:???
>>327
データを配列化した上で、$sazaとかの変数も処理しやすいよう
正規化してやるのが常道だと思いますよ。
>>306は文系脳な人なのかもしれないけど、データ構造・形式を疎かにして
アルゴリズムだけで何とかしようとするのはプログラムとは言えません。
329298:2007/10/04(木) 21:58:38 ID:r3u5qyzl
ttp://q.hatena.ne.jp/mobile/1190542039
この質問の、<h2>に条件を付けて表示できないかのような事
です。
条件1なら表示
条件2なら非表示という事です。

ただし、表示時に<h2>を残さないようにしたいのです。


下らない質問というより、わからない質問に真面目に答えてく
ださってる方、
どうもありがとうございます。


330nobodyさん:2007/10/04(木) 22:42:23 ID:???
>>329
全然元の質問と違うーーー!!www
331nobodyさん:2007/10/04(木) 23:04:32 ID:???
>>329
これはヒドイなぁ
自分で理解できてないものを情報小出しにして他人に聞くのはマズくねえか?
332nobodyさん:2007/10/04(木) 23:15:47 ID:???
>>319 がまじめにレスしてるのに
無視するのはよくないぞ

↓じゃだめなのか?駄目ならその理由を第三者にわかるようかつ簡潔に述べよ。
<?php
$japanese = true;
$english = false;
?>
<html>
<body>
<?php if ($japanese) { ?>これはペンです。<?php } ?>
<?php if ($english) { ?>This is a pen. <?php } ?>
</body>
</html>

333nobodyさん:2007/10/04(木) 23:18:45 ID:???
>>332
HTMLのど真ん中で条件判断させたくないって話だと思われ
334nobodyさん:2007/10/04(木) 23:28:57 ID:3TfT8CvK
質問です。
会員システムで、ID(idhoge) と PASS(passhoge) に基づいて各ユーザの情報を管理してる場合でも
ブラウザ上では
profile.php?uid=10001 profile.php?uid=10002 
といった風に連番のパラメータを渡して各ユーザの情報を表示する場合があると思います。
もしこれが、ユーザ登録時のインクリメントの固有値を使ってるのだとしたら、
こういうのって、直接 profile.php?uid=idhoge としない場合にくらべてどんなメリットがあるのでしょう?
概念的というか、漠然とした質問かもしれないですがよろしくお願いします
335298:2007/10/04(木) 23:30:24 ID:r3u5qyzl
今、本を買ってきたので、もう一度自分で考え直してみます。
失礼しました。
336nobodyさん:2007/10/04(木) 23:30:53 ID:???
>>329
えーと・・・・つまり、

はてなで紹介されてた手法を使うとHTMLの中にPHPコードを埋め込まなくても
自由に表示を制御できるらしいぞ!ってことは俺の;プログラムもPHPコードを
全部消してちょーシンプルにできるんじゃね?きゃっほー魔法みたいだー!
でも読んでもやり方さっぱりわからねー。ereg_replaceとかどこに書くんだ。
わっかんねーからくだ質で聞いてみるべ!

…と、こんな感じの話なんでしょうか?
とりあえず君はSmartyを覚えた方が幸せになれる気がするけど。
337nobodyさん:2007/10/04(木) 23:32:29 ID:???
結局 >>298 が何を考えてたかを
エスパーできる奴はいなかったとさ
338nobodyさん:2007/10/04(木) 23:34:55 ID:???
>>334
ユーザからの要望に応じて後から自由にIDを変更できる。
(特に複数テーブル間でIDを識別子に使ってる場合に重要)
IDに使用可能な文字や桁数を自由にできて融通が利く。
識別子は数字列にしといた方がDB上での検索が速くなる。
339nobodyさん:2007/10/04(木) 23:42:50 ID:???
>>338
すごく納得できました
ありがとうございました
340nobodyさん:2007/10/05(金) 00:28:12 ID:???
>>329
319だけどエスパーになりたいので再チャレンジするおw

<?php
$saza = 1;

$output = <<< HTML
<saza>ああああ</saza>
<saza1>いいいい</saza1>
<saza2>うううう</saza2>
HTML;

$saza_flag = array(0, 0, 0);

$saza_flag[$saza] = 1;

$pattern_array = array();

if ($saza_flag[0] == 0) $pattern_array[] = '(<saza>.*<\/saza>)';
if ($saza_flag[1] == 0) $pattern_array[] = '(<saza1>.*<\/saza1>)';
if ($saza_flag[2] == 0) $pattern_array[] = '(<saza2>.*<\/saza2>)';

$pattern = implode("|", $pattern_array);

$output = preg_replace("/{$pattern}/", "", $output);

echo $output;
?>
341nobodyさん:2007/10/05(金) 02:05:39 ID:???
interface iAAA{}
interface iBBB{}
interface iCCC extends iAAA, iBBB{}

abstract class DDD implements iCCC{}
class EEE extends DDD{}


class DDDに インターフェイス iCCCを実装しているんですが、なぜabstractが必要なんですか?
abstract無しだとダメなんでしょうか?

また、class EEEには、abstractは必要ないんですか?
342nobodyさん:2007/10/05(金) 02:08:55 ID:???
>>329
はてなのは絶対に削除で、>>329は条件付き削除(表示)、なら
preg_replaceを条件で分岐させればいいだけじゃないの?
(ソースはコピペなので未検証)

$html = <<< ENDHTML
<h1>hoge</h1>
<h2>hogehoge</h2>
<p>hogehogehoge</p>
<h2>hogehogehoge</h2>
<img src="hoge.src">
ENDHTML;

$mode = true;
if($mode) echo $html;
else echo preg_replace('!<h2>.*?</h2>\n*!i', '', $html) ;

2分岐なら$modeに真偽値で代入して上の処理、
多岐分岐なら==で比較しながら「if〜elseif〜」かswitch文
条件1ならh1表示、条件2ならh2表示、だと置換パターンも変える。

HTML側に変則的な文字列入れといて適当な文字列に置換って手もあるけどreplaceが2回必要になる。
343nobodyさん:2007/10/05(金) 02:16:51 ID:zHZGL2zy
クラスってひとつごとに一つのphpファイルに格納していった方がいいと思う?
344nobodyさん:2007/10/05(金) 02:52:19 ID:???
>>341
これphp?
複数のimplementsはできても複数のextendsはできんかったと思うけど

EEEと同じようなクラスが他にもいくつかあると思うけど
それらで共通の処理が必要なものをabstractに書いてたりすんじゃないかな

>>343
俺はhogehogeというクラスのファイルは
hogehoge.class.phpでクラス毎に1個1個作ってる
345nobodyさん:2007/10/05(金) 02:56:27 ID:???
>>342
それ、2分岐くらいまでなら問題ないけど、質問主の要望みたいに
3、4分岐と増えるに従ってかなり面倒になるよ。
「1つだけ消す」のなら単純にelse条件を1つ増やすだけだけど、
「複数あるうち1つだけ残す(=3個とか4個とか消さないといけない)」なので。

で、そんなのいちいち条件判定しないで、正規表現に任すのがいいんじゃない?

$html = <<< ENDHTML
<sage1>hoge</sage1>
<sage2>hoge</sage2>
<sage3>hoge</sage3>
<sage4>hoge</sage4>
ENDHTML;

$sage = 2;
echo preg_replace("!<sage[^$sage]>.*?</sage[^$sage]>!", '', $html);
346nobodyさん:2007/10/05(金) 02:58:14 ID:???
>>343
基本的には。

1つのファイルに複数クラスを入れるのはその両クラスがよっぽど関連が強くて
ほぼ確実にワンセットで使うだろう場合くらい。
347345:2007/10/05(金) 03:07:52 ID:???
おっと、>>329の要望だと<sage*>はユーザタグだからこれも消さなきゃいかんのか。
$html = <<< ENDHTML
<sage1>hoge1</sage1>
<sage2>hoge2</sage2>
<sage3>hoge3</sage3>
<sage4>hoge4</sage4>
ENDHTML;

$sage = 2;
echo preg_replace("!<sage[^$sage]>.*?</sage[^$sage]>|<sage$sage>|</sage$sage>!", '', $html);

ってとこかね。
これで
hoge2
だけ表示される。

あと$tekunoだかなんだかの話は、上記で$sage=2;にしてるとこを
if($tekuno and $posh) $sage = 1;
if($tekuno or $posh) $sage = 2;
if($tekuno != $posh) $sage = 3;
とすりゃいいんでしょ?
348nobodyさん:2007/10/05(金) 05:10:20 ID:utkOd4pp
そろそろPHP熱が冷めてきて新しいこと始めたい今日この頃
Web技術のワンステップアップとしてPHPの次に.NETかServlet,JSPに触れたいと思ってます
Javaを理解している人間にとってPHPやC#はわかりやすいと聞くけど
逆にPHPからJava,C#を習得するのって困難ですか?
オブジェクトPHPを理解してる人にはある程度敷居が低いんでしょうが
自分はOOPは初歩程度の知識しかありません
みなさんはPHPからのステップアップとしてどういった技術を身に付けましたか?または身に付けようと思ってますか?
349nobodyさん:2007/10/05(金) 05:54:11 ID:???
>>348
どれもコピペで実装しそうな雰囲気だな
全て中途半端で終わりそうw
350nobodyさん:2007/10/05(金) 06:34:13 ID:???
>>348
とりあえずはPHP5でOOPを勉強してみりゃいーんじゃね?
351nobodyさん:2007/10/05(金) 06:50:35 ID:???
PHPでOOPとか正気か?
352nobodyさん:2007/10/05(金) 06:58:58 ID:???
Rubyでもやれってのか?
Smalltalk以外のOOP言語なんてどれも50歩100歩だよ。
形だけ学ぶならPHPで十分、十分。
353nobodyさん:2007/10/05(金) 07:49:36 ID:???
OOPって概念がいろいろあるよね。
この辺のブログが役に立つと思う。

ttp://d.hatena.ne.jp/sumim/20040525/p1
ttp://d.hatena.ne.jp/JavaBlack/20070825/p1
354nobodyさん:2007/10/05(金) 08:03:17 ID:???
>>352
正気でいってるなら恐ろしい
355nobodyさん:2007/10/05(金) 08:15:08 ID:???
>>348のWeb技術ステップアップってのがどうもよくわからん。
Java,C#を学ぶのは他言語での記述力をつけるってことでいいかと。
OOP? OOPとWeb技術とどう結びつくのか不明。
356nobodyさん:2007/10/05(金) 08:17:05 ID:???
いや、ステップアップのためにOOPを勉強したいわけじゃなくて、
ステップアップするならJavaかC#?でもOOP分からんから怖くて触れない
って言いたいんだろ。
357nobodyさん:2007/10/05(金) 08:17:15 ID:???
>>354
正気じゃなくても恐ろしい
358nobodyさん:2007/10/05(金) 08:37:29 ID:???
型無し言語から学び始めた人なら早目に型有り言語にシフトするのがいいかも
・宣言していない変数使おうとして怒られる
・異なる型どうしをキャストせずに代入しようとして怒られる
こんな些細なことで躓く子がたまにいるんだよね
359nobodyさん:2007/10/05(金) 09:03:26 ID:???
まったく質問と違う流れになっててワロタ
360nobodyさん:2007/10/05(金) 09:21:33 ID:???
型有無は結構おおきいね
Cをメインにやってたとき、型無し言語をしってびっくりしたぞ
361nobodyさん:2007/10/05(金) 09:35:51 ID:OqMmbiqQ
高級言語で型を必要としてる時点で高級言語でないよね
362nobodyさん:2007/10/05(金) 09:37:56 ID:???
変換する時にエラーを吐く理由がわかっているなら変換してくれよ!と思うw
363nobodyさん:2007/10/05(金) 10:03:51 ID:???
CメインでもBASICの存在くらい知識に入れとけよ
364360:2007/10/05(金) 10:24:41 ID:???
型強制言語のメリットは
コンパイル段階でエラーつぶせる事だよね
error_reporting(E_ALL);
って必ず書くやつは、型強制言語出身の可能性大だと思うわ
365nobodyさん:2007/10/05(金) 10:29:15 ID:???
PHPしかやったことない身からしたら
型付けってなんの意味があるの?って思っちゃうんだが
メモリを効率につかうためとかいう理由?
366360:2007/10/05(金) 10:41:36 ID:???
>>365
それもあるが、効率考えなくていいとこもあるから、
それはケース倍ケースだな
型強制言語から始めたものとしては、
宣言していない変数使おうとしてもそれなりに動いてしまう
のは脱力ポイントだな。
$hoge = 1
:いろいろ書いてて
echo $hogo; 変数名typo
とかやっても実行できてしまう。
Notice出すようにすればいいけど、実行しないと出ないでしょ。
型付けありだと、実行させなくてもコンパイル段階で
エラーでるからな。単純ミスは減らせる。
その分、ソースの記述は多くなるがな。

367nobodyさん:2007/10/05(金) 11:05:17 ID:???
おれにはperlやphpは宣言しなくてもよくてコンパイルも
必要なく手軽に扱えるというのが好感触ポイントだけどな

なんかphpは下級言語で高級言語のC使えるやつや使ってる奴がえらい みたいな流れだな
嫌味くせえ
368nobodyさん:2007/10/05(金) 11:09:48 ID:???
いやいやPHPは超高級言語だから
難易度が簡単なもの=低級じゃないよ
人間に理解可能かどうか
人間にとって難解であれば難解であるほど低級言語

低級←             →高級
機械語 アセンブラ C JavaやPHP
369nobodyさん:2007/10/05(金) 11:17:14 ID:???
ところでPHPのソースってC++?
370nobodyさん:2007/10/05(金) 11:35:46 ID:???
>>30-33の流れの話とか、>>33の飛び先の話とかデータ型を意識しないで
或いは意図的に避けて育っちゃうと理解できないと思うし、解決方法を
見い出すことすらままならないじゃないかな。
371360:2007/10/05(金) 11:38:13 ID:???
メリットデメリット両方書いたつもりなんだがな
嫌味に聞こえたなら悪かった
正直なところケースバイケースだと思う
>>348 の質問があったから、型なし言語の経験のみなら、
次やるとしたら型ありがいいんじゃない?っていいたかっただけ
php本体はCで書かれてるgccだから一部c++な機能つかってるかもだけど
ちなみに、機械語、アセンブラ以外は全部高級言語だよ
個人的には phpとかjavaとか無かった時代の言葉なので、今使うのは
時代になじまないと思う
372nobodyさん:2007/10/05(金) 11:38:20 ID:???
>>369
CそれとAWKがちらほら
373nobodyさん:2007/10/05(金) 11:38:23 ID:???
ORZ
374nobodyさん:2007/10/05(金) 11:43:28 ID:???
Cは高級アセンブリ言語という位置づけでしょ
低級でもなければ高級でもないんじゃね?
中級ってところだと思うが
ポインタなんかもあるし
375nobodyさん:2007/10/05(金) 11:45:00 ID:???
機械語を知らない奴がプログラムを語るなと某所で煽ってる奴がいたな

>>373
どうしたw
376360:2007/10/05(金) 11:50:47 ID:???
377nobodyさん:2007/10/05(金) 11:51:28 ID:???
>>375
それ見たかもしれない。
どっかの会社の社長の日記だろ?はてなで見た気がする。
アセンブリ言語ならともかく機械語までさかのぼっちゃうのはどうなのよ。
古い人間の意見だと思いたいんだけど実際本当に機械語まで知る必要がある?
機械語世代の古参プログラマの方の意見を聞きたいね。
あったほうがいいっていうなら話はわかるけど必須っていわれると・・・
378nobodyさん:2007/10/05(金) 12:00:02 ID:???
>>377
必要無いでしょ。CPU(MPU?)毎に異なるんだし。
機械語だってCPUに取り込まれてそのまま実行じゃなくて
さらに翻訳して…という行程を経るから意味無しじゃん。
379nobodyさん:2007/10/05(金) 12:06:36 ID:???
PHPだけならアセンブリは不要
というのもPHPで大規模なものは作らないから最適化の必要がない
そもそもPHPでアセンブリを使えない(と思う)
380375:2007/10/05(金) 12:09:16 ID:???
まあ書いた人曰くエラーに強くなるとか何とか

LLのモジュールをデバッガで追いかけてバグの原因を探すとか
微妙に訳の分からん話をしていたな
381nobodyさん:2007/10/05(金) 12:11:09 ID:???
>>378
機械語は唯一CPUが直接実行することができるんだよ
他の高級言語は最終的に全て機械語に変換されて実行される
382nobodyさん:2007/10/05(金) 12:20:59 ID:???
>>381
アセンブリ言語をアセンブルした機械語をCPUが直接実行するんじゃなくて
CPUの中で機械語をさらに内部コードに展開して実行するという話でしょ
383360:2007/10/05(金) 12:28:09 ID:???
>>377
俺C世代だが、そのころはアセンブラしっておかないと。とかよく言われてたから
さわりだけかじったことはあるぐらい
>>378 がかいてるとおり、
今はさすがにそこまで知っておく必要性は薄れてきてるとおもう
linux kernel も アセンブラで書かれてるのは一部だしね
俺もその記事よんだが、メモリの使われ方とかイメージできない
やつが多すぎる。のようなこと書いてた点には賛同しちゃう
一生webしかやらないなら不要かもしらんが、負荷集中して
パフォーマンス出ない。unsetしたほうがいいんじゃないの?とか
phpソースレベルで詳細確認したいとかいう状況になる立場に
いるのなら知っておいたほうがベストではあると思う
もっともほかの言語に行く前に、
正規表現使えるようになっとけ
ってことかな応用きくしな
384nobodyさん:2007/10/05(金) 12:39:08 ID:???
俺もアセンブリ言語覚えたいなー
やっぱりその辺から理解していると絶対楽しいと思うし

何よりデバッガ見てちゃんと理解できるのが羨ましい
385nobodyさん:2007/10/05(金) 12:44:06 ID:???
>>382
そういう話だと思うが、分子=機械語、原子=内部コード
みたいなものだからどちらかというと分子の振る舞いを知る方が
化合物=高級言語のユーザには重要だと思う。
# 特にPHPって高級言語のなかでも素の部分は低級な作りだから。
386nobodyさん:2007/10/05(金) 12:47:09 ID:???
PHP使いに機械語の知識は必要か?

Cの知識はあるべきだと思う。自称mysqlのモジュールでも読んで、
簡単なモジュールでも書けるようにしとけばなにかと役に立つ。
PHPなんて簡単過ぎてもう完全にマスターしちまったよ、
と思ったらCソースを読めるようにしとくと、ここでさらにデカい顔が出来る気がする。

アセンブラは...どうだろうね。俺は組み込みマイコンで遊ぶことがあるから
たまに書いたりディスアセンブルしたコードを読むことはあるけど、
PHPと関係するような場面で役に立つことはなさそう。
ただCの理解にはとても良い。すごく良い。

機械語は、たぶん必要ない。ただ自在に操るとカッコいい。

>>384
たいていはソースレベルデバッグで間に合うからCだけで大丈夫だよ。
387nobodyさん:2007/10/05(金) 12:56:51 ID:???
昔、Z80のアセンブラに手を出し多倍長演算が面倒で投げ出した<駄目じゃん、俺
388nobodyさん:2007/10/05(金) 13:03:40 ID:???
何か話が明後日の方向にすすんでるけど、
>>348の質問「PHPの次のステップアップ」は機械語でFA?
389nobodyさん:2007/10/05(金) 13:06:43 ID:???
Cをマスターするのは良いかもねぇ。PECLで貢献できるかもしれないよ。

それはさておき>>348の欲望を満たすにはどうすんべ?
環境構築はWindows+IIS+.NETFrameworkでC#の方が間違いが少ない
どう転んでもこれで設定に失敗するってことはないと思うが
390nobodyさん:2007/10/05(金) 13:17:56 ID:???
ただ>>348はPHP熱が冷めたから次ステップと言ってるからPHPを極めて次って訳じゃないんだよね。
PHPのOOPすらしてないみたいだし。
だから何やっても中途半端に終わる予感。
Web技術云々ならHTTP関係の勉強したら?と思った。言語はPHPのOOPでも。
391nobodyさん:2007/10/05(金) 13:24:29 ID:???
>>389
確実にできるものだけ選択しててもレベルアップにはならんのでは?
環境構築だって立派なスキルだし、独学なら教科書読むより失敗から学ぶ方が身につく。
392nobodyさん:2007/10/05(金) 13:42:15 ID:0zJjw8jk
国土交通省のサイトから
位置情報のデータベースをダウンロードして
MySQLに全部ぶちこみたいんだけど、
何せ量が多すぎる・・・

全部で1GBくらいになるんだが、レンサバじゃきつい
何かいい方法ないかな?
393360:2007/10/05(金) 13:46:22 ID:???
しつこいけど正規表現はおぼえとくべき
>>390 の書いたHTTPプロトコル勉強するのはいいね
セッションのしくみ知らない人多いとおもう
phpで書かれたフリーソフト読むとかでもいいかも
どっかのフレームワークとかいいんじゃね?

どうしても、
oopやりたいんならjavaとかC#のほうがいいとおもう
phpは標準でクラスライブラリないから
与えられる道具もクラスの言語の方が理解しやすいんじゃないかな
394nobodyさん:2007/10/05(金) 13:50:38 ID:???
>>392
バケツの容量以上に水を入れたい
とかいわれてもいい方法などない
すれ違いだしな
395nobodyさん:2007/10/05(金) 14:10:05 ID:yfT5K3xu
MySQLに入ったvarcher型データに改行されている文字列がありますが
そのデータを普通に取得しただけでは改行されませんよね
改行を<BR>に置き換えたいのですが、置き換える元(VBならvbcrlf)がわかりません
何になるのでしょうか?
396nobodyさん:2007/10/05(金) 14:13:41 ID:???
>>395
nl2br
397395:2007/10/05(金) 14:16:24 ID:???
即レスありがとう
無事解決しました
398nobodyさん:2007/10/05(金) 14:27:04 ID:???
-11.5478って型はfloatだっけ?
399nobodyさん:2007/10/05(金) 14:39:57 ID:???
var_dump(-11.5478)
400nobodyさん:2007/10/05(金) 15:06:23 ID:???
追記
gettype(-11.5478)
もやってみるとおもしろいよ
401nobodyさん:2007/10/05(金) 15:15:24 ID:???
>>392
自宅にDBサーバー用意してリモートでそっちに接続。
402nobodyさん:2007/10/05(金) 15:24:44 ID:OqMmbiqQ
>>392
国土地理院のやつかな?
あれは重複が結構あるね。
重複分を整理、都道府県名や市町村名など余分なものはカット。
これで半分ぐらいになる。
403nobodyさん:2007/10/05(金) 15:55:57 ID:???
質問です。
if( ! is_array($hoge)){
$ tmp = array();
for($ i = 0; $i<strlen($hoge); $i++){
$tmp[$i] = substr($hoge, $i, 1);
}
$hoge = $tmp

if( ! is_array($hoge)){でhogeが配列でないことを調べているのに、
$hoge = $tmpで配列に変換しているということは、
左辺が変数で右辺が配列のとき値の代入すると、
自動で左辺の変数が右辺の方の配列に変換されるのでしょうか?
404nobodyさん:2007/10/05(金) 16:03:46 ID:???
自動で変換されてるんじゃないの? (自信なし)
$hoge = $tmpの前後で$hogeをデバッグプリントすれば?
405403:2007/10/05(金) 16:04:40 ID:???
>>404
ありがとうございます
原因がわかって自己解決しました
406nobodyさん:2007/10/05(金) 16:39:48 ID:???
>>405
してないです。
407nobodyさん:2007/10/05(金) 16:43:58 ID:???
>>405
どういう原因だったの?
自己解決したなら教えて。
408405:2007/10/05(金) 17:25:09 ID:???
>>407
そんなこと恥ずかしくって書けません。
409nobodyさん:2007/10/05(金) 17:27:45 ID:???
>>403
変換っちゅーか置き換えられちゃうだけだけどな。
代入時に元の変数の型なんておかまいなしだよ。
410nobodyさん:2007/10/05(金) 17:39:05 ID:???
>>403
PHP4だったら $tmp の持っている値を $hoge に代入になるんだけど
PHP5は $hoge =& $tmp を暗黙に行う
411nobodyさん:2007/10/05(金) 18:23:42 ID:???
>>410
暗黙で参照渡しなんてしないだろ…
412nobodyさん:2007/10/05(金) 18:33:15 ID:???
>>410
そりゃオブジェクトの代入だw
配列で参照なんて渡さねぇw
413nobodyさん:2007/10/05(金) 20:06:21 ID:/jiD7c/g
ただ特定のipに対してping送りたいだけなんですが
phpだとどのようにしたらできますか?
414nobodyさん:2007/10/05(金) 20:08:38 ID:/jiD7c/g
なんかIDが正規表現みたいだった
415nobodyさん:2007/10/05(金) 20:11:26 ID:???
環境ぐらい書いたほうがええで
416nobodyさん:2007/10/05(金) 20:14:47 ID:/jiD7c/g
すいません。OSはRedHat、phpのバージョンは4.4.6、apache使用です。
平たくいうとlolipopのレンタルサーバです。
417nobodyさん:2007/10/05(金) 20:20:31 ID:???
`ping 127.0.0.1`;
418nobodyさん:2007/10/05(金) 20:26:08 ID:???
ping回数ぐらい指定しないと
419nobodyさん:2007/10/05(金) 20:45:34 ID:/jiD7c/g
pingの回数は特に決まってません。

>>417
それは何かの関数で使うんでしょうか?
420nobodyさん:2007/10/05(金) 20:46:28 ID:???
exec()とかsystem()とおさないで直接``って書くものなの?
421nobodyさん:2007/10/05(金) 21:08:20 ID:/jiD7c/g
$hostにipを入れるとして
system("ping $host");
こんな感じでしょうか?
422nobodyさん:2007/10/05(金) 21:13:31 ID:???
>>419
実行演算子参照
423nobodyさん:2007/10/05(金) 22:36:46 ID:???
pingの結果は特に参照しないならsystem()の方が速いかもだけどな。
424nobodyさん:2007/10/05(金) 22:43:03 ID:???
>>421
/bin/pingとかフルパスにしといた方がいいかもな。
425nobodyさん:2007/10/05(金) 23:40:08 ID:/jiD7c/g
ありがとうございました。解決しました。
426nobodyさん:2007/10/05(金) 23:49:03 ID:???
ハッシュのキーを変更する方法ありますか?
例 array_key_rename($hash, $key, $rename);

配列の中から特定のキーを除いた配列を返す関数ありますか?
例 array_key_remove($hash, array('key1','key2','key3'));
427nobodyさん:2007/10/05(金) 23:52:18 ID:???
428426:2007/10/05(金) 23:56:35 ID:???
>>427
あなた、そこちゃんと見ましたか?
見てからレスしてください。
429nobodyさん:2007/10/06(土) 00:03:41 ID:???

物凄く頭のおかしい事を言ってるような気が
430nobodyさん:2007/10/06(土) 00:10:29 ID:???
>>426
function
431nobodyさん:2007/10/06(土) 00:14:47 ID:???
こりゃまた香ばしい
432nobodyさん:2007/10/06(土) 00:16:58 ID:???
>>426
とりあえずID出せ
433nobodyさん:2007/10/06(土) 00:17:55 ID:???
434nobodyさん:2007/10/06(土) 00:38:14 ID:???
>>411
>>412
PHP5はオブジェクト型を暗黙で参照渡しするんじゃないか?
配列はオブジェクト型でしょ。

ただ>>403の答えにはまったく関係ないけど
435nobodyさん:2007/10/06(土) 00:39:09 ID:???
>>433
わざわざ探してきたのかw
436nobodyさん:2007/10/06(土) 00:43:10 ID:???
>>435
「口のきき方」でググッただけ。
最初amazonのURL貼ったら長すぎと蹴られたので楽天のにした
437nobodyさん:2007/10/06(土) 00:48:25 ID:???
>>434
> PHP5はオブジェクト型を暗黙で参照渡しするんじゃないか?
それはそうだが

> 配列はオブジェクト型でしょ。
そんな与太話をどっから拾ってきたんだ。
438nobodyさん:2007/10/06(土) 00:58:59 ID:???
JavaScript辺りと混同してるんじゃないか?
439nobodyさん:2007/10/06(土) 01:06:24 ID:???
クッキーを保存するプログラムで
保存されてないんだけどなんでだろう
ダウソした見本コードでも保存されてないし
440nobodyさん:2007/10/06(土) 01:09:41 ID:???
>>439
IDとソース出せ
441nobodyさん:2007/10/06(土) 01:10:37 ID:???
>>439
自作ソースか見本ソースを貼って質問して
442nobodyさん:2007/10/06(土) 01:11:30 ID:???
>>439
見本が古いんじゃね
443nobodyさん:2007/10/06(土) 01:15:18 ID:???
<html>
cookie.php
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<form method="POST" action="cookie_rec.php">
E-Mailアドレス:
<input type="text" name="email" size="30" maxlength="50"
value="<?php print($_COOKIE['email']); ?>" />
<input type="submit" value="送信" />
</form>
</body>
</html>

cookie_rec.php
<html>
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?>
クッキー"email"を保存しました。
</body>
</html>
こんなんです・・・・
444nobodyさん:2007/10/06(土) 01:17:10 ID:???
マニュアル読んでやったほうがいいね
本だから簡易化して説明するのは当然としてもひどすぎる
445nobodyさん:2007/10/06(土) 01:20:59 ID:???
>>443
自信ないけどクッキーってhtml本体より前に発行しないといけなくなかったか?

setcookie
http://jp2.php.net/manual/ja/function.setcookie.php
etcookie() は、その他のヘッダ情報と共に 送信するクッキーを定義します。
ほかのヘッダ情報と同様に、 クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります(これはHTTPプロトコルの制約です)。
<html> や <head> タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。
446nobodyさん:2007/10/06(土) 01:21:29 ID:???
>>437
>>438
$arr1 = array('a'=>2);
$arr1[] = $arr1;
var_dump($arr1);

参照になってないか?
447nobodyさん:2007/10/06(土) 01:22:06 ID:???
ハッシュのキーを変更する方法ありますか?
例 array_key_rename($hash, $key, $rename);

配列の中から特定のキーを除いた配列を返す関数ありますか?
例 array_key_remove($hash, array('key1','key2','key3'));

質問に答える方は、>>1の内容をよく読んでから答えてください。
答えになっていないリンクはいりません。
448nobodyさん:2007/10/06(土) 01:22:53 ID:???
まだいたの?お引取り下さい。
449nobodyさん:2007/10/06(土) 01:23:54 ID:???
>>448
答えが出ていませんからね。

そりゃ、出るまでいますよ。
450nobodyさん:2007/10/06(土) 01:25:05 ID:???
>>449
答えは判明してるけど君には誰も教えたくないんだよw
451nobodyさん:2007/10/06(土) 01:29:41 ID:???
「ないから作るしかない」
その一言がいえないんですよね?w
452nobodyさん:2007/10/06(土) 01:30:29 ID:???
453nobodyさん:2007/10/06(土) 01:32:09 ID:???
>>447
質問する側もちゃんと>>1を読もうな。
454nobodyさん:2007/10/06(土) 01:32:48 ID:???
>>452
すこし落ち着いたらどうですか?w

PHPが大好きなのはわかりますが、
ないものは素直にないといいましょうよ。
それだけでしょ?
455nobodyさん:2007/10/06(土) 01:34:20 ID:???
>>446
なんだそのコード???
意味分かって書いてるのか。
456nobodyさん:2007/10/06(土) 01:34:57 ID:???
>>455
>>1を読め
457455:2007/10/06(土) 01:36:24 ID:???
>>456
>>1のどこを読めって?
458nobodyさん:2007/10/06(土) 01:36:40 ID:???
>>455
$arr1に$arr1のコピーを追加する。
だけど、var_dumpには参照として出てるよね?
459nobodyさん:2007/10/06(土) 01:41:11 ID:???
>>443
解決できたのか?
460nobodyさん:2007/10/06(土) 01:44:53 ID:???
>>434
厳密には
php5ではオブジェクトをハンドルで渡すんだよ
参照がデフォルトってわけじゃない
あとphpはリファレンスカウンタっていうのがあるから
スクリプト上でコピーしても、内部的には実際にデータが変更
されたタイミングでコピーしてる
461nobodyさん:2007/10/06(土) 01:52:56 ID:???
>>458
<?php
$a = array(1,2,3);
$b = $a;
$b[0] = 9;
var_dump($a);
var_dump($b);
?>

結果
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
array(3) {
[0]=>
int(9)
[1]=>
int(2)
[2]=>
int(3)
}
どこが参照だって?
462nobodyさん:2007/10/06(土) 01:54:59 ID:???
>>461
そのケースは知ってるからあえて>>458にしたんだけど?

>>460 おお、変更したら本当にコピーされた。勘違いしてた。
463nobodyさん:2007/10/06(土) 01:57:19 ID:???
>>1を読めば参照かどうかなんてわかるだろ。
464nobodyさん:2007/10/06(土) 01:59:18 ID:???
>>463
>>446みたいなケースのとき、
変更されるまで参照持ってるよ。なんてのは
マニュアルに書いてあったけ?
465nobodyさん:2007/10/06(土) 02:01:09 ID:???
>>1を読めが流行ですか?
466nobodyさん:2007/10/06(土) 02:05:28 ID:???
>>462
なに。その特殊ケースを指して「配列はオブジェクトである」なんて与太をばら撒いてたわけ?
467nobodyさん:2007/10/06(土) 02:06:32 ID:???
>>463
だから>>1のどこ読めばそんなこと分かるんだよ。
468nobodyさん:2007/10/06(土) 02:22:34 ID:???
答えられない質問が着たらとりあえず>>1よめ。だろw くやしいのぅくやしいのぅ
469nobodyさん:2007/10/06(土) 02:38:09 ID:???
うるせーよ黙れ誰かTHE WORLD発動しろ
470nobodyさん:2007/10/06(土) 02:42:39 ID:???
ID出さない質問が>>1
態度がでかい質問が>>1嫁&誘導
ていうか>>1読めってわざわざご親切に誘導するのもあれだな
これからは徹底放置でいこうぜ
スレタイだけ読んで質問スレだから適当に質問すればいいじゃなくて
テンプレ読んで質問するのがここでのルール
ID出すのがなんで嫌がるのか理解できない
質問した後自作自演で回答者側に突っ込みいれたければsageればID出ないだろ?
それに同じIDで複数回質問したっていいじゃないか
471nobodyさん:2007/10/06(土) 02:44:56 ID:???
根本的に>>410の解釈が間違い

代入の仕組みは以下参照
http://derickrethans.nl/files/phparch-php-variables-article.pdf

>>461の例だと
$b = $a; ← この時点では$bは$aを指している
$b[0] = 9; ← ここで初めて$bはデータの実体を持つ

PHPのスクリプト上で検証しようとしても無理
472nobodyさん:2007/10/06(土) 03:03:34 ID:???
>>471
一瞬、グロ画像かと思ったwww
473nobodyさん:2007/10/06(土) 03:29:10 ID:???
array()はオブジェクトではない
new StdClass() はオブジェクト
リファレンスカウントは
debug_zval_dumpでみれるよ

474nobodyさん:2007/10/06(土) 03:52:44 ID:qCDvmkUY
基本的なことかもしれませんが、マニュアルを読んでもネットを検索しても
見つけられなかったので、こちらで質問させてください。
自分が使っているのはPHP4です。

$aに適当な整数が代入されているとき、その値が0、3、17のときだけ
共通の処理をしたいのですが、自分はif文で、
 if (($a===0) or ($a==3) or ($a==17)) 処理;
みたいに書いてます。
これって自分でも冗長だと思ってるのですが、
他にもっとシンプルに書ける方法ってありますか?
ただ、処理したい値が2,3通りしかないような場面でのことなので、
できれば配列やループは使いたくないんです。

我侭言って申し訳ないのですが、どなたかよろしくお願いします。
475nobodyさん:2007/10/06(土) 03:59:20 ID:???
別に普通だと思うが
if (in_array($a,array(0,3,17))) {
echo 'ほげほげ';
}

で良いじゃないかと思ったら配列はダメって言うし
あえて言うなら囲まずに
if ($a === 0 || $a === 3 || $a === 17) {
echo 'とか?';
}

476nobodyさん:2007/10/06(土) 04:06:12 ID:1HWd7HDN
>>474
preg_replace
477nobodyさん:2007/10/06(土) 04:13:04 ID:???
>>474
switch ($a):
 case 0:
 case 3:
 case 17:
  ヒットした時の処理;
  break;
 default:
endswitch;
478nobodyさん:2007/10/06(土) 04:22:22 ID:???
>>474
>これって自分でも冗長だと思ってるのですが、

それを冗長だと思ってるのはあなただけな気がします
479403:2007/10/06(土) 04:28:27 ID:???
それで結局、どういう結論になったのでしょうか?

>iif( ! is_array($hoge)){でhogeが配列でないことを調べているのに、
>$hoge = $tmpで配列に変換しているということは、
>左辺が変数で右辺が配列のとき値の代入すると、
>自動で左辺の変数が右辺の方の配列に変換されるのでしょうか?

?なんですけど。
480nobodyさん:2007/10/06(土) 04:36:04 ID:???
>>474
ごく普通の書き方かと。
5つくらいまではその書き方で問題ないと思うよ。
481nobodyさん:2007/10/06(土) 04:37:29 ID:???
>>479
>>409で結論
482nobodyさん:2007/10/06(土) 04:37:51 ID:???
>>403
それのやってる事は

if( ! is_array($hoge)){   // 配列ジャナイ場合(これobjectとかがきたらどーすんだis_stringとかにしたらいいのに)
  $ tmp = array();          // 配列初期化
  for($ i = 0; $i<strlen($hoge); $i++){ // $hogeを文字列と仮定して文字の長さ文ループ
   $tmp[$i] = substr($hoge, $i, 1);     // 1バイトずつ文字を切り出して配列に格納
 }
$hoge = $tmp; // $hogeに格納
}

多分この後に何か$hogeを使った処理を使うためにしてるだけじゃないかな
483nobodyさん:2007/10/06(土) 04:40:11 ID:???
>>482
そんなことは最初から403も分かってるよ。
スカラーの変数に配列の変数を代入なんて何故できるの?って話。
CかJavaみたいなガチガチ言語に頭が毒されてるんでしょ。
484403:2007/10/06(土) 04:50:04 ID:???
>>483
>CかJavaみたいなガチガチ言語に頭が毒されてるんでしょ。

ズバリそうなんです。
「もう、こんなもんだ」と無理矢理納得するしか無いのかな。
こんな事許されてたら、メンテナンス悪くなるし、可読性低くなるし、
危険じゃないのかしら?
とりあえず、有り難うございました。
485474:2007/10/06(土) 04:51:11 ID:qCDvmkUY
みなさんありがとうございます。
まさかこんなに早くお答えいただけると思ってませんでした。
お礼が遅くなって申し訳ありません。

自分の書き方でも特に冗長ではないというご意見をいただき安心しました。
でも、475さんや477さんのアドバイスはとても勉強になりました。
状況に合わせて使ってみたいと思います。

みなさん、本当にありがとうございました。
486nobodyさん:2007/10/06(土) 04:53:04 ID:???
>>484
なんだそんな事か(´・ω・`)

俺は自分の中で型を意識した組み方してるけど
そこらへんは組み方次第でどーとでもなるんじゃないかなぁ・・・

意識するとメンドイ事多いけど・・・

487474:2007/10/06(土) 04:56:47 ID:qCDvmkUY
ひとつ書き忘れました。
476さんのご指摘の preg_replace を使う方法は
後で自分でも調べて確認してみます。
アドバイスありがとうございました。
488nobodyさん:2007/10/06(土) 05:11:58 ID:1HWd7HDN
>>487
御免間違えた
preg_match
489nobodyさん:2007/10/06(土) 05:27:00 ID:???
まぁ、PHPの型のいい加減さっぷりはBasicやPerl以上だからな。
ここまで適当なのは他にあまり無いよ。
490nobodyさん:2007/10/06(土) 07:01:28 ID:???
Perlを元にしてるような旧式だからしゃーねえな
Perlはわざわざmyをつけないと歴史駆るスコープにならないような言語だし
491nobodyさん:2007/10/06(土) 09:46:45 ID:hKjy3c4n
PHPはクラス変数、メソッドにアクセスするのに、わざわざ$thisをつけないといけない糞言語♪
492nobodyさん:2007/10/06(土) 09:53:27 ID:???
アンチが付け上がるから流れを切ろうか
493nobodyさん:2007/10/06(土) 10:03:02 ID:???
なんか勘違いしている人がいるけどPHPにも型はちゃんとある
内部変換しているかどうかの違いだけ
494nobodyさん:2007/10/06(土) 10:06:12 ID:???
PHPはクラス変数、メソッドにアクセスするのに、わざわざ$thisをつけないといけない
のは可読性があがって俺は好きだ
495nobodyさん:2007/10/06(土) 11:01:19 ID:???
DBから返ってくる数値を文字列扱いするのをどうにかしてクレヨン
496nobodyさん:2007/10/06(土) 11:02:25 ID:???
後付けOOPだからじゃないかな?
$thisもだけど->がめんどくさい。「.」は文字列結合で使用済みだから仕方ないけど。
最近Ruby始めたら変数の$すら面倒になってきた。始めた頃は変数わかりやすいと思ってたのに。

チラシの裏スマソ
497nobodyさん:2007/10/06(土) 11:20:23 ID:???
PHPのアルバイトだとどれくらいのレベルで使いものになりますか?
498nobodyさん:2007/10/06(土) 11:27:26 ID:???
俺は日曜だから知らんが、アルバイトのプログラマに教育費用かける気はないと思うぞ
499nobodyさん:2007/10/06(土) 11:37:53 ID:???
全くの業務未経験者がPHPは難しい
給料は安いくせにやたら条件が高いから困る
未経験歓迎なのは使い捨てのJavaだな
500nobodyさん:2007/10/06(土) 11:46:26 ID:???
>>484
いやいや、そういう感覚は大事だと思うよ。
ただ、型に縛られる必要は無いと思う。
function hoge($val)
本来$valはarrayである。と決めきってしまうと
要素数が1のときもわざわざarrayにしてから関数よばなきゃいけない。
ところが、内部でarrayじゃないときは、arrayにしてやる
処理を入れておけば、関数の外部仕様的には
複数指定したいならarrayにしてちょ。
単数ならわざわざarrayにしなくてもいいよ。
という緩さが実現できる。

501500:2007/10/06(土) 11:48:38 ID:???
個人的には、
$year = 2001;
とかしてるのに変数を流用して
$year = 年とは無関係の何か;
とかされるとストレスかかるな。
502nobodyさん:2007/10/06(土) 12:00:34 ID:???
>>500
一般的に自作関数ってすべて内部で型チェックさせるものなの?
503nobodyさん:2007/10/06(土) 12:20:35 ID:???
>>502
500じゃないが
俺は外部で型変換するなー
内部で変換させたら関数内がどんどん見難くなるし。
変換する事が多いなら変換用の関数作ってその関数から呼ぶようにしてたりはするけど。
504500:2007/10/06(土) 12:23:12 ID:???
関数のパラメータとして期待した型が来てるか
内部であえてチェックするかってこと?
エラーになる要因は早めにつぶすべきだから、
チェックするのは良い習慣だと思う
ただ、すべてでチェックはオーバーヘッドになるし、書くのめんどくさいから
適度に手抜きしてるかな
パラメータに限らないが前提条件を満たしているか
チェックすることはよくある
505500:2007/10/06(土) 12:25:56 ID:???
あ、ミスったかな
>>503な意味だった?
なら>>503と同じ意見
506nobodyさん:2007/10/06(土) 12:41:37 ID:???
漏れMTクローンのCMS作れるレベルだけどアルバイト採用されるかな?
507nobodyさん:2007/10/06(土) 12:42:46 ID:???
>>506
自分で起業
508nobodyさん:2007/10/06(土) 12:44:39 ID:???
起業はめんどくさくね?それにこれから何するってのさ
509nobodyさん:2007/10/06(土) 12:45:40 ID:???
使い物になるかどうかチェックしてやるからソースを
510nobodyさん:2007/10/06(土) 12:46:49 ID:???
作ったCMSを売るかWebアプリ化
511nobodyさん:2007/10/06(土) 12:48:28 ID:???
>>509
もちGPLかBSDライセンスで
512nobodyさん:2007/10/06(土) 12:51:21 ID:???
アルバイトなら採用されるだろ
513nobodyさん:2007/10/06(土) 13:23:50 ID:JwDld5m1
みんな、ユーザー入力のチェックはどうやってる?

以下頭からの処理の流れ。
・POSTのみで渡される値はPOSTのみ、GETならGETのみで取得
・GETで来ないはずの値が来たらはじく。
・変数の型と値のとりうる範囲や文字列の長さ、形式に添っているか
 型判定関数や正規表現でチェックし、不正なものをはじく。
 ただしフォーム入力値などキーボードで入力するものを除く。
   :
・値を使用する関数内で、型や値の範囲、文字列長さなどを上と同じように
 チェック。フォーム入力値などは誤入力の可能性があるので
 エラー表示して再入力を促して終了。
・HTML表示する場合はすべての変数をエスケープして表示。
・DBにアクセスする場合はPrepared Statementで値を渡す。
 (今のところエミュレーションじゃないので普通に渡してる)
・ストアドで値の妥当性をチェックし、例えば存在しないはずのユーザーID
 とかだったら不正入力の結果を返して終了。誤入力の可能性のある
 値であれば別の結果を返して終了。問題なければ処理を実行。
 (DB処理はすべてストアド使ってます。生SQL文はソースに書いてません)
・ストアドからの返り値から、はじくなりエラー表示するなり処理結果を
 表示するなり行う。

はじくってのは強制的にセッション切ってます。
正当性判定の関数を作っておくくらいで、上のような地道なやり方しか
思いつかないんだけど、こういう便利なものがあるよとかこうしたほうがいいよ
とかこんなのも知らないの?とかあったら教えてくださいませ。
フレームワーク使ってないけど、こういうのが楽になるのかなあ。
514nobodyさん:2007/10/06(土) 13:41:51 ID:???
>>513
そkらへんの処理めんどくさいからフレームワーク使ってる
簡単なもんだったら期待値以外はエラー
クエリー実行は全てぷりぺあ通して使ってる
515nobodyさん:2007/10/06(土) 13:49:34 ID:???
質問に回答を頂くスレだけど
かならずしも回答がくるとは限らない
回答者のレベル・回答者の気分で影響するからだ。
質問者はどうやったら回答率をあげられるか考えてから言葉を選んだほうが良い
516nobodyさん:2007/10/06(土) 14:18:15 ID:???
技術で食っていけるかどうかより、技術はそこそこでもいかにアイデアが豊富で
それを形にしようとする努力をするタイプかどうかが重要なんじゃないかな?
すごいといわれるプログラマや技術屋は掃いて捨てるほどいるけど、頭の柔軟なやつは少ないからね
起業するなら特にコミュニケーション能力なんかにも長けている必要がある
物事をシステマチックに考えて合理的な道を歩むのは得意だけど、逆を返せば不必要な回り道をしたくないばかりに
それに重点を置かないから結果的に評価がされなかったりと、そのあたり不器用な人多いね
517nobodyさん:2007/10/06(土) 14:38:54 ID:QcrZFc+A
昔BASICを少しかじった程度なんですが、会社でひょんなことで使う羽目になってしまい、
四苦八苦しながらやっている者です。
PHPをやっていて、どうしても解決できなかったので教えて下さい。
BASIC言語でいう、GOTO文ってPHPだとどうやって書けば宜しいのでしょうか?

あと、PHPだと、文法エラーの際に行番号がでるのはいいのですが、
PHPコードの先頭に行番号を書こうとすると、それが原因で文法エラーがでてしまします。
これは環境が悪いせいなのでしょうか?今は行番号を書かずに、先頭から数えています。

すみません、二点質問お手数ですが宜しくお願いします。
518nobodyさん:2007/10/06(土) 14:40:54 ID:???
>>506
ここでまともに質問に答えてる人たちは、制作時間は異なれどその程度の知識は持ってるでしょう
519nobodyさん:2007/10/06(土) 14:43:17 ID:???
>>517
gotoはphp6まで待て

行番号はphp書いてるソフトが悪い
行番号も表示できるエディタに変えるといい
520nobodyさん:2007/10/06(土) 14:44:32 ID:???
>>517が求めてるgotoと
PHP限らず後々に追加されるgotoは
同じようで別なものな気がして
521nobodyさん:2007/10/06(土) 14:45:23 ID:???
/* 1 */
って書けばok
522nobodyさん:2007/10/06(土) 14:55:18 ID:QcrZFc+A
>>519さん
>>520さん
>>521さん
早速のお返事ありがとうございます。
行番号は、コメント文として書けば宜しいんですね。ありがとうございます。
行番号をコードに書いていないのに、コンパイラが勝手に行番号を認識しているので、面食らってしまいました。
隠れている行番号を見せてくれるエディタ(ソフト)って、何があるのでしょうか?
私が今使っているのは、Windowsで標準ソフトであるメモ帳です。

あと、GOTO文についての回答どうもありがとうございました。
PHPって、GOTO文ないんですか。それはかなり辛いですね。
ネットで検索していても無かったんで、もしかしてと思っていたのですが。
今相当青い顔になっていますが、頑張ってやってみます・・・

どうもありがとうございました。
523nobodyさん:2007/10/06(土) 15:01:49 ID:???
>>522
何度も同じ処理をしたいなら関数作れば良いし
ループを抜けたいとかならbreakと書けば良い
はっきり言ってgotoなんか無くても書けるよ

エディタは
emeditorとか秀丸とか一般的なエディタなら普通にできるし
PHPエディタ_スタンドアロン版とか使えば良いんじゃないかな
524nobodyさん:2007/10/06(土) 15:05:46 ID:???
俺、goto文使いまくってるスクリプト提示されて「どこが悪いんでしょうか?」
なんて質問投げられたら発狂するかも。(ちょっとオーバーだけど)
525nobodyさん:2007/10/06(土) 15:25:18 ID:???
>>517
ネタなのかって疑ってしまいそうになるけど、BASICの考え方は
捨てたほうがいい。goto文なんていまどきの言語じゃ仮に実装
されててもまず使わない。
BASICでもgoto使うとスパゲティプログラムになっちゃいやすい
とかで、構造化プログラミングとか推奨されてたはず。
labelとかでcontinueからの飛び先を指定するのとかはあったり
するけれど。

行番号もやっぱりない。
それじゃ分かりにくいので、たいていは行番号を表示してくれる
エディタを使ってコード書く。コードそのものに行番号書く必要はない。

っていうか君はまず本なり買って基本的なこと学ぶべきだと思うよ。
プログラミングの感覚そのものは役に立つと思うけど、「BASICのように・・・」
とか考えちゃうと却って足踏みするだけだと思う。
526nobodyさん:2007/10/06(土) 15:32:14 ID:???
釣りだろ? 釣りだと言ってくれ
527nobodyさん:2007/10/06(土) 15:52:29 ID:???
PHPでGOTOワロタwwww

まぁたまにGOTOほしいと思うことはあるよ
528nobodyさん:2007/10/06(土) 16:02:51 ID:???
goto欲しいかもw
529nobodyさん:2007/10/06(土) 16:08:00 ID:???
後藤文
530nobodyさん:2007/10/06(土) 16:08:11 ID:kTZnfqET
ファイルをアップロードする際、アップロードされるサーバーのディレクトリを案件ごとに自動的に変える(ディレクトリが1つずつ増える)方法ありますか?
531nobodyさん:2007/10/06(土) 16:13:16 ID:???
>>530
定義が曖昧すぎで良くわからんが
とりあえずあると思う
532nobodyさん:2007/10/06(土) 16:28:59 ID:???
10 仕事しながらタバコふかす
20 モニタの白が茶色に見えてくる
30 CLEAR SCREEN '掃除する
40 GOTO 10
533nobodyさん:2007/10/06(土) 16:30:56 ID:???
要はリテラルの文字列をグローバル変数(またはグローバル変数を内包した関数の返り血)で置き換えたいという初心者質問だろ
そんなことも出来ない言語はおhる
534nobodyさん:2007/10/06(土) 16:34:22 ID:???
>>530
自動的に、ってのがプログラムを書かなくても勝手に、って意味なら無い。
素直に
テンポラリディレクトリにアップロード(自動)→ディレクトリ生成→そこにファイル移動
ってコードを書けばいいと思うよ。
535nobodyさん:2007/10/06(土) 16:36:27 ID:???
>>532
出社
while(true){
 仕事しながらタバコふかす
 モニタの白が茶色に見えてくる
 CLEAR SCREEN '掃除する
 if(終業時間<=時計) break
}
退社
536nobodyさん:2007/10/06(土) 16:37:16 ID:???
>>522
いまどきはBasicでもgotoはまず使わないし、先頭に行番号も書かないよ。
機能ごとにfunctionで処理を書いて、それを呼び出し→終わったら自動で戻る、を使う。
ファイルの行番号についてはプログラム向けのテキストエディタなら大抵表示してくれる。
537nobodyさん:2007/10/06(土) 16:41:41 ID:???
>>535
どうでもいい事だが、
> if(終業時間<=時計) break
の所は、オレなら
if(終業時間==時計) break
と書く。じゃないとバグの発見が遅くなる。
538nobodyさん:2007/10/06(土) 16:44:33 ID:U5yeBGyi
正規表現の結果を変数に代入する関数を教えてください。
調べても置換用の関数しか出てきません・・・・
539nobodyさん:2007/10/06(土) 16:52:23 ID:???
どうやって調べてるのか書いて
540nobodyさん:2007/10/06(土) 16:53:07 ID:???
>>535
私はwhileにtrue突っ込むのいやなので、
while(終業時間>時計){としたいところなのだが。

>>535だと、出社の時点で終業時間 > 時計だったときに無駄に処理が動いてしまわないかい?

541535:2007/10/06(土) 16:56:52 ID:???
>>540
そうですね>>while(true)
最初はifなしの無限ループにするつもりだったので

ネタなのでそこまで厳密に考えてません>>出社時間
542nobodyさん:2007/10/06(土) 16:58:47 ID:???
書き込みの大半が雑談ネタでわろた

どうせ雑談スレ作っても人少なすぎて閑古鳥状態だろうからこのままでいいよな?
543nobodyさん:2007/10/06(土) 17:00:39 ID:???
>>538
123.123.123.123/20
に対して最後の20をとりたい場合
$str = 'fasdasda123.123.123.123/20fasrdqwrgsy4';
$ret = preg_match('!\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/(\d{2})!',$str,$match);
って感じにpreg_matchの第3引数に変数を入れてやると20が入ってくる
544nobodyさん:2007/10/06(土) 17:00:56 ID:???
ネタかよ( ̄△ ̄);;
545nobodyさん:2007/10/06(土) 17:02:55 ID:???
>>538
マッチしたか否かも、マッチした文字列取得も、書いてある気がするが

preg_match
http://jp2.php.net/manual/ja/function.preg-match.php
preg_match_all
http://jp2.php.net/manual/ja/function.preg-match-all.php

正規表現の結果とは何?
546nobodyさん:2007/10/06(土) 17:11:03 ID:???
if(終業時間<=時計) break
をループの先頭に入れればいいんじゃね?ちがう?
547nobodyさん:2007/10/06(土) 17:14:02 ID:???
だからネタ(ry
548nobodyさん:2007/10/06(土) 17:28:42 ID:???
っていうか、ネタにレスするならネタにしないとKYだろ。
ちんちんちょん切っちゃうぞ、ってレスに、私女ですから、っていたら、男ですから、ってレスすればいいのに、医学的についているハズだとするのは興ざめに他ならない。
549nobodyさん:2007/10/06(土) 17:34:44 ID:???
>>546 正解。
550nobodyさん:2007/10/06(土) 17:43:29 ID:???
>>537
それだとタバコ休憩が長くなったりしてとっくに終業時刻を過ぎてると
帰れなくなったりしないか?w
終業時間の判定が分単位でなく時単位とかなら大丈夫かもしらんが。
>>540
ループに入る前の段階で if(時刻 > 終業時刻) 終業時刻 = 99; みたいに
例外状態に切り替えるのがいい気がする。
ま、どっちにしろループの終了判定はループ先頭ですべきだな。
551nobodyさん:2007/10/06(土) 20:13:41 ID:???
phpでgotoがないことを最近知った。
php暦3年にもなろうというのにw
552nobodyさん:2007/10/06(土) 20:21:30 ID:???
gotoも型も$も->も
初めに学んだ言語が自分のデフォルトになっちゃって
他を軽蔑しがちになるよね
553nobodyさん:2007/10/06(土) 20:54:23 ID:???
始めにphpを次にjavaをそしてcを学んだ俺は
正直どれも好きだ
554nobodyさん:2007/10/06(土) 20:59:50 ID:???
GOTOは使い方誤ると迷宮に嵌ることこの上ない破壊的な武器だ
ループの外からいきなり飛び込んできたりとか

そんなスパゲッティなコードに悩まされた時期がありました

#あの過ぎ去った時間は無かったことにしたい黒歴史
555513:2007/10/06(土) 21:20:05 ID:JwDld5m1
>>514
お返事ありがとう。
やっぱりフレームワーク使う以外楽するやり方ないのかな。
ちょっとやり方が泥臭い気がしてたんだけど必要な処理だし。。
556nobodyさん:2007/10/06(土) 23:54:35 ID:???
なんで後藤さんが話題になってんの?
557nobodyさん:2007/10/07(日) 01:41:52 ID:???
そこで野口さんも登場していいですか
558nobodyさん:2007/10/07(日) 02:31:36 ID:???
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |
|  ,,ノ(、_, )ヽ、,,   |
|   ,;‐=‐ヽ   .:::::|
\  `ニニ´  .:::/      NO THANK YOU
/`ー‐--‐‐―´´\
       .n:n    nn
      nf|||    | | |^!n
      f|.| | ∩  ∩|..| |.|
      |: ::  ! }  {! ::: :|
      ヽ  ,イ   ヽ  :イ
559nobodyさん:2007/10/07(日) 02:36:28 ID:???
>>556
話題の主は強盗さんです
560nobodyさん:2007/10/07(日) 08:16:21 ID:ucFl6OYU
先日質問させて頂いた者です。
お礼のレスをしようとしたところ、数日アクセス拒否されておりまして、
レスが遅れて申し訳ありませんでした。
おかげ様で何とか先に進めそうです。どうもありがとうございました。
561nobodyさん:2007/10/07(日) 08:44:53 ID:???
>>556 PHP6導入に向けて気合いを入れているからです。

PHP 6でgoto文導入へ
http://itpro.nikkeibp.co.jp/article/COLUMN/20060327/233460/
562nobodyさん:2007/10/07(日) 09:01:32 ID:???
まじでー
goto文とかいらねーよ
563nobodyさん:2007/10/07(日) 09:26:12 ID:???
あると便利だと思うけどね
ベーシック言語の特権みたいなものだしさ
564nobodyさん:2007/10/07(日) 09:55:39 ID:???
使わないだろうからあまり関係ないな
565nobodyさん:2007/10/07(日) 10:36:19 ID:???
gotoがない言語って何があったっけ?
566nobodyさん:2007/10/07(日) 10:42:28 ID:???
言語レベルでgotoがないってことは、アセンブラレベルでjump命令に翻訳できないってことだから、
処理速度の観点から言えば、(計算内容によるが)相当不利だよ。
567nobodyさん:2007/10/07(日) 11:08:31 ID:???
Javaはgotoは予約語になってるけど実装されてない
Rubyは松本が面倒くさいからという理由で実装されてない
568nobodyさん:2007/10/07(日) 11:09:07 ID:???
gotoなんて時代をさかのぼりしてるようなもんじゃん・・・
569nobodyさん:2007/10/07(日) 11:20:09 ID:???
ここだけのネタかと思ってた>>goto導入
570nobodyさん:2007/10/07(日) 11:49:26 ID:???
アセンブラで見るとJEとJNZばっかりでJMPはあんまりない
571nobodyさん:2007/10/07(日) 12:16:55 ID:???
>>566 はネタだって
572nobodyさん:2007/10/07(日) 12:49:22 ID:???
PHPのソースってアセンブラでどうやって見るの?
そういうツールとかある?
573nobodyさん:2007/10/07(日) 12:54:00 ID:???
>>572
関数 show_as_assembler($php_source)
574nobodyさん:2007/10/07(日) 13:19:47 ID:???
>>573
サンクス。結構、アセンブラにするとソースにムラがあるね。
575nobodyさん:2007/10/07(日) 16:49:57 ID:9C3AWJOK
今検証できる環境にないので教えてください
クッキーについてですが、配列をクッキーに入れる場合全て上書きされるのでしょうか?
既存のクッキー配列に値を追加するということは可能なのでしょうか?
あと配列の名前設定は「cookie_name[]」←でいいのでしょうか?

たとえばこんな感じ

$hoge_arr = array("りんご", "みかん", "ぶどう");
$str_arr = array_push($hoge_arr, "バナナ", "マンゴー");

setcookie ("cookie_name[]", $str_arr );

if (isset($_COOKIE['cookie_name[]'])) {
foreach ($_COOKIE['cookie_name[]'] as $name => $value) {
echo "$name : $value <br />\n";
}
}

576nobodyさん:2007/10/07(日) 16:51:29 ID:9C3AWJOK
一部間違えたので訂正します

$hoge_arr = $_COOKIE['cookie_name[]'];
$str_arr = array_push($hoge_arr, "バナナ", "マンゴー");

setcookie ("cookie_name[]", $str_arr );

if (isset($_COOKIE['cookie_name[]'])) {
foreach ($_COOKIE['cookie_name[]'] as $name => $value) {
echo "$name : $value <br />\n";
}
}
577nobodyさん:2007/10/07(日) 16:56:05 ID:???
尻亜裸伊豆すれば?
578nobodyさん:2007/10/07(日) 17:03:20 ID:???
$_COOKIEは定義済みの配列と考えれば
自ずと答えは出てくると思うけど・・・

もしそれでも解らないなら多次元配列から勉強すればいい
579nobodyさん:2007/10/07(日) 17:15:02 ID:???
まぁ、がんばれ
580nobodyさん:2007/10/07(日) 17:15:15 ID:4hyano09
メールフォームを作成してます。
設置したところの自分のところのURLからのみ、メールを送信できるようにしたいと思うのですが、
他のURLからメール送信されないようにしたいのですが、
クッキーを使って対策したいと思います。

2ちゃんのようにハナモゲラみたいな語句を発行して、それで自分とこのURLから
メール送信されたか判断するのが妥当でしょうか?
581nobodyさん:2007/10/07(日) 17:23:22 ID:???
俺ならリファラで対策するけどなぁ。
どっちにしろリファラ偽装してくるような奴はクッキーも偽装してくるだろうし。
582nobodyさん:2007/10/07(日) 18:34:41 ID:???
摂氏四
583nobodyさん:2007/10/07(日) 18:37:34 ID:Dz4kk+z7
PHP用の学習資料を作成しているのですが
PHPマニュアル[http://www.php.net/manual/ja/]のコードなどは転載してもいいものなのでしょうか

PHPの質問ではなく著作絡みの問題だと思うのですが他に質問できる場所もわからなくて・・・
すみませんが宜しくお願いします
584nobodyさん:2007/10/07(日) 18:41:50 ID:???
配列をエクスプローラーみたいな感じで表示したいのですがサンプルになるようなものは
ありませんでしょうか?。ラインはなくて空白でシフトするのでも良いのですが・・・。
585nobodyさん:2007/10/07(日) 18:45:06 ID:???
dBugでも使っとけ。
586nobodyさん:2007/10/07(日) 18:47:34 ID:???
>>583
http://www.opensource.gr.jp/openpub/
オープン・パブリケーションのライセンスの翻訳からそれらしいところを
抜き書きすると次のようになります。

>オープン・パブリケーションである著作物かその一部を、
>同一の媒体上に他の著作物やプログラムと一緒に集めただけならば、
>本契約書が他の著作物にまで適用されることはない。
>しかし、そのような集積著作物には、オープン・パブリケーションである作品を含んでいる
>という通知と、適切な著作権表示を含めなければならない。
587nobodyさん:2007/10/07(日) 18:47:36 ID:???
>>583
どんな資料だよ
588nobodyさん:2007/10/07(日) 18:49:18 ID:???
>>583
転載・引用はかならず記すって学校で習わなかったか?
589nobodyさん:2007/10/07(日) 18:53:14 ID:???
>>583
そういう事は第三者がどうこう言える問題ではないし、こんな所で質問するのはお門違い
590nobodyさん:2007/10/07(日) 18:57:40 ID:1Vf0WhZE
今からPHPの入門として、自分のPCにApacheとPHPとMySQLをインストールしようと思っています。
しかし以前、

「自分のPCにサーバ入れると、
自分のPCの中が丸見えの状態に
なるからセキュリティに注意」

と言われたんですが、どうすればよいですか?
591nobodyさん:2007/10/07(日) 19:00:55 ID:???
セキュリティに注意すれば良い
592nobodyさん:2007/10/07(日) 19:25:35 ID:???
>>590
どうしたら魚を釣れるようになるか助言はするけど
魚が欲しいのに青物野菜の育て方を聞かれても畑違い
593nobodyさん:2007/10/07(日) 19:58:59 ID:d3go+S9r
594nobodyさん:2007/10/07(日) 20:26:54 ID:???
>>590
Apacheの設定で自分のPCの中が丸見えの状態にならないようにすれば大丈夫です。
基本的にはApacheの問題なのでApacheのスレで聞きましょう。
あと手っ取り早い?方法として、ルーターで80ポート塞いで外部アクセスを遮断する手もあるよ。
ローカルでテストできればいいだけならそれもアリ。
595nobodyさん:2007/10/07(日) 20:31:14 ID:???
>>583
学習資料で、本文中のサンプルコードを記載するならともかく、
下のコメントまで記載する必要はないんじゃない?
で、サンプルには固有の著作権とかはないでしょ。
学習資料に「php.netのマニュアルからの転載である」と明記しときゃ問題ないかと。
596nobodyさん:2007/10/07(日) 20:43:30 ID:???
勉強の為のサーバなら閉じた環境で使えばいいだけの話でないの?
外部に向けて公開さえしなけりゃ何の問題もない
右も左もわからない奴が外部にポート開くこと自体無謀というか馬鹿
597nobodyさん:2007/10/07(日) 20:47:48 ID:???
>>595
俺俺判断いくない

Website Copyright
http://www.php.net/copyright.php
598nobodyさん:2007/10/07(日) 20:51:18 ID:???
>>596
右も左も分からないやつだから
ポートが開いてるかどうかすら分からないんじゃ
599nobodyさん:2007/10/07(日) 20:57:25 ID:Dz4kk+z7
583です
レスありがとうございます

>>597の文章読んでみましたがこういうことでOKでしょうか?
・このサイトの全てはこっち(php.net)に著作権があるよ
・ライセンスならOKですよ(?)
・三番目がよくわからない・・・
600nobodyさん:2007/10/07(日) 21:02:23 ID:???
人の著作物コピーしたいんだろ?気合入れて自力で読め
601nobodyさん:2007/10/07(日) 21:13:20 ID:???
どういう立場の人か知らんけど、仮に人様にモノを教える立場の人なら
量的な労力が増すにしてもサンプルくらい自力で書いて欲しいとは思う
そのくらいの力量(技術)は備わってるだろうし
602nobodyさん:2007/10/07(日) 21:22:10 ID:???
初心者講座みたいなサイト作りたいアフィ厨な気もする
603nobodyさん:2007/10/07(日) 21:31:59 ID:???
>>602
リスペクトする気はさらさら無いけど敬意を払って丸々コピーってか?
604nobodyさん:2007/10/07(日) 21:32:35 ID:Dz4kk+z7
再び583です

コードなら自力で書けるのですが
たとえばregister_globalsの動作を問題として出したときに
抜けてる知識がないかマニュアルページを見に行きますよね?
そうしたときに自分が知らなかった情報を引用していいのかってことです

ex)問題:register_globalsがONの時に気をつけるべき点を答えなさい

自分の知らなかったことを選択肢として追加→使用する前に変数を初期化すべきである
605nobodyさん:2007/10/07(日) 21:42:52 ID:???
てか公式のマニュアルを丸々転載してるサイトは山程あるじゃん、あれはグレーか?
606nobodyさん:2007/10/07(日) 22:00:26 ID:???
>>604
だからさ、その引用の良し悪しの判断できる唯一はPHP Groupじゃないの?
聞くところが無いって…そこに問い合わせるしかないんじゃないの
webmasterが適切かどうかわからんけど
607nobodyさん:2007/10/07(日) 22:05:59 ID:???
>>605
転載の経緯を知る由も無いのでジャッジはできん
608nobodyさん:2007/10/07(日) 23:35:54 ID:Dz4kk+z7
>>606
とりあえず先ほどメールだしてみました

返信が来ましたらここにまた結果を報告しようと思います
どうもお騒がせしました 皆様ありがとうございます
609nobodyさん:2007/10/07(日) 23:51:21 ID:???
 引数で与えた内容をキーにDBを検索した結果を返す関数を作成しようと
考えています。
 この時、条件にあうデータが1件のみであればそのまま結果を返し、
複数存在する場合には別窓に一覧を表示して選んでもらったものを
戻り値として返すような処理をしたいのです。

 1件のみの場合の処理の見当はつくものの、複数ある場合の選択結果を
どうやって受け取ればいいのかがわかりません。

 どういった方法がありますでしょうか?

610nobodyさん:2007/10/07(日) 23:58:16 ID:???
>>609
> 複数存在する場合には別窓に一覧を表示
検索結果によって別窓を出すか出さないか切り替えるってのは
JavaScript使わないと無理なんじゃないかな…
611nobodyさん:2007/10/08(月) 00:02:52 ID:???
>>609
漠然としすぎ。
とりあえずinput name="value[]"
612nobodyさん:2007/10/08(月) 00:11:37 ID:???
>>611
複数のうち1件選択してもらうだけだから
inputを配列にする必要はないんじゃね?
検索キーをキー+ユニークIDの組み合わせで受け取るか
キー+n件目という組み合わせで受け取ればいいと思う。
613nobodyさん:2007/10/08(月) 00:12:13 ID:???
>>609
とりあえずIDは出そうな。
>>1読んだ?
614nobodyさん:2007/10/08(月) 00:18:02 ID:???
じゃphpの話じゃないじゃん
615nobodyさん:2007/10/08(月) 00:24:52 ID:???
>>609
>>別窓に一覧を表示して選んでもらったものを戻り値として返すような処理
ここが今一判らないんだがWikipediaみたいな検索結果にしたいという事かな?
「PHP」で検索だとPHP言語、PHP研究所、PHSの旧名称…という曖昧さ回避のためのページ(=一覧)が表示、
「PHP: Hypertext Preprocessor」で検索すると(結果が1件しかないから)PHP言語のページに飛ぶ、みたいな。

ヨドバシやAmazonだと結果が1件でもリスト表示と同じにしてるからそっちの方が簡単と思うけどそれだとヤなのね?
616609:2007/10/08(月) 01:01:20 ID:nnv6gR3z
>>610-615
 さっそくありがとうございます。

 確かに内容が漠然としてました・・・

 形としては、入力フォームに入力されたコードを翻訳した結果を
返す形のものなのですが、1つのコードに複数の内容が割り当て
られているものがある場合には、選択窓で選択してもらえるように、
という感じになります。

 フォームは固定でボタンが押されたら処理、という感じになるので
Wikipediaのように窓の内容自体の置き換えは難しいかな、と思います。
 参照する場所が1箇所だけならJavascriptを限定で埋め込んでも
いいのかも知れませんが、別の項目に対する同様の処理を1つの関数で
まとめられないかと思いまして。

 たしかに別窓を出して、という時点でJavascriptの方になってきそう
なのでPHPの話題じゃ無いかもしれません。

 流れとしては、
onclickで更新のJavascript呼び出し
617nobodyさん:2007/10/08(月) 01:05:22 ID:???
スレ違い。
618609:2007/10/08(月) 01:05:37 ID:nnv6gR3z
途中で送ってしまいました。

流れとしては、
  onclickで更新のJavascript呼び出し
  scriptから値を添えて検索用phpの呼び出し
  検索用php内で、検索対象に応じて検索処理関数呼び出し
  検索処理関数内でDB検索と検索結果を返す (←この処理)
  その結果を親フォームのJavascriptで表示
という流れです。
619nobodyさん:2007/10/08(月) 01:08:14 ID:???
>>(←この処理)
んで何を答えろというのだろう。
関係ない話多すぎ。はしょれよ。
620609:2007/10/08(月) 01:19:36 ID:nnv6gR3z
わかりにくくてすみません。

スレ違いのようですので、もう一度調べなおします。
ありがとうございました。
621nobodyさん:2007/10/08(月) 01:38:19 ID:???
スレチもだけど最近別窓って開く?
ポップアップ禁止+勝手に別窓開かせないアドオン入れてるから最近全然見かけない
(というか気付かないだけかもだが)
622nobodyさん:2007/10/08(月) 01:40:32 ID:???
その場合は<FRAME>を使うんじゃない?
623621:2007/10/08(月) 01:44:02 ID:???
>>622
ナルホド。そういう意味だったのね
624nobodyさん:2007/10/08(月) 01:48:04 ID:???
>>621
ポップアップ禁止でもユーザのクリックで1枚だけ開く分には普通に開けるし。
まぁでも、検索結果の候補出すのに別窓ってのはものすごくうざいと思う。
625nobodyさん:2007/10/08(月) 01:50:21 ID:???
>>616
とりあえず複数候補から再検索の処理と別窓は話を分けろ。
前者は全然難しくないが後者が入った途端にアクロバットな処理になる。
626nobodyさん:2007/10/08(月) 01:53:52 ID:???
アクロバットな処理カコイイ
627nobodyさん:2007/10/08(月) 01:59:11 ID:???
mainフレームとsideフレームがあるとして、

a) ユーザが入力した検索結果が1つならmainフレームにその内容を表示、
b) 検索結果が複数ならsideフレームにその一覧を表示する。
c) 複数時はユーザがsideの一覧から1つをクリックするとその内容がmainに表示される(もち再検索)、

って事じゃないの?
それで>>609がしたいのはaとbのフレーム振り分け処理関数?

オレ、トンチンカン?
628nobodyさん:2007/10/08(月) 02:07:08 ID:???
うん、トンチンカン
629nobodyさん:2007/10/08(月) 02:14:53 ID:???
>>627
フレームか別窓かの違いはあるけど概ねそんな感じなのでは。
どっちにしろ検索結果で出力先を切り替えなんてPHPの仕事じゃないけど。
630nobodyさん:2007/10/08(月) 02:25:14 ID:???
>>627
いやいや、そんな感じの処理でいいんでしょ。

で、質問者はどんな方法がありますかと問いを投げてるが
単刀直入にやり方わかんねえから教えれ、と。

要の部分を考えなきゃなんねえのに放棄して丸投げかよ、と。
631nobodyさん:2007/10/08(月) 02:38:17 ID:???
>>590
ウィルスチェックしてないPCの方が丸裸にされる
可能性高いと思う
たいていの場合、Internetからの
アクセスはルータが阻止してくれるから、ローカルネット上で
サーバ立ち上げるだけなら、さして問題ではない
(グローバルネットからローカルネット上のサーバを
見えるようにするには、ルータの設定を変更しなければならない)
不安だったら、Etherの線抜いとけ←これ最強
632nobodyさん:2007/10/08(月) 03:51:34 ID:???
>>631
ルーター使ってるかどうかも怪しいもんだ。
PCにモデム直のADSLやFTTHなユーザも少なくないぞ。

> 不安だったら、Etherの線抜いとけ←これ最強
この意見は正しい。
633nobodyさん:2007/10/08(月) 03:53:08 ID:???
>>630
609的にはパラメータの受け渡し方法を聞きたいみたいなんだが
そもそも別窓の仕組みをどうやって実現するのか示してないから
こっちも回答のしようがないんだよな。
簡単な質問を餌に、難しい質問までいっぺんに聞こうとしてるように見える。
634nobodyさん:2007/10/08(月) 03:55:52 ID:???
最近のスパーハカーは空気感染ならぬ空気侵入するらしいゾ
635nobodyさん:2007/10/08(月) 04:06:27 ID:???
別窓/別フレームってonload時にjavascriptで操作できない?
そこに一覧表示のURL渡す(再検索になるけど)か、JSのソースに一覧情報埋めてそれを別窓に出力させるとか?
素人考えですが。
636nobodyさん:2007/10/08(月) 04:08:07 ID:???
ソーシャルハッキングでもするのか?
637nobodyさん:2007/10/08(月) 04:10:12 ID:???
>>635
だからJavaScriptの処理はスレ違いだっつの。
まずそれを決めてからここで質問せえ。
638635:2007/10/08(月) 04:14:27 ID:???
>>637
俺は質問者(>>609)ではないんだが。
単に>>633の別窓の仕組みをどう実現するかを考えただけ
639nobodyさん:2007/10/08(月) 05:50:32 ID:???
スレ違い 答えるやつも スレ違い
640nobodyさん:2007/10/08(月) 06:03:44 ID:???
>>635
別フレームは問題ないと思うけど、別窓をonloadで開こうとすると
ポップアップブロックに引っかかるよ。
641nobodyさん:2007/10/08(月) 06:04:04 ID:???
>>609
JavaScript CrossLiblariesでググれぼけ
642nobodyさん:2007/10/08(月) 06:27:28 ID:???
>>641
ttp://www.google.com/search?num=100&lr=lang_ja&ie=Shift_JIS&q=JavaScript%20CrossLiblaries
> JavaScript CrossLiblaries に一致するページは見つかりませんでした。
643nobodyさん:2007/10/08(月) 11:01:06 ID:Cu10uF3b
>>641-642
ワロタwwww
644nobodyさん:2007/10/08(月) 11:45:58 ID:???
PHPを一通り修得しアプリも組めるようになって飽きた、
次は何を覚えようかなー
645nobodyさん:2007/10/08(月) 11:48:17 ID:???
FlashかAjax(JavaScript)がトレンドだなw
646nobodyさん:2007/10/08(月) 12:05:17 ID:???
ゴメン、それ修得済みでつ
647nobodyさん:2007/10/08(月) 12:26:59 ID:???
言語ごとの相関図があるから、相乗効果が高いものを選ぶといいよ。
http://pukapuka.sakura.ne.jp/cgi-bin/upload/puka/img-box/1191813670818.jpg
648nobodyさん:2007/10/08(月) 12:32:44 ID:???
初めてでも釣れたよ、と言いたげなおばさん写真に絶望した。
649nobodyさん:2007/10/08(月) 12:38:15 ID:???
>>644-646
じゃあ、C++
650nobodyさん:2007/10/08(月) 12:42:53 ID:???
エスペラント語がいいよ!
651nobodyさん:2007/10/08(月) 12:47:56 ID:???
  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;; 
  ヾ;;;ハ    ノ       .::!lリ;;r゙   PHPを一通り修得しアプリも組めるようになって飽きた
   `Z;i   〈.,_..,.      ノ;;;;;;;;>  
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f     そんなふうに考えていた時期が
   〜''戈ヽ   `二´    r'´:::. `!     俺にもありました


652nobodyさん:2007/10/08(月) 13:42:25 ID:9TeQf+fQ
お手数をお掛けしますが、相談に乗ってください。

出席管理を行うスクリプトを書いていて、複数の同一型フォーム(name="id[]")から出席者IDをPOSTで送っています。
その際、与えられたIDの情報をSQLから取得し、登録されていないIDが与えられている場合警告を出そうと考えています。
このとき、フォームに入力された順に内容を表示する必要があります。

ここで、質問なのですが、SQLから返ってくる出席者の情報 (ID, 名前, 等) の配列を持った配列 (結果的に2次元配列になります) を、 $_POST["id"][] の順でソートし、登録されていないIDを割り出そうとしています。
調べたところ、 usort で自作の関数を与えれば多次元配列のソートを行うことができるようですが、ソート対象内の比較しかできないようです。
そうではなく、外部の変数(出席者の情報)の並び方を尺度にソートするにはどのようにすればよいですか?

また、代替案がありましたらお教えください。
よろしくお願いします。
653nobodyさん:2007/10/08(月) 14:03:35 ID:MwfYaHDM
SQLからのデータもidをキーにした配列に格納
654nobodyさん:2007/10/08(月) 14:11:49 ID:???
655nobodyさん:2007/10/08(月) 14:12:33 ID:???
>>652
まえにもそっくりな質問をみたおぼえが・・・
656nobodyさん:2007/10/08(月) 14:32:28 ID:???
>>652
出席管理っつうぐらいだから学校関係者か?
未登録IDを検出するんなら select id from テーブル名 where id = 入力id;
この問い合わせで済む

やろうとしているのは何? select * from テーブル名; で登録者のデータ全件
引っ張ってきて、フォームから入力されたIDの配列と比較して未登録IDを導く
ようなそういうこと?

俺バカだから理解できねえよ
657nobodyさん:2007/10/08(月) 14:50:40 ID:???
出席管理云々は直接的には関係ないだろ?
8行目だけで十分じゃないか
658nobodyさん:2007/10/08(月) 15:07:07 ID:???
>>652
$_POST["id"]配列を使ったループで表示処理をすればいいんじゃないの?

$result にSQL結果のIDリストが入ってるとして
foreach($_POST["id"] as $id) {
 if(in_array($id, $result)) {
  echo "あった";
 } else {
  echo "なかった";
 }
}
みたいな。
$resultまでソートする必要なかろう。
659nobodyさん:2007/10/08(月) 15:17:08 ID:???
>>652
>その際、与えられたIDの情報をSQLから取得し、登録されていないIDが与えられている場合警告を出そうと考えています。
>このとき、フォームに入力された順に内容を表示する必要があります。

この部分は自分なりに作ってるのか?
丸投げで代替案とか聞いてんじゃねえぞ
660nobodyさん:2007/10/08(月) 15:17:16 ID:???
unset($_POST[$id])で間引いていって残ったIDがあれば「ふざけんなコノヤロー」って
言ったらよろしw
661nobodyさん:2007/10/08(月) 15:27:23 ID:???
>>656
俺だったら入力IDの数だけSQL叩いたりしないで
id in (xxxx,xxxxx,xxxxx....)
で一発で引いちゃうな。その方が速い。
662652:2007/10/08(月) 15:30:03 ID:9TeQf+fQ
>>652です。
みなさんありがとうございます。
文章が読みづらく、皆さんにご迷惑をお掛けして申し訳ないです。

>>656 さん
学校関係者ではありません。
目的は、SELECT id FROM テーブル名 WHERE ID='フォームからの入力 1' OR ID='フォームからの入力2' ......
でフォームから入力されたIDを持つ登録者のデータだけを抜き、
フォームから入力された配列と比較して未登録IDを導くことです。

>>658,660 さん
言われてみて、確かにその通りだと猛省しました。
ソートせずに$_POSTから間引けばよかったのですねorz
SQLからのレスポンスをいかにハンドルするかで頭がいっぱいでしたorz

>>659 さん
他の部分は機能する状態で未登録IDの処理だけ放置していました。

皆さんご多忙の中ありがとうございました。
663nobodyさん:2007/10/08(月) 16:35:27 ID:???
このスレには暇人しかおりません
664nobodyさん:2007/10/08(月) 21:37:08 ID:???
その通りでございます
665nobodyさん:2007/10/08(月) 21:42:03 ID:???
書いた時点でお前も仲間入りだな
666nobodyさん:2007/10/08(月) 22:01:53 ID:aQD+Fx51
JavascriptでXMLRPCを叩く
シンプルなサンプルってねーかしら?
667nobodyさん:2007/10/08(月) 22:35:22 ID:???
あるよ
668666:2007/10/08(月) 22:54:20 ID:???
>>667
ありがとうございます
669nobodyさん:2007/10/08(月) 22:54:48 ID:aQD+Fx51
質問です
JavascriptでXMLRPCを叩く
シンプルなサンプルが載ってるサイトのURLを
いくつかくださらねーかしら?
670nobodyさん:2007/10/08(月) 22:55:27 ID:???
いいよ
671669:2007/10/08(月) 23:30:01 ID:???
すいません、ここPHPスレでしたね
間違えて書き込んでしまいました

>>670
ありがとう
672nobodyさん:2007/10/09(火) 00:25:17 ID:7LOIBqtZ
583です
こないだここで質問させていただいたPHPマニュアルの著作の件に関して
返信が来ましたので抜粋します

feel free to use the examples in the manual in any way you like.
The only ethical concerns is when you reprint an entire manual chapter
with slight changes without giving credit to php.net.
とのことです

どうもありがとうございました
673nobodyさん:2007/10/09(火) 03:01:48 ID:???
「PHPを修得した」とか、聞いてて恥ずかしくなってくる
674nobodyさん:2007/10/09(火) 03:09:34 ID:???
PHPを修得した俺様がやってきましたよ
675nobodyさん:2007/10/09(火) 08:57:39 ID:???
PHPは俺の物
676nobodyさん:2007/10/09(火) 09:04:15 ID:???
言うだけならタダだし周りが文句言う権利もないな

ま、使い物になるかは別だが
677nobodyさん:2007/10/09(火) 09:13:08 ID:1fe4dxva
phpからC言語で作ったモジュールを呼び出したいのですが、
system関数以外の関数を使って呼び出すことはできますか?

ある有名なレンタルサーバーを使っているのですが、
ソースが外部に流出していまして、困っています。
レンタルサーバーなのでsystem関数も使えません。

宜しくお願いします。
678nobodyさん:2007/10/09(火) 09:15:21 ID:???
>>677
自分でPECLモジュール作っちゃうのが1つの手だが
レン鯖だとPECLの組み込みもできないんじゃなかろうか。
679nobodyさん:2007/10/09(火) 10:30:01 ID:???
CGIモードでPHP動かせばいいんじゃないの
680nobodyさん:2007/10/09(火) 10:55:51 ID:???
外部流出ってどういうルートから?
ドキュメントルート下に置いてるのがhttpd経由で漏れてるのか、
ドキュメントルートより↑に置いてるのが共有ユーザに漏れてるのか?
で対処方法は色々じゃね?
てかそのレンサバにゴラァしなよ。
681nobodyさん:2007/10/09(火) 14:18:50 ID:Horj9f1y
foreach ((array)@$rss->items as $item) {
$title = $item[title];
echo "$title\n";

の実行結果

title title title title



タイトル一覧:title title title title

のように表示させたいのですが

echo "$title\n";



echo "タイトル一覧:\n";
echo "$title\n";

だと

タイトル一覧:$title タイトル一覧:$title タイトル一覧:$title タイトル一覧:$title

になっちゃいますよね

おねがいします
682nobodyさん:2007/10/09(火) 14:20:26 ID:Horj9f1y
訂正

echo "タイトル一覧:$title\n";



echo "タイトル一覧:\n";
echo "$title\n";

だと
683nobodyさん:2007/10/09(火) 14:24:02 ID:???
>>682
$tmp .= "$title\n";

ループ終了

echo "タイトル一覧 {$tmp}";
684nobodyさん:2007/10/09(火) 14:49:14 ID:Horj9f1y
>>683
ヒントありがとうございます。
実際は取得してるのが$titleだけじゃないので出来そうで出来ないです
ちょっとGOOGLEで検索してきます
685nobodyさん:2007/10/09(火) 15:16:10 ID:???
PHPじゃなくhttpの質問になるかもしれませんが、

POSTでフォームを送信した後、ブラウザの戻るボタンで戻ると、

 [ 警告:ページの有効期限切れ ]

と、表示されますが、これを表示させずにページを表示させる方法はありませんか?
この場合、リロードするとページが表示されますが、
状態としては、警告を出さすにリロードさせる方法になると思います。
686nobodyさん:2007/10/09(火) 15:44:36 ID:???
>>684
foreachの前にタイトル一覧という文字列をechoで表示すればいい話のような…。
そんなに複雑な処理でもしてるのかな。
687nobodyさん:2007/10/09(火) 16:37:20 ID:???
>>685
ありますん。
仮にあるとしてもブラウザ側の対応によるものだからJSあたりになるんじゃね?
688nobodyさん:2007/10/09(火) 16:50:04 ID:???
>これを表示させずにページを表示させる方法はありませんか?
こっちのほうがよっぽど問題あるんじゃね

もっとしっかり設計汁!
689nobodyさん:2007/10/09(火) 17:25:57 ID:???
>>685
POSTした先のPHPでデータ処理だけさせて
ロケーションさせてやれば
それっぽい感じの事できるよ
690nobodyさん:2007/10/09(火) 18:32:28 ID:2B20Voue
質問です
1)イベントの管理ツールを作ろうと思っています。(登録システム)
2)各イベントへの参加者数は不定で、1人の時も10人の時もあります。
3)参加者はそれぞれIDが振られており、それを参照することで詳細情報を確認できます
  ※IDのないユーザもいる  その場合はユーザ固有のURLを別に登録できるようにしたい

上記のような条件の場合、どういうプログラムを組めばいいでしょう?
参加者数が上限が決まってたら、DB的に
sankasha_1〜sankasha_10 sankashaURL_1〜sankashaURL_10 とフィールドを物理的に
用意すればいいのかと思いましたが、そうではないのでPHPのプログラム側で
工夫しなければならないと思います。が、思いつきません。
どうしたらいいんでしょう? アイディアもらえたら嬉しいです。お願いします。
691nobodyさん:2007/10/09(火) 18:41:37 ID:???
イベントのテーブル
参加者のテーブル

運用テーブル

として
運用に登録する際IDがない人の場合は登録する際にURL+参加者FKを0に
って感じにするかな
692nobodyさん:2007/10/09(火) 18:49:21 ID:???
テーブルを1つにってのならlongTextにでもして
sankasyaフィールドに配列を文字列にして特攻
693nobodyさん:2007/10/09(火) 19:38:19 ID:???
serialize()で万事解決
694nobodyさん:2007/10/09(火) 20:07:07 ID:???
・データ構造疎かにして処理でなんとかしちゃおう
もう破綻は決まったな
695nobodyさん:2007/10/09(火) 20:08:35 ID:???
それは設定条件による。
696nobodyさん:2007/10/09(火) 20:28:16 ID:???
質問している時点で既に"行き詰ってる"状態<-条件もクソもねえや
697nobodyさん:2007/10/09(火) 20:29:07 ID:???
まだその段階に至ってないのなら別に構わないのでは?
改善したいと思うならRDB勉強すればいい
698nobodyさん:2007/10/09(火) 20:45:21 ID:???
>>674
お引取り願います
699nobodyさん:2007/10/09(火) 20:55:16 ID:???
勉強するならRelational Data Modelな
700nobodyさん:2007/10/09(火) 20:56:42 ID:???
せっかくだからいろいろ聞けば良かったのに。<PHP修得者
701690:2007/10/09(火) 20:58:29 ID:???
皆さんいろんな意見ありがとうございます。
今まで住所録くらいしか作ったことないので、皆さんのアドバイス見てると
こりゃ大変だなと改めて感じています。
一つ思ったんですが、@基本情報(開催日・開催地など「固定のもの」) と
A参加者情報(数が定まらないもの) を同じテーブルに入れると一気に難度が上がるんですね
なので、複数のテーブルに分けることにしました。

ご意見で言うと、>>691さんのやり方だと思うんですが、そのアドバイスの中である
「運用テーブル」というのが意味がわかりません。どういう役割のものでしょうか?
自分の中では@とAの二種類しか存在しないようなイメージだったので。。

話がPHPの話題からだいぶズレているとは思いますが、申し訳ないですが
教えてください。「(>>691)運用に登録する際IDがない人の場合は登録する際にURL+参加者FK」の
「参加者FK」とは何かもわからないのでお願いします。ほんとにすみません
702nobodyさん:2007/10/09(火) 21:01:41 ID:???
>>699
まずDBの基礎から学ぼうよ。そんなんで作っても無理だよ。
703nobodyさん:2007/10/09(火) 21:02:13 ID:???
ごめん間違えた上は>>701
704nobodyさん:2007/10/09(火) 21:14:33 ID:???
無理しない方がいいぞ。
仕事大切にしろ。
705nobodyさん:2007/10/09(火) 21:15:26 ID:???
>>704
すんません。誤爆です。
706nobodyさん:2007/10/09(火) 21:36:03 ID:???
>>687
以前、どこかのWebページで、ヘッダーに何かすることでできたとおもうんですが

>>688
いや、設計の問題ではないんですけど・・・
(ブラウザの戻るボタンを無効にできますか?)

>>689
問題は、ブラウザの戻るボタンで戻られた場合の話です。
707nobodyさん:2007/10/09(火) 21:40:00 ID:???
誤爆したらどこの誤爆か貼るのが礼儀だ
708690:2007/10/09(火) 21:44:47 ID:???
>>702
そういわずにお願いします
勉強は勉強でしますんで…
709nobodyさん:2007/10/09(火) 21:54:54 ID:???
>>701
イベント情報、会員情報
を元に実際に運用するテーブルの事。

イベント情報テーブルに、PK(プライマリーキー)、イベント名、開催時期、終了時期
会員情報テーブルに PK、ID,PASS,その他情報
とあった場合

会員が参加登録をした時に運用テーブルに
イベント情報、会員情報それぞれのFK(フォーリンキー)を入れる。
って感じ。

PK,FKの意味についてはカッコ書きのをググればでるよ
710nobodyさん:2007/10/09(火) 22:03:44 ID:???
運用にPK,イベントFK、会員FK、URL
とフィールドをつくって
会員FKがある条件の時にURLを表示ってやる。

ただ、会員FKの0とかでダミーを事前につくっておく必要がある事に今気づいた
711690:2007/10/09(火) 22:04:35 ID:???
>>709
ありがとうございます
まだ理解できない部分は専用の板で訊くことにします
凄く勉強になりました、ありがとうございました!
712689:2007/10/09(火) 22:40:40 ID:???
>>706
tmp.php
<?php
session_start();
if (isset($_SESSION['test'])) {
        echo $_SESSION['test'];
}
?>
<form action="loc.php" method="POST">
<input type="submit" value="test">
</form>

loc.php
<?php
header('Location: tmp2.php');

tmp2.php
<?php
session_start();
$_SESSION['test'] = 'aiueo';
?>
post ok


こんな感じでやってみれ
多分期待してる動きになるはず
あと、戻るボタン無効化はJSでhisotryをいじるぐらいじゃ?

それ以外の方法あったら俺も知りたい
713nobodyさん:2007/10/09(火) 22:57:50 ID:???
>>712
お?!ソースまで!手間かけさせてすいません。
ちょっくら試してみます!
714nobodyさん:2007/10/09(火) 23:43:16 ID:G9B1/Oic
質問です。よく、フリーメールのサービスで
メール一覧があって、それぞれのメールのアタマのチェックボックスにチェックを入れて
【チェックしたメールを削除する】 ってボタンを押したら削除されたりしますが、
アレってどういう仕組みになってるんでしょう。
各メールにそれぞれ削除ボタンがあるのなら自分でも作れるんですが、一括削除の
仕組みがわかりません
暇なかた、どなたか教えてください よろしくお願いします
715nobodyさん:2007/10/09(火) 23:48:00 ID:???
>>714
まず↓嫁
http://www.tagindex.com/html_tag/form/input_checkbox.html

あとはPOSTされたデータ読めば分かるだろ
716nobodyさん:2007/10/09(火) 23:53:23 ID:???
>>714
<input type="checkbox" name="example[]" value="1">サンプル1
<input type="checkbox" name="example[]" value="2">サンプル2
<input type="checkbox" name="example[]" value="3">サンプル3
<input type="checkbox" name="example[]" value="4">サンプル4

こんな感じでname属性に[]をつけると
$_POST['example']の中に選択したやつが配列で入ってくる
717nobodyさん:2007/10/09(火) 23:55:16 ID:???
勝手にURLデコードするのがうっとうしいよなPHP
718nobodyさん:2007/10/10(水) 01:04:56 ID:???
>>715‐716
出来ました。ただ、登録したデータを一覧表示すると、 Array と表示します。
丸ごとDBに登録じゃまずいですよね  実用の時は、

質問2 休日の過ごし方は?(複数選択可)
<br>
 <input type="checkbox" name="q2" value="映画鑑賞">映画鑑賞
 <input type="checkbox" name="q2" value="ドライブ">ドライブ
 <input type="checkbox" name="q2" value="買い物">買い物

上記は趣味を登録するフォームなんですが、こういうのって
「映画鑑賞」「ドライブ」「買い物」の部分を生成される配列から抽出して、
「,」で連結したあとに、dbに送信してるんですか?
719nobodyさん:2007/10/10(水) 01:36:01 ID:???
>>718
そんなもん、DBのテーブル設計による。

1ユーザ1レコードで格納するんならカンマで連結して1カラムに押し込み〜
なんてなるんだろうが、それだと検索しにくいし後々加工もしにくいから
「ユーザID,属性」みたいなテーブルにして、選択した数の分だけ
レコードを追加してやった方がいいんじゃないか?
その場合、連結なんてしないで数の分だけループしてinsert。
720nobodyさん:2007/10/10(水) 01:37:06 ID:???
>>718
っていうか、なんで削除の話が登録の話になってんの?
721nobodyさん:2007/10/10(水) 01:53:52 ID:???
>>719-720
どうもです。登録の方が削除より話がわかりやすいような気がして
登録の方で聞いてしまいました。 基本的な部分は同じだろう、と (すみません)

>その場合、連結なんてしないで数の分だけループしてinsert。
というのは
userName|shumi
-------------------
yamada|映画鑑賞
yamada|ドライブ

って形になるんでしょうか? 確かにこっちのほうがいいですねー
722nobodyさん:2007/10/10(水) 02:09:07 ID:???
>>685
session_cache_limiter('private_no_expire')
でOK
723nobodyさん:2007/10/10(水) 02:09:52 ID:???
>>721
>$_POST['example']の中に選択したやつが配列で入ってくる
                                                    ~~~~~~~~~~~~~~~~
って書いてあるんだからそれをそのまま表示すると型が表示されるのは普通
724nobodyさん:2007/10/10(水) 02:49:28 ID:???
search.php?keyword=©
だと、htmlには©じゃなくてcと表示されてしまいます。
GETで©を取得してそのまま©と表示させるにはどうしたらいいでしょうか?
文字コードはUTF-8です。よろしくお願いします。
725nobodyさん:2007/10/10(水) 02:54:31 ID:???
>>724
ID出して
726724:2007/10/10(水) 03:00:00 ID:P3ev0KiI
あ、すみません。
sageてました。
727nobodyさん:2007/10/10(水) 03:04:42 ID:tzNR6m8r
© はあかんのか
728nobodyさん:2007/10/10(水) 03:05:47 ID:tzNR6m8r
ところで、ここの人ってみんなID消してるけどなにか犯罪でもしてる人ばかりなの?
みんな???で気持ち悪いんだけど
729nobodyさん:2007/10/10(水) 03:10:52 ID:???
>>728
2ch初心者乙
730nobodyさん:2007/10/10(水) 03:25:19 ID:???
>>722
それです!ありがとうございました!!あんたスゴイ!
731nobodyさん:2007/10/10(水) 03:28:56 ID:???
たまに詳しい人が現れるね。うれしい。
732nobodyさん:2007/10/10(水) 04:12:32 ID:???
>>721
正規化について知っておくべし。メリットとデメリットも。
733nobodyさん:2007/10/10(水) 04:55:47 ID:???
DBなんてFWに勝手にやらせればおk
734nobodyさん:2007/10/10(水) 05:36:39 ID:???
>>733
お前の態度気に入らねから、教えねぇ。
735733:2007/10/10(水) 05:40:36 ID:???
別に教えてなくて結構です俺質問者じゃねえしw
まじでDBなんて覚える必要ないよ
FWが勝手にやってくれるからFWの使い方覚えたほうが数倍いい
736nobodyさん:2007/10/10(水) 06:04:03 ID:???
まぁ、小規模なシステムはDBをどんな作り方しても大した問題ないし。
737nobodyさん:2007/10/10(水) 06:48:53 ID:???
>>735
アマ乙。
FWの採用しているO/Rマッパが対応してない
クエリ投げる必要も結構ある
738nobodyさん:2007/10/10(水) 06:49:33 ID:???
大規模なもんだとDB設計する人が設計するから
PGってあんま関係ないんだよな・・・・
小規模なもんはてきとーにDB設計しても問題ないし・・・・

>DBなんてFWに勝手にやらせればおk
って思ってる時点でしれてるが・・・
739nobodyさん:2007/10/10(水) 07:04:51 ID:???
むしろデータ構造を的確に決めれればシステムは8割方できたようなもんだろ・・・
740nobodyさん:2007/10/10(水) 07:24:15 ID:???
八割は言いすぎ。
そのデータ構造にデータを入れなきゃいけないのだから。
741nobodyさん:2007/10/10(水) 07:41:39 ID:???
データ構造さえ決まっていれば、以降のロジックもそれに合わせて
ほぼ迷うことなく決めることができる、という意味では確かに8割完成かな。
742nobodyさん:2007/10/10(水) 07:43:17 ID:???
データ入れるのなんて中学生でもできるだろ
743nobodyさん:2007/10/10(水) 07:51:22 ID:???
俺、(DBの仕事をどうやって firewall にさせるんだろ…?)
小一時間沈黙…(!! frameworkか…)

orz
744nobodyさん:2007/10/10(水) 08:25:34 ID:???
FWはDBの設計は自分でやらないといけないからな
745nobodyさん:2007/10/10(水) 09:18:50 ID:P3ev0KiI
データベースに保存するとき

1.POSTでkeywordを取得
$keyword = htmlspecialchars($_POST['keyword'],ENT_QUOTES,'UTF-8');

2.$keywordをDBに保存

これだけで大丈夫でしょうか?
と言うより普通こうですか?
746nobodyさん:2007/10/10(水) 09:26:09 ID:???
>>745
ソースのあちらこちらに、1みたいなコードがあったら、汚すぎる。
FWでやれば全て解決できるよ。
747nobodyさん:2007/10/10(水) 09:27:28 ID:???
>>745
普通、DBに保存するデータにhtmlspecialchars()なんてかけない。
748nobodyさん:2007/10/10(水) 09:28:28 ID:???
>>747
出力する度にhtmlspecialcharsするのが面倒だからかけて入れてますw
749nobodyさん:2007/10/10(水) 09:30:05 ID:???
>>748
DBの入出力の両方にhtmlspecialcharsするのが一番安全だけど。
750nobodyさん:2007/10/10(水) 09:30:20 ID:???
きみんちのデータは画面表示以外には全く使わんのか
751nobodyさん:2007/10/10(水) 09:32:20 ID:???
そらケースバイケースだろ、この人が htmlspecialcharsを使っている時点でHTMLに
出力する事を前提としていると考えるのが妥当。
752nobodyさん:2007/10/10(水) 09:33:21 ID:???
DBへは生のデータを入れるべき
753nobodyさん:2007/10/10(水) 09:33:49 ID:???
htmlspecialcharsの本質を理解しているのかと疑いたくなるレスだなぁ。
754nobodyさん:2007/10/10(水) 09:38:29 ID:OYZiPU1d
>>752
横からすみません。私もDBへ生データを入れていますが、
クライアントから送信されたデータを何もせずに入れていることに少し不安があります。

入力値が半角英数であれば、半角英数チェックを掛けてから入れますが、
日本語も含まれるような場合だと、そのまま入れています。
何かチェックをかけるべきでしょうか?
システム予約語的なマズイ文字があると前に聞いたことがあるのですが・・・
755nobodyさん:2007/10/10(水) 09:38:37 ID:???
>>752
'や"はどうやって生で入れるの?
756nobodyさん:2007/10/10(水) 09:44:17 ID:???
DBのエスケープ入出力関係は一昔前に万能クラスを作ってから気にしてないな、
今は抽象化レイヤがトレンド?
757nobodyさん:2007/10/10(水) 09:48:50 ID:???
データ量の増加よりもリスク回避の方が優先だと思うし何より出力する度にエスケープする
というのが効率良く思えないんだけどな。効率など考えない企業向けなら何処で何をしようが
関係ないだろうけどw。
758nobodyさん:2007/10/10(水) 09:51:28 ID:???
DBに入れる以前の問題として、エスケープしないといけないようなものを
画面で入力可能にしているのが諸悪の根源だよ。
759nobodyさん:2007/10/10(水) 09:53:09 ID:???
>>755
そういうのはエスケープして当然
それ以外は生で入れるべき
760nobodyさん:2007/10/10(水) 09:54:21 ID:???
>>758
バカ?
761nobodyさん:2007/10/10(水) 09:54:56 ID:???
生発言もわからん事はないけどそのぬるさが情報流出に繋がったケースも多いい。
完璧だと思い込んでいる奴が墓穴をほるケースだわ。
762nobodyさん:2007/10/10(水) 09:55:22 ID:???
バレなきゃ、何しても構わんみたいな発想で共感はできんな。
763nobodyさん:2007/10/10(水) 09:55:44 ID:cLvYq00J
みなさんPHPは秀丸とかEmとかテキストとかで手書きなの?
764nobodyさん:2007/10/10(水) 09:57:13 ID:???
>>762
今時モラルなんて期待しちゃいかんよ。
765nobodyさん:2007/10/10(水) 09:58:50 ID:???
エスケープもしないで生でDBに突っ込むってやつは、
100%ユーザーのIDやパスワードも生で入れるタイプ。
766nobodyさん:2007/10/10(水) 10:06:57 ID:???
>>765
IDは生でパスワードは暗号化しているんだけど
IDも暗号化して入れたほうがいいの?
767nobodyさん:2007/10/10(水) 10:09:28 ID:???
>>766
シングルクオート使ってるIDはエスケープするだろ?
誰も暗号化とは言ってないぞ?
768nobodyさん:2007/10/10(水) 10:12:03 ID:???
IDにクォートを使わせている人なんているのか・・・
769nobodyさん:2007/10/10(水) 10:12:04 ID:???
>>767
すまん、早とちりした
てか、IDとパスワードはエスケープしないで使える文字を限定しているわけだが
それでもエスケープって必要なのかな
正規表現でa-zA-Z0-9\-_で弾いてる
770nobodyさん:2007/10/10(水) 10:15:05 ID:???
使える文字がa-zA-Z0-9\-_だけならエスケープする必要ないだろw
771nobodyさん:2007/10/10(水) 10:15:53 ID:???
IDとパスワードは、情報流出のためにするものだろ。
エスケープの目的とは全然違う。
まぁ、エスケープもしないというやつはセキュリティーに無関心だから情報流出についても無関心だと思うが。
772nobodyさん:2007/10/10(水) 10:18:27 ID:???
何が困るって引継ぎの時が一番困るんだよ
書き方がかわるだけで穴が出来てしまう
773nobodyさん:2007/10/10(水) 10:19:10 ID:???
A.保存するときそのまま入れる場合
DBから取り出すときは毎回htmlspecialcharsをかける

B.保存するときhtmlspecialcharsかける場合
DBから取り出すときはそのまま出力できる

どっちが効率的かと言ったらBだと思うけど。
774nobodyさん:2007/10/10(水) 10:20:42 ID:???
げ、もしかしてPEARのDBライブラリ使うときに
SQL文エスケープしないとまずい?
今まで自動でしてくれるもんだと思ってたんだが・・・
775nobodyさん:2007/10/10(水) 10:23:46 ID:9QH/UxMS
mysql_escape_string
pg_escape_string
776nobodyさん:2007/10/10(水) 10:32:00 ID:???
バックエンドにRDBMSを据えた電子掲示板で'や"をエスケープせんとその文字使えない
つか、文字列に'を含んだSQL投げた時点でRDBMSに蹴られるやん
詰まるところクォーテーション使いたいからキチンと処理しとるで
777nobodyさん:2007/10/10(水) 10:34:28 ID:???
>>776
保存するときhtmlspecialcharsかけない人って
magic_quotes_gpc = Onにしてるのかな?
まあたしかにOnにしてると生データ入れられるな。
でもmagic_quotes_gpc = Offが推奨なんだよな。
778nobodyさん:2007/10/10(水) 10:41:00 ID:???
>>777
いや、普通保存するときにかけるのはmysql/pg_escape_stringであって
htmlspecialchars使う人は表示以外にデータを使わないと最初から決めてる人。
magic_quotes関係ない。
779nobodyさん:2007/10/10(水) 10:42:31 ID:???
htmlspecialcharsってHTMLの特殊文字をエスケープするヤツなんだから
HTMLを出力するときに掛けるのは当然。
DBに入れるときにはDBの特殊文字をエスケープするのが当然。
DBに入れるときにhtmlspecialchars使うのはおかしい。
たまたま上手くいってるってだけだ。

780nobodyさん:2007/10/10(水) 10:46:33 ID:???
magic_quotes_gpc = Onにしててもバックスラッシュでエスケープした文字だけやろ
Don't → Don\'t こんな文字列もらってもRDBMSには突っ込めんよ?
少なくとも俺の使ってるRDBMSでは駄目
普通に手抜けるんだからhtmlspecialchars通しておけばいいんでないの?
RDBMSから生のデータ引っ張り出した時はガックリくるかもしれんけど
781nobodyさん:2007/10/10(水) 10:47:59 ID:???
DBに入れるパスワードは暗号化じゃなくてハッシュ化だろ
暗号化っていうと復号できるみたいなニュアンスあるから誤解をまねく
>>758のいってることはごく自然だと思うんだけどな
SQLインジェクションにつながるものはバリデータではじくもしくはエスケープして入れる
XSSにつながるデータは直接いれて出力時にエスケープする
ていうのが定説だと思うんだけど
なんでもかんでもhtmlspecialcharsすればいいっていうわけではない気がする
782nobodyさん:2007/10/10(水) 10:54:00 ID:???
>>779はhtmlspecialchars使うのはおかしいと言ってる
>>780はhtmlspecialchars使うのは正しいと言ってる
うーん・・・
783nobodyさん:2007/10/10(水) 10:55:20 ID:???
>>782
場合によって使い分けろということで解決するんじゃね?
784nobodyさん:2007/10/10(水) 10:57:57 ID:???
結局出力時に適切な形で出力できればいい
785nobodyさん:2007/10/10(水) 10:59:25 ID:???
目的と効率の差みたいな感じで意見が分かれてるだけかな。

私は効率だからPOSTであがってきたデータはhtmlspecialcharsしている事が多いい。
書き込みより読み込み回数の方がたいてい多いいしな。
786nobodyさん:2007/10/10(水) 11:04:14 ID:???
お前らは、腐ったものでも冷蔵庫に入れて保存して、
取り出す時に調べれば良いっていうことかww

ダーティーなデータをDBに保存することに違和感を持たない感覚って、
プロとしてダメダメだよ
787nobodyさん:2007/10/10(水) 11:04:57 ID:???
しかし
> DBに入れるときにはDBの特殊文字をエスケープするのが当然。
> DBに入れるときにhtmlspecialchars使うのはおかしい。
> たまたま上手くいってるってだけだ。
これも納得できる。
htmlspecialcharsではなくmysql_real_escape_stringを使うべきなのだろうか?
788nobodyさん:2007/10/10(水) 11:08:03 ID:M9anXW7v
PHPで変数が undefined な状態を調べることってできますか?
isset()ではnullがセットされたものもtrueとなってしまいます。
789nobodyさん:2007/10/10(水) 11:10:54 ID:???
>>788
strlen
礼はいらん
790nobodyさん:2007/10/10(水) 11:13:50 ID:???
htmlspecialcharsではなくmysql_real_escape_stringを使うべきな気がしてきた。
791nobodyさん:2007/10/10(水) 11:14:46 ID:???
>>786
いやいや、割り切りだよ割り切り。
Windowsアプリケーション等では insert文投げる時にトラブルの種になる文字は
禁則文字として「使わないでくださいね」って釘打っておけば納得してもらえるの。
ところがWebの場合、「これ、使えません」っていうと「なんでや?他んところは
使っておるやないかボケ!!」って聞き入れない。
ま、つまんねえとこで意地張ってもしょうがないじゃん。
792nobodyさん:2007/10/10(水) 11:16:16 ID:???
だからどの時点でやるべきなのか、効率が良いのかの違いだけだよ
出力する時に50項目*1000ループhtmlspecialcharsを実行するのか、
それともあがって来たデータそのものに一度だけhtmlspecialcharsを
実行するのかの違いだけ
793nobodyさん:2007/10/10(水) 11:22:00 ID:???
htmlタグを含んだTEXTフィールドはどうしてる?
タグと本文を正規表現で分けて処理すんのかな?
794nobodyさん:2007/10/10(水) 11:22:12 ID:???
>>782
779は正統派、780はやや邪道だが目的は満たしてるし手抜きもできていいと言ってる。
795nobodyさん:2007/10/10(水) 11:25:16 ID:???
>>792
考え方としては毎回動的に画面を生成する掲示板等と
更新時に静的HTMLを生成してしまうblog等との違いと一緒だよな。
それがより効率を上げ性能を向上させるものなら
多少の非汎用化も許容される場合がある。
もちろん、常時内容が変化するようなシステムなら
元になるデータだけ持っておいて毎回動的生成すべきだろう。
796nobodyさん:2007/10/10(水) 11:33:16 ID:0neE8nHZ
はじめまして

自分はサイト運営をしているのですが、PHPを使ったページで

Warning: main(db/.php): failed to open stream: No such file or directory in /home/webmaster/public_html/link/yomi.php on line 21

Fatal error: main(): Failed opening required 'db/.php' (include_path='.:') in /home/webmaster/public_html/link/yomi.php on line 21

とエラーが出てきてしまい使えません。
誰かPHP等に詳しい方、対処方法を教えていただけませんか
797nobodyさん:2007/10/10(水) 11:35:02 ID:???
>>788
無いんじゃないかな…
なんせ
$a = NULL;
var_dump(is_scalar($a));
の結果が「bool(false)」になるくらいで、
NULLを格納した値はPHP上では「未定義変数」の扱いになってる。
決してNULLという値が格納されたスカラー変数ではないのよ。
798nobodyさん:2007/10/10(水) 11:35:24 ID:???
典型的な夏厨な質問だな
何でmail()なんて使おうと思ったの?
799nobodyさん:2007/10/10(水) 11:35:49 ID:???
779の補足
効率の話は全く考えてなかった。どうすべきか、という意味で779を書いた。
表示の度にhtmlspecialcharsを掛ける負荷をなくすという目的なら
htmlspecialcharsをかけてDBへ保存すれば良い。
でも、だからといってDB固有のエスケープを掛けないで良いという事じゃない。
htmlspecialcharsを掛けてさらにmysql_real_escape_stringなどをかける。
800nobodyさん:2007/10/10(水) 11:36:27 ID:???
>>796
db.phpが無いんだからdb.phpを該当ディレクトリにアップロードすればいい。
801nobodyさん:2007/10/10(水) 11:37:36 ID:???
>>800
それ釣りだよw
何度も出てる
802nobodyさん:2007/10/10(水) 11:37:54 ID:???
>>796
Yomi-searchのマニュアル読んでちゃんと設定すればいい。
設定しなきゃ動かんよ、それ。
803nobodyさん:2007/10/10(水) 11:38:12 ID:???
Bamcompile使ったがPEAR使えないのな・・・
804nobodyさん:2007/10/10(水) 11:38:45 ID:???
mysql_real_escape_stringと同等の関数を有していないDBMSは無視ですか?
805nobodyさん:2007/10/10(水) 11:39:48 ID:???
>>804
たとえば?
806nobodyさん:2007/10/10(水) 11:40:14 ID:???
>>801
100%釣りだよなw
807nobodyさん:2007/10/10(水) 11:41:54 ID:???
>>788
<?php
$a = 100;
$a = null;
if (!isset($a)) {
  echo "empty!\n";
}
?>

emptyって表示されたけど・・・。
808nobodyさん:2007/10/10(水) 11:46:45 ID:???
779は正統派だと思っていたが

例えば文字列 Don't をそのままDBに入れる人は
DBから文字列 Don't を取り出せないじゃないか!
保存するときhtmlspecialcharsかけるのが正統派だ
809nobodyさん:2007/10/10(水) 11:47:23 ID:???
>>805
mysql以外のDBMS
810796:2007/10/10(水) 11:51:12 ID:0neE8nHZ
残念ながら釣りではないです。
回答頂いた方ありがとうございます
色々と調べてみます
811nobodyさん:2007/10/10(水) 12:01:35 ID:???
つーかなんでプリペアドステートメントとか使わないの?
htmlspecialcharsとかaddslashesすりゃ良いって人よく見るけど
それぞれ用途があるんだからそれぞれの用途に合ったものを使うべき

DBに突っ込む時にhtmlspecialcharsとかしとけば表示の時楽だが
生データじゃないので再利用性が落ちるし
こういう人に限って表示の時も
再度htmlspecialcharsをしたりと言う場合が多い気がするんだけど?
812nobodyさん:2007/10/10(水) 12:04:34 ID:???
MT4の重さは異常、調べたらDB設計が糞だったw
813nobodyさん:2007/10/10(水) 12:06:56 ID:???
>>811
やり方はともかく一貫性は大切〆。
814nobodyさん:2007/10/10(水) 12:11:05 ID:???
>>808
取り出せるだろ・・・
815nobodyさん:2007/10/10(水) 12:14:54 ID:???
>>814
SELECT * FROM table WHERE moji = 'Don't'
これじゃ取り出せないよなあ?
どうやって取り出すよ?
816nobodyさん:2007/10/10(水) 12:16:11 ID:???
>>815
おまえ頭悪いだろwwwww
817nobodyさん:2007/10/10(水) 12:16:58 ID:???
釣りだろ、読み出す前に入れれないだろw
818nobodyさん:2007/10/10(水) 12:18:44 ID:???
>>816
俺みたいな頭悪いやつに頭悪いだろと言っても意味ねーんだよ
で?どうやって取り出すよ?
とりあえず答えてから貶せ
819nobodyさん:2007/10/10(水) 12:19:49 ID:???
>>815
ちょっと笑っちまったじゃねーか
insertだろうがselectだろうが、SQL文に入れる文字列はエスケープ掛けるんだよ。
$sql = "SELECT * FROM table WHERE moji = '" . mysql_real_escape_string("Don't") . "'"


820nobodyさん:2007/10/10(水) 12:20:02 ID:???
>読み出す前に入れれないだろw

釣りか?入れれるだろw
821nobodyさん:2007/10/10(水) 12:20:55 ID:???
>>820
815のお頭ならって話だよw
822nobodyさん:2007/10/10(水) 12:32:14 ID:???
>>811
prepareにしろescape処理の関数にしろ至れりつくせりのDBMSなら何も問題ない
しかしPHPでサポートされてるDBMSって全てが横並びで標準実装ってわけでない
某SQLServerみたいに見放された(?)感のあるDBMSすらある
PDOに移行すれば救われるのかもしれないけど native driver がこれまた将来に
渡って保証されていない物もある
しょうがないから妥協している箇所を否定されたら何もできないよ
823788:2007/10/10(水) 12:40:36 ID:M9anXW7v
>>797
ん〜、もはや変数にもならないんですね。
ちょっと不便だなぁ。PHPらしい簡易化による不便さですね・・・。

>>807
ごんめんなさい、質問文が間違えてtrueとfalseが反対になってました。
824nobodyさん:2007/10/10(水) 12:40:37 ID:???
>>822
prepareはともかくescapeなんて、sqlserver_escape_string()みたいな関数1個作ればいいだけでしょ?
そんなに悩むこともない気がするんだが。
825nobodyさん:2007/10/10(水) 12:45:33 ID:???
>>819
htmlspecialcharsとmysql_real_escape_string両方使ったら取り出せなかった。
htmlspecialcharsをコメントアウトしたら取り出せたorz
826nobodyさん:2007/10/10(水) 12:46:09 ID:???
>>825
何回エスケープするんだよ
827nobodyさん:2007/10/10(水) 12:47:20 ID:???
何の処理をしているのかわかってないらしいw
828nobodyさん:2007/10/10(水) 12:50:11 ID:???
>>822
将来の話なんて出すべきもんじゃないだろ
PDOじゃなくてもPEARとかのライブラリ類もあるし
動作的に同じであれば良いんじゃないの?
829nobodyさん:2007/10/10(水) 12:55:41 ID:???
>>827
だからいちいち貶すだけのレスはやめれ
わかってないから聞いてんだよw
830nobodyさん:2007/10/10(水) 12:59:23 ID:???
あれ?
DBに入れる際には、mysql_real_escape_string
HTMLに出力するときには、htmlspecialchars
じゃないの?
831nobodyさん:2007/10/10(水) 13:01:13 ID:???
>>829
質問するという意思があるの?
じゃあなんでID出さないの?
832nobodyさん:2007/10/10(水) 13:11:14 ID:???
>>831
わかったよ。ID出さないから答えなくていいよ。
じゃあこの話は終了ね
833nobodyさん:2007/10/10(水) 13:12:29 ID:???
ID出さずに逃げたwwwwwwテラチキンwwwwwwwww
834nobodyさん:2007/10/10(水) 13:15:00 ID:???

こういうのがうざいんだよなぁ

ちなみに「htmlspecialchars() だけでは不十分」らしいな
835nobodyさん:2007/10/10(水) 13:59:21 ID:???
データベースで$categoryの中に1,2,3,4とか数値を入れてるのですが、
$category=1に該当するデータ数を出すにはどう書けばいいですか?
836nobodyさん:2007/10/10(水) 14:03:30 ID:???
>>835
スレ違い
837nobodyさん:2007/10/10(水) 14:09:10 ID:???
>>835
クエリーでやるとこんな感じだけど
SELECT count(category) FROM category_table WHERE category='1'

まぁどんなやり方してるかにもよるし
出そうとしてる部分のソースださんとどーにもならん
838nobodyさん:2007/10/10(水) 14:30:15 ID:zc/CFV7a
クラスで宣言していない変数にアクセスしたときに
参照はエラーにできると思いますが
書き込みのときにも
エラーを発生させる方法はないでしょうか?


class Hoge {
public $v1;
}

$h = new Hoge();
$h->v1 = 1;
$h->v2 = 2; //ここでエラーを発生させたい

839nobodyさん:2007/10/10(水) 14:44:39 ID:???
レスが乱発しているから、まとめておく。話を混同しすぎだよw

'→DBの予約語→DBに入れる前にエスケープする
<>&→HTMLの予約語→HTMLを出力する前にエスケープする
\aなど→システム特殊文字→システムのフロント処理の所で削除
@など→機種依存文字→システムのフロント処理で警告メッセージ
840nobodyさん:2007/10/10(水) 14:47:19 ID:???
__setを定義

まぁもっとスマートな方法あったような気がするが忘れた
841nobodyさん:2007/10/10(水) 14:57:04 ID:???
思ったんだけどさ、__set、__getを使えば
PHP4でもプライベート変数とか使えるんじゃね?

まあパフォーマンスは落ちるが、
それは開発時だけそうやっといて
運用時ははずすと言う方向で。
842nobodyさん:2007/10/10(水) 15:00:55 ID:???
>>841
__set,__getってphp5からじゃ?
まぁデストラクタはつけれるけど
843nobodyさん:2007/10/10(水) 15:13:12 ID:???
>>842
__callも含めて使えるよ。overloadを調べよう。
844nobodyさん:2007/10/10(水) 15:21:58 ID:???
あー、メールトリガーで自動返信してたらメールが無限ループした、まじうざい
845nobodyさん:2007/10/10(水) 15:26:28 ID:???
>>843
thx
こんなのあるのか・・・
毎回定義するの面倒ではあるが・・・
846nobodyさん:2007/10/10(水) 15:54:13 ID:???
Overloadableとかいう名前のクラスを継承して
そこのコントラスタに書けばいいだけさ。

php4とphp5の仕様の違いが嫌?
ならそれを吸収するコードを書けばいいだけさ。

そんなコードを各のが嫌?
ならそれをサポートしているライブラリ・フレームワーク等を
使えばいいだけさ。
847nobodyさん:2007/10/10(水) 16:16:17 ID:???
>>840
これって838へのレス?
それじゃ防げなくないか?
848nobodyさん:2007/10/10(水) 16:43:03 ID:5Clc9AoY
データベースに
大阪府|東大阪市|中小阪|三丁目|6

のように格納されてるんだけど、
住所検索で「大阪府東大阪市中小阪3-6」
みたいな感じでもHitさせたいんだけど何かよさそうな方法はありませんか?
849nobodyさん:2007/10/10(水) 16:57:33 ID:???
>>848
すぐに思い付くのは、

1. データの重複を承知で連結されたカラムを追加する。
2. 検索時のオーバーヘッドを承知でSELECT時に連結して検索する。

くらいかな。
850nobodyさん:2007/10/10(水) 17:00:06 ID:5Clc9AoY
>>849
サンクス

GoogleMapやGeocodingみたいに
「おおさかふ」で大阪が検索されたりするのは
相当な技術のアルゴルズムなんだなぁ・・・
851nobodyさん:2007/10/10(水) 17:00:34 ID:???
>>848
システム構成にもよるが、俺だったらツリー構造でオンメモリーで
住所データを保持しておいて、検索時にツリー構造から検索するようなやり方にする。
そうすれば、高速で検索が可能になる。まぁ、メモリーは食うけどなぁ。
852nobodyさん:2007/10/10(水) 17:18:46 ID:???
>>848
3-6をデータベースの書式に合わせる
853796:2007/10/10(水) 17:33:35 ID:0neE8nHZ
うわぁぁあぁぁぁあ!!!
わかんねぇよ!!和漢ねlwんだよぉおおぉぉぉっうぇうぇwwwwwwwww
854nobodyさん:2007/10/10(水) 17:35:32 ID:???
>>853
ウザイ
死ね
855nobodyさん:2007/10/10(水) 17:40:01 ID:???
DB覚えなくても・・とか言ってる奴は頭が足りなくて覚えられないだけだな。
知っとくに越した事ないってw
856nobodyさん:2007/10/10(水) 17:50:22 ID:dFg+5xQC
PHP4で、コンストラクタを
function &hoge(){}
と書いた場合、
$object =& new hoge();
と書かずに
$object = new hoge();
と書いても大丈夫になりますか?
857nobodyさん:2007/10/10(水) 17:58:20 ID:???
>>851
それは、MySQLとかの一時テーブルにインデックスを張って検索に使え、ってこと?
858nobodyさん:2007/10/10(水) 18:23:37 ID:???
>>857
お前はニ分木検索を勉強した方がいい。
859nobodyさん:2007/10/10(水) 18:35:43 ID:???
>>855
必要となる知識は他にもあるってことだろ
何もDBを丸覚えするのが全てなわけじゃないし
楽するための仕組みが提供されてればそれを使えばいいっていってるんちゃうかと
860nobodyさん:2007/10/10(水) 18:39:32 ID:???
ここPHPスレだろ?

PHPを使った開発で、住所データを
オンメモリーで持っておけることって
現実的には少ないないか?
861nobodyさん:2007/10/10(水) 18:40:04 ID:5Clc9AoY
>>860
自鯖
862nobodyさん:2007/10/10(水) 18:42:58 ID:???
>>861
その後は?
863nobodyさん:2007/10/10(水) 18:43:35 ID:???
話をぶり返すようで悪いのですがaddslashesしてecho "value='{$_POST['dat']}'"と
書いておけば問題ないって事で合っています?
864nobodyさん:2007/10/10(水) 18:44:49 ID:5Clc9AoY
>>862
・・・sakuraにでもうpする
865nobodyさん:2007/10/10(水) 18:47:54 ID:???
>>848

> 大阪府|東大阪市|中小阪|三丁目|6
よくわからんデータ形式だ。

東京都杉並区の場合は?
福岡県福岡市中央区の場合は?
丁が無い場合は?
866863:2007/10/10(水) 18:48:11 ID:???
あ、このままだとスラッシュが増殖しますね
いちいちstripslashesするのめんどくさいな
867nobodyさん:2007/10/10(水) 18:49:10 ID:???
最新でない旧バージョンの一式が欲しいんですが
公式ページ等で入手する方法はありますか?
4.3.xが欲しいです。
868nobodyさん:2007/10/10(水) 18:52:40 ID:???
>>864
いやいや、そういう意味じゃなくて、自鯖だからって
それだけじゃオンメモリーにはならないでしょ?
(基本的に)phpはスクリプト実行が終了したら
データメモリは開放されるのだから。

となると、phpを使って一回の実行でバッチ的に
大量の住所データをマッチングさせたいのなら
オンメモリーで高速という効果はあるけどさ。

実行するたびに全住所データを読んでツリー構造を
作っていたら逆にパフォーマンス悪いでしょ?
869nobodyさん:2007/10/10(水) 18:56:32 ID:???
>>858
いや、MySQLのインデックスは多分ツリー構造のインデックスだろうから、
そういうことを言いたいのかな、と思っただけ。

そうではなく、PHPでデータ構造を作る場合、
CGIかApacheのモジュールで動かすPHPだとインスタンスごとに重複して
メモリ上のデータベースを抱えることになって、DB更新にも弱いし
俺ならこうするって言われてもありえねぇだろ、と思ったわけ。

デーモンにして他のプロセスに追い出す手は無いわけじゃないけど
それはPHPで書かない方が便利だし。


ここまで書いて思ったけど、MySQLの一時テーブルの構造はハッシュだっけ?
870nobodyさん:2007/10/10(水) 18:56:42 ID:???
>>867
少しは探す努力した??死ね
ttp://jp.php.net/releases/
871nobodyさん:2007/10/10(水) 18:57:03 ID:P3ev0KiI
すみません。
結局DBに保存するときhtmlspecialcharsかけたほうがいいの?
それともかけないで生データ入れたほうがいいのでしょうか?
872nobodyさん:2007/10/10(水) 18:58:20 ID:???
>>871
htmlspecialcharsは何のためにあるのか考えればわかる。
873nobodyさん:2007/10/10(水) 19:01:49 ID:???
いや、だからさ、
例えば、東京都港区六本木の場合
最初の文字「東」を入力した時点で「東京都」が確定するだろ。
そしたら、次は「港」から始まる市町村(特別区、広域連合を含む)を検索すれば、いい。
つまり、ajax方式でやればいいじゃん。
874nobodyさん:2007/10/10(水) 19:03:53 ID:???
>>873
何言うとんねな!!!この野郎!!!!!
ふんにゃ、それがツリー構造だって言ってんやろうがーーー
875nobodyさん:2007/10/10(水) 19:08:25 ID:???
>>848じゃないけどさ、
Amazon見たいに、一つの入力フィールドの検索で、
商品タイトル、作者等の複数項目にマッチし、
また、ひらがな・カタカナ、全角・半角を同一視、
「らき☆すた」に「らきすた」でもヒットできるように
検索させたい場合、検索用のフィールド作るのが一番だよね?
(DBMSにそういう機能がある場合を除く)
876nobodyさん:2007/10/10(水) 19:15:53 ID:???
>>874
馬鹿丸出しの大阪人乙
877nobodyさん:2007/10/10(水) 19:17:27 ID:???
>>875
うん、曖昧な検索したいならそうするしかないんじゃないかな?
でも検索用のフィールドってどう作るかはあんまり考えてないや。

878nobodyさん:2007/10/10(水) 19:19:51 ID:???
>>873
わけわからんってw
元々(>>848)の質問とずれてるぞ。

データベースに
> 大阪府|東大阪市|中小阪|三丁目|6
こうあった場合の検索方法だろ。

Ajax方式って、それはユーザーインターフェースであって
検索の仕方ではありません。
879nobodyさん:2007/10/10(水) 19:24:01 ID:???
そういうのが出来るとしたらキーワードでテーブルを作るしかないと思うけどね
880nobodyさん:2007/10/10(水) 19:27:36 ID:???
>大阪府|東大阪市|中小阪|三丁目|6

これって1個のフィールドにこうやって入ってるの?
それとも|ってフィールドの区切りを意味してて、5個のフィールドに分かれてるのか?

データ構造がもう決まっちゃってて変えられないなら、
検索するキーワードの「大阪府東大阪市中小阪3-6」を分解する処理を書いたらどう?
3-6は三丁目とかに変換するのも必要だね。

881nobodyさん:2007/10/10(水) 19:36:49 ID:???
>>880
>検索するキーワードの「大阪府東大阪市中小阪3-6」を分解する処理を書いたらどう?
だから、それを俺が提唱しているツリー構造で検索すれば解決するんだが。
882nobodyさん:2007/10/10(水) 19:42:28 ID:???
単純な検索ならNグラム方式の検索が良いんじゃないかな
883nobodyさん:2007/10/10(水) 19:44:04 ID:P3ev0KiI
>>848
すみません。不躾ながら回答させていただきます。
丁目が3の場合、「三丁目」「3」など三丁目を表す文字をDBに保存
番地が6の場合、「6番地」「6」「-6」など6番地を表す文字をDBに保存
これでマッチすると思います。

>>872
htmlspecialcharsはHTMLエンティティに変換する。
つまり表示するときだけかけたらいいってことですよね。
googleも生データ入れてるみたいだし
やはりhtmlspecialcharsかけないで生データ入れるべきですよね。
今までhtmlspecialcharsかけてDBに保存してた…orz
884nobodyさん:2007/10/10(水) 19:48:52 ID:???
googleはキャッシュページをしているから当然変換しないし
885nobodyさん:2007/10/10(水) 19:50:16 ID:???
>>881
極論言えばなに使っても解決するよ。適切かそうじゃないかの話。
シーケンシャルに頭から検索していってもいい。

もともと構造が、ああなっている場合の話だろ?
まあそこは、ツリー構造にすればいいと解釈するが、
ツリー構造にするとして、そのデータをいつ読み込むのか?

普通に作ると、サーバーへのリクエストがあるたびに
データを読み込む羽目になるぞ。
あんたの言うajax方式だと、一文字入力するたびに
サーバーのリクエストが発生するから、そのたびに
全住所データを読んでツリー構造を作らなければならない。
これはサーバーにも負荷がかかるし、パフォーマンスも悪い。
シーケンシャルに読んで比較したほうがましだろう。

それから、
> 住所検索で「大阪府東大阪市中小阪3-6」 みたいな感じでも
”でも”という言葉。 つまり丁でも検索できると言うことだろう?
そうなると、ツリー構造はどうなる? もちろんやり方は、いろいろあるが、
「ツリー構造で検索すれば解決」という単純な話ではないことがわかるだろう?
886nobodyさん:2007/10/10(水) 19:50:17 ID:???
>>882>>883
俺がツリー構造がいいというのは、住所というものは可変長だからということが一番。
つまり、都道府県の第一段階レベルは一緒でも、その次に来るのが群であったり区であったり市であったりする。
それを効率良く、かつ要件を満たすにはツリー構造で検索するしかないよ。

丁目っていっているけど、丁目じゃなくて字だってある場合もある。
俺は、某銀行系のサイトで住所検索の機能作ったから良くわかる。
887nobodyさん:2007/10/10(水) 19:50:58 ID:???
>>881
独自データ構造をオンメモリでPHPで実装する場合の>>869の問題点はどうすんの?
888nobodyさん:2007/10/10(水) 19:55:25 ID:???
>>886
ごちゃごちゃ言ってるけどさ、
それって、RDBMSで住所にインデックス情報をつけて
likeで前方一致検索するってだけの話だから。
(likeの前方一致でインデックスが働かないRDBMSもあったと思うが)
889nobodyさん:2007/10/10(水) 19:55:42 ID:???
890nobodyさん:2007/10/10(水) 20:00:00 ID:???
ツリーツリーうるさいやつがいるな
891nobodyさん:2007/10/10(水) 20:04:29 ID:???
> 検索するキーワードの「大阪府東大阪市中小阪3-6」を分解する処理を書いたらどう?
> 3-6は三丁目とかに変換するのも必要だね。

多分ね、これは大変な作業になると思うよ。地域によっては
市が無くて区だけだったり市と区があったり、
丁目が無いところあるし。

もし、検索キーワードを入力するのが面識の無いエンドユーザ、たとえば
ショッピングカートシステムのお客さんとかなら県名を省略したり、
丁で入力するかハイフンで入力するかわからない場合もある。
(そこは「県名を省略せずに入力してください」と書いておくという手もあるけど)

>大阪府|東大阪市|中小阪|三丁目|6
もしこれが5つのフィールドに分かれていると言う意味なら、

データ構造を変更して検索用のフィールドを作るか、もしくは別に検索用の
テーブルをつくり、住所を一つのフィールドにまとめる。

そのとき、住所データを正規化(全角半角、漢数字、丁目や-をスペースに置き換え)する
もちろん検索するときも同じように正規化する。
その後、like検索すればいいのではないか?

ツリー構造とかいっているやつも、データの正規化いるだろ?
というか、そっちのほうがここでは重要な話だろ
892nobodyさん:2007/10/10(水) 20:08:03 ID:???
readfileでリモートファイルを読み込ませたいのですがファイルが見つかりませんとでるのですが・・・
URLは間違いなくあってる
893nobodyさん:2007/10/10(水) 20:12:10 ID:???
>>892
そんだけでは解らん
周辺のソース出さないと何とも言えない
もしかしたらsafeになってんじゃ?
894nobodyさん:2007/10/10(水) 20:13:14 ID:???
>>891
いや、だからツリー構造でajax方式なんだよw
データの正規化をサーバー側とクライアント側の両方で別々に分けて考えなくてもよくなるし、
user ablitiyも向上するだろ。

つまり、東京都港区六本木1-2-3を入力するのに、
「と」と入力すれば「東京都」が自動で表示され、
「み」と入力すれば、「港区」が自動で表示され、
「ろ」と入力すれば、「六本木」が自動で表示され、
「1」と入力すれば、「1丁目」が自動で表示され、
「2」と入力すれば、「2番地」が自動で表示され、
「3」と入力すれば、「3号」が自動で表示される。

ユーザーにフォーマットを意識させることなく、ユーザーが入力した値も
自動で正規化され、かつ入力ミスもなくなる。
99丁目とかありもしない番地も入力と同時にチェックできる。

DBで検索とか言っている奴がいるが、そんな方式でやっていたら、
ユーザーが何回も入力しなおす羽目になりかねない。
895nobodyさん:2007/10/10(水) 20:16:22 ID:???
>>889
最初っからそれを出せと言う話。
でそれを使うには環境が限られるということさ。

それをするよりか、単にRDBMSを使えばいいだろ? 今使えているんだし。
どうしてもツリー構造を自作しなきゃいけないのか?

そして、ツリー構造を自作すれば、データが - で 丁目でも
ヒットするようにしたいと言う要望が達成できるのか?

違うだろ? だからあんたが言っていることは答えになってないんだよ。
896nobodyさん:2007/10/10(水) 20:18:08 ID:???
郵便番号を入力してもらう、これ最強
897nobodyさん:2007/10/10(水) 20:18:12 ID:???
>>894
> DBで検索とか言っている奴がいるが、そんな方式でやっていたら、
> ユーザーが何回も入力しなおす羽目になりかねない

お前バカか。それがDBで検索であっても、
「と」と入力されたときにDB検索すればいいだけの話だろ。
ずれまくりだっつーの
898nobodyさん:2007/10/10(水) 20:20:16 ID:???
>>894
それ、Ajax使って、入力する形式を固定にしろという話であって、
ツリー構造であることとはまったく関係ないじゃんw
899nobodyさん:2007/10/10(水) 20:20:58 ID:???
>>893
safeにはなってない
phpあまりやったこと無いからぐちゃぐちゃ

$fileurl = substr($_SERVER["ORIG_PATH_INFO"], 1);

if ($fileurl == 1){
$filename = "日本語.mp4";
$file = "***.**/test1.mp4";
  } elseif ($fileurl == 2){
         略
  } elseif ($fileurl == 15){
  $filename = "テスト.mp4";
$file = "***.**/test4.mp4";
}
$file_length = filesize("http://$file");
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Length:$file_length");
header("Content-Type: application/octet-stream charset=UTF-8");
readfile ("http://$file");
900nobodyさん:2007/10/10(水) 20:21:09 ID:???
強烈な一撃!

>>894
JavaScriptが使えない環境はどうするの?w
901nobodyさん:2007/10/10(水) 20:27:48 ID:???
ここDBスレと間違うくらいDB信奉者が多すぎww

ajaxで検索するやり方で考えるなら、DBじゃなくて、
ツリー構造でオンメモリーに持つの方がパフォーマンス的に有利に決まっているだろ。

住所の巨大なデータ構造をDBにもって、いちいち検索かけたらDBサーバーが飛ぶぞ。

>>900
強烈な反撃!
インターフェイス部分をFlashで実装すればいいだけ。
902nobodyさん:2007/10/10(水) 20:29:51 ID:???
っていうかさ、住所データなんて基本的に変わらないんだから
ツリー構造なんかにしなくても、
単に住所が入った配列をソートさせて
それを二分探索で検索すれば良いだけじゃん。

# ソートされた配列を二分探索したら
# その配列はツリー構造になるとかいう馬鹿なことは
# さすがに言わないことを祈る。

俺なら普通にDB使うがな。
903nobodyさん:2007/10/10(水) 20:30:26 ID:???
>>901
Flashが使えない(ry
904nobodyさん:2007/10/10(水) 20:30:33 ID:???
ばかばっか
905nobodyさん:2007/10/10(水) 20:30:48 ID:???
>>901
お前、わざと突っ込まれるように書いてるだろ?w
906nobodyさん:2007/10/10(水) 20:33:20 ID:???
>>901
一つ聞いていいか?

お前のその提案で
ハイフンでも丁目でもヒットしたいと言う要望は、

ツリー構造で解決したか?
Ajaxで解決したか?

どちらで解決したか答えろ。
907nobodyさん:2007/10/10(水) 20:34:29 ID:???
NGワード:ツリー構造

おまえらももう相手するのやめれw
908nobodyさん:2007/10/10(水) 20:36:13 ID:???
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
909nobodyさん:2007/10/10(水) 20:38:12 ID:???
>>902
>っていうかさ、住所データなんて基本的に変わらないんだから
お前新聞読んでないだろ。地方再編で対応が大変だった苦労は分からんだろうなぁ。

>>903
そもそも、javascriptもflashも対応していないようなブラウザまで対応するか、だ。

>>906
>ハイフンでも丁目でもヒットしたいと言う要望は、
>ツリー構造で解決したか?
>Ajaxで解決したか?
ツリー構造だからこそ、現在入力している住所レベル(丁目か番地か号か字か)が
分かるわけだろ。ajaxを使えば、そもそもユーザーが丁目やハイフンまで入力する必要もない。
910nobodyさん:2007/10/10(水) 20:43:24 ID:???
ああ、filesizeはリモートファイル無理なのか
911nobodyさん:2007/10/10(水) 20:43:34 ID:???
>>909
> お前新聞読んでないだろ。地方再編で対応が大変だった苦労は分からんだろうなぁ。
対応した後にソートすればいいだけ。何か問題があるか?

言い訳はいいんだ。ツリー構造で解決したかAjaxで解決したかそれだけを答えろ。
912nobodyさん:2007/10/10(水) 20:45:34 ID:???
なんかスレの伸びがやけにいいとおもったら随分エキサイトしてるね
少し10分レスつけるのやめて頭ひやそうぜ
10分後には書く気もうせてるから
913nobodyさん:2007/10/10(水) 20:45:40 ID:???
もしかしてこいつ、ソートするだけで済む話なのに、
ツリー構造を作ってしまったのか?
それを認めたくないとかw
914nobodyさん:2007/10/10(水) 20:52:14 ID:???
>>911
>言い訳はいいんだ。ツリー構造で解決したかAjaxで解決したかそれだけを答えろ。
だから、どっちかじゃなくて、両方セットじゃないと意味ないだろw
915nobodyさん:2007/10/10(水) 20:52:19 ID:???
パフォーマンスをあげたいのなら、オンメモリデータベースを使えば良い。
わざわざphpで実装する必要性は無い。
916nobodyさん:2007/10/10(水) 20:53:51 ID:???
>>914
ソートされた配列ではだめで、ツリー構造でならいいという理由は?
917nobodyさん:2007/10/10(水) 20:54:37 ID:???
>>889
いや、だから更新時はどうすんのさ。
基本的に自分のプロセスの生き死にを管理出来ないapacheモジュールで
生に共有メモリなんか弄って途中で死んだらどうすんだって話。

...釣りといってくれ。
918nobodyさん:2007/10/10(水) 21:04:55 ID:???
みんな、暇なら作ってくれ!。
掲示板でSQLにデータが入っているのですが記事の情報以外には親記事のIDしかありません。
そこからツリーを形成するスクリプト書いてください。

俺、頭悪くてできなかったorz。
919nobodyさん:2007/10/10(水) 21:07:39 ID:???
どこまではできたんだ?
920nobodyさん:2007/10/10(水) 21:08:23 ID:???
全スクリプトをzipで晒してからだ、話はそれから
921nobodyさん:2007/10/10(水) 21:15:27 ID:???
Ajaxを使えば、別にツリー構造じゃなくても、DBでいいわけで。
922nobodyさん:2007/10/10(水) 21:20:56 ID:???
ツリー構造って頻繁にキーを追加・削除する必要がある時に使うデータ構造だろw
住所という数日・数ヶ月レベルで変更が無いデータに適用する構造じゃねーよw
923nobodyさん:2007/10/10(水) 21:29:41 ID:???
たいていのDBMSではインデックスはBtree(これは2分木ではない)かなにかだろう。
で、普通インデックスはメモリ上にキャッシュされるから、
オンメモリでツリー構造に対して検索したいだけなら普通に結合したカラムを作って
インデックス張って前方一致検索すりゃいいだけ。
924nobodyさん:2007/10/10(水) 21:41:05 ID:???
外部ファイルのサイズを取得する方法はありますか?
925nobodyさん:2007/10/10(水) 21:52:31 ID:???
>>924
filesize
926nobodyさん:2007/10/10(水) 22:10:02 ID:???
array_unshift($array,'key'=>array());はどうやって書けば良いのかな?
927nobodyさん:2007/10/10(水) 22:10:09 ID:???
>>925
filesize(http://〜)でもファイルが無いといわれます
928926:2007/10/10(水) 22:13:44 ID:???
自己解決しました
array()+array()でよかったみたいです
929nobodyさん:2007/10/10(水) 22:34:13 ID:???
>>927
じゃファイルが無いのでは
930nobodyさん:2007/10/10(水) 22:38:32 ID:???
>>929
アドレスはちゃんとあってるのですが・・・
iniの方の問題ですかね
931nobodyさん:2007/10/10(水) 22:38:32 ID:???
>>927
バー
932nobodyさん:2007/10/10(水) 22:47:05 ID:???
郵便番号の中の人がもう少し頑張ってくれれば解決する
933nobodyさん:2007/10/10(水) 22:54:04 ID:???
外部ファイルって同一ファイルシステム上のファイルじゃなくてネットのhtmlとか?
httpでファイルサイズ取得できるのなかったっけ? アンテナなんかで使われてるヤツ
934924:2007/10/10(水) 22:57:15 ID:???
>>933
他のサーバーのファイルです。動画系の
935nobodyさん:2007/10/10(水) 22:57:19 ID:???
なんで郵便番号って、住所情報の数値以外を全部入れなかったんだろう?
電話番号が9桁(最初の0を省く)でやれるんだからできんことないだろ。

と思って調べたらこんなページが
http://www.geocities.jp/jdy07317/3040.html

> 詰め込めば6けたでも足りたということです。
> 実際には7けたですから、1000万通りも確保できるわけです。
> たくさんある組み合わせのうち70分の69は使用しない事になります。
936nobodyさん:2007/10/10(水) 22:59:28 ID:???
>>934
upローダのファイル?
937nobodyさん:2007/10/10(水) 23:00:49 ID:???
>>936
レンタル鯖にある動画です
938nobodyさん:2007/10/10(水) 23:01:13 ID:???
>>934
なんて出るの?
939924:2007/10/10(水) 23:04:34 ID:???
>>938
Warning: filesize() [function.filesize]: stat failed for http://URL略/***.avi in /URL略/test.php on line 60
940nobodyさん:2007/10/10(水) 23:07:21 ID:???
他の鯖のファイルサイズなんて取れないと思う
そんな話は聞いた事がない
941nobodyさん:2007/10/10(水) 23:08:58 ID:???
>>939
それのどこにファイルが無いって書いてあるの?
942nobodyさん:2007/10/10(水) 23:11:43 ID:???
file_exists()でファイルの有無調べたら?
エラーの詳細はわからないけど直接取得できるファイルなの?
wgetなどで直接落とせる?
943nobodyさん:2007/10/10(水) 23:15:26 ID:???
readfileなら普通に読み込んでる見たいです。
自分でちょっと調べたいと思います。お騒がせしてすみませんでした。
944nobodyさん:2007/10/10(水) 23:33:46 ID:???
>>943
filesizeはphp5からしかURLでは取れなかったはず
statでとれれば動くと思うけど
945nobodyさん:2007/10/10(水) 23:36:38 ID:???
だから俺がバーってヒントあげたじゃんw
946nobodyさん:2007/10/10(水) 23:44:16 ID:???
バーカ
947nobodyさん:2007/10/11(木) 01:11:17 ID:???
どこにかこうか迷ったんだけどとりあえずここの人たちにヘルプをもとめてみます。
このページを見てください。
http://www.gomo.jp/
IEで見ると
HTTP500内部サーバーエラー
になります。
でfirefoxでみると普通にエラーが返ります。

ちょっとしたケアレスミスのエラーなんですけど、IEでは全く何が原因だか分らず
デバッグできませんでした。HTTPのHEADERを覗くソフトを見つけて気付いたのですが、
もしや、と思いfirefoxで見たら、案の定普通に表示されました。
これはPHPやサーバーの設定でどうにかなるのでしょうか?
それとIEのデコスケはあいかわらず使えないということなのでしょうか?

ちなみにPHP5.2.4で
php_value error_reporting "2047"
php_flag display_errors on
php_flag display_startup_errors on
php_flag track_errors off
になってます。
948nobodyさん:2007/10/11(木) 01:43:02 ID:???
>>947
URLググったら前々スレ53の115と同じじゃん(2007/08/28 08:29:23)
http://pc11.2ch.net/test/read.cgi/php/1188047468/115-
ドメインも個人登録みたいだし。 釣り?orIP収集?
949nobodyさん:2007/10/11(木) 01:49:58 ID:???
>>947
それはIEの設定。
簡易エラー表示をOFFにすれば普通に表示されるようになる。
950nobodyさん:2007/10/11(木) 01:51:47 ID:???
>>948
このスレで真面目にPHPの勉強してるだけだと思うけど。
なんで同じ人が別の質問したら釣りという発想になるんだ…
951nobodyさん:2007/10/11(木) 02:07:47 ID:???
>>950
書き出しが変じゃないか?
まるで今回が始めての質問みたいな感じがする。しかもいきなりリンク貼り。
以前質問したらなら「以前も質問した者ですが…」等と書き始めないか?
そっちの方が以前の状況も遡れるし、進歩具合で回答内容も考えやすい。
検索結果になくて今回初質問でも俺的には正直リンクは踏めない書き出し。
ドメイン取ってる割に全然検索に掛からないというのも収集専用かと思ってしまう。
952nobodyさん:2007/10/11(木) 02:16:33 ID:???
>>947
Cake?
まぁFatal errorを修正すりゃいいんでねぇの?

リリースというか開発段階なら
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(E_ALL);
書いておくと良いよ
953nobodyさん
昨日の>>685です。
>>722さんのアドバイスで無事に解決したのですが、sessionじゃなく、
具体的にはmetaタグで、refreshでページを移動させた場合も、同様に
ページの有効期限切れ、と表示されます。これを解決する方法って
ありませんか?