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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/08/07(月) 13:11:50ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレは>>2-10 関連スレは>>4-10 FAQは>>6-10 辺り

◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0345nobodyさん2006/08/13(日) 13:50:16ID:???
foreach で 連想配列に格納されている 文字列に関連づいている要素( [ 'abc' ] など ) と、
数字に関連づいている要素( abc[1] など ) の数を別々にカウントしたり、取り出す方法ってないんでしょうか?
0346nobodyさん2006/08/13(日) 13:51:51ID:???
ループ内で条件分岐させてカウントしていけばいいんじゃない?
0347nobodyさん2006/08/13(日) 14:13:46ID:???
うーむ もっとすっきりした方法ないんですかね。。
0348nobodyさん2006/08/13(日) 14:33:56ID:???
>>347
取り出す方法を模索してもいいと思うけど
文字列と数字(内部的には全部文字列だが)のキーが混合になる
連想配列が本当に必要か、取得しやすい配列構成に変えるとか、
そっちを考えてすっきりさせた方がいいんじゃね
0349nobodyさん2006/08/13(日) 14:41:19ID:???
いや PHPでDBから取得すると自動的にそうなるんですよね。
便利だしなぁ
0350nobodyさん2006/08/13(日) 14:42:05ID:???
PDO関数使ってどっちかに固定しろ
0351nobodyさん2006/08/13(日) 14:52:08ID:???
>>349
DBならfetchの方法変えるだけで文字列・数字どっちで取るか固定できる
マニュアル嫁
0352nobodyさん2006/08/13(日) 14:54:15ID:???
情報後出しすんなよ
0353nobodyさん2006/08/13(日) 15:41:37ID:???
便利だしなぁ  > 2つとれると便利だから使ってるってだけ
fetchでかえられることぐらいしっとるわw
0354nobodyさん2006/08/13(日) 15:44:05ID:???
>>353
場面に応じた取捨選択も出来んヤツが知っとっても意味が無い
0355nobodyさん2006/08/13(日) 16:05:19ID:???
PHPから、HTMLレイアウトコードを吐き出すプログラムを作る場合、HTMLデータはどうやって保持してますか?
それとも、PHPで吐き出すのはやらないんですかね。
0356nobodyさん2006/08/13(日) 16:12:02ID:???
HTMLレイアウコードってのがどういう特別なものなのかわからんが、
所詮テキストだろうから普通に出力すればいいべ
0357nobodyさん2006/08/13(日) 16:19:07ID:???
決まったレイアウトを吐き出す共通クラスが作りたいなと思って。

HTMLレイアウトコードを文字列としてPHPクラスに保持しておく場合、改行コード付にしなければ
吐き出した後のソースが汚くなるんですよね。毎回付加するのも見にくい(?)し。
やっぱり別ファイルにHTMLを書いて、それをincludeしてあげるクラスがいいのかな。

ある共通化されたテーブルレイアウトの中に値を書きたい場合は、開始用、終了用のメソッドを作って、
それぞれ別ファイルを作って・・・って面倒でなんか汚いですね。

HTMLのレイアウト情報の共通化ってどうやっているんだろう・・・・?
0358nobodyさん2006/08/13(日) 16:24:30ID:???
もの凄く不細工な感じがするのですがスマートに出来る関数はありますでしょうか?

$uri = $_SERVER['REQUEST_URI'];
echo substr($uri,$p+1,strlen($uri)-strrpos($uri,'/'))
0359nobodyさん2006/08/13(日) 16:24:32ID:???
>>357
テンプレートライブラリのことか?
0360nobodyさん2006/08/13(日) 16:25:20ID:???
>>359

そういうことです。smartyとか参考にすればいいんでしょうか?
0361nobodyさん2006/08/13(日) 16:26:17ID:???
いまいち何で悩んでるのか具体的にわからん
大枠のテンプレートとなるレイアウトページから
各ページで変化する個別のコンテンツ部分は
includeなりなんなりで読み込むってのは割と常套なやり方だと思うが
0362nobodyさん2006/08/13(日) 16:26:28ID:???
>>360
素直にSmarty使えばいいと思う

ライブラリを書きたいというなら参考にすればいいだろうし
0363nobodyさん2006/08/13(日) 16:26:57ID:???
>>355
「HTMLレイアウトコード」って用語を聞いたことないんだけど、
一般的な用語なの?
ググってもヒットしないんだけど。
http://www.google.co.jp/search?q=%22HTML%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%22

なんとなくテンプレートエンジン作ろうとしてる気はするけど。
0364nobodyさん2006/08/13(日) 16:30:40ID:???
>>358
echo basename($_SERVER['REQUEST_URI']);
か?
0365nobodyさん2006/08/13(日) 16:31:43ID:???
>>358
$pてなんだ
0366nobodyさん2006/08/13(日) 16:41:48ID:???
>>364-365
dirnameの方でした、ありがとうございます
0367nobodyさん2006/08/13(日) 16:43:42ID:???

1 <table ...>
2 <tr ...>
3 <td ...>
4
5 // ページごとにレイアウトを記述
6
7 </td>
8 </tr>
9 </table>

大雑把に書くと、1〜3行 が新テーブルの開始タグ、 7〜9が新テーブルの終了タグとして
使えたら便利だなぁって思ってます。

そうすると↓のように便利になるかなと。

1 <?PHP Layout::A( パラメータ(任意) ); ?>
2
3 // ページごとにレイアウトを記述
4
5 <?PHP Layout::_A(); ?>

こういう共通化ってどうやってますか?
0368nobodyさん2006/08/13(日) 16:54:21ID:???
>>367
HTML的に見たらテーブルでレイアウトするテンプレートエンジンなんか存在価値無いだろう
0369nobodyさん2006/08/13(日) 17:05:16ID:???
>>367
ページのヘッダ・フッタのレイアウトの意味合いじゃなくて
テーブル単位(<table>〜</table>)でって意味合いで言ってるなら
それ全然便利じゃないぜごちゃごちゃするだけだ
そこは普通にtableタグ書きゃいい
0370nobodyさん2006/08/13(日) 17:06:40ID:???
調べたらカスタムタグっていうやつだった。
テーブルに限らずいろいろ定義して使えるようなものね。
>>368 存在価値ありましたね。

PHPで作っている人いたので流用させてもらうことにしました。
0371nobodyさん2006/08/13(日) 17:28:03ID:???
脊髄反射イクナイ
0372nobodyさん2006/08/13(日) 19:45:05ID:???
情報を後だしすんなっての
0373nobodyさん2006/08/13(日) 19:46:25ID:???
最初はテーブルのことしか言ってないくせに、勝ち誇って偉そうですねw
0374nobodyさん2006/08/13(日) 20:45:44ID:???
てかここ低レベルなやつ多すぎ
見てると萎えてくる
0375nobodyさん2006/08/13(日) 20:47:25ID:???
中学生がおおいからな
0376nobodyさん2006/08/13(日) 22:13:08ID:t3hDjrcl
PHP4をつかって、Json形式のデータをデコードしてパースしたいと思っています。

<?php

require_once('JSON.php');

$json = new Services_JSON();
$js1 = '[{"url":"http://www.yahoo.co.jp/";,"title":"Yahoo Japan!"}]';
$js2 = '{"url":"http://www.yahoo.co.jp/";,"title":"Yahoo Japan!"}';

$decoded = $json->decode($js1);

$hoge = $decoded->title;
print "title=".$hoge;

?>

と書いた場合に、$js2をパースした場合はうまく行きますが、$js1をパースした場合はうまくいきません。
"[]"が含まれているからだと思います。[]が含まれていてもうまくいく方法はありませんか?
03773762006/08/13(日) 22:16:41ID:t3hDjrcl
自己解決しました。
0378nobodyさん2006/08/13(日) 23:36:15ID:eyKLaI69
phpって 〜秒待つ みたいな関数ってないの?
処理後3秒待って他の処理したいときとかどうすればいいの
0379nobodyさん2006/08/13(日) 23:39:16ID:???
ムリ。素直にpython使え。
0380nobodyさん2006/08/13(日) 23:39:45ID:fTOpOca2
sleep()
0381nobodyさん2006/08/13(日) 23:42:14ID:???
どこが「素直」なのかと小一時間(ry
0382nobodyさん2006/08/14(月) 01:10:19ID:???
ワラ
0383nobodyさん2006/08/14(月) 01:41:11ID:???
>>397-370
プ。激しくレヴェルが低いな。でも、それがこのスレの醍醐味かな?
0384nobodyさん2006/08/14(月) 02:07:14ID:???
レスアンカーすらまともに打てないレヴェルの君へ。

オマエモナー
03853832006/08/14(月) 02:16:41ID:???
>>384
誤)>>397-370
正)>>367-370
オレ、レヴェル低すぎwwwww
0386nobodyさん2006/08/14(月) 02:30:49ID:???
>>385

正直あんたみたいに釣られてヒョイヒョイ出てくる輩がいるから余計にレベルが低くなる。
03873852006/08/14(月) 02:38:40ID:???
>>386
まぁ、そういうあんたもオレに釣られちゃってるけどな。今日は大漁。
0388nobodyさん2006/08/14(月) 02:45:01ID:???
いい加減ネタはネタでさっさと流せよ…
0389nobodyさん2006/08/14(月) 03:10:13ID:???
次の質問まだー?
0390nobodyさん2006/08/14(月) 06:49:54ID:???
mysql の4.0.26はon duplicate key updateって使えないの?
0391nobodyさん2006/08/14(月) 07:48:30ID:???
4.1からなのかー
替わりのSQL文だれか教えて
0392nobodyさん2006/08/14(月) 08:21:09ID:???
>>391
つ http://pc8.2ch.net/test/read.cgi/db/1148936556
0393nobodyさん2006/08/14(月) 11:30:35ID:???
fopenのaモードの場合の動作、phpマニュアルの説明は間違ってますよね?

>ファイルポインタをファイルの 終端に置きます

実際は、オープンした直後のファイルポインタは先頭ですよね。
ファイルポインタがが終端に置かれるのではなく、ファイルポインタがどこを指していても書き込みは終端から行われるという事でしょうか。
0394nobodyさん2006/08/14(月) 11:36:32ID:???
>>393
どっちでもいいような気はするけど、何か不都合があるの?
0395nobodyさん2006/08/14(月) 11:46:32ID:???
>>394
不都合というか、公式のマニュアルが、実際の動作と全く真逆の事を言うという事があるのかなぁと思いまして。
翻訳時に表現がややずれてしまったとかでしょうか?
0396nobodyさん2006/08/14(月) 11:47:42ID:???
>>393
今'a'で開いた直後にftellで調べたら確かに0だったが、

http://jp.php.net/manual/ja/function.ftell.php
ftell() は、("a" フラグ付きでオープンされた) 追加のみ可能な
ストリームに対する結果も未定義です。

ってあるから'a'モードが特殊で
実際はファイルポインタは終端にあるんじゃね?
0397nobodyさん2006/08/14(月) 11:51:57ID:???
>>396
あぁ、、なるほど。ftell()の方の問題でしたか。私もftell()で調べました。
納得です。
0398nobodyさん2006/08/14(月) 11:54:53ID:RvQDryMl
kaizoudo.txtが
01:640x480
02:800x600
03:960x600
04:1024x768
05:1600x1200
見たいな感じになってるんですが
番号と解像度を二次元配列に格納するのにうまいこといかないんですけど
どのへんがマズイですかね?
以下ソースです

$kaizoudo = array();
$fp = fopen('kaizoudo.txt', 'r');
for($k = 0;!feof($fp);$k++){
$line = chop(fgets($fp));
 $temp = explode(":", $line);
 $kaizoudo[$k] = array($temp[0], $temp[1]);
 print "$kaizoudo[$k][0]:$kaizoudo[$k][1]<BR>";
}

これを実行すると
Array[0]:Array[1]
みたいなのが出力されちゃいます
0399nobodyさん2006/08/14(月) 12:03:51ID:???
$kaizoudo[$k]の中には配列が入ってるよな?
だから print "$kaizoudo[$k]";の結果表示は Array だ。
その後ろに[0]ってかいてあるよな?
だから print "$kaizoudo[$k][0]";の結果表示は Array[0] だ。
これが今の状態。
つまりprintが一次元配列か二次元配列か分かってないのが原因。
{}で囲むと大丈夫だよ。
0400nobodyさん2006/08/14(月) 12:07:36ID:???
おっぱいかっこのことですねw
0401nobodyさん2006/08/14(月) 12:20:14ID:???
>>399
なるほど!
格納はちゃんとできてたんだけど表示がうまくいってなかったんですね。
分かりやすい解説ありがとうございました。
0402nobodyさん2006/08/14(月) 12:24:56ID:QXYq1pPL
Windows XP SP2
PHP 5.1.4
の環境で strtolower で誤変換が発生するみたいだが
これってバグかな?

<?php

$str = '検索エンジン';
echo strtolower($str); // 「検索トンヘン」と表示される

?>
0403nobodyさん2006/08/14(月) 12:27:48ID:???
>>402
「トンヘン」て・・・
0404nobodyさん2006/08/14(月) 12:32:09ID:???
>>402
マルチバイト文字対応じゃない関数使えば当然
mb_strtolower使え
0405nobodyさん2006/08/14(月) 12:37:44ID:???
>>402
mb使うのがまず第一だけど、それ以前に文字コードの知識もなしでShift_JIS使っちゃダメだよ。
0406nobodyさん2006/08/14(月) 12:48:46ID:???
>>402
Shift_JISで「検索エンジン」はアスキーコードで以下のようになる。

140 159 141 245 131 71 131 147 131 87 131 147

でだな、途中の71と87はGとWのアスキーコードなんだよ。
その部分はアルファベットとして見られて、小文字に変換され、103(g)と119(w)になる。

140 159 141 245 131 103 131 147 131 119 131 147

という値が結果として返る。これはShift_JISで「検索トンヘン」となる
04074022006/08/14(月) 12:49:08ID:???
>>404
echo mb_strtolower($str, 'SJIS');
で出来ました。ありがとうです
>>405
精進します
0408nobodyさん2006/08/14(月) 13:54:45ID:???
おっぱい括弧といい、検索トンヘンといい、ここは実に愉快なスレですね。
0409nobodyさん2006/08/14(月) 14:52:12ID:???
フォームからREQUESTで値を取得するとき、
文字列の末尾に「表」という漢字があるとなぜか「\」が付加されてしまいます。
例えば、フォームに「あいうえお表」と打ったとすると、実際に取得する値は「あいうえお表\」となってしまうのです。
他の漢字やひらがな、カタカナ等では発生しないようです。

該当部分のソースはこのような感じです。
$title = $_REQUEST['title'];
<input name="title" type="text" id="title" value="<?php echo $title; ?>" />

どのようにすればよいのか全く検討もつかず、こちらでお伺いした次第です。
何卒ご指南のほどをよろしくお願いいたします。

サーバー : IIS 5.1
PHP : 5.1.4
0410nobodyさん2006/08/14(月) 14:56:58ID:???
>>409
Magic Quate GPC を切って下さい。
0411nobodyさん2006/08/14(月) 14:58:46ID:???
>>409
安易にREQUESTを使わないで下さい
0412nobodyさん2006/08/14(月) 15:00:49ID:???
>>409
安易にShift_JISを使わないで下さい
04134092006/08/14(月) 16:47:52ID:EO88qrv9
先ほどはsageてしまい申し訳ありませんでした。

>>410
既知の問題だったのですね。
ありがとうございます。
>>411
そうですね。REQUESTは危険かもしれません。
変更したいと思います。
>>412
PHP等のスクリプトではやはりShift-JISは適さないのですね。
大人しくUnicodeかUTFにしてみます。

無知なもので、おかしなコーディングもあったようでしたが、見事解決することができました。
質問と関係のない部分まで指摘していただき非常に助かりました。
下らない質問に返答していただき、ありがとうございました。
0414nobodyさん2006/08/14(月) 17:06:51ID:???
web上からcgiプログラムを保存する方法はありませんでしょうか?
iriaなどを使っても上手く保存できません。
ご教授願います。
0415nobodyさん2006/08/14(月) 17:13:13ID:???
プログラムって実行前のプログラムコードか?そりゃセキュリティホール突いてクラッキングしたいって話か?
0416nobodyさん2006/08/14(月) 17:14:06ID:???
久しぶりに聞いたIriaって
0417nobodyさん2006/08/14(月) 17:18:15ID:???
んーphpにかすってもいないしw

サーバサイドで動くスクリプトがDLできたら俺は恥ずかしい思いをすることになる。
やめてくれ
04184142006/08/14(月) 17:21:04ID:???
>>415
やはりそういう事になるんですね。
諦めます。板汚し失礼しました。
0419nobodyさん2006/08/14(月) 17:25:57ID:???
そんな事されたら$oppaiとか$mankoとかいう変な変数名がばれてしまうじゃないかー
0420nobodyさん2006/08/14(月) 18:28:34ID:???
phpMyAdminでrootでは入れるのですけど自分で作ったユーザーで入ることができません。
rootで入って権限のところを見るとユーザーはちゃんと作成されていました。
何が原因なのでしょうか・・・
0421nobodyさん2006/08/14(月) 19:06:55ID:???
>>420
config.inc.phpのauth_type設定がっって程度の話じゃないの?
0422nobodyさん2006/08/14(月) 19:34:50ID:???
>>420
その自分で作ったDBユーザの権限に
見ようとしてるDBへの権限がないんじゃないの?
0423nobodyさん2006/08/14(月) 20:08:55ID:???
一定時間内の同一人物による連続投稿をはじくには、
IPアドレスを記録しておくのが良いでしょうか?
0424nobodyさん2006/08/14(月) 20:10:38ID:FIfhz0i4
あるPHPソースに、
<form action="./" method="POST">
とありました。手ものPHPの入門書には、<form action=のあとにはhoge.phpというふうに
phpファイル名を指定していたのですが、
上記の<form action="./" method="POST">の場合は、どのファイルにPOSTされるのでしょうか?

サーバOS:Windows2000
Webサーバ:Apache2
PHP:5.1.4
です。
0425nobodyさん2006/08/14(月) 20:12:23ID:???
index.php
04264242006/08/14(月) 20:29:55ID:???
残念ながら、そのディレクトリにはindex.phpはありませんでした。
その場合やはり、サーバの設定によるんですかね。
0427nobodyさん2006/08/14(月) 20:30:44ID:???
>>423
詳細な目的にもよるけど、IPアドレスによる判断はベターだろうね。

>>424
ブラウザ側は/で終わるURLに対してPOSTする。
GETで試せばURLに出るからすぐ分かる。FxのLiveHTTPHeaderでもいい。
受け取るのはApacheで設定したDirectoryIndex
だからindex.cgiかも知れないし、index.htmlかも知れない。
0428nobodyさん2006/08/14(月) 20:40:19ID:???
>>414

ホームページ丸ごとDLするソフトで出来たよ → Junshu
別にクラッキングじゃないしね

でもセキュリティかかってたらムリだよ
0429nobodyさん2006/08/14(月) 20:50:49ID:???
$a = "apple,orange,lemon";
$b = explode(",", $a);
echo $b;

としたとき、Arrayとでます。
結果として、appleorangelemonと出したいのですが、
echo $b[0].$b[1].$b[2];
の形式だと、配列の値が増えるに連れて大変になっていまいます。
もっとスムーズに書く方法はありませんでしょうか?
0430nobodyさん2006/08/14(月) 20:57:55ID:???
join
0431nobodyさん2006/08/14(月) 21:02:26ID:???
>>430
implodeですか。
explodeと同じものだと思い込んでいたので、見落としてました。
$b = implode("", $a)でいけそうですね。
どうもありがとうございます。
0432nobodyさん2006/08/14(月) 21:35:25ID:???
>>431
やるなら
$c = implode("", $b);
echo $c;

で、>>429でやりたかったことは
$b = str_replace(',', '', $a);
echo $b;
なんじゃないの?
0433nobodyさん2006/08/14(月) 21:41:03ID:???
>>432
$aの部分を配列にしました。
書き忘れててすみません。
$a = array("apple", "orange", "lemon");
$b = implode("", $a);

一応配列にいれたものを表示したかったので、
あんな感じのソースになりました。
0434nobodyさん2006/08/14(月) 22:27:53ID:???
file_get_contentsみたいに一つの変数にHTMLの内容が丸々入ってる場合
その変数から1行1行取り出すにはどうすればいいですか?
0435nobodyさん2006/08/14(月) 22:36:18ID:???
>>434
fopenしてfgets

fileで配列に格納
0436nobodyさん2006/08/14(月) 22:38:27ID:???
>>434
strtok
0437nobodyさん2006/08/14(月) 22:43:57ID:???
>>434
$lines = explode("\n", $file);
04384232006/08/14(月) 22:54:57ID:???
>>427殿
ありが�d

質問ついでに・・・・
この場合、IPアドレスとホストだと、どっち記録しておくのがよりベターでしょうか?
どっちも変わらないのでしょうか?

0439nobodyさん2006/08/14(月) 22:57:11ID:???
>>435-437
ありがとうございます。
explodeでいけました。
0440nobodyさん2006/08/14(月) 22:59:09ID:WuPf1wcI
Web作成板で誘導されたのでこっちへ来ました。

XHTML文書内でPHPを使う時のXML宣言のことなんですが、

<?="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"?>

↑こうやってやってみたのですが、最初の行に改行が入ってしまいます。
最初の行の改行を取り除くにはどうするべきでしょうか?
0441nobodyさん2006/08/14(月) 23:03:33ID:???
>>440
<?="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"?>
が書かれている前に改行が入ってるない?

違うなら、動作環境教えて
0442nobodyさん2006/08/14(月) 23:04:59ID:???
>>438
普通はIPアドレスを使うな。
ホスト名は無駄に長いし、サーバーによっては自動で逆引きできないし、
逆引きできたとしてもしない方が負荷は低いし。
0443nobodyさん2006/08/14(月) 23:08:38ID:???
>>440
BOM が付いてるから、じゃなかった? 最近似た話題があった。
04444232006/08/14(月) 23:19:01ID:???
レス早!!
>>442殿
更に詳しくありが�d <(_ _)>
04454402006/08/15(火) 00:05:55ID:???
>>441
前に改行は入ってません。
鯖はこちら↓
http://www.land.to/shiyou.php

>>443
詳しくないのですがBOMってメモ帳で編集した時に付くんじゃなかったっけ?
ちなみにTeraPadで編集しました。
■ このスレッドは過去ログ倉庫に格納されています