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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/12/21(木) 13:42:19ID:???
PHPに関する質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

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

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 34
http://pc8.2ch.net/test/read.cgi/php/1165519374/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

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

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
 しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0409nobodyさん2006/12/28(木) 23:58:55ID:w/qu4zo9
文字列を
%98%37みたいに変換できる関数なかった〜?
0410nobodyさん2006/12/29(金) 00:04:23ID:???
>>409
urlencode
0411nobodyさん2006/12/29(金) 00:08:29ID:YLaIusHS
ありがとー
0412nobodyさん2006/12/29(金) 00:25:48ID:UI+BpgQS
画像ファイルをbase64エンコードして保存しました。
それを元に戻してブラウザに出力するには、「Content-Type: image」のヘッダを吐いて
base64デコードした文字列をechoで出力する....という単純な処理でいいの?
0413nobodyさん2006/12/29(金) 00:28:08ID:???
>>412
いいよ。
つか、何故そんな簡単なことを実際にやって確かめないの?
0414nobodyさん2006/12/29(金) 00:28:13ID:???
>>412
やってみたら?
0415nobodyさん2006/12/29(金) 00:32:01ID:UI+BpgQS
>>413-414
ご回答、ありがとうございます。

>何故そんな簡単なことを実際にやって確かめないの?

いや、やってみたことはやってみたんですよ。
もちろんうまく出力することはできたんですが、なんだかこれでいいのかなって。
自分流で強引な方法なのかもと不安になってしまったんです。

すみませんでした。
0416nobodyさん2006/12/29(金) 00:37:55ID:1uYyFHrL
マルチバイトの関数を私用するとエラーが出ます。
いろんなサイトでmbstringの設定方法を参考にしましたがだめです。
バージョンで動作が違うとかありますか?
0417nobodyさん2006/12/29(金) 00:43:48ID:???
>>415
ハッシュとって同一か確かめてみたら?

>>416
エラーを書こう
0418nobodyさん2006/12/29(金) 01:29:16ID:???
mysql_escape_string($item);
mysql_escape_string($table);
$sql = "select $item from $talbe";
としなくても
$sql = "select $item from $talbe";
mysql_escape_string($sql);
でも同じですよね?

寝ずにずっとやってたら頭回らなくなってきた orz
0419nobodyさん2006/12/29(金) 01:39:25ID:???
PEAR::DBで指定クエリーでのデータの行数だけ
取得する方法ってありますか?
クエリーで一回格納してそれをnumRows()する方法
$rs=$db->query($sql);
$rs->numRows();
では、データ量が多い場合にメモリ無駄に食いますよね
それを避けて、行数のみ取得したいと考えてます。
0420nobodyさん2006/12/29(金) 01:41:38ID:???
$num = $db->getOne("select count(culum) from...");
0421nobodyさん2006/12/29(金) 01:43:10ID:???
>>402
とりあえずブラウザでみれないようなファイルに

>>418
$item に " が含まれていたらどうなるのだね?

上は正しい SQL 文になるが
下は SQL インジェクションの餌食になるよね
0422nobodyさん2006/12/29(金) 01:46:14ID:???
>>419
SELECT COUNT(*) FROM TABLENAME;
0423nobodyさん2006/12/29(金) 02:25:43ID:zzjbblat
アンケートシステムを作っているのですがどうしても解決できない問題があるのでお願いいたします。
1.質問文、項目は管理者が自由に増やしたり削ったりできる
2.質問が1の時もあれば5つのときもある(管理者次第)
3.複数選択も管理者が選択できる
以上の機能でMySQLにユーザが選んだデータを入れていくのですがこのようにクエリがまったく予測できないのでどのように入れたらいいか見当もつきません。。
今、考え付くのが
一つのチェックに1行作るくらいです。。

お力お貸しくださいm(_ _)m
0424nobodyさん2006/12/29(金) 02:49:10ID:???
>>421

>下は SQL インジェクションの餌食になるよね

ならなくね?
0425nobodyさん2006/12/29(金) 03:03:07ID:???
>>423
質問テーブル(親)−質問項目テーブル(子)−回答選択肢テーブル(孫)

回答テーブル
 質問ID
 質問項目ID
 回答選択肢ID

>>424
下のは文字列を扱うSQLが実行できないだろ
select password from user_master where userid='hogehoge'
↓escape
select password from user_master where userid=\'hogehoge\'
0426p2037-ipbf13souka.saitama.ocn.ne.jp2006/12/29(金) 03:27:47ID:???
規制解除
0427nobodyさん2006/12/29(金) 08:35:57ID:???
>>403-408
遅くなりましたが答えてくれてありがとう。
ぶっちゃけ拡張子はどうでもいいんですけどね。
csvとxmlには、ファイルを扱う専用の関数があるみたいなので、
ログの管理がしやすいのかな?なんて思っただけなので。
DBが使えない環境でも使えるようにしたいので、
407さんの助言通り、csvをテキストとして処理したいと思います。
0428nobodyさん2006/12/29(金) 09:04:48ID:???
>>419
確かめずに書くけど、PEAR::DBのnumRows();って、
DBによって実装が違ったような…。
MySQLだと SELECT count(*) WHERE ・・・
を投げてたと思う。
04294282006/12/29(金) 09:12:28ID:???
間違ってた…。
ネイティブの関数だから、メモリは関係ないかも。
DB側の実装によるんじゃないかな。
0430nobodyさん2006/12/29(金) 10:34:00ID:JQJ1UMkF
<html>
<head>
<?php
$encoding = "EUC-JP";
$str = '<meta http-equiv="Content-Type" content="text/html; charset='.$encoding.'">';
echo $str;
?>
<title>あいうえお</title>
</head>
<body>
<p>あいうえお</p>
</body>
</html>


として表示させると、文字化けします。(このスクリプト自体がShift_JISで保存してる為)
そこで、mb_convert_encodingを使ってみたのですが、

echo mb_convert_encoding($str, 'EUC-JP');
echo mb_convert_encoding($str, 'EUC-JP', 'Shift_JIS');
echo mb_convert_encoding($str, 'EUC-JP', 'auto');

などとやっても文字化けしたままでした。

根本的な解決は、このファイルをEUCとして保存するしかないのでしょうか?
それとも何か使い方が間違ってるだけなのでしょうか?
どなたかお助けください。
0431nobodyさん2006/12/29(金) 10:39:09ID:???
PHPってシングルクオートでも動くんだ。知らなかった。ためしにこれはどう?

$str = '<meta http-equiv="Content-Type" content="text/html; charset='.$encoding.'">';
↓
$str = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=".$encoding."\">";
04324302006/12/29(金) 10:54:04ID:JQJ1UMkF
>>431
レスありがとうございます。
それでもだめみたいでした。

ファイル自体をEUCで保存すれば文字化けはしませんでしたが、
$encodingの値はいつでも変えれるようにしたいので、
その都度コードを指定して保存しなおすのは大変なので、
どうにかしたいのですが、どなたか宜しくお願いします。
0433nobodyさん2006/12/29(金) 11:08:48ID:???
>>430
ブラウザはで表示されてる?
0434nobodyさん2006/12/29(金) 11:10:55ID:???
なんだ、内部コードじゃなくてHTML部分の静的な文字列のことか。
それだったらファイルをShift_JISで書いたときは $encoding = "Shift_JIS";
それだったらファイルをEUC-JPで書いたときは $encoding = "EUC-JP";
にしなきゃダメじゃない?
0435nobodyさん2006/12/29(金) 11:12:22ID:???
>>432
>ファイル自体をEUCで保存すれば文字化けはしませんでしたが、
>$encodingの値はいつでも変えれるようにしたいので、
>その都度コードを指定して保存しなおすのは大変なので、
意味がわからない。
EUCで保存すれば問題ないならそれでいい気がするのだが

つかそういう設定は普通define使うだろ?
04364302006/12/29(金) 11:36:44ID:JQJ1UMkF
>>434
内部コードっていうのがよくわからなくて・・・
HTMLの文字コードとは違うものなんですね。
混同してすみませんでした。

>>435
ちょっと説明すると長くなるのですが、
実はhtmlのDoctypeからhead間を出力するクラスを作っています。
自分の作ってるPHPは、
どれもhtmlのbody間の使いたいところでincludeする形になっていて、
単体ではhead間などは出力しないようになっています。
そこで、単体でも使えるように、そんなクラスを作っているのですが、
今まで作ってきたスクリプトの、保存した際の文字コードが違ってたりして、
上のスクリプトのencodingの値を変えないと、文字化けしてしまうのです・・・
ファイルの文字コードは、時期ごとに変わっているので、
(Shift_JIS→EUC-JPときて、今はUTF-8を使っています。)
いちいちファイルをチェックしなくても、どの文字コードがだいたいわかります。
数が多いので、できれば統一したくないというのが理由です。

説明がわかりづらいかもしれませんが、
不可能なようなので、あきらめて全て統一する方向にしたいと思います。
0437nobodyさん2006/12/29(金) 11:57:06ID:ttVITF9r
Smartyの質問ですがよろしいでしょうか?
PHP→Smartyに $common_template_dir として "/path/to/" を設定します。
で、インクルードファイルとして"/path/to/header.tpl"を読み込みたいのですが、
下記の方法では(もちろん)うまくいきません。
(変数名自体がかわっちゃうから当たり前ですよね)
{include file="$common_template_dirheader.tpl"}

{include file="/path/to/header.tpl"}
となるように記述したいのですが、どうしたらいいのでしょうか?
0438nobodyさん2006/12/29(金) 12:35:59ID:???
>>436 は 自分のしたいこと・しなければならないことがわかっていないような気がする。
そもそもMETAタグを文字コード変換してどうしようというのか。

たぶん、問題はphp.iniのdefault_charsetじゃないかと推測するが。
0439nobodyさん2006/12/29(金) 13:07:19ID:???
ファイルの中から日本語を検索するには、mbstringが有効じゃないとだめなのですか?
調べても、しっかり説明されているところが見つかりません。
あいかわらずマルチバイト系の関数はないってエラー吐くし、解説サイト全然役に立たない。
0440nobodyさん2006/12/29(金) 13:48:22ID:???
>>437
assainにいれちゃえばいいのでは。
php側
$smarty->assign('include_tpl', '/path/to/header.tpl');

tpl側
{$include_tpl}
0441nobodyさん2006/12/29(金) 13:50:49ID:???
440です
違う気がしてきた。sryネ
0442nobodyさん2006/12/29(金) 14:46:57ID:???
>>439
mbstring系の関数がないなら…
Windows系→php.iniでmbstringを有効に
Linux系→./configureオプションに--enable-mbstring --enable-mbregex を追加してリビルド
0443nobodyさん2006/12/29(金) 14:56:00ID:???
かなり下質かと思いますが、、ずっと気になっているので質問です。

みなさんは、ファイル名やフォルダ(ディレクトリ)名の付け方って
特にこだわっていたりしますか?

ファイル名の場合はそれぞれの用途や名称を元にしたらいいのですが、
フォルダ名を付ける時、どういう名前がわかりやすいのか悩む時があります。
例えば、どのコンテンツにも使うものやfunctionファイルなど。
(commonとかmoduleとかにしていますが、、)

気にする必要はないと思いますが、ファイル名・フォルダ名の付け方について
混乱しない・汎用性の高い付け方があったら教えて下さい。
0444nobodyさん2006/12/29(金) 14:56:45ID:???
CSRFって、Referが取得できるなら、それをチェックするだけで、万事OK?
0445nobodyさん2006/12/29(金) 15:01:28ID:???
>>444
全然だめ
0446nobodyさん2006/12/29(金) 15:11:37ID:???
>>445
何がダメなのかを教えていただければ、これ幸い。
04474462006/12/29(金) 15:13:39ID:???
実際のところReferは取れないこともあるし、
SESSIONを使ったサイトしか作るつもりが無いので、
セッションに前画面の情報を入れて(Referの代替程度の話)
更新系の画面ではそれをチェックするぐらいでいいかなぁと。
0448nobodyさん2006/12/29(金) 15:16:42ID:???
>>446
CSRFの何がどう危険なのか、その仕組みを全く理解してないようだな。
まずその仕組みを徹底的に調べろ。

で、とりあえずリファラのチェックは全く対策にならない。
なぜなら、いくらでも偽装できるから。
0449nobodyさん2006/12/29(金) 15:18:21ID:???
mixiの「ぼくはまちちゃん事件」も徹底研究しろボケ。
postkeyがあってもCSRF脆弱性を無くせなかったmixiを反例にすべし。
04504462006/12/29(金) 15:19:53ID:???
>>448
なるほど。
たぶん>>447の方法だと偽装はできなくなるはずだから、大丈夫そうかな。
04514462006/12/29(金) 15:24:28ID:???
逆にpostkeyの必要性があまりわかっていない…orz
セッションIDのみより暗号強度が強くなるという認識程度。

>>447の方法だと、あとはセッションハイジャックの問題になると思ってるんだけど…。
0452nobodyさん2006/12/29(金) 15:48:32ID:1NnWPd/m
パスワードの暗号化について質問です。

いくつか調べたところ、crtptを使うのが一般的みたいですが、
これだと復元出来なくなるので、「パスワードを忘れた人に再送信」
などのシステムが作れなくなります。

しかし、暗号化しないとDBを使ってもセキュリティ的によく無いとも聞きます。
こういう場合、どうしたらいいのでしょうか?
0453nobodyさん2006/12/29(金) 15:54:22ID:???
「パスワード登録」→「ssl通信」→「データベース保存」
「データベースにパスワード問い合わせ」→「ssl通信」→「パスワード再送信」
0454nobodyさん2006/12/29(金) 15:58:30ID:???
>>452
パスワード忘れた人には、古いパスワードを捨てさせて、
新しい仮パスワードを発行するのが、普通じゃない?
で、ユーザーから本パスワードに変更してもらう。
04554522006/12/29(金) 16:02:34ID:???
>>454
ありがとうございます。やっぱりそれしかないんですかね。。

あと、それなら「管理者が管理するシステム」でも
古いパスワードは捨てて、再設定する方式になりますよね?

目で見て確認出来ないのは辛いですが、そのようにシステムを変更します。
0456nobodyさん2006/12/29(金) 16:03:18ID:???
>>453
パスワードを生のまま保存してるのか?
なんと恐ろしいことを・・・

普通はMD5ハッシュ化して保存。
0457nobodyさん2006/12/29(金) 16:06:10ID:???
>>453でいいじゃん。なんでスルーされてるのか疑問なんだが
0458nobodyさん2006/12/29(金) 16:20:37ID:???
>>442
既存の環境が悪さしてるかと思って、Windowsクリーンインストールしたマシン用意したが同じ結果。
PHP4でも5でも動いてくれない。
0459nobodyさん2006/12/29(金) 16:20:46ID:???
管理者だろうが、他人のパスワードを見れるのは問題だよ。
04604462006/12/29(金) 16:29:17ID:???
>>449
mixiがpostkeyがあってもダメだったのは、
postkeyが固定だったことと、
他の脆弱性でpostkeyが漏れたからじゃないのかな??
0461nobodyさん2006/12/29(金) 16:42:06ID:???
>>448
> なぜなら、いくらでも偽装できるから。
典型的に間違ったこといってるね。
被害者がリンクを踏んだりした被害者の Referer を偽装することは、
【ブラウザに脆弱性が無い限り】 できない。

ちなみに、つい最近 Flash にその脆弱性が発見されたが、すぐ修正版が公開されたし、
Referer 関係の脆弱性はそこまで多くない。

0462nobodyさん2006/12/29(金) 17:00:32ID:???
>>461
おたくが言うところのブラウザは脆弱性だけがリファラが偽装の手段なの
PHPでもheader関数で簡単にリファラ偽装できるけど
04634612006/12/29(金) 17:04:58ID:???
>>462
ほんとに分かってないね。
Referer はクライアントが送信できる任意の情報だから簡単に偽装できるよ、そりゃ。

でも CSRF ってなんだか分かってる?

おまいさんが言ってる Referer を偽装できる人は 悪意のあるWebサイトの管理者のことだよね。
CSRF対策の被害者は 【悪意のあるリンクをクリックした人】 であり、その人が自ら Referer を偽装する動機はないわけ。

php の header 関数を利用して、悪意のあるページを閲覧した第三者が送信する Referer を偽装する方法があったら教えてくれ。
0464nobodyさん2006/12/29(金) 17:32:35ID:???
今現在そのページを何人の人が見てるかが知りたいのですが、
セッションを使えばいいんですよね?
0465nobodyさん2006/12/29(金) 17:49:34ID:???
> Referer を偽装できる人は 悪意のあるWebサイトの管理者のことだよね
ちがうよ

私の場合CSRFとかの意図は無いが普通にリファラを制御しながらブラウジングするけど
0466nobodyさん2006/12/29(金) 17:54:04ID:e5ul8+TJ
すんごいくだらない質問だとおもうんですが詰まってます。お助け!

$dataC[$i][$c] = str_replace("(9)","$123_0123",$dataC[$i][$c]);

のようにして、ある文字列の中にある(9)を$123_0123という文字列におきかえたいんですが$をエスケープする為に\$としてみたのですが$しか表示されません。
いろいろためしてみたのですが、どうも混乱してきました。$をエスケープすれば文字列としてあつかわれるんじゃないんでしたっけ?
アドバイス御願いします。
0467nobodyさん2006/12/29(金) 18:06:43ID:e5ul8+TJ
↑ですが、
$dataC[$i][$c] = str_replace("(9)","$123_0123",$dataC[$i][$c]);

を
$dataC[$i][$c] = str_replace("(9)","$ABC_0123",$dataC[$i][$c]);

にしてください。そこの変数名名前がやばかったんで、ダミー入れたら数字のみにしてしまいました。
04684612006/12/29(金) 18:11:05ID:???
>>465
そういうことか。
つまり、普段から Referer を偽装してブラウジングしている人が悪意のあるリンクをクリックした場合に、そのRefererを偽装している人が保護されないということね。
それなら正しいわ。

ただ、Referer については RFC で定義されているので (「送信しない」という選択肢は認めている。)、 RFC に反する通信を行っている人 かつ
Referer をデフォルトで偽装するブラウザは無いに等しい のでそれを保護する必要があるのかは疑問だけど。

逆に言えば、クライアントは Referer の送信を拒否する権利がある (RFCでも認められている) ので、そういった正当な通信までもをエラーで拒否するのは
アクセシビリティ上の問題があるけどね。(ちなみに、W3Cの文法チェックステッカーや多くのSSL検証シールはそれやってる。)
0469nobodyさん2006/12/29(金) 18:23:29ID:???
>>466
$ を \$ にしてみる前にマニュアル読もう。
http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.single
http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double
0470nobodyさん2006/12/29(金) 18:28:09ID:e5ul8+TJ
>469

う…おはずかしい。
”を’にすればよいだけでした。
感謝します。
ありがとう。
0471nobodyさん2006/12/29(金) 19:50:57ID:e5ul8+TJ
すいません。又質問なのですが
$dataC[$i][$c] = str_replace("(9)",'$ABC_0123',$dataC[$i][$c]);

によって、ある文字列の中の特定の文字が置換されDBに格納されました。

そのDBに入った文字列のなかにある$ABC_0123をecho等で書き出すときに変数に戻すにはどうすればよいでしょうか?
DBはmysqlです。
sqlから呼び出した文字列はどのような扱いになっているのでしょうか?
宜しくお願いします。
0472nobodyさん2006/12/29(金) 21:13:46ID:???
>>471
mysql関数を使う前にマニュアル読もう
http://jp.php.net/mysql_query
http://jp.php.net/manual/ja/function.mysql-fetch-array.php
0473nobodyさん2006/12/29(金) 21:23:29ID:e5ul8+TJ
たびたびすいません。なるほど、特別な戻値になってるわけですね。
SQLから戻ってきた文字列は中にどのような関数や変数を入力してもそのまま出力されることから、恐らく''で囲ったのと同じ文字列として扱われているようです。

実験的に

$AAP = str_replace('BB_0123',"$BB_0123",$AAP);

のように呼び出した文字列に対して置換をおこなうと展開されるようになりました。
ありがとうございます。

ただ、全ての変数および関数に対して置換をおこなうのはどうも効率がわるいきがします。
''でかこった文字列を""でかこった文字列に変換する良い方法はないでしょうか?

よろしくお願い致します。
0474nobodyさん2006/12/29(金) 21:28:34ID:???
>>473
そもそもDBに格納するデータにPHPコード(変数とか関数とか)を入れるのが
根本的におかしいと思うんだが、何でまたそんな妙な設計にしてるのさ
0475nobodyさん2006/12/29(金) 21:35:19ID:e5ul8+TJ
>474 さん
携帯対応のシステムなのですが、絵文字のライブラリー群はすでにあり、その仕様が

$aaa_123の変数が有る場所にはアクセスしてきた携帯キャリアに併せた絵文字コードに変換して送信する。
という仕様なんです。

で、DBの中に直接変数をいれておけばあとはecho等で吐き出せば全キャリア絵文字対応になる予定だったんです。

で、一番最初に御聞きさせて頂いたようにDB入力時にまず変数が文字列として入らない事に躓いて

次に、DBからひっぱってきた変数が展開されない事に躓いてると。
そういう訳なんです。絵文字なんで全置換プログラムなんて書くと量も多いし、負荷も心配で。

なにか良い知恵が会ったらアドバイス頂きたいです。
0476nobodyさん2006/12/29(金) 22:32:08ID:???
eval使えば?
0477nobodyさん2006/12/29(金) 22:50:22ID:???
requireとかincludeって連続で使う場合、
require('hogehoge.php');
require('hagehage.php');
みたいので当ってると思うんだけど、これをスマートに一文で表記する方法とかないかな?
0478nobodyさん2006/12/30(土) 01:30:51ID:???
>>477
必要なファイルをrequireしてるphpファイルをrequireする。
とか、セットという概念を作ってrequireするとか。
特定の文字列を渡したら、特定のファイルを複数requireしてくれる関数を作るとか。
0479nobodyさん2006/12/30(土) 01:32:22ID:???
>>475
serializeとかの関数で作り直せないか考えてみたら
0480nobodyさん2006/12/30(土) 01:38:20ID:???
>>475
PHPの変数を展開させたりなんかしないで普通テンプレートみたいな形でやるんじゃないの
0481nobodyさん2006/12/30(土) 02:04:59ID:???
文字列にマルチバイトが含むか含まないかチェックする関数ってなかったっけ?
0482nobodyさん2006/12/30(土) 07:04:18ID:???
>>481
無いんじゃないかな。

strlen()とmb_strlen()の結果を比較して
差があったらマルチバイト文字を含む、
と判断する手法があるみたいだけど。
0483nobodyさん2006/12/30(土) 07:49:19ID:???
一連の流れをまとめたものとして、ユーザー定義関数を作るのは正しいことですか?
最終的に文字列をprintするだけで、汎用性もないものなんですけど…
0484nobodyさん2006/12/30(土) 08:57:45ID:???
!$abc と $abc == falseって同義ですよね?
0485nobodyさん2006/12/30(土) 10:05:56ID:egNnis/4
>>484
違う。
0486nobodyさん2006/12/30(土) 16:06:11ID:Y367ZOEi
if (extension_loaded('sqlite')){
echo 'OK';
}else{
echo 'NG';
}
こんなコードを書いてSQLiteが使えるかどうかチェックしたが、NGと表示されてしまう。
php_sqlite.dllはちゃんと入ってるし、読み込むように設定してあるハズなんだが、
どうすればいい?
}
0487nobodyさん2006/12/30(土) 16:40:23ID:???
>>452
Mcrypt使えば?
スクリプト見られたらおしまいだけど、クリアテキストで保存するよりはマシじゃね?
0488nobodyさん2006/12/30(土) 16:43:30ID:???
http://pear.php.net/package/Crypt_Blowfish
0489nobodyさん2006/12/30(土) 16:51:21ID:???
>>786
対症療法だけど、extension_loaded('sqlite')の代わりにdefined('SQLITE_OK')使えばいいんじゃない?
0490nobodyさん2006/12/30(土) 17:04:16ID:???
452絡みだけど、パスワードを暗号化して保存するのって一般的なの?
サーバ機が自分の管理下にあるならその必要はないし、レンサバみたいな環境なら、サーバ管理者が利用者のパスワードを覗く方法なんていくらでもある(サーバのログとか)わけだから、暗号化してもしょうがない気がするんだけど。
0491nobodyさん2006/12/30(土) 17:16:40ID:???
>>490
・暗号化しておけば何らかのセキュリティホールでデータが漏れても生のパスワードは漏れない。
・(利用者からみて)大企業でもデータ漏れをやらかすのに個人の管理者なんて信用できない。
0492nobodyさん2006/12/30(土) 17:20:39ID:???
>>485
嘘つくなよ
0493nobodyさん2006/12/30(土) 17:27:47ID:???
>>490
俺のパスワードが流出したら責任とって被害額を賠償してくれるんだね?
0494nobodyさん2006/12/30(土) 19:07:41ID:kiTSZZLq
PHP部の最後に
session_destroy();
を入れたら
エラー:
Trying to destroy uninitialized session
が出ました。
ログイン画面なので、クライアントがセッション値を保持していなくても
念のためにセッションを全破棄させたいのですが、
session_destroy();
ではダメなのでしょうか?
0495nobodyさん2006/12/30(土) 19:54:15ID:???
OS のロードを得るような PHP の関数って無いでしょうか?
ロードが高いときにはいくつかの処理をスキップするような
プログラムを書きたいのですが。
0496nobodyさん2006/12/30(土) 20:42:45ID:???
web特化なんです!ごめんなさい><
0497nobodyさん2006/12/30(土) 21:35:33ID:???
>>491
セキュリティホールを危惧して暗号化、ってのはわからなくもないけど・・・。

もしデータベースの生データが外部に漏れるような大惨事が起こってしまったとしたら、ログイン用パスワードだけが暗号化されてたかどうかなんて、大した問題じゃないような気もする。
サーバの管理人が信用できない場合には、そのサーバ管理人に漏れたら大きな損害が発生し得るサイトの運営は、そもそも避けるべきだしね。

それよりかサイトに訪問する側としては、パスワードを忘れた場合に復元してくれる機能はあった方がありがたい(特に、記憶にあまり残らない、どうでもいいサイトであればあるほど)。
つーか、大規模なサイトでもパスワード復元機能ってけっこうあるじゃん。

>>493
こちらで明示したプライバシーポリシーに反する形で、万一そんな失態を犯してしまったら、謹んでお詫びするし、相応の金も払うよ。
0498nobodyさん2006/12/30(土) 21:41:27ID:???
>>495
つ SNMP関数

サーバでSNMPが有効になってる必要があるけど。
0499nobodyさん2006/12/30(土) 21:41:49ID:???
>>497
ぜんぜんわかってないな。
まず全てのデータベースが名前や住所を保存してるわけではない。
メアドとパスワードのみで会員登録できるサービスもある。
だからパスワードが漏れたことのみが問題になるケースもある。そして、

>こちらで明示したプライバシーポリシーに反する形で、
>万一そんな失態を犯してしまったら、謹んでお詫びするし、相応の金も払うよ。

同じパスを使ってるユーザーなんて五万といるし、
メアド+パスで他のサービスも入り放題。
「相応の金」はあんたのサービスで被った被害だけにとどまらないよ。

>つーか、大規模なサイトでもパスワード復元機能ってけっこうあるじゃん。

あるねー。よくこんなリスキーなことするなあって感心してるよ。
0500nobodyさん2006/12/31(日) 02:31:47ID:bO4aspIb
pngファイルからswfファイルに変換する方法ってありますか?
0501nobodyさん2006/12/31(日) 02:39:43ID:???
>>500
何をしたいのか良くわからんが(swfってただの画像フォーマットじゃないだろ?)、
Shockwave Flash 関数(http://jp2.php.net/manual/ja/ref.swf.php)と
イメージ関数(http://jp2.php.net/manual/ja/ref.image.php)でも眺めてみたらどうだ。
05025002006/12/31(日) 03:16:04ID:bO4aspIb
>>501
ありがとうございます。参考にして見ます。
0503nobodyさん2006/12/31(日) 03:17:02ID:???
よかったぁ〜
とりあげずパスワード復元〜〜とか、俺のパスワード〜〜
って能書きこいてる奴に攻撃されても大丈夫だ
0504nobodyさん2006/12/31(日) 03:24:15ID:???
今年最後の日本語でおk
0505nobodyさん2006/12/31(日) 06:15:42ID:???
>>498 THX
そうか、SNMP を使うという手があったか。
0506nobodyさん2006/12/31(日) 08:06:07ID:B2TdPhYS
fopen()のmodeを見ると、
どれもファイルポインタを先頭か終端に置くと書いています。
これはつまり、ログなどを追加して書き込むときは、
ログファイルの先頭か終端からしか書き込めないということを示しているのですか?
それとも何行目とか、この文字列の後とか指定できるのでしょうか?

ログにxmlを使っていて、先頭が<?xml version〜になっているので、
どうログを追加しようかと悩んでいます。

ログをxmlにするときは、元のログファイルを文字列に読み込んで、
文字列にログを追加した後、
一旦ログを空にして、書き込みなおすという方法しかないのでしょうか?

書き込みなおす方法でもいいのですが、レスポンスが悪そうな気がして・・・
0507nobodyさん2006/12/31(日) 09:19:33ID:???
>>506
ファイルっていうのは基本的にそういうもの >先頭から上書きしてしまうか、終端に続けるか
ファイルは全体丸ごとで1塊のものであって、「途中に挿入する」というのは
後半部分を挿入内容の分だけ後ろにずらして移動させるような処理が必要で、
そのような機能はOSのファイル機能の中には含まれていない。

お手軽な手法としては「全部読み込んで文字列を編集して全部書き込み直し」かと。
レスポンスを気にするなら「挿入位置より後半だけ読み込んで以降を削除→挿入内容+後半内容を追記」
などという手も取れなくは無い。

でも別システムとの受け渡し用の一時データファイルならともかく、次々と追記される目的の
ログファイルにXMLを使うこと自体が間抜けな設計に思えるけど。
0508nobodyさん2006/12/31(日) 10:12:06ID:???
データベースへの接続のためのパスワードって
どこに書いておくのが安全なんでしょうか?

スクリプトは当然 Apache から読めないとダメなので、

1)誰でも読めるようにする→論外
2)Apache プロセスと同じユーザ(例:ユーザ名 apache)が読めるようにする
3)Apache プロセスと同じグループ(例:グループ名 apache)が読めるようにする

の選択肢しかないように思えるのですが、
他に何かいい方法があるのでしょうか?

同じサーバを使っている他のユーザから見られないようにしたい、
でも Apache からは見られるようにしたい、ということです。
ACL が使えるファイルシステムならいいのでしょうけど・・・
サーバは Debian GNU/Linux etch です。
■ このスレッドは過去ログ倉庫に格納されています