【PHP】質問スレッドpart30【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/10/25(火) 06:50:06ID:Q4oGlTH3【基本ルール】
・新規質問の方は上げてください。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辺り
0413nobodyさん
2005/11/13(日) 18:54:29ID:???突っ込みどころだらけで何とも言い難い…
最低でも
・バグ
・無意味に1文字ずつ切り取り(ヒント:substr)
・同じ処理はarray_map()や自作関数
の改善はやってくれ。
0416nobodyさん
2005/11/13(日) 19:32:23ID:???サンクス!
最後の$result簡単に作るために
substr()無意味ではないと思うんだけど、、
違うやり方が見つからん。
0417nobodyさん
2005/11/13(日) 19:37:59ID:???0418nobodyさん
2005/11/13(日) 20:34:30ID:???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>";
}
0421nobodyさん
2005/11/13(日) 21:41:53ID:???0422nobodyさん
2005/11/14(月) 00:51:37ID:???ビットシフトのこと?
まあPHPで書くのに色情報を24ビット(or 32ビット)に押し込まなきゃならん理由がないからな。
とくにRGBをそれぞれ独立にオーバーフローなども考慮した計算したい場合、シフトと逆シフトが余計なステップ踏むことになる。
よほどメモリの食い方に問題がある場合以外はあえてビットシフトしないじゃない?
0423nobodyさん
2005/11/14(月) 01:02:02ID:???0424nobodyさん
2005/11/14(月) 01:10:21ID:???0426nobodyさん
2005/11/14(月) 01:57:55ID:???まだ使い方わかってないけど希望が見えてきました。
includeも頑張ります。
ありがとうございました。
0428nobodyさん
2005/11/14(月) 08:33:12ID:???0430nobodyさん
2005/11/14(月) 08:49:53ID:???0431nobodyさん
2005/11/14(月) 08:58:58ID:???人間様に分かりやすい10進数が最凶伝説
0432nobodyさん
2005/11/14(月) 09:00:43ID:???0433nobodyさん
2005/11/14(月) 09:06:27ID:???0434nobodyさん
2005/11/14(月) 09:12:53ID:3QndTAPn今のところ、ユーザー名とパスワードが送信された場合にデータベースを検索し、正しいユーザー名とパスワードだった場合に
$_COOKIE['login'] = md5($username . time());
のような形にしているのですが、ユーザーがログインの状態を保ったまま別のページにアクセスした場合に、そのユーザーが元々どのユーザーだったのかを判別する方法がわかりません。
$_COOKIE['login'] = $username . time();
のようにそのままクッキーに書き込むと、何らかの方法でクッキーをのぞき見することが出来てしまった場合に情報の漏洩が起こってしまいます。
ユーザー情報を復元するにはどうしたら良いですか?
0435434
2005/11/14(月) 09:14:25ID:3QndTAPnLinux Apache1.3.33 PHP5.0.5です。
それと、自宅のWindowsXP PHP5.0.5だと、クッキーの情報が読めないことがあります。
原因がわかる方、いらっしゃいましたらご教授お願いします。
0436nobodyさん
2005/11/14(月) 09:17:31ID:???クッキーからユーザ情報などを復元できる
ていうようなのを勝手にやってくれるのがPHPのセッションだと思うんですけど
0437nobodyさん
2005/11/14(月) 09:24:12ID:???0438nobodyさん
2005/11/14(月) 09:54:52ID:???0439434
2005/11/14(月) 10:27:02ID:???返答ありがとうございます。
なるほど。そこそこ手間をかけないといけないのですね。
セッションに関してはセキュリティ上問題ないのでしょうか?
ログイン認証を行うにはURLに直接埋め込む方法とクッキーを用いる方法の大きく2通りがありクッキーを用いる方法がより安全である、ということを(どこで見かけたのか忘れてしまったのですが・・・)聞いたことがあります。
(うろ覚えなので間違ってたら申し訳ございません)
0441nobodyさん
2005/11/14(月) 10:34:11ID:???>クッキーを用いる方法がより安全である
そりゃその2つだけを単純に比較した場合の話。
自分でも書いてるが、認証の実装方法のほうが影響は大きい
セキュアな認証を実現する手段はググれば結構見つかるのでは?
0443434
2005/11/14(月) 11:03:03ID:???なるほど、定番みたいな方法はないのですね。
実際、WebメールなんかのログインではURLに情報を埋め込んでいるようですし、何がよくて何がまずいのかの理解に苦戦してます。
もう少しググってみようと思います。
>>442
すみません。SIDを「丸投げ」というのはいったい・・・。
ググってみたところ、SIDというのはユーザーを識別するための番号のことだと思うのですが。
間違っていましたらご指摘お願いします。
あと、クッキーの情報がうまく読めないのですが理由はわかりますでしょうか?
0444nobodyさん
2005/11/14(月) 11:08:29ID:???うまく読めない……では分からない。
具体的に、どうクッキーに書き込んで、
それを読み出そうとすると、どうなってしまうのか、
具体的に書かないと。
0445434
2005/11/14(月) 11:25:27ID:???ご指摘ありがとうございます。
大まかにですが、以下のようなコードを使っています。
// login.php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// ユーザー名とパスワードをデータベースにて照合
$_COOKIE['login'] = md5($username . time());
header("Location: home.php");
}
これで、ロケーション先のhome.phpで$_COOKIE['login']の値を取得することができません。
(おそらく空白が入っています)
何か原因は思い当たりますでしょうか?
0446445
2005/11/14(月) 11:28:47ID:???上記の$usernameはデータベースにて照合する際に$_POST['username']から値を代入してあります。
0448nobodyさん
2005/11/14(月) 11:37:35ID:JySqj704for($lp=0;$lp<=100;$lp+1)
{
echo"$lp \r\n";
}
?>
↑の様に書くと、「0」を無限に書き出すのですが。何か間違ってますか?
ど素人ですいません。
0449nobodyさん
2005/11/14(月) 11:39:30ID:???for($lp=0;$lp<=100;$lp++)
もしくは
for($lp=0;$lp<=100;$lp=$lp+1)
では?
0450nobodyさん
2005/11/14(月) 11:40:41ID:JySqj704ホントすいません。
これはマジ自己嫌悪ですわ。
0451nobodyさん
2005/11/14(月) 11:41:32ID:JySqj704ありがとう御座いました。
俺、あほ過ぎ・・・
0452nobodyさん
2005/11/14(月) 11:41:37ID:???0453446
2005/11/14(月) 11:51:35ID:???まさにその通りです。
setcookieと$_COOKIEの使い分けは十分注意していたはずだったのですが、迂闊でした・・・。
どうもありがとうございます。助かりました。
0454nobodyさん
2005/11/14(月) 12:06:29ID:???ここのサイトみたいに、http://www.answers.com/keyword
のような形でパラメータをファイル名のようにつけてアクセスするようなサイトにするにはどういう風にしたらよいですか?
0455nobodyさん
2005/11/14(月) 12:18:02ID:???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
と言われてしまいます。
どのように変更すればできますか?
0460nobodyさん
2005/11/14(月) 12:27:59ID:???つか、$_COOKIEでも$_POSTでも、うまく取得できなかったら、
それぞれの配列がどうなっているかチェックする。
print_r($_COOKIE)
とか
var_dump($_COOKIE)
とかさ。
0462nobodyさん
2005/11/14(月) 12:29:19ID:???HTTPの応答をフックしてみたほうが速いぞ
0464456
2005/11/14(月) 12:36:39ID:???0465下質レベルだ・・・
2005/11/14(月) 12:53:01ID:???そんなもんアルゴリズムで解消しろよ
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秒に一人死んでるんだよ!
0471nobodyさん
2005/11/14(月) 13:36:12ID:???それがボトルネックになっているのではと睨んで、とりあえず値渡しの場合と実行速度を比較してみたんだが、なんと一部を値渡しにしたほうが圧倒的に速くなった(比にして数百〜数千倍)。
釈然としないながらも値渡しのほうに修正しておいたが、一般論に反するので原因究明のためにopcodeを出してみた。
あいにくopcodeの仕様を定義している資料が見つからなかったために、結局悶々としている状態。
どなたかopcodeの仕様に関する資料はお持ちではないですか?
0472453
2005/11/14(月) 13:54:18ID:3QndTAPnさらなる情報、どうもありがとうございます。
便利な関数があるのですね。とても参考になりました。
0473nobodyさん
2005/11/14(月) 14:05:14ID:???foo($param);
↓爆速
function foo($param) {
$var = $param;
}
↓爆遅
function foo(&$param) {
$var = $param
}
PHPはメソッド内で変更がなきゃデフォで参照渡し
上の場合は参照→参照
下のは参照→値コピー
逆に
↓爆遅
function foo($param) {
$param .= 'hoge'
}
↓爆速
function foo(&$param) {
$param .= 'hoge';
}
0475471
2005/11/14(月) 14:24:39ID:???御見それしました。
ここまで予想外にして明快な回答が返ってくるとは驚きました。
opcodeの情報探しをしていた時間がまるで夢のよう。
どうもありがとうございました。
0476nobodyさん
2005/11/14(月) 14:45:47ID:???ちまちました細かいつっこみ入れると
>PHPはメソッド内で変更がなきゃデフォで参照渡し
に勝手になるわけではなく、「値渡しだけど実質上参照渡しと変わらない」というだけだったりもする。
0478nobodyさん
2005/11/14(月) 14:47:46ID:???0479nobodyさん
2005/11/14(月) 14:52:06ID:???確かに情報公開されてないな。
0480nobodyさん
2005/11/14(月) 15:48:26ID:???つ[ZE2のソース]
公開されてないってより、まとまったドキュメントになってない。
zendのとこで質問すると、別に隠蔽してる訳でもないので
普通に回答あるけど、ZEのソース読んでることが前提だから敷居はそれなりに。
まあ内部のことを余り気にするのも良し悪しだけどね。
(Javaなのに気にしないとならないケータイPGなので...)
0481nobodyさん
2005/11/14(月) 16:16:49ID:???拡張モジュールの書き方なんかはマニュアルに載ってるけど、ZEのソース読んでるの前提ってまさか
こ れ を 全 部 読 め と ?
0482nobodyさん
2005/11/14(月) 16:23:50ID:???ま だ は や い ってことじゃね?
0483nobodyさん
2005/11/14(月) 16:36:05ID:???0484nobodyさん
2005/11/14(月) 16:43:30ID:???0485nobodyさん
2005/11/14(月) 16:49:46ID:D+CBz70Z0486nobodyさん
2005/11/14(月) 16:51:16ID:???難しくて読めないんじゃなくて、汚くて読めないの。
おまいはまずLispの処理系くらい作れるようになってから来ようね。
>>484
APCで憤死者って?
0489nobodyさん
2005/11/14(月) 17:57:48ID:???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を使用しています。
ポストグレ側の設定がおかしいのでしょうか?
わかる方、お願いします。
0492nobodyさん
2005/11/15(火) 01:19:20ID:???0494490
2005/11/15(火) 01:24:09ID:EuotBK4Kいま、確認してみます。
0495490
2005/11/15(火) 01:27:26ID:EuotBK4Kわかる方いませんか?
0496nobodyさん
2005/11/15(火) 01:29:13ID:???少し落ち着け。それだけじゃ何も分らん。
まず何をしようとしてその表示が出るのか、
急になったのか最初からなのか。
俺らはお前の鯖見れないんだからよ。
0498nobodyさん
2005/11/15(火) 01:31:57ID:???熱心だね
0499nobodyさん
2005/11/15(火) 01:33:09ID:???0500490
2005/11/15(火) 01:35:16ID:EuotBK4K<?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);
?>
0501490
2005/11/15(火) 01:36:10ID:EuotBK4K3-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:???いや、お前な、マジで少し落ち着け。
そのconfig.phpって何のスクリプトに内包されてる奴よ?
自作じゃないだろ?
で、「急になったのか最初からなのか」はどうなのよ?
最初からならpsqlが動いてるかどうか確認しろ。
0503nobodyさん
2005/11/15(火) 01:39:40ID:???0504nobodyさん
2005/11/15(火) 01:41:23ID:???0505490
2005/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:???ポートがデフォルトじゃないけどいいの?
>>define("DB_HOST","localhost");
>>define("DB_PORT",8040);
0507490
2005/11/15(火) 01:47:45ID:EuotBK4Kに問題があるのでしょうか?
設定がよくわかりません。
ポストグレの設定に問題あるのか、
PHPの設定に問題があるのか。。。
0509490
2005/11/15(火) 01:49:09ID:EuotBK4Kとは、なんでしょうか?
どう設定すればいいのでしょうか?
よくわからないもので..
0510nobodyさん
2005/11/15(火) 01:50:00ID:???>>507
おまえさ、急ぐ必要なさそうだからちょっとじっくり勉強しなおせ
0511490
2005/11/15(火) 01:50:02ID:EuotBK4Kはい。作成済みです。
■ このスレッドは過去ログ倉庫に格納されています