【PHP】下らねぇ質問はここに書き込みやがれ 35
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/12/21(木) 13:42:19ID:???まず読め→【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みたいに変換できる関数なかった〜?
0411nobodyさん
2006/12/29(金) 00:08:29ID:YLaIusHS0412nobodyさん
2006/12/29(金) 00:25:48ID:UI+BpgQSそれを元に戻してブラウザに出力するには、「Content-Type: image」のヘッダを吐いて
base64デコードした文字列をechoで出力する....という単純な処理でいいの?
0415nobodyさん
2006/12/29(金) 00:32:01ID:UI+BpgQSご回答、ありがとうございます。
>何故そんな簡単なことを実際にやって確かめないの?
いや、やってみたことはやってみたんですよ。
もちろんうまく出力することはできたんですが、なんだかこれでいいのかなって。
自分流で強引な方法なのかもと不安になってしまったんです。
すみませんでした。
0416nobodyさん
2006/12/29(金) 00:37:55ID:1uYyFHrLいろんなサイトでmbstringの設定方法を参考にしましたがだめです。
バージョンで動作が違うとかありますか?
0418nobodyさん
2006/12/29(金) 01:29:16ID:???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:???取得する方法ってありますか?
クエリーで一回格納してそれをnumRows()する方法
$rs=$db->query($sql);
$rs->numRows();
では、データ量が多い場合にメモリ無駄に食いますよね
それを避けて、行数のみ取得したいと考えてます。
0420nobodyさん
2006/12/29(金) 01:41:38ID:???0421nobodyさん
2006/12/29(金) 01:43:10ID:???とりあえずブラウザでみれないようなファイルに
>>418
$item に " が含まれていたらどうなるのだね?
上は正しい SQL 文になるが
下は SQL インジェクションの餌食になるよね
0423nobodyさん
2006/12/29(金) 02:25:43ID:zzjbblat1.質問文、項目は管理者が自由に増やしたり削ったりできる
2.質問が1の時もあれば5つのときもある(管理者次第)
3.複数選択も管理者が選択できる
以上の機能でMySQLにユーザが選んだデータを入れていくのですがこのようにクエリがまったく予測できないのでどのように入れたらいいか見当もつきません。。
今、考え付くのが
一つのチェックに1行作るくらいです。。
お力お貸しくださいm(_ _)m
0425nobodyさん
2006/12/29(金) 03:03:07ID:???質問テーブル(親)−質問項目テーブル(子)−回答選択肢テーブル(孫)
回答テーブル
質問ID
質問項目ID
回答選択肢ID
>>424
下のは文字列を扱うSQLが実行できないだろ
select password from user_master where userid='hogehoge'
↓escape
select password from user_master where userid=\'hogehoge\'
0427nobodyさん
2006/12/29(金) 08:35:57ID:???遅くなりましたが答えてくれてありがとう。
ぶっちゃけ拡張子はどうでもいいんですけどね。
csvとxmlには、ファイルを扱う専用の関数があるみたいなので、
ログの管理がしやすいのかな?なんて思っただけなので。
DBが使えない環境でも使えるようにしたいので、
407さんの助言通り、csvをテキストとして処理したいと思います。
0428nobodyさん
2006/12/29(金) 09:04:48ID:???確かめずに書くけど、PEAR::DBのnumRows();って、
DBによって実装が違ったような…。
MySQLだと SELECT count(*) WHERE ・・・
を投げてたと思う。
0429428
2006/12/29(金) 09:12:28ID:???ネイティブの関数だから、メモリは関係ないかも。
DB側の実装によるんじゃないかな。
0430nobodyさん
2006/12/29(金) 10:34:00ID:JQJ1UMkF<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:???$str = '<meta http-equiv="Content-Type" content="text/html; charset='.$encoding.'">';
↓
$str = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=".$encoding."\">";
0432430
2006/12/29(金) 10:54:04ID:JQJ1UMkFレスありがとうございます。
それでもだめみたいでした。
ファイル自体をEUCで保存すれば文字化けはしませんでしたが、
$encodingの値はいつでも変えれるようにしたいので、
その都度コードを指定して保存しなおすのは大変なので、
どうにかしたいのですが、どなたか宜しくお願いします。
0434nobodyさん
2006/12/29(金) 11:10:55ID:???それだったらファイルをShift_JISで書いたときは $encoding = "Shift_JIS";
それだったらファイルをEUC-JPで書いたときは $encoding = "EUC-JP";
にしなきゃダメじゃない?
0435nobodyさん
2006/12/29(金) 11:12:22ID:???>ファイル自体をEUCで保存すれば文字化けはしませんでしたが、
>$encodingの値はいつでも変えれるようにしたいので、
>その都度コードを指定して保存しなおすのは大変なので、
意味がわからない。
EUCで保存すれば問題ないならそれでいい気がするのだが
つかそういう設定は普通define使うだろ?
0436430
2006/12/29(金) 11:36:44ID:JQJ1UMkF内部コードっていうのがよくわからなくて・・・
HTMLの文字コードとは違うものなんですね。
混同してすみませんでした。
>>435
ちょっと説明すると長くなるのですが、
実はhtmlのDoctypeからhead間を出力するクラスを作っています。
自分の作ってるPHPは、
どれもhtmlのbody間の使いたいところでincludeする形になっていて、
単体ではhead間などは出力しないようになっています。
そこで、単体でも使えるように、そんなクラスを作っているのですが、
今まで作ってきたスクリプトの、保存した際の文字コードが違ってたりして、
上のスクリプトのencodingの値を変えないと、文字化けしてしまうのです・・・
ファイルの文字コードは、時期ごとに変わっているので、
(Shift_JIS→EUC-JPときて、今はUTF-8を使っています。)
いちいちファイルをチェックしなくても、どの文字コードがだいたいわかります。
数が多いので、できれば統一したくないというのが理由です。
説明がわかりづらいかもしれませんが、
不可能なようなので、あきらめて全て統一する方向にしたいと思います。
0437nobodyさん
2006/12/29(金) 11:57:06ID:ttVITF9rPHP→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:???そもそもMETAタグを文字コード変換してどうしようというのか。
たぶん、問題はphp.iniのdefault_charsetじゃないかと推測するが。
0439nobodyさん
2006/12/29(金) 13:07:19ID:???調べても、しっかり説明されているところが見つかりません。
あいかわらずマルチバイト系の関数はないってエラー吐くし、解説サイト全然役に立たない。
0440nobodyさん
2006/12/29(金) 13:48:22ID:???assainにいれちゃえばいいのでは。
php側
$smarty->assign('include_tpl', '/path/to/header.tpl');
tpl側
{$include_tpl}
0441nobodyさん
2006/12/29(金) 13:50:49ID:???違う気がしてきた。sryネ
0442nobodyさん
2006/12/29(金) 14:46:57ID:???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:???0447446
2006/12/29(金) 15:13:39ID:???SESSIONを使ったサイトしか作るつもりが無いので、
セッションに前画面の情報を入れて(Referの代替程度の話)
更新系の画面ではそれをチェックするぐらいでいいかなぁと。
0448nobodyさん
2006/12/29(金) 15:16:42ID:???CSRFの何がどう危険なのか、その仕組みを全く理解してないようだな。
まずその仕組みを徹底的に調べろ。
で、とりあえずリファラのチェックは全く対策にならない。
なぜなら、いくらでも偽装できるから。
0449nobodyさん
2006/12/29(金) 15:18:21ID:???postkeyがあってもCSRF脆弱性を無くせなかったmixiを反例にすべし。
0451446
2006/12/29(金) 15:24:28ID:???セッションIDのみより暗号強度が強くなるという認識程度。
>>447の方法だと、あとはセッションハイジャックの問題になると思ってるんだけど…。
0452nobodyさん
2006/12/29(金) 15:48:32ID:1NnWPd/mいくつか調べたところ、crtptを使うのが一般的みたいですが、
これだと復元出来なくなるので、「パスワードを忘れた人に再送信」
などのシステムが作れなくなります。
しかし、暗号化しないとDBを使ってもセキュリティ的によく無いとも聞きます。
こういう場合、どうしたらいいのでしょうか?
0453nobodyさん
2006/12/29(金) 15:54:22ID:???「データベースにパスワード問い合わせ」→「ssl通信」→「パスワード再送信」
0454nobodyさん
2006/12/29(金) 15:58:30ID:???パスワード忘れた人には、古いパスワードを捨てさせて、
新しい仮パスワードを発行するのが、普通じゃない?
で、ユーザーから本パスワードに変更してもらう。
0455452
2006/12/29(金) 16:02:34ID:???ありがとうございます。やっぱりそれしかないんですかね。。
あと、それなら「管理者が管理するシステム」でも
古いパスワードは捨てて、再設定する方式になりますよね?
目で見て確認出来ないのは辛いですが、そのようにシステムを変更します。
0458nobodyさん
2006/12/29(金) 16:20:37ID:???既存の環境が悪さしてるかと思って、Windowsクリーンインストールしたマシン用意したが同じ結果。
PHP4でも5でも動いてくれない。
0459nobodyさん
2006/12/29(金) 16:20:46ID:???0460446
2006/12/29(金) 16:29:17ID:???mixiがpostkeyがあってもダメだったのは、
postkeyが固定だったことと、
他の脆弱性でpostkeyが漏れたからじゃないのかな??
0461nobodyさん
2006/12/29(金) 16:42:06ID:???> なぜなら、いくらでも偽装できるから。
典型的に間違ったこといってるね。
被害者がリンクを踏んだりした被害者の Referer を偽装することは、
【ブラウザに脆弱性が無い限り】 できない。
ちなみに、つい最近 Flash にその脆弱性が発見されたが、すぐ修正版が公開されたし、
Referer 関係の脆弱性はそこまで多くない。
0462nobodyさん
2006/12/29(金) 17:00:32ID:???おたくが言うところのブラウザは脆弱性だけがリファラが偽装の手段なの
PHPでもheader関数で簡単にリファラ偽装できるけど
0463461
2006/12/29(金) 17:04:58ID:???ほんとに分かってないね。
Referer はクライアントが送信できる任意の情報だから簡単に偽装できるよ、そりゃ。
でも CSRF ってなんだか分かってる?
おまいさんが言ってる Referer を偽装できる人は 悪意のあるWebサイトの管理者のことだよね。
CSRF対策の被害者は 【悪意のあるリンクをクリックした人】 であり、その人が自ら Referer を偽装する動機はないわけ。
php の header 関数を利用して、悪意のあるページを閲覧した第三者が送信する Referer を偽装する方法があったら教えてくれ。
0464nobodyさん
2006/12/29(金) 17:32:35ID:???セッションを使えばいいんですよね?
0465nobodyさん
2006/12/29(金) 17:49:34ID:???ちがうよ
私の場合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]);
にしてください。そこの変数名名前がやばかったんで、ダミー入れたら数字のみにしてしまいました。
0468461
2006/12/29(金) 18:11:05ID:???そういうことか。
つまり、普段から Referer を偽装してブラウジングしている人が悪意のあるリンクをクリックした場合に、そのRefererを偽装している人が保護されないということね。
それなら正しいわ。
ただ、Referer については RFC で定義されているので (「送信しない」という選択肢は認めている。)、 RFC に反する通信を行っている人 かつ
Referer をデフォルトで偽装するブラウザは無いに等しい のでそれを保護する必要があるのかは疑問だけど。
逆に言えば、クライアントは Referer の送信を拒否する権利がある (RFCでも認められている) ので、そういった正当な通信までもをエラーで拒否するのは
アクセシビリティ上の問題があるけどね。(ちなみに、W3Cの文法チェックステッカーや多くのSSL検証シールはそれやってる。)
0469nobodyさん
2006/12/29(金) 18:23:29ID:???$ を \$ にしてみる前にマニュアル読もう。
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う…おはずかしい。
”を’にすればよいだけでした。
感謝します。
ありがとう。
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:???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+TJSQLから戻ってきた文字列は中にどのような関数や変数を入力してもそのまま出力されることから、恐らく''で囲ったのと同じ文字列として扱われているようです。
実験的に
$AAP = str_replace('BB_0123',"$BB_0123",$AAP);
のように呼び出した文字列に対して置換をおこなうと展開されるようになりました。
ありがとうございます。
ただ、全ての変数および関数に対して置換をおこなうのはどうも効率がわるいきがします。
''でかこった文字列を""でかこった文字列に変換する良い方法はないでしょうか?
よろしくお願い致します。
0474nobodyさん
2006/12/29(金) 21:28:34ID:???そもそもDBに格納するデータにPHPコード(変数とか関数とか)を入れるのが
根本的におかしいと思うんだが、何でまたそんな妙な設計にしてるのさ
0475nobodyさん
2006/12/29(金) 21:35:19ID:e5ul8+TJ携帯対応のシステムなのですが、絵文字のライブラリー群はすでにあり、その仕様が
$aaa_123の変数が有る場所にはアクセスしてきた携帯キャリアに併せた絵文字コードに変換して送信する。
という仕様なんです。
で、DBの中に直接変数をいれておけばあとはecho等で吐き出せば全キャリア絵文字対応になる予定だったんです。
で、一番最初に御聞きさせて頂いたようにDB入力時にまず変数が文字列として入らない事に躓いて
次に、DBからひっぱってきた変数が展開されない事に躓いてると。
そういう訳なんです。絵文字なんで全置換プログラムなんて書くと量も多いし、負荷も心配で。
なにか良い知恵が会ったらアドバイス頂きたいです。
0476nobodyさん
2006/12/29(金) 22:32:08ID:???0477nobodyさん
2006/12/29(金) 22:50:22ID:???require('hogehoge.php');
require('hagehage.php');
みたいので当ってると思うんだけど、これをスマートに一文で表記する方法とかないかな?
0478nobodyさん
2006/12/30(土) 01:30:51ID:???必要なファイルをrequireしてるphpファイルをrequireする。
とか、セットという概念を作ってrequireするとか。
特定の文字列を渡したら、特定のファイルを複数requireしてくれる関数を作るとか。
0481nobodyさん
2006/12/30(土) 02:04:59ID:???0482nobodyさん
2006/12/30(土) 07:04:18ID:???無いんじゃないかな。
strlen()とmb_strlen()の結果を比較して
差があったらマルチバイト文字を含む、
と判断する手法があるみたいだけど。
0483nobodyさん
2006/12/30(土) 07:49:19ID:???最終的に文字列をprintするだけで、汎用性もないものなんですけど…
0484nobodyさん
2006/12/30(土) 08:57:45ID:???0485nobodyさん
2006/12/30(土) 10:05:56ID:egNnis/4違う。
0486nobodyさん
2006/12/30(土) 16:06:11ID:Y367ZOEiecho 'OK';
}else{
echo 'NG';
}
こんなコードを書いてSQLiteが使えるかどうかチェックしたが、NGと表示されてしまう。
php_sqlite.dllはちゃんと入ってるし、読み込むように設定してあるハズなんだが、
どうすればいい?
}
0488nobodyさん
2006/12/30(土) 16:43:30ID:???0489nobodyさん
2006/12/30(土) 16:51:21ID:???対症療法だけど、extension_loaded('sqlite')の代わりにdefined('SQLITE_OK')使えばいいんじゃない?
0490nobodyさん
2006/12/30(土) 17:04:16ID:???サーバ機が自分の管理下にあるならその必要はないし、レンサバみたいな環境なら、サーバ管理者が利用者のパスワードを覗く方法なんていくらでもある(サーバのログとか)わけだから、暗号化してもしょうがない気がするんだけど。
0491nobodyさん
2006/12/30(土) 17:16:40ID:???・暗号化しておけば何らかのセキュリティホールでデータが漏れても生のパスワードは漏れない。
・(利用者からみて)大企業でもデータ漏れをやらかすのに個人の管理者なんて信用できない。
0494nobodyさん
2006/12/30(土) 19:07:41ID:kiTSZZLqsession_destroy();
を入れたら
エラー:
Trying to destroy uninitialized session
が出ました。
ログイン画面なので、クライアントがセッション値を保持していなくても
念のためにセッションを全破棄させたいのですが、
session_destroy();
ではダメなのでしょうか?
0495nobodyさん
2006/12/30(土) 19:54:15ID:???ロードが高いときにはいくつかの処理をスキップするような
プログラムを書きたいのですが。
0496nobodyさん
2006/12/30(土) 20:42:45ID:???0497nobodyさん
2006/12/30(土) 21:35:33ID:???セキュリティホールを危惧して暗号化、ってのはわからなくもないけど・・・。
もしデータベースの生データが外部に漏れるような大惨事が起こってしまったとしたら、ログイン用パスワードだけが暗号化されてたかどうかなんて、大した問題じゃないような気もする。
サーバの管理人が信用できない場合には、そのサーバ管理人に漏れたら大きな損害が発生し得るサイトの運営は、そもそも避けるべきだしね。
それよりかサイトに訪問する側としては、パスワードを忘れた場合に復元してくれる機能はあった方がありがたい(特に、記憶にあまり残らない、どうでもいいサイトであればあるほど)。
つーか、大規模なサイトでもパスワード復元機能ってけっこうあるじゃん。
>>493
こちらで明示したプライバシーポリシーに反する形で、万一そんな失態を犯してしまったら、謹んでお詫びするし、相応の金も払うよ。
0499nobodyさん
2006/12/30(土) 21:41:49ID:???ぜんぜんわかってないな。
まず全てのデータベースが名前や住所を保存してるわけではない。
メアドとパスワードのみで会員登録できるサービスもある。
だからパスワードが漏れたことのみが問題になるケースもある。そして、
>こちらで明示したプライバシーポリシーに反する形で、
>万一そんな失態を犯してしまったら、謹んでお詫びするし、相応の金も払うよ。
同じパスを使ってるユーザーなんて五万といるし、
メアド+パスで他のサービスも入り放題。
「相応の金」はあんたのサービスで被った被害だけにとどまらないよ。
>つーか、大規模なサイトでもパスワード復元機能ってけっこうあるじゃん。
あるねー。よくこんなリスキーなことするなあって感心してるよ。
0500nobodyさん
2006/12/31(日) 02:31:47ID:bO4aspIb0501nobodyさん
2006/12/31(日) 02:39:43ID:???何をしたいのか良くわからんが(swfってただの画像フォーマットじゃないだろ?)、
Shockwave Flash 関数(http://jp2.php.net/manual/ja/ref.swf.php)と
イメージ関数(http://jp2.php.net/manual/ja/ref.image.php)でも眺めてみたらどうだ。
0502500
2006/12/31(日) 03:16:04ID:bO4aspIbありがとうございます。参考にして見ます。
0503nobodyさん
2006/12/31(日) 03:17:02ID:???とりあげずパスワード復元〜〜とか、俺のパスワード〜〜
って能書きこいてる奴に攻撃されても大丈夫だ
0504nobodyさん
2006/12/31(日) 03:24:15ID:???0506nobodyさん
2006/12/31(日) 08:06:07ID:B2TdPhYSどれもファイルポインタを先頭か終端に置くと書いています。
これはつまり、ログなどを追加して書き込むときは、
ログファイルの先頭か終端からしか書き込めないということを示しているのですか?
それとも何行目とか、この文字列の後とか指定できるのでしょうか?
ログにxmlを使っていて、先頭が<?xml version〜になっているので、
どうログを追加しようかと悩んでいます。
ログをxmlにするときは、元のログファイルを文字列に読み込んで、
文字列にログを追加した後、
一旦ログを空にして、書き込みなおすという方法しかないのでしょうか?
書き込みなおす方法でもいいのですが、レスポンスが悪そうな気がして・・・
0507nobodyさん
2006/12/31(日) 09:19:33ID:???ファイルっていうのは基本的にそういうもの >先頭から上書きしてしまうか、終端に続けるか
ファイルは全体丸ごとで1塊のものであって、「途中に挿入する」というのは
後半部分を挿入内容の分だけ後ろにずらして移動させるような処理が必要で、
そのような機能はOSのファイル機能の中には含まれていない。
お手軽な手法としては「全部読み込んで文字列を編集して全部書き込み直し」かと。
レスポンスを気にするなら「挿入位置より後半だけ読み込んで以降を削除→挿入内容+後半内容を追記」
などという手も取れなくは無い。
でも別システムとの受け渡し用の一時データファイルならともかく、次々と追記される目的の
ログファイルにXMLを使うこと自体が間抜けな設計に思えるけど。
0508nobodyさん
2006/12/31(日) 10:12:06ID:???どこに書いておくのが安全なんでしょうか?
スクリプトは当然 Apache から読めないとダメなので、
1)誰でも読めるようにする→論外
2)Apache プロセスと同じユーザ(例:ユーザ名 apache)が読めるようにする
3)Apache プロセスと同じグループ(例:グループ名 apache)が読めるようにする
の選択肢しかないように思えるのですが、
他に何かいい方法があるのでしょうか?
同じサーバを使っている他のユーザから見られないようにしたい、
でも Apache からは見られるようにしたい、ということです。
ACL が使えるファイルシステムならいいのでしょうけど・・・
サーバは Debian GNU/Linux etch です。
■ このスレッドは過去ログ倉庫に格納されています