トップページ⇒php
853コメント275KB

【PHP】初心者コーナー 3 Released【スローモード】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/11 06:24ID:???
PHPに関するアホな質問はここで、マターリやろな。
ファイル MySQL PostgreSQL 正規表現でも なんでもいってみ
でもな、アホな質問であっても詳しく質問しろよ。 ネタはおもしろく書けよ。

前スレ http://pc2.2ch.net/test/read.cgi/php/1048442813/l50

■PHPの普通の質問はあっちな、【PHP】質問スレッド Part8
 http://pc2.2ch.net/test/read.cgi/php/1050249148/l50
■PHPへ移行したいPerl信者はあっちな、【待望】PerlユーザのためのPHP入門
 http://pc2.2ch.net/test/read.cgi/php/1046326634/l50
■マニュアル嫁ってうるさいのがいるからちょっとは嫁な、
 http://www.php.net/manual/ja/
■おまえ初心者なら入門本くらいかっとけな、PHP関連の書籍(但しPHP出版系お断り)
 http://pc2.2ch.net/test/read.cgi/php/985315574/l50
■これはなズープスと読むらしいがあっちな、XOOPS
 http://pc2.2ch.net/test/read.cgi/php/1031736248/l50

でもな、ここで書きたかったらここで書き。 あとは関連な、>>2 
0067あぼーんNGNG
あぼーん
00686503/06/18 11:40ID:???
【自己解決】
count() ってゆー便利な関数があるんですね。
>>66氏の気分を害してしまい、ずびばぜんでじだ(T_T)
0069nobodyさん03/06/18 11:40ID:???
>>65
count()
0070nobodyさん03/06/18 16:47ID:???
国際化されていないphpで日本語扱う方法ってありますか?
JCode.php見つけたんですけどいまいち上手く動作しないのです。
0071nobodyさん03/06/18 17:50ID:???
扱う、と言っても扱い方はいっぱいある
00727003/06/18 18:38ID:???
送られてきたデータの文字コードをEUCに統一してmySQLに保存するんです。
要は、普通の掲示板などで行われている処理なのですが。
0073nobodyさん03/06/18 22:02ID:???
>>65

scalar()
0074nobodyさん03/06/18 22:09ID:???
>>72
じゃあ、普通にjcode.phpつかえば。
jcode.phpだけど、
>JCode.php見つけたんですけどいまいち上手く動作しないのです。
こういう書き方するとバカかと思われるよ。
00756503/06/19 03:14ID:2RPLMQCv
>>66氏、>>73氏 レスどうもです。

別の質問なのですが、

title1,value1
title2,value2
title3,value3

というcsvファイルを、file()で読み込んで $lines に格納した後、
列ごとの要素を配列に入れたいのですが、

list($title,$value)=explode(",",$lines[$i]);

と、やったら上手くいきません。

マニュアル読むとlist()は、「配列と同様の形式で、複数の変数への代入を行います」
と、あるので上記だと $title や $value は変数で配列ではないという事ですよね?
列ごとの要素を配列として扱うには、どうすればよいでしょうか?
00767003/06/19 03:27ID:???
>>74
jcode.phpで文字コードを自動認識させると認識を誤ることがあるのです。
回避する方法はありますか?
0077nobodyさん03/06/19 03:59ID:???
自動だかだ。
なんでeuc指定しないの?
00787003/06/19 04:01ID:???
変換後はeucにするんです。
ただ、ブラウザが送出する文字列は指定できないこともありますので、
変換前文字列を自動認識にしているんです。
すると、ときどき化けることがあるわけで。
0079nobodyさん03/06/19 04:35ID:???
なるね。 ときどき化けるファイルのエンコードはJIS ?
これを上手い事、条件つけて変換するとか。
00807003/06/19 04:52ID:???
化けているのはおそらくshift-JISかと。
どういう条件をつけたらよいのでしょう。
0081nobodyさん03/06/19 04:57ID:Xa9Oiy3t
>>75
とりあえず
$lines = file('hoge.csv');
$title = array();
$value = array();
for ($i=0;$i<count($lines);$i++) {
 list($title[$i],$value[$i])=explode(",",$lines[$i]);
}
かなあ?

$lines = array_map('SplitCSV', file('hoge.csv'));
function SplitCSV($line) {
 $a = explode(',', $line);
 return array('title'=>$a[0], 'value'=>$a[1], 'value2'=>$a[2]);
}
みたいに多次元配列に入れたほうがデータを使い回しやすいし、
ファイルを全部読み込む必要がないならfgetcsvを使うのが良いだろうし。
方法はいろいろありますyo。

>>78
jcode.phpsは最新版(1.34)ですよね?
いちおう http://www.spencernetwork.org/ を張っときます。
PHPがセーフモードでないなら、exec()でnkfを使うとか
mbstringのDSOを調達してdl('mbstring.so');するとか? (w
00827003/06/19 05:17ID:???
>>81
jcode.phpsは最新版です。
で、後の方法ですが、強引ですねえ。。。

文字化けの状況はここと一緒かと。ちょっと内容微妙だけど。
http://www.google.co.jp/search?q=cache:W9edWQoBLUMJ:www.geocities.co.jp/CollegeLife-Labo/9015/discussion/0301-0350/log00000305.html+%E5%8A%B9%E5%8D%A0&hl=ja&ie=UTF-8
なんか、根本的に間違っている気がしてきました。
0083nobodyさん03/06/19 05:46ID:???
sage忘れてた・・・。
>>82
すごく強引です。半分ネタのつもりで書きました。ごめん。
ところで、文字列は保存する直前(処理したあと)変換してませんか?
それならスクリプトの冒頭で
$str = serialize($_POST);
$str = JcodeConvert($str, 0, 1);
$_POST = unserialize($str);
って感じであらかじめ変換してやるといいかも。
個別に変換するんじゃなくて、一つの長い文字列として扱うことで
判定ミス軽減を狙ってます。うまくいくかわかんないけど。

とりあえず、そのリンク先が根本的に間違っているのは疑いの余地が無いですね。
0084nobodyさん03/06/19 05:54ID:???
おっと、たしか大抵の国際化されてないレン鯖のPHPって4.0.6だったような。
上の$_POSTは$HTTP_POST_VARSもしくは$HTTP_GET_VARSと読み替えてくだされ。
0085nobodyさん03/06/19 09:25ID:???
>>78
チェック用にHIDDENで"美乳"とか入れらんないの?
その掲示板の入力フォーム。
0086nobodyさん03/06/19 09:37ID:???
>>85
> チェック用にHIDDENで"美乳"
あ,おれと同じことしてる…
00877003/06/19 13:22ID:???
>>85
「美乳」。。。
なんか、もうちょっと長いので無難なのありませんでしたっけ?
00887003/06/19 13:24ID:???
ググッたらすぐに出てきました。
「雀の往来」ですね。
>>83さんのアドバイスとあわせてやってみます。
0089nobodyさん03/06/19 14:58ID:???
うひょー、、こんなのあったのか<美乳・雀の往来
しらんかたよ汗
0090nobodyさん03/06/19 16:54ID:BuZyfKvG
$hash = array('key1'=>'val2','key2'=>'val'2);
$key = 'key';
$line = 'abcd $key{key1} efgh $key{key2} ijkl';
以上のデータを使って$lineを
abc val2 efgh val2 ijkl
と成るように置換したいのですが、以下だとうまく動きません。
$line = preg_replace('/\$'.$key.'\{(.*?)\}/',$hash["\\1"],$line);
どうしたらうまく動かせるのでしょうか。教えてください。

ちなみにperlだと
$line =~ s/\$$key\{(.+?)\}/$hash{$1}/g;
0091あぼーんNGNG
あぼーん
0092nobodyさん03/06/19 16:59ID:3FZVSEpw
>>90
つか、それ以前に''(シングルクォート)じゃあ、変数が
展開されねーべさ。
0093nobodyさん03/06/19 17:13ID:???
>>92
傍目に見たらダブルクォートに見える罠
0094nobodyさん03/06/19 17:19ID:???
"
''
009592 03/06/19 17:20ID:???
うーっぷす、すまねえ。
「'」(しんぐるくぉ〜と)
と書き直してみるテスト。
0096nobodyさん03/06/19 17:22ID:???
$hash["\\1"] -> $hasn[$1] でどう?
$hash[$1] のかわりに md5($1)とか、オリジナルのハッシュ関数($1)とかでもいいかも。
00979003/06/19 17:24ID:BuZyfKvG
>>92
ちょっとまぎわらしいコードを書いてしまってすいません。
$lineでしたら、展開されないように''にしています。

$line = 'abcd $CODE{1} efgh $CODE{2} ijkl';
$key = 'CODE';
$hash = array(1=>'111',2=>'222');
$line = preg_replace('/\$'.$key.'\{(.*?)\}/',$hash["\\1"],$line);
で$lineを
abcd 111 efgh 222 ijkl
にしたいのですがpreg_replaceの所で、つまずいています。
0098nobodyさん03/06/19 17:44ID:???
>> 70

実用的なものとしては、“漢字コードはEUC”というのがある。

ttp://www.valhalla.gr.jp/coffin/essay/2001/august.html#12


>> 90

$line = preg_replace_callback('/\$'.$key.'\{(.*?)\}/', create_function('$a', 'return $GLOBALS["hash"][$a[1]];'), $line);

もっといい方法があるかも。
0099nobodyさん03/06/19 18:05ID:j1VyygA0
PHPとTomcatを連携しようと考えています。
可能でしょうか?
0100あぼーんNGNG
あぼーん
0101nobodyさん03/06/19 21:54ID:???
この
0102nobodyさん03/06/19 22:14ID:???
初めての質問です。

まずform.htmlで

<form name="form1" method="post" action="confirm.php">
<p> 名前<br>
<input name="name" type="text" size="100">
</p>

のようなフォームを作り、confirm.phpで

<?php echo $_POST["name"] ?><br>

として表示しようとしているのですが、何故かなにも表示されません。
PHPが動いていることはphpinfo()で確認済みです。
どうもform.htmlからconfirm.phpに変数を渡せていないような気がします。

これはなにか設定の問題なのでしょうか?
ご教示ください。
0103nobodyさん03/06/19 22:34ID:qf8t/Q9i
ereg関数でパターン文字列に「=」を入れたらこのようなエラーが出ました
Parse error: parse error, unexpected '=' in /xxxxx/index.php on line 11
「=」はつかえないんでしょうか?
0104nobodyさん03/06/19 22:34ID:???
$_POST[name] $_POST['name'] $_POST["name"] $POST[qq|name|qq] なあほな。
0105nobodyさん03/06/19 22:38ID:???
preg_matchじゃだめ?
http://jp.php.net/manual/ja/function.preg-match.php
0106nobodyさん03/06/19 22:39ID:???
\= とかは? うひ。
0107nobodyさん03/06/19 22:45ID:???
>>102
GETだよ。
POSTじゃないよ。
0108nobodyさん03/06/19 22:50ID:???
おいPOSTじゃんか。
0109nobodyさん03/06/19 23:00ID:???
URLを入力してそのページのソースを全部取得する関数ってありますか?
0110nobodyさん03/06/19 23:23ID:???
>109
fopenではダメなのですかい?
0111nobodyさん03/06/19 23:24ID:???
>>109
file
0112nobodyさん03/06/19 23:30ID:???
>>110>>111
fopenやfileだとファイルしか開けなくないですか?URL開けないんですが。
0113nobodyさん03/06/19 23:39ID:???
>112
ttp://www.php.net/manual/ja/function.fopen.php
0114nobodyさん03/06/20 00:25ID:???
>>112
allow_url_fopen
http://www.php.net/manual/ja/features.remote-files.php
0115nobodyさん03/06/20 14:27ID:LThxuIrX
shuffle()でランダムに並べ替えた配列を
次のページにその並び順のまま渡すには、
どんな方法が考えられますか?
ファイルに書き出すしかないでしょうか…
0116nobodyさん03/06/20 21:08ID:???
>>115
hidden
session
0117nobodyさん03/06/20 23:11ID:???
>>115
(URLの後ろに続けて)GET渡し
0118nobodyさん03/06/21 00:51ID:???
>>115
>>116-117の補足
shuffle($arr);
$str = rawurlencode(serialize($arr));
GETのとき
echo "<a href=\script.php?shuffled="{$str}\">xxx</a>";
POSTのとき
echo "<input type=\"hidden\" name=\"suffled\" value=\"{$str\}" />";
SESSIONのとき
書くのめんどくさい。rawurlencodeとかserializeとか不要。
0119nobodyさん03/06/21 11:11ID:k+R30mgd
PHPって基本的に多言語をサポートしてるんですよね?
調べてみると、multibyteってのを入れると、日本語化できる
みたいに書いてあるのですが、
逆を言えば、multibyteを入れないと日本語化できないんでしょうか?
またPerlってどうなんでしょうか?
0120nobodyさん03/06/21 11:59ID:???
>>119
Muiltibyteを入れなくても日本語は通ります。
Perlも日本語は通ります
0121nobodyさん03/06/21 12:23ID:HF7plXmg
自分が阿呆な事を言っていると承知済みで、失礼覚悟で質問いたします。
先日、フリーのPHPチャットプログラムをダウンロードしてきました。
製作者様がおっしゃるにはそのチャットプログラムは、
改造は規約さえ守れば好きにしていいとの事です。
しかし、その公式ページ以外でそのPHPに関する質問は絶対にしないように
とのことで、しかしながら質問のお返事が戴けません。
そしてわたしは、今回初めてPHPを弄った筋金入りの素人です。
そのPHP内に特定の言語をはじくというソースがあるらしいのですが、
どこがなんなのかもうさっぱりです。さんざん自力でいじり、探しましたが、
なにせhtmlも満足にいじれないわたくしにとって腐海のようです。
解決策とかそれ以前に、わたしはどうすれば良いでしょうか。
製作者様のお答えを根気よく待つべきでしょうか。ここで質問しても
大丈夫なものなのでしょうか。自力でPHPを1からミッチリやり込むべきでしょうか。
0122あぼーんNGNG
あぼーん
0123nobodyさん03/06/21 12:42ID:iHlRBHxT
>>121
>そのPHP内に特定の言語をはじくというソースがあるらしいのですが、
意味がわからないな。。言語って英語とか?それともPerlはじくとか?(これも意味不明
できればその配布サイト教えてよ。簡単なら同じ機能ついたの作ってやるから。
012411903/06/21 12:50ID:k+R30mgd
>>120
即レスありがとうございます。
じゃあmultibyteは何の役割をするんでしょうか?
0125nobodyさん03/06/21 13:18ID:HF7plXmg
>123
いえ、まさかそこまでして頂く訳には参りません。
その、これを申すとそのプログラムが特定できてしまいそうなのですが、
いわゆる『人工無能』のついたチャットなんです。
『人工無能』とはAと言えばBと答える、というような法則を覚えさせて
疑似会話が出来るものだと聞きました。
その『人工無能』が、特定の言葉、主に著作権関係の言葉と思われるのですが、
それを全て覚えません。
その機能を外すには、どこのソースを消せばいいのか、という話なのです。
お解りになりましたら、どうぞご助言願います。
0126nobodyさん03/06/21 13:20ID:???
>>124
あとはマニュアル嫁
012712303/06/21 13:35ID:KU8WU14M
>>125
>その機能を外すには、どこのソースを消せばいいのか、という話なのです。
>お解りになりましたら、どうぞご助言願います

PHPならPHPゆいちゃっとのゆいぼっとかなっとは思うけど…、
とりあえず配布サイトのURL出してくれないとわからないです
0128nobodyさん03/06/21 13:40ID:???
>>125
スクリプトによって違うので
何とも言えません。
アドバイスは
PHP入門(エーアイ出版)
をかってPHPを勉強しましょう

ということです。
012912303/06/21 13:40ID:KU8WU14M
>>125さんは、「そこに山があるからだ」さんかな?(w
0130あぼーんNGNG
あぼーん
013112303/06/21 13:51ID:KU8WU14M
確かにビートルズ覚えないね。
原因突き止めてるからちょっと待ってね。
0132nobodyさん03/06/21 13:55ID:???
PHPゆいちゃっとの管理人はサポート下手だな。
あやふやな質問にいくらレスしても疲れるだけだっつーの。
013312503/06/21 14:00ID:HF7plXmg
>128さん
はい…1から入門するのが一番だとは思っております。
ご推薦の書物を探して読んでみます。ありがとうございます。

>123さん
あああッバレてるッ(泣笑
すみません。結局サイトまで明かす事になってしまいました。
ここであのプログラムの事を質問しても、問題はないのでしょうか?
あのちなみに、『ビートルズ』の実験はどちらでなさったのでしょうか…

わたしが躍起になって調べた結果、経済界要人とスポーツ選手は覚えます。
歌手、有名人、米国のアニメキャラクター、映画のタイトルなんかは総崩れです。

ほんとうに、お手を煩らわせてご免なさい。
ありがとうございます。
013412503/06/21 14:03ID:HF7plXmg
>132さん
製作者様はわたくしの無理な質問に散々付き合って下さりました方です。
その製作者様が、わたくしの所為でそう言われては申し訳が立ちません。
どうか、その旨ご理解願えませんか。
013512303/06/21 14:04ID:KU8WU14M
スクリプトをざっと読んでみたけど、著作権のあるものは登録できないようにする
なんて処理は何処にも無かったよ。多分原因は他に有ると思う。
013612303/06/21 14:08ID:KU8WU14M
>ここであのプログラムの事を質問しても、問題はないのでしょうか?

正式には、利用規約違反にはなっちゃうだろうなぁ…。
でもまぁレイさんも忙しいんだろうし、こっちでバグ見つけて報告するのはダメってわけじゃないから、
とりあえず何処が悪いのか探してみるよ。
ちなみにビートルズの実験は自分のサーバーでやってる
013712503/06/21 14:15ID:HF7plXmg
>123さん
そうですか!
あの、ズブの素人が素人脳で考えてしたことは、著作権に触れる言葉を
覚えさせた時にも、datファイル内には追加されているのです。
その上で$no_msgが発動していますから、全てのphp内を$no_msgで検索したんです。
$no_msgに関係するソースはどれを外しても動かなくなりますので、
じゃあそういう仕様なのだろうかと……すみませんほんとうに何にも知らなくて……
でも、著作権に関係する言葉だけを覚えないなんていう
器用なバグがあるのでしょうか。

やっぱり規約違反ですね……どうしよう………
013812303/06/21 14:16ID:KU8WU14M
正確な原因は著作権とかの問題じゃないみたい。
勝手に引用して悪いけど、

ボットが『ジョン・レノン』は覚えますが、『ビートルズ』『ポール・マッカートニー』を覚えません………(?。
禁止用語か何かでしょうか。

覚えない単語に共通しているもの、それは「ー」。
ためしにやってみるとわかるよ。

それから言うと、実際には「覚えている」
つまり、データファイルには書き込まれているが、それが呼び出されないのが原因らしい。
これ以上はまだわからない
013912303/06/21 14:18ID:KU8WU14M
>やっぱり規約違反ですね……どうしよう………

レイさんがこのスレッドを見てらっしゃるかどうかは知らないけど、
原因見つけてバグ報告する事になっても、とりあえずこの事は黙っておくよ。
014013203/06/21 14:22ID:???
ゴメンネ。昔プログラミングとは関係のない所でユーザーサポート
やってて酷い目にあった経験があったものでw

原因は正規表現とか置換とか?
(スク読んでないけど)
マルチバイトのやつじゃなければ、mb_で試してみるとか。
014112503/06/21 14:31ID:???
>123さん
…………解りました………!
びっくりしました。そうだったんですね!なるほど!ほんとだ!
だからミッキーマウスもアーノルド・シュワルツネッガーも
オードリー・ヘプバーンもマリリン・モンローもダメだったんですね!

………アレ?だけどタモリもはじかれます。

すみません本当に。もしレイさんがここをご覧になった暁には、
レイさんの取られます処置に従おうと思います。
こんなに人目に触れる場所なので、遠からず彼もご覧になるかと思いますが……
いろいろ手を尽くして下さって、本当にありがとう。

>132さん
いえ、そもわたくしが全ての元凶ですので………
レイさんに黙ってここに書き込みするのに、後ろ暗いのです。
ほんとうにごめんなさい。

うわあ…だんだん自分がネットの契約違反者になっていく……
ネットの契約書を読むたびにそんな違反は普通に使っててしないだろうと
思っていましたが、初めて解りました。うう。
0142nobodyさん03/06/21 14:36ID:???
>>141
ガンガレ
0143あぼーんNGNG
あぼーん
014412303/06/21 14:59ID:KU8WU14M
まぁ原因はわかった・・
でも私が修正しようとすると、ややこしいやり方になっちゃう(しか知らない)から、
どう修正するかは、レイさんにおまかせするよ。
とりあえずサポ板に書き込みに逝って来まふ
014512503/06/21 15:04ID:???
>123さん
何から何までありがとうございました。
ご恩とご好意、忘れません。
これに懲りて、ちっとは自力でプログラムを弄れるようにお勉強いたします。
…とりあえずわたしも理系学生のはしっこですし(泣

123さん、132さん、本当にありがとうございました。

>142さん
心にズキンと響くイイお言葉ですねがんがれ。
ありがとうございます。がんがります。
0146nobodyさん03/06/21 15:06ID:???
やっと雑談終わったか・・・
014712303/06/21 15:40ID:???
書いてる途中に家事頼まれて遅くなった。
ほいじゃね。
0148nobodyさん03/06/21 16:09ID:3yZp62xo
ID,dat1,dat2,dat3

というデータがPOSTされてくるので、既存のログファイルに、
POSTされたIDがあればエラー、なければデータ追加するには
どうすればいいでしょうか。
IDは固定長、dat1~3は可変長のデータです。

0149あぼーんNGNG
あぼーん
0150nobodyさん03/06/21 16:39ID:???
ログファイルを自力で検索。
どこで悩んでるの?
0151nobodyさん03/06/21 16:41ID:???
>>148
eregつかえば?
0152nobodyさん03/06/21 17:08ID:VyXOk/2c
while ($temp = <STDIN>) {
chomp($temp);
print "$tempが入力されました\n";
}

これだとABCDと入力したら ABCDが入力されました、と出て、

while ($temp = <STDIN>) {
$temp2 = chomp($temp);
print "$temp2が入力されました\n";
}

これだとなぜか、1が入力されました、としか出ないのはなぜですか?(´・ω・`)
0153あぼーんNGNG
あぼーん
0154nobodyさん03/06/21 17:09ID:???
>>152
うあ、誤爆スマン 。・゚・(ノД`)・゚・。
0155nobodyさん03/06/21 21:15ID:???
phpに
Cでいう
do〜while
と同じような働きをする
ものってありますか?
0156404.HDML ◆StMXML.EXE 03/06/21 21:21ID:???
>>155
ズバリそのものが有る悪寒。C自体は知らないけど、同名の関数が。
0157あぼーんNGNG
あぼーん
0158あぼーんNGNG
あぼーん
0159nobodyさん03/06/21 21:59ID:???
PHPマヌアル嫁↓
0160nobodyさん03/06/21 22:30ID:???
え?俺?
0161あぼーんNGNG
あぼーん
0162nobodyさん03/06/22 02:42ID:???
PHPマヌアル嫁↑
0163nobodyさん03/06/22 02:49ID:???
PHPマヌアル嫁←
0164影03/06/22 07:56ID:???
配列の中身を5列のテーブルで表示するにはどうやったらいいでつか?

$hoge = file ( "test.log" );

echo "<table border=1>";
for ( $a = 0 ; $a < count($hoge) ; $a++ ){
echo "<tr>";
for ( $b = 0 ; $b < 5 ; $b++ ){
echo "<td>";
echo "$hoge[$a]";
echo "</td>";
}
echo "</tr>";
}

echo "</table>";

と、やってみますたが、見事に失敗しますた(ウトゥ
0165nobodyさん03/06/22 10:53ID:???
>>164
どういう内容のtest.logに対して、どう表示したいの?
for( a ){
 for( b ){
  echo hoge( a );
 }
}
になってるから、bの回数分(5回)だけ同じ$hoge[$a]を1行に出力するよ。
0166nobodyさん03/06/22 13:16ID:v4BkkZfH
123
456
789
10

みたいに表示したいので、半日悩んだ末↓でやったらとりあえず、上手くいったんだけど、
なんかしっくりこない。(echo"$k";が2回あるあたり)
もっとスマートなやり方ありますか?

$k=1;
for ($i=1;$i<=4;$i++) {
 if ($k==10) {
  echo"$k";
  break;
 }
 for ($j=1;$j<=3;$j++) {
  echo "$k";
  $k++;
 }?><br><?php echo ("\n");
}
■ このスレッドは過去ログ倉庫に格納されています