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

【PHP】質問スレッドpart30【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/10/25(火) 06:50:06ID:Q4oGlTH3
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。

過去スレ、関連リンク、FAQ等>>2-10辺り
0412nobodyさん2005/11/13(日) 17:47:35ID:???
>>411
ながったらしい汚い物を書いてしまったのはあやまる。すまなかった。
マジレスするが、なんで2点?
0413nobodyさん2005/11/13(日) 18:54:29ID:???
点数は適当だが

突っ込みどころだらけで何とも言い難い…
最低でも
・バグ
・無意味に1文字ずつ切り取り(ヒント:substr)
・同じ処理はarray_map()や自作関数
の改善はやってくれ。
0414nobodyさん2005/11/13(日) 18:54:54ID:???
>>412
「ながったらしい汚い物」だからだろ。何が疑問なんだ。
あとせめて「何をするスクリプトか」くらい書けよ。
0415nobodyさん2005/11/13(日) 19:29:49ID:???
>>414
$strを$startcolorから$endcolorにグラデーション表示
以外と分からないもの?
0416nobodyさん2005/11/13(日) 19:32:23ID:???
>>413
サンクス!
最後の$result簡単に作るために
substr()無意味ではないと思うんだけど、、
違うやり方が見つからん。
0417nobodyさん2005/11/13(日) 19:37:59ID:???
ビットシフトしろ
0418nobodyさん2005/11/13(日) 20:34:30ID:???
>>416
R,G,B を配列にするだけでも随分と見やすくなると思うのだけど。
〜略〜
/********** 色をRGBにで10進数に変換 *********/
$startcolor = mb_convert_kana($startcolor,"a","SJIS"); //必要?
$endcolor = mb_convert_kana($endcolor,"a","SJIS");   //必要?
$startcolor10 = array(/* R, G, B*/);
$width = array(/* R, G, B*/);
for ($i = 0; $i < 3; $i++) {
  //開始色
  $color16 = substr($startcolor, $i * 2, 2);
  $startcolor10[$i] = hexdec($color16);
  //終了色
  $color16 = substr($endcolor, $i * 2, 2);
  $endcolor10 = hexdec($color16);
  //減色幅
  $width[$i] = @round( ( $startcolor10[$i] - $endcolor10 ) / $strcount,0);
}
/************* 結果作成 *************/
$result = '';
for($i=0;$i<$strcount;$i++){
  $color16 = array(/* R, G, B*/);
  for ($x = 0; $x < 3; $x++) {
    $color10 = $startcolor10[$x] - ( $width[$x] * $i);
    $color16[$x] = @dechex($color10);

    //$color10が -1 の時、FFFFFFFF になってしまうので下記の方がいいと思われ
    //if(strlen($color16[$x])==1) $color16[$x] = "0".$color16[$x];
    $color16[$x] = substr("0{$color16[$x]}", -2);
  }
  $result.="<font color='#{$color16[0]}{$color16[1]}{$color16[2]}'>{$strarray[$i]}</font>";
}
0419nobodyさん2005/11/13(日) 21:08:16ID:???
>>415
中身見て判断しろって時点でナメきっている
0420nobodyさん2005/11/13(日) 21:36:49ID:???
>>418
2人ともくだスレでやってくれ
0421nobodyさん2005/11/13(日) 21:41:53ID:???
RGBの処理なんてイディオムだと思ってたけど最近そうでもないんだな。
0422nobodyさん2005/11/14(月) 00:51:37ID:???
>>421
ビットシフトのこと?
まあPHPで書くのに色情報を24ビット(or 32ビット)に押し込まなきゃならん理由がないからな。
とくにRGBをそれぞれ独立にオーバーフローなども考慮した計算したい場合、シフトと逆シフトが余計なステップ踏むことになる。
よほどメモリの食い方に問題がある場合以外はあえてビットシフトしないじゃない?
0423nobodyさん2005/11/14(月) 01:02:02ID:???
PHPでPHPを処理することはできませんか?
0424nobodyさん2005/11/14(月) 01:10:21ID:???
eval()
0425nobodyさん2005/11/14(月) 01:14:58ID:???
>>423
include
0426nobodyさん2005/11/14(月) 01:57:55ID:???
evalすごい><
まだ使い方わかってないけど希望が見えてきました。
includeも頑張ります。
ありがとうございました。
0427nobodyさん2005/11/14(月) 08:24:50ID:???
>>422
いやRGBって書いてあるじゃん
0428nobodyさん2005/11/14(月) 08:33:12ID:???
ああぐぐり方を間違ったとか?
0429nobodyさん2005/11/14(月) 08:44:08ID:???
>>421 → >>422 → >>427
のエスパー会話を誰か翻訳してくれないか?
0430nobodyさん2005/11/14(月) 08:49:53ID:???
RPGについて
0431nobodyさん2005/11/14(月) 08:58:58ID:???
別にビットマップ扱おうってわけじゃないんだし
人間様に分かりやすい10進数が最凶伝説
0432nobodyさん2005/11/14(月) 09:00:43ID:???
16進法の方が書きやすいと思うよ
0433nobodyさん2005/11/14(月) 09:06:27ID:???
人間様…
0434nobodyさん2005/11/14(月) 09:12:53ID:3QndTAPn
ログイン認証について質問です。
今のところ、ユーザー名とパスワードが送信された場合にデータベースを検索し、正しいユーザー名とパスワードだった場合に
$_COOKIE['login'] = md5($username . time());
のような形にしているのですが、ユーザーがログインの状態を保ったまま別のページにアクセスした場合に、そのユーザーが元々どのユーザーだったのかを判別する方法がわかりません。
$_COOKIE['login'] = $username . time();
のようにそのままクッキーに書き込むと、何らかの方法でクッキーをのぞき見することが出来てしまった場合に情報の漏洩が起こってしまいます。
ユーザー情報を復元するにはどうしたら良いですか?
04354342005/11/14(月) 09:14:25ID:3QndTAPn
環境を書き忘れました。
Linux Apache1.3.33 PHP5.0.5です。
それと、自宅のWindowsXP PHP5.0.5だと、クッキーの情報が読めないことがあります。
原因がわかる方、いらっしゃいましたらご教授お願いします。
0436nobodyさん2005/11/14(月) 09:17:31ID:???
md5の値をファイル名にしてそこにユーザ名などのデータを入れとくと
クッキーからユーザ情報などを復元できる

ていうようなのを勝手にやってくれるのがPHPのセッションだと思うんですけど
0437nobodyさん2005/11/14(月) 09:24:12ID:???
くだ質レベルだな
0438nobodyさん2005/11/14(月) 09:54:52ID:???
$_COOKIEに放り込んでいる時点で破ってくれって言ってるようなものだしね
04394342005/11/14(月) 10:27:02ID:???
>>436 >>438
返答ありがとうございます。
なるほど。そこそこ手間をかけないといけないのですね。
セッションに関してはセキュリティ上問題ないのでしょうか?
ログイン認証を行うにはURLに直接埋め込む方法とクッキーを用いる方法の大きく2通りがありクッキーを用いる方法がより安全である、ということを(どこで見かけたのか忘れてしまったのですが・・・)聞いたことがあります。
(うろ覚えなので間違ってたら申し訳ございません)
04404342005/11/14(月) 10:28:01ID:???
>>437
すみません。精進します。
0441nobodyさん2005/11/14(月) 10:34:11ID:???
>>439
>クッキーを用いる方法がより安全である
そりゃその2つだけを単純に比較した場合の話。
自分でも書いてるが、認証の実装方法のほうが影響は大きい
セキュアな認証を実現する手段はググれば結構見つかるのでは?
0442nobodyさん2005/11/14(月) 10:52:57ID:???
>>439
SIDを丸投げされた時の対応を忘れなければ良いと思う
04434342005/11/14(月) 11:03:03ID:???
>>441
なるほど、定番みたいな方法はないのですね。
実際、WebメールなんかのログインではURLに情報を埋め込んでいるようですし、何がよくて何がまずいのかの理解に苦戦してます。
もう少しググってみようと思います。

>>442
すみません。SIDを「丸投げ」というのはいったい・・・。
ググってみたところ、SIDというのはユーザーを識別するための番号のことだと思うのですが。
間違っていましたらご指摘お願いします。

あと、クッキーの情報がうまく読めないのですが理由はわかりますでしょうか?
0444nobodyさん2005/11/14(月) 11:08:29ID:???
>>443
うまく読めない……では分からない。
具体的に、どうクッキーに書き込んで、
それを読み出そうとすると、どうなってしまうのか、
具体的に書かないと。

04454342005/11/14(月) 11:25:27ID:???
>>>444
ご指摘ありがとうございます。
大まかにですが、以下のようなコードを使っています。

// login.php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// ユーザー名とパスワードをデータベースにて照合
$_COOKIE['login'] = md5($username . time());
header("Location: home.php");
}

これで、ロケーション先のhome.phpで$_COOKIE['login']の値を取得することができません。
(おそらく空白が入っています)
何か原因は思い当たりますでしょうか?
04464452005/11/14(月) 11:28:47ID:???
少し言葉足らずでしたので付け加えさせてください。
上記の$usernameはデータベースにて照合する際に$_POST['username']から値を代入してあります。
0447nobodyさん2005/11/14(月) 11:34:44ID:???
>>446
つーか、setcookieは?
0448nobodyさん2005/11/14(月) 11:37:35ID:JySqj704
<?php
for($lp=0;$lp<=100;$lp+1)
{
echo"$lp \r\n";
}
?>

↑の様に書くと、「0」を無限に書き出すのですが。何か間違ってますか?
ど素人ですいません。
0449nobodyさん2005/11/14(月) 11:39:30ID:???
>>448
for($lp=0;$lp<=100;$lp++)
もしくは
for($lp=0;$lp<=100;$lp=$lp+1)
では?
0450nobodyさん2005/11/14(月) 11:40:41ID:JySqj704
>>449

ホントすいません。

これはマジ自己嫌悪ですわ。
0451nobodyさん2005/11/14(月) 11:41:32ID:JySqj704
>>449
ありがとう御座いました。
俺、あほ過ぎ・・・
0452nobodyさん2005/11/14(月) 11:41:37ID:???
opcodeレベルで解析してベンチとってる人いる?
04534462005/11/14(月) 11:51:35ID:???
>>447
まさにその通りです。
setcookieと$_COOKIEの使い分けは十分注意していたはずだったのですが、迂闊でした・・・。
どうもありがとうございます。助かりました。
0454nobodyさん2005/11/14(月) 12:06:29ID:???
http://www.answers.com/
ここのサイトみたいに、http://www.answers.com/keyword
のような形でパラメータをファイル名のようにつけてアクセスするようなサイトにするにはどういう風にしたらよいですか?
0455nobodyさん2005/11/14(月) 12:18:02ID:???
>>454
php.netでもできるな
http://www.php.net/phpinfo

それはともかく、phpinfo()の出力を眺めれば分かるかも
0456nobodyさん2005/11/14(月) 12:21:34ID:???
まず以下のコードを見てください。
function search(& $all, & $key, $left = 0, $right = count($all))
{
if ($left == $right) return false;
$middle = floor(($left + $right) / 2);
list($number, $value) = explode("\t", $all[$middle]);
if ($value == $key) return $number;
else if ($value > $key) return search($all, $key, $left, $middle);
else return search($all, $key, $middle, $right);
}

データファイルを検索する関数なのですが、
PHP Parse error: syntax error, unexpected '(', expecting ')' in c:\php\search.php on line 2
と言われてしまいます。
どのように変更すればできますか?
0457nobodyさん2005/11/14(月) 12:22:05ID:???
>>454
mod_rewrite
0458nobodyさん2005/11/14(月) 12:25:49ID:???
>>454
PATHINFO
0459nobodyさん2005/11/14(月) 12:26:53ID:???
>>456
right = count($all)
がまずいんじゃねーの?
0460nobodyさん2005/11/14(月) 12:27:59ID:???
>>453
つか、$_COOKIEでも$_POSTでも、うまく取得できなかったら、
それぞれの配列がどうなっているかチェックする。

print_r($_COOKIE)
とか
var_dump($_COOKIE)
とかさ。

0461nobodyさん2005/11/14(月) 12:28:47ID:???
>>456
くだ質でやれよ
0462nobodyさん2005/11/14(月) 12:29:19ID:???
ちまちまエコーしてないで
HTTPの応答をフックしてみたほうが速いぞ
04634562005/11/14(月) 12:32:25ID:???
>>459
たぶんそうだとおもいます
04644562005/11/14(月) 12:36:39ID:???
呼び出すときに$number = search(file('data.dat', 'xxx');みたいに省略して書くので、何とかなりませんかね?
0465下質レベルだ・・・2005/11/14(月) 12:53:01ID:???
>>464
そんなもんアルゴリズムで解消しろよ

function search(& $all, & $key, $left = 0, $right = FALSE)
{
if ($right === FALSE) $right=count($all);
0466nobodyさん2005/11/14(月) 12:57:05ID:???
わからない五大理由
1 読まない
2 調べない
3 試さない
4 理解力が足りない
5 人を利用することしか頭にない ←>>456
0467nobodyさん2005/11/14(月) 13:00:39ID:???
ただの馬鹿だろ?
解答してる奴もいっしょに死んで来いよ
0468nobodyさん2005/11/14(月) 13:03:48ID:???
市ね市ね言うなよ!
世界じゃ3秒に一人死んでるんだよ!
04694562005/11/14(月) 13:15:30ID:???
>>465
THXです!!
できました!!

と、思ったら肝心の検索がうまくいかないとです。
もう頭限界…
0470nobodyさん2005/11/14(月) 13:20:07ID:???
>>468
もっと凄い勢いで死んでるぞ
0471nobodyさん2005/11/14(月) 13:36:12ID:???
自分の書いたコードではないんだが、数MBのデータを渡したりしているので何もかもが参照渡しになっていた。
それがボトルネックになっているのではと睨んで、とりあえず値渡しの場合と実行速度を比較してみたんだが、なんと一部を値渡しにしたほうが圧倒的に速くなった(比にして数百〜数千倍)。
釈然としないながらも値渡しのほうに修正しておいたが、一般論に反するので原因究明のためにopcodeを出してみた。
あいにくopcodeの仕様を定義している資料が見つからなかったために、結局悶々としている状態。
どなたかopcodeの仕様に関する資料はお持ちではないですか?
04724532005/11/14(月) 13:54:18ID:3QndTAPn
>>460
さらなる情報、どうもありがとうございます。
便利な関数があるのですね。とても参考になりました。
0473nobodyさん2005/11/14(月) 14:05:14ID:???
$param = 'デカイデータ';
foo($param);

↓爆速
function foo($param) {
$var = $param;
}

↓爆遅
function foo(&$param) {
$var = $param
}

PHPはメソッド内で変更がなきゃデフォで参照渡し
上の場合は参照→参照
下のは参照→値コピー

逆に

↓爆遅
function foo($param) {
$param .= 'hoge'
}

↓爆速
function foo(&$param) {
$param .= 'hoge';
}
0474nobodyさん2005/11/14(月) 14:08:46ID:???
>>472
便利な関数がある……って、もう少し基本を学びましょうよ。
04754712005/11/14(月) 14:24:39ID:???
>>473
御見それしました。
ここまで予想外にして明快な回答が返ってくるとは驚きました。
opcodeの情報探しをしていた時間がまるで夢のよう。
どうもありがとうございました。
0476nobodyさん2005/11/14(月) 14:45:47ID:???
>>473
ちまちました細かいつっこみ入れると
>PHPはメソッド内で変更がなきゃデフォで参照渡し
に勝手になるわけではなく、「値渡しだけど実質上参照渡しと変わらない」というだけだったりもする。
0477nobodyさん2005/11/14(月) 14:47:16ID:???
>>456 >>469
どーせtrimしてないだけだったりして
0478nobodyさん2005/11/14(月) 14:47:46ID:???
それがリファレンスカウンティング・クォリティ
0479nobodyさん2005/11/14(月) 14:52:06ID:???
opcodeって要はPHPのバイトコードのことだよね?
確かに情報公開されてないな。
0480nobodyさん2005/11/14(月) 15:48:26ID:???
>>479
つ[ZE2のソース]

公開されてないってより、まとまったドキュメントになってない。
zendのとこで質問すると、別に隠蔽してる訳でもないので
普通に回答あるけど、ZEのソース読んでることが前提だから敷居はそれなりに。
まあ内部のことを余り気にするのも良し悪しだけどね。
(Javaなのに気にしないとならないケータイPGなので...)
0481nobodyさん2005/11/14(月) 16:16:49ID:???
ざっと見た感じopcodeの使用箇所はZendディレクトリ内で分散されてるな。マクロの名前とか意味不明じゃん。
拡張モジュールの書き方なんかはマニュアルに載ってるけど、ZEのソース読んでるの前提ってまさか
こ れ を 全 部 読 め と ?
0482nobodyさん2005/11/14(月) 16:23:50ID:???
それぐらい読めないようなやつが手を出すのは
ま だ は や い ってことじゃね?
0483nobodyさん2005/11/14(月) 16:36:05ID:???
あのコード見てそれぐらいとか言える奴ワロス
0484nobodyさん2005/11/14(月) 16:43:30ID:???
APCでも憤死者がでそうな勢いだったしな。
0485nobodyさん2005/11/14(月) 16:49:46ID:D+CBz70Z
キリストですが何か質問がありますか?
0486nobodyさん2005/11/14(月) 16:51:16ID:???
>>482
難しくて読めないんじゃなくて、汚くて読めないの。
おまいはまずLispの処理系くらい作れるようになってから来ようね。

>>484
APCで憤死者って?
0487nobodyさん2005/11/14(月) 17:48:30ID:???
>>485
クリスマスがウザイんですけど、なんとかなりませんか?
0488nobodyさん2005/11/14(月) 17:50:21ID:???
>>485
クリトリスがクサイんですけど、なんとかなりませんか?
0489nobodyさん2005/11/14(月) 17:57:48ID:???
>>486
APC3が安定するまでにずいぶんと時間がかかったことかな?
eAcceleratorも一から書き直してるってサイトに書いてあるけど、完遂できるかちと心配。
PHP6ではOpcode Cacheが本体につく予定なんだよね?
0490nobodyさん2005/11/15(火) 00:53:24ID:EuotBK4K
早急に教えてもらえますか?
ブラウザに以下の説明が出ます。
Unable to connect to PostgreSQL
server: unknown host name: localhost
port=8040
dbname=testdb2
user=testuser2

OSはfedoraCore4 php5 apache2を使用しています。
ポストグレ側の設定がおかしいのでしょうか?
わかる方、お願いします。
0491nobodyさん2005/11/15(火) 01:18:48ID:???
>>490
それのドがphp?
0492nobodyさん2005/11/15(火) 01:19:20ID:???
ドコが
0493nobodyさん2005/11/15(火) 01:20:49ID:???
>>490

>>5をよく読んでくれ
04944902005/11/15(火) 01:24:09ID:EuotBK4K
>>493
いま、確認してみます。

04954902005/11/15(火) 01:27:26ID:EuotBK4K
というか、急いでるんです。
わかる方いませんか?
0496nobodyさん2005/11/15(火) 01:29:13ID:???
>>490
少し落ち着け。それだけじゃ何も分らん。
まず何をしようとしてその表示が出るのか、
急になったのか最初からなのか。
俺らはお前の鯖見れないんだからよ。
0497nobodyさん2005/11/15(火) 01:29:29ID:???
>>495
>>5の5を取り合えず嫁
0498nobodyさん2005/11/15(火) 01:31:57ID:???
夜中に釣りかよ
熱心だね
0499nobodyさん2005/11/15(火) 01:33:09ID:???
エスパー光臨待ち
05004902005/11/15(火) 01:35:16ID:EuotBK4K
config.phpの中身が、
<?php
if(ereg("config.php",$_SERVER["PHP_SELF"]))
{
exit();
}
define("DB_HOST","localhost");
define("DB_PORT",8040);
define("DB_NAME","testdb2");
define("DB_USER","testuser2");
define("DB_PASS","abcd1234");

define("DB_CONN","host=" .DB_HOST
."port=" .DB_PORT
."dbname=" .DB_NAME
."user=" .DB_USER
."password=" .DB_PASS);
?>
05014902005/11/15(火) 01:36:10ID:EuotBK4K
500続き、
3-4-1.phpの中身が、
<?php
require("config.php");
$db=pg_connect(DB_CONN);
header("Content-Type:text/plain;Charset=EUC-JP");
if($db==FALSE)
{
echo " not connect db?n " ;
}
else
{
echo "database connect ok?n" ;
}
?>
です。
何か間違っていますか?
0502nobodyさん2005/11/15(火) 01:37:56ID:???
>>500-501
いや、お前な、マジで少し落ち着け。
そのconfig.phpって何のスクリプトに内包されてる奴よ?
自作じゃないだろ?

で、「急になったのか最初からなのか」はどうなのよ?
最初からならpsqlが動いてるかどうか確認しろ。
0503nobodyさん2005/11/15(火) 01:39:40ID:???
$hoge==FALSEとか使ってるスクリプト見ると吐き気を催す
0504nobodyさん2005/11/15(火) 01:41:23ID:???
つか課題くさいなこれ
05054902005/11/15(火) 01:43:26ID:EuotBK4K
最初からです。
/user/local/apache2/bin/apachectl start
pg_ctl -o "-i"
で動作中です。しかし>>490掲載 エラーです。
localhostの意味がよくわかりません。
書籍を参考に勉強中です。
0506nobodyさん2005/11/15(火) 01:46:38ID:???
localhostってソースにあるっしょ。これが見つからないといっている
ポートがデフォルトじゃないけどいいの?

>>define("DB_HOST","localhost");
>>define("DB_PORT",8040);
05074902005/11/15(火) 01:47:45ID:EuotBK4K
define("DB_HOST","localhost");
に問題があるのでしょうか?
設定がよくわかりません。
ポストグレの設定に問題あるのか、
PHPの設定に問題があるのか。。。
0508nobodyさん2005/11/15(火) 01:48:10ID:???
>>506
ポートは合ってるよな?
DBとユーザーは作成済みだよな?
05094902005/11/15(火) 01:49:09ID:EuotBK4K
>ポートがデフォルトじゃないけどいいの?
とは、なんでしょうか?
どう設定すればいいのでしょうか?
よくわからないもので..
0510nobodyさん2005/11/15(火) 01:50:00ID:???
あ、間違えた。>>505宛ね・・・つか被ったorz

>>507
おまえさ、急ぐ必要なさそうだからちょっとじっくり勉強しなおせ
05114902005/11/15(火) 01:50:02ID:EuotBK4K
>>508
はい。作成済みです。
■ このスレッドは過去ログ倉庫に格納されています