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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/02/05(日) 22:35:34ID:sf8bx52D
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/

過去スレは>>2
0607nobodyさん2006/02/18(土) 11:48:31ID:???
<?php
$OptValue = $_REQUEST["hoge"];

echo "<form>"
."<select>";
$num = 20;
for ($n = 1; $n < $num; $n++)
echo "<OPTION value=\"$n\"" . (($OptValue==$n)?(" selected"):("")) . ">$n</OPTION>";
echo "</select></form>";
?>
0608nobodyさん2006/02/18(土) 11:48:44ID:XJx/AN5S
example1.phpから、example2.php内のアンカーポイント(top)に飛ぶのに
リンクはhtmlみたいに、./example2.php#topってやってもエエのん?
(´・ω・`)そんなやり方ダセー!とか言われない?
0609nobodyさん2006/02/18(土) 11:53:09ID:???
驚かないで聞いてくれ!
#以降の文字は サーバに送信すらされないんだっ!
0610nobodyさん2006/02/18(土) 12:02:59ID:XJx/AN5S
>>609
えええええ?
じゃあ、どうすればエエのん?(´・ω・`)
0611nobodyさん2006/02/18(土) 12:08:09ID:???
>>608
エエよ
0612nobodyさん2006/02/18(土) 12:12:11ID:???
>>608
こういうことかい
http://nike.s151.xrea.com/info.php#module_gd
06136082006/02/18(土) 12:14:45ID:???
>>612
そうそう!それです!
よかった、もっとPHPらしいやり方とか
あるのかと思いました…。

>>611,612
お二方レスさんくすです!ヽ( ^∀^)ノ
0614nobodyさん2006/02/18(土) 12:39:46ID:???
>>605
>>587をもっかい良く嫁
0615nobodyさん2006/02/18(土) 12:57:40ID:???
>>612
全然関係ないけどログ検索機能イイ!!
0616nobodyさん2006/02/18(土) 13:49:44ID:???
>>601
>>606さんが行ってたユーザ関数を使う俺の場合
もっとこうしたらってのがあったらよろ
下ではvalueとselectしか出力して無いけど、optionタグ丸ごと出したほうがいいかもって気がしてきた

------------------------------
selected(5);

function selected($value)
{
print 'value=' . $value;
if($_GET["hoge"] == $value)
{
print " selected";
}
}
------------------------------
0617nobodyさん2006/02/18(土) 15:23:05ID:???
メールの件名のやつ?ISO-みたいな感じの奴にエンコードするには
どうすればよかとでしょうか?
mb_send_mail以外で使うためです。
0618nobodyさん2006/02/18(土) 15:41:40ID:???
>>603
php.iniに起因する起動時のWARNINGをキャッチするのは無理でしょ。
Apacheとかのログに一応でるけど。
php.iniをそんなに頻繁に書き換えることないと思うけど?

という上記の意味合いにも取れる質問なんだけど、
本当は下みたいな情報が欲しいの?
http://www.php.net/manual/ja/ref.errorfunc.php
http://www.php.net/manual/ja/function.set-error-handler.php

0619nobodyさん2006/02/18(土) 15:41:40ID:???
>>617
mb_encode_mimeheader
0620nobodyさん2006/02/18(土) 15:44:04ID:???
>>602
鯖エラーの内容をカモン
0621nobodyさん2006/02/18(土) 15:45:55ID:???
>>601
<OPTION value="1"<?php echp ($value==1)? " selected": ''?>>1</OPTION>
<OPTION value="2"<?php echp ($value==2)? " selected": ''?>>2</OPTION>
<OPTION value="3"<?php echp ($value==3)? " selected": ''?>>3</OPTION>
くらいしか…
0622nobodyさん2006/02/18(土) 15:47:30ID:???
>>604
「30回ループ」という仕様が変更頻度の高そうなものなら後者。
パフォーマンス的には前者。
0623nobodyさん2006/02/18(土) 15:49:18ID:???
>>616
optionタグに追加の属性とか入れたくなったときに困るから
俺ならselectedしか出さないようにする。
0624nobodyさん2006/02/18(土) 15:50:50ID:???
>>622
あ、しまった。パフォーマンスについてはforのループ条件次第かも。
06256042006/02/18(土) 16:02:18ID:???
>>624 
ありがとうございました。
変更はないですし前者でやってみます。
0626nobodyさん2006/02/18(土) 16:05:33ID:rgTa0qqQ
フォームから投稿された値がSJISで有るかどうかを判別するにはどうすればよいのでしょうか?
内部文字コードはSJISで、PHP4.4.1を使用しています。
0627nobodyさん2006/02/18(土) 17:14:38ID:???
>>626
単純にその値だけ見て厳密な判定は不可能。
(特定の文字が入力されると判定を失敗する場合がある)
よくある手法としては、hiddenで絶対に誤判定しない文字列を常時入れといて
そいつがSJISになってるかどうかで判定するという手法。
0628nobodyさん2006/02/18(土) 17:25:07ID:???
mb_detect_encodingはどう?
0629nobodyさん2006/02/18(土) 17:41:24ID:rgTa0qqQ
echo mb_detect_encoding($_POST[a], 'auto');
で$_POST[a]にいろいろしていましたが、SJISをうまく判別してくれません。。
hiddenでいれてもだめでした。

半角英数字だとASCII、ひらがなをいれると何も表示されず、iモードの絵文字を入れるとUTF-8になり、
何も入力しないとASCIIです。。
0630nobodyさん2006/02/18(土) 18:09:28ID:???
文字コード判定はあてにするな。
0631nobodyさん2006/02/18(土) 18:16:37ID:???
ていうか、半角英数字のみのSJISとASCIIを区別できると期待するのはおかしいぞ。
hexdumpしてみ。

それにiモードの絵文字ってそもそもSJISの範囲じゃないのでは?
調べたこと無いので違うかもしれないけど。
0632nobodyさん2006/02/18(土) 18:42:42ID:???
誘導されてきました。

Autorank PHPについてご存じの方いますか?
ttp://www.jmbsoft.com/software/arphp/

日本語での検索機能が動かないんです

"サイト"で検索すると

http;//〜Keyword=%A5%B5%A5%A4%A5%C8

というような感じでエンコードされて、画面にも サイト と表示されるのですが、
検索がうまくいっていきません。
文字コードはHTML、DB(MySQL)ともにEUC-JPで運用してます

よろしくお願いします >_<
0633nobodyさん2006/02/18(土) 18:43:52ID:hW4iLyW6
>検索がうまくいっていきません。

検索がうまくいきません でした
他のサイトでEUC-JPで運用しているサイトがあり、
うまくいってるようなのですが原因がわかりません >_<
0634nobodyさん2006/02/18(土) 18:55:35ID:???
>>629
それは多分、php.iniのautoの設定にSJISを入れてないせい。
0635nobodyさん2006/02/18(土) 19:30:25ID:???
>>629
autoじゃなく"SJIS,EUC-JP,JIS,UTF-8"にするとどーなる?
0636nobodyさん2006/02/18(土) 20:09:32ID:rgTa0qqQ
できました!ありがとうございます。

2chはどうやってSJISを見分けているのでしょう?
0637nobodyさん2006/02/18(土) 22:07:41ID:???
>>632ですが、MySQLは全文検索に対応してないんですね Orz

LIKE を使ってスクリプトのクエリ部分をいじってみます

他になにかいい方法ないのかな・・・
0638nobodyさん2006/02/18(土) 22:19:31ID:???
mb_convert_encoding("aiueo","SJIS","auto");
ってさ、mb_convert_encoding()にauto使うと時々失敗しちゃうよな?
0639nobodyさん2006/02/18(土) 22:21:56ID:???
文字コード問題はほんとにやっかい・・・

↑のはMySQLの問題だったとは orz
LIKEで代用 orz
0640nobodyさん2006/02/18(土) 22:25:10ID:???
そらぁまぁしょうがない。
ある集合がどの集合に属するか判定するって言う問題は奥が深ぇと
カンチョールもゆっとる。
0641nobodyさん2006/02/18(土) 22:27:35ID:???
マニュアルのmb_detect_order()のところに、
> auto" は、 "ASCII, JIS, UTF-8, EUC-JP, SJIS"に展開されます
とある。
なので、>>629のような現象が起こるのは至極当然のことかと。
0642nobodyさん2006/02/18(土) 22:47:53ID:???
>>641
>>いや、それだと>>629の状態にはならない。(ひらがなでSJISになるはず)
これって、最近のPHPの仕様が変わったのかWin32版の問題なのかは知らんけど、
"auto"は"ASCII,UTF-8"に展開されるみたいよ。SJISやEUC-JPは判定しない。
試しに
mb_detect_order("auto");
var_dump(mb_detect_order());
ってのを実行すると、結果は
array(2) {
[0]=>
string(5) "ASCII"
[1]=>
string(5) "UTF-8"
}
となるのよ。(PHP 4.3.10 Win32版の場合)
06436422006/02/18(土) 22:48:36ID:???
なんか変なとこに>>入っちゃった
0644nobodyさん2006/02/18(土) 23:35:34ID:VuSKJfnu
$str = '私は$fooです。';
$foo = "田中";

という状況で

$strのなかの$fooの値を反映したい
(つまり、$strの中身を「私は田中です。」にしたい)
のですが、何か良い方法があれば教えて下さい。
0645nobodyさん2006/02/18(土) 23:40:06ID:???
>>620
遅レスすいません。ロック中で処理できず502エラーでタイムアウトしてた感じです。ちなみに一年くらいそのスクリプトを使っていて、このようになったのは初めてです。現在普通に稼働してます。
0646nobodyさん2006/02/18(土) 23:52:04ID:???
>>644
いろんな方法があるけど、どれが良い?
0647nobodyさん2006/02/18(土) 23:52:33ID:???
>>644
○変数は使う前に宣言・初期化
○シングルクォートの中の変数はパースされないので、ダブルクォートを使う
0648nobodyさん2006/02/19(日) 00:02:36ID:???
>>644
evalかereg_replace辺りで
0649nobodyさん2006/02/19(日) 00:03:47ID:???
>>642

array(5) {
[0]=>
string(5) "ASCII"
[1]=>
string(3) "JIS"
[2]=>
string(5) "UTF-8"
[3]=>
string(6) "EUC-JP"
[4]=>
string(4) "SJIS"
}
-------------------------
WinXP
PHP Version 5.1.1
0650nobodyさん2006/02/19(日) 00:05:46ID:???
>>644
少なくとももう少し自分で実行してから質問するべき
0651nobodyさん2006/02/19(日) 00:08:40ID:???
おまいら普段文字列とか使うときシングルクォートとダブルクォートどっち使ってる?
0652nobodyさん2006/02/19(日) 00:12:12ID:???
case by case
0653nobodyさん2006/02/19(日) 00:14:46ID:???
>>645
自分でそんなの再現させたことないから分からんけど、PHPを実行中のApacheスレッドが
途中で異常終了しちゃったりなんかするとflockを解除できずに終わるかも。
flockって通常はプロセス単位で処理してるんでプログラムが異常終了=flockも解除だけど、
CGIと違ってSAPIなPHPみたいに「1個のPHPが異常終了してもApache自体は終了しない」場合では
OSはその終了を検知できないと思うんだよね。
となると、fclose時またはexit時、die時、エラー終了時などにPHPのコアが自動でflockを解除してるはずで、
それが実行できなかった場合にflockがいつまでもかかったままになるのかもしれない。

で、回避方法…定期的にApacheを再起動でもして、不正なflockを掃除するくらいしかないんじゃない?
どう考えてもApacheかPHPが正常動作しなくなった場合くらいしかそんな状態にはならんと思うから
その状態で対策しようったって無理がある気がする。

推測が外れてたらすまそ
0654nobodyさん2006/02/19(日) 00:16:11ID:???
>>649
PHPのバージョンによって挙動が違うのか??
0655nobodyさん2006/02/19(日) 00:23:07ID:???
>>654
PHPはバージョンが違うと恐ろしく変わってくるぜ!
0656nobodyさん2006/02/19(日) 00:34:54ID:???
>>649
試しに最新の4.4.2にしてもやっぱASCII,UTF-8になった…
v4系の問題??
0657nobodyさん2006/02/19(日) 00:38:25ID:???
>>656
mbstring.language = Japanese
を設定してないだけだ。
デフォルトのphp.iniではコメントアウトされてるぞ。
06586572006/02/19(日) 00:39:22ID:???
同じ話が http://ns1.php.gr.jp/pipermail/php-users/2004-June/022899.html にも出てるので参照しれ
0659nobodyさん2006/02/19(日) 00:58:56ID:???
お前らって結構優しいのな
0660nobodyさん2006/02/19(日) 01:14:45ID:???
このスレの半分は優しさで出来ています
0661nobodyさん2006/02/19(日) 01:16:48ID:8QITr0F/
訳あってHTMLに記事を書き込むPHPを書いてweblogのようなものを書いているのですが、
コメントやトラックバックの機能を実装したいと考えています。

管理者が(kakikomi.html)から記事を投稿した際に、(blog.php)でトップページに記事を書き足し、
その日付のHTMLをコメント用HTML(060218.html)として出力します。
コメントはcomment.phpがその日の日付を判別し、コメント用php(060218.html)に書き込まれます。

コメントを付けられたのが記事を投稿したその日ならいいのですが、
comment.phpは日付でコメント用HTMLを探しにいってしまうので、
日付が変わってからコメントをつけると次の日の日記を書いたときにコメントを書いたことになってしまいます。

長文で申し訳ありませんが、何かいい解決方法ありましたらよろしくお願いします。

フリーサーバーを使っていて、広告が入ると著しくデザインが崩れるので、
トップページをphpで構成したいところなんですが、なんとかHTMLで出力したいと考えています。
0662nobodyさん2006/02/19(日) 01:21:29ID:???
状況がよく分からないけどhiddenで記事の日付を渡すとかじゃ駄目なの?
0663nobodyさん2006/02/19(日) 01:22:05ID:???
正規化しろ
06646612006/02/19(日) 01:24:57ID:8QITr0F/
中身はこんな感じになってます
ttp://muroran-it.s60.xrea.com/up/data/207.zip
0665nobodyさん2006/02/19(日) 01:31:24ID:???
>>661
>comment.phpは日付でコメント用HTMLを探しにいってしまうので、
>日付が変わってからコメントをつけると次の日の日記を書いたときにコメントを書いたことになってしまいます。
この部分の仕様にかなり問題があるような気がするけど・・
あるブログの投稿に紐付けされたコメントなら、その関連を情報として残せばいいだけなのでは・・。
設計を考え直すべきなんじゃない?
0666nobodyさん2006/02/19(日) 02:24:57ID:???
結局、>>663の一言に尽きる感じではあるな
0667nobodyさん2006/02/19(日) 02:50:31ID:???
>>661
comment.php?date=060218 みたいに対象日付を付加してリンク張れや
0668nobodyさん2006/02/19(日) 08:26:45ID:???
>>653
そうですね。すごく稀なことだと思いますが、定期的なチェックが大事ですね。
どうもありがとうございました。
0669nobodyさん2006/02/19(日) 11:42:42ID:???
俺さ、最初配列って訳が分からなかったんだよ。
全部変数に入れればいいじゃんってな。
だから$int1 $int2 みたいに書いてたんだよ。
あ、もちろん最初の頃だけだぜ?
でな、とある関数に出会ったんだ。stat()ってヤツだ。
マニュアル見てみたらファイル情報を配列で返すって書いてあるんだよ。
そんなもん使ったことねーし興味ないけど、その時は気分が良かったんだな。
使ってみようと思ったんだよ。
で、いざ使ってみたらこの素晴らしい利便性!
世界が変わったよコードが半分に減ったよミスも減ったよ。

いや、それだけ素晴らしいってことを言いたかっただけだ。
じゃあな、また来るぜ。
0670nobodyさん2006/02/19(日) 11:56:21ID:iKD+hWT/
Hotwired JAPANの記事を読んでたら、変数名を短くするとほんの少し実行速度が
向上するらしいという表記を見つけたのですが、誰か試した人います?
http://hotwired.goo.ne.jp/webmonkey/2004/05/index1a_page2.html
0671nobodyさん2006/02/19(日) 12:06:10ID:???
>>670
結果は見えてる。
インデントや改行まで取り去らないと気がすまなくなる。
0672nobodyさん2006/02/19(日) 12:25:58ID:???
PHPで配列と呼ばれているものは厳密には配列ではない
0673nobodyさん2006/02/19(日) 12:29:59ID:iKD+hWT/
>>671
確かにそうですね。体感速度に影響ないくらいの向上なら、可読性優先の
ほうがいいかも。
0674nobodyさん2006/02/19(日) 12:41:24ID:???
・変数は全て1文字
・コメントなんて邪道なものはすべて取っ払う
・空白文字なんて以ての外、改行も入れずにスクリプトは1行で構成
・実行制御に余分な時間を取られるのでループは全て展開
0675nobodyさん2006/02/19(日) 12:42:27ID:???
一度つまったらデバッグがえらい大変そうだな
0676nobodyさん2006/02/19(日) 12:50:26ID:???
そして変数のissetとか周りで腐るとw
改行だけは省略できね。
0677nobodyさん2006/02/19(日) 13:33:06ID:???
>>674
昔BASICでゲームプログラミングする時はそんな風に仕上げてたな。
普通に記述してから変換ツール通したり。
0678nobodyさん2006/02/19(日) 13:55:11ID:iKD+hWT/
改行くらい入れないとテキストエディタの横スクロールが激しすぎて、生産性
大幅ダウンしそう...
0679nobodyさん2006/02/19(日) 14:12:11ID:???
まあ、大抵の人間はエディタは自動で折り返すようにしてるわけだが。
0680nobodyさん2006/02/19(日) 14:13:00ID:j5wr3rm8
datとかのログファイルを直接見れないようにするにはどうしたらいいんですか?
属性を606から変えたら、プログラムから読み書きできないし・・・
0681nobodyさん2006/02/19(日) 14:13:43ID:???
まあ、普通に作った後に改行を削除すりゃいいと思うんだが。
0682nobodyさん2006/02/19(日) 14:14:47ID:???
>>680
> 属性を606から変えたら、プログラムから読み書きできない
?(´△`) デキルダロ

拡張子をcgiとかにしれ
0683nobodyさん2006/02/19(日) 14:55:13ID:???
確認君や診断くんのようなproxy判定スクリプトを作りたいのですが、参考になるスクリプトはありませんか?
0684nobodyさん2006/02/19(日) 15:02:27ID:???
phpinfo
0685nobodyさん2006/02/19(日) 15:00:20ID:???
>>683
いや、作る段階でそんなこと言ってるようでは
役に立つ判定プログラムは作れないと思うよ?

というか、診断くんそのものをダウンロードすれば
参考どころの騒ぎじゃないだろ?
0686nobodyさん2006/02/19(日) 15:09:48ID:???
JpGraphで、GroupBarPlot内のバーに
隙間を開けたいんだけど、どうしたらいいかな?
BarPlotでSetWidth設定してもダメだった。
0687nobodyさん2006/02/19(日) 16:14:59ID:???
>>680
直接見られたくないファイルは、ドキュメントルートの下に置かない。
0688nobodyさん2006/02/19(日) 16:38:45ID:8orHyj9/
requireで読み込むファイルがSJISの場合、
自動的にEUC-JPに変換して読み込みたいのですが、
どうすればよいでしょうか?
0689nobodyさん2006/02/19(日) 17:11:43ID:iKD+hWT/
requireではないけど、
$line = file_get_contents('file');
$line = mb_convert_encoding($line, 'EUC-JP', 'SJIS');
でいかがでしょう?
0690nobodyさん2006/02/19(日) 17:51:33ID:???
require で読むのが PHP スクリプトが書かれているファイルではないってのは
非常識なコーディングだろ。
普通のファイルは >>689 のように読んでくれよ頼むから。
0691nobodyさん2006/02/19(日) 18:42:18ID:???
>>688
それ、他人が作ったライブラリとかの類?
0692sage2006/02/19(日) 19:06:37ID:iKD+hWT/
1行目
20行目
3行目
っていう内容のtest.txtというファイルの内容を、
1行目
2行目
3行目
というように一行だけ書き換えたいんですが、どうやればできますか。
file_get_contents->preg_replace->file_put_contentsという方法も
考えたのですが、これだとメモリを浪費しそうなので、一行ずつ操作
する方法を教えていただけるとありがたいです。
0693nobodyさん2006/02/19(日) 19:10:05ID:???
>>692
fopen "r"→fopen "w"→whileでfgetsしながらfputs
06946922006/02/19(日) 19:17:53ID:???
早速の回答ありがとうございます。
fopenを違う引数で2回呼び出すわけですね。使ったことがない関数がでて
きたので、これから早速試してみます。
0695nobodyさん2006/02/19(日) 22:49:33ID:QKFjYBJ6
ttp://www.seoup.com/linkact/act4/index.html

拡張子が
index.htmlのファイルでもphp利用可能なの?
htaccessで何かやってるのかな。。
0696nobodyさん2006/02/19(日) 23:02:40ID:???
>>695
何もやってないよ ^ ^
0697nobodyさん2006/02/19(日) 23:16:29ID:???
do{
$i++;
}while($i == 5);←ここで真ならば、特定の動作を行ってからdoに戻る
というようなことは可能でしょうか。
また、代替案もあればぜひご教授お願いいたします。
06986612006/02/19(日) 23:26:20ID:8QITr0F/
皆さんありがとうございます

>>667のようにするのって何て言うんでしょうか?
調べようにもよくわからないのですが・・・・
0699nobodyさん2006/02/19(日) 23:40:10ID:cMtmYVLo
>>698
単なるリンク
0700nobodyさん2006/02/19(日) 23:42:06ID:???
>>697
今いちやりたいことがよくわかりませんが、
無限ループさせたいのでしょうか?

while (1) {
$i++;
if ($i == 5) {
// 処理を記述
}
}

ではだめでしょうか?
07016612006/02/19(日) 23:59:21ID:8QITr0F/
>>699
phpにリンクでURLを渡す(?)
見たいなことなんでしょうか>?
0702nobodyさん2006/02/20(月) 00:08:50ID:???
<a href="./comment.php?date=060218">foo</a>
こういうことじゃないの?
07036972006/02/20(月) 00:16:12ID:???
>>700
ご返答ありがとうございます。
説明が分かり難く申し訳ありません。
無限ループではなく、$i==5が偽になった時点でループを抜けたいのです。
1)doの内容を実行
2a)whileが真ならば"特定の処理"を実行した後doを実行
2b)whileが偽ならば"特定の処理"を行わずにループ終了

御指南いただいたコードですと、ifのところが偽ならばwhileループを抜ける、ということです。
付け加えさせていただきますと、ちょうど下記の動作です。
$hoge = 1;
while ($hoge) {
$i++;
if ($i == 5) {
// 処理を記述
}else{
$hoge = 0; // breakで二重ループを抜けられると良いのですが・・・
}
}
この動作をdo...whileでできないものかと試行錯誤していたのですが、
ふと気づけば希望の動作が完成してしまいましたね・・・
ただ、もう少し綺麗な書き方はないでしょうか。
頼んでばかりで大変申し訳ないのですが、私の力量ですと案が浮かびません。
今一度、よろしくお願いいたします。
07046612006/02/20(月) 00:49:07ID:wo/bPpPB
comment.php?date=060218
        ~~~~~~~~~~~~~~
この部分はcomment.php側にはどのように送られて、
どう処理して受け取ればいいのでしょうか?

0705nobodyさん2006/02/20(月) 00:53:25ID:???
「クエリ」「GET」とかでぐぐれ
0706nobodyさん2006/02/20(月) 01:30:38ID:???
echo $_GET['date'];
■ このスレッドは過去ログ倉庫に格納されています