■PHP板 質問専用スレッド■
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNGレスは気長に待つのが良い感じかも。
答えられる方、返答よろしくお願いします。
参考リンク
■本家
http://www.php.net/
■Japan PHP Users Group
http://www.php.gr.jp/
■PHP 日本語ページ
http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/index.html
■PHP日本語マニュアル
http://www.asakawa.ne.jp/doc/php/ja/sjis/
0157名無しさん@お腹いっぱい。
2001/05/11(金) 09:25ID:???0158名無しさん@お腹いっぱい。
2001/05/11(金) 09:31ID:???0159名無しさん@お腹いっぱい。
2001/05/13(日) 18:07ID:QKOKs7dUデータベース関係を除けば、CGIとかと同じような事が挙げられると
思っていていいんでしょうか?
ユーザの入力によっては、プログラマの意図しない動作をする、みたいな。
cat /etc/passwd | とかで。
0160ナナシファン
2001/05/13(日) 18:32ID:05DbuIGYそそ。あと一番問題なのがセッションね。
外部にリンクを許しちゃうと、リンク先のHTTP_REFERERで
セッションIDが見えちゃうとか。
0161JAPU
2001/05/14(月) 18:29ID:???0162名無しさん@お腹いっぱい。
2001/05/14(月) 18:39ID:???0163ナナシファン
2001/05/14(月) 20:27ID:EsWUXNIEPHP4だって、何も考えずにsession_start()を使っちゃうと
クッキーが使えればクッキーを使うが、ダメだと自動的に
URIにセッションIDを張り込んじゃうでしょ。
「ななしファン」だと誰のファンかわからないので、電動ナナシさんのファンであることをアピールする
ために「ナナシファン」に改名。
0164初期不良
2001/05/15(火) 03:51ID:qIx5vtWI今 ports を cvsup したら php4_jstring-1.1.1.tar.gz になってた。
ただいまコンパイル中...
0165初期不良
2001/05/15(火) 04:41ID:qIx5vtWIapachectl restart までやってくれた。
全然触ってなかったから分からなかったんだけど、
驚くかもってのはなんのこと?気になる...
0166電動ナナシ
2001/05/15(火) 11:35ID:???PHP-4.0.6 から jstring が標準配布に統合されるって出てたね。
0167名無しさん@お腹いっぱい。
2001/05/17(木) 13:35ID:vuz.jAiQ・なんかif文とかが多いページを開くと、反応が無くなってしまうことがある。
原因不明。
ネストの深さ問題では無いと思う。
・PEARのDB(PostgreSQL)を使ってるんだけど、SELECTが戻って来なく
なることがある。これも原因不明。
pg_exec()にすると戻ってくる。
ブラウザを再起動したら戻ってくるようになったり、CSSをはずしたら
戻ってくるようになったり。
使い方が悪いのかなー。
0168名無しさん@お腹いっぱい。
2001/05/17(木) 20:20ID:???どうもこの近藤氏と近藤くんを混同してしまいますな。
0169名無しさん@お腹いっぱい。
2001/05/17(木) 21:41ID:dr1laO2oセキュリティの確保について教えて下さい。
PHPのページは、suExec等で実行権限を変更した状態で実行
できない(?)ため、レンタルサーバでPHP動かしてるときは
非常に困るんですが、なんとかならないんでしょうか?
自分の書いたPHPスクリプトから読み書き出来るファイルは
当然、同じサーバのユーザーのPHPスクリプトからも読み書き
出来るわけで、セキュリティーもなにもあったもんじゃない。
この状態だとDBへアクセスするパスワードをPHPのソースに
書いて置いても、他のユーザーから見られちゃうし。(PHPで
指定ファイルを表示するプログラムを書けばよい)
こういった問題はどのように対処すればよいのでしょうか?
phpスクリプトの所有者権限で実行させることが出来れば
一番よいのですが。
0170名無しさん@お腹いっぱい。
2001/05/17(木) 22:19ID:vgMMOG.Q#/usr/local/bin/php
rwx------
0171169
2001/05/17(木) 23:41ID:dr1laO2omod_xx形式では、スクリプトによって実行権限を可変にするのは
難しいんでしょうね。(そういえばJServもそうでした。)
共有型のレンタルサーバではいろいろ限界がありますね。
普通の形式のPHPが使えないのが悔しいです。
毎回プロセスが起動されるわけで、セッションなどが持続するか
という点とパフォーマンスについて少し不安ですし。
そもそも、いま使っているレンタルサーバーは、mod_phpしか
はいってないので運営会社に相談してみないといけない。
気が重いです
0172名無しさん@お腹いっぱい。
2001/05/18(金) 00:03ID:HvnCSBrwいままで2年間C言語をやってきたんですが、Web関係
の仕事がやりたくて、派遣登録をしたら、
PHPとLINAXを使っての仕事があると進められました。
今週末に話しを聞きに行くので具体的なことはわからないのですが、
WebプログラムだったらPerl(CGI)が主流かなと
思っていたので、この仕事を受けるかどうか迷ってます。
(とりあえずperl(CGI)をマスターしようと思っていたので・・・)
まぁようするに、Perlの仕事を待つか、PHPの仕事をするか
今後のWeb業界でどちらが良いのか教えていただけたらと思います。
Webに関しては初心者なので、幼稚な質問ですみません。。。
0173名無しさん@お腹いっぱい。
2001/05/18(金) 01:06ID:???今日の朝まで元気に動いていたphp3の環境は先輩が作ったもので、
Linux + postgres + apache + php3。
で、php4のインストールやってみてねと言われて・・・。
自分はLinuxを触ったことはほとんどないわけで。
apacheもphp3もぶち壊してきました(藁
いろんなサイトでインストール方法とかのってたりしますが、
今までインストールして来たものも把握できていないため、
ばっさり消してというのも、ちとやりにくい。
さらにphp3とphp4は同居させる予定。
いやぁもうさっぱりなわけで。
助けてくれと言ってもなかなか難しいんだろうけど、誰かに助けて
もらいたい気分です。
誰か・・・!
0174名無しさん@お腹いっぱい。
2001/05/18(金) 09:00ID:mi2YgIEwまずはapacheのインストール
解凍したディレクトリで以下を実行
./configure --enable-shared=max
make
make install
httpd.confの設定
apache起動
0175名無しさん@お腹いっぱい。
2001/05/18(金) 09:58ID:???Windows系の方か、仕事でコーディングしてない方だと思いますが。
私の周りでは、数十万ぐらい中規模の仕事はPHPが主流です。
個人的には、得意な言語ではないので、「PHP嫌いだから」って
言って断ることもおおいですが。
が、あなたは事前調査も足りないし、現状では
仕事を受けるべきではないです。というか、ウチにきたら
即座にチェンジおねがいするでせう。
0176名無しさん@お腹いっぱい。
2001/05/18(金) 11:53ID:jsJYtRGoどうもRESありがとうございます。
昨日派遣先から連絡あって、土曜に話を聞きに行くので
事前調査できなかったんですよね。まぁとりあえずPHPの
情報があるここで聞いてみようかなっと思いまして。
中規模ではPHP主流ですか。ありがとうございます。
とりあえずもう少しNETなどで調べて話を聞いてみることにします。
0177PHP初心者
2001/05/18(金) 17:43ID:k6aRDiHQPHP4をインストールしようとしたのですが、、
#make install を実行した時点で最後に
make[3]: *** [jstring.lo] Error 1
make[3]: Leaving directory '/usr/local/src/php-4.0.5/ext/jstring'
make[3]: *** [install-recursive] Error 1
make[3]: Leaving directory '/usr/local/src/php-4.0.5/ext/jstring'
make[3]: *** [install-recursive] Error 1
make[3]: Leaving directory '/usr/local/src/php-4.0.5/ext'
make[3]: *** [install-recursive] Error 1
とでます。
恐れ入りますが、どなた様か対応方法を御教授戴けないでしょうか?
全てrootユーザーで操作を進めました。
宜しくお願いします。
0178名無しさん@お腹いっぱい。
2001/05/18(金) 17:48ID:???0179PHP初心者
2001/05/18(金) 19:48ID:k6aRDiHQ/usr/local/src/php-4.0.5/ext内の
php-4.0RC2_jstring-1.0.tar.gzを
tar zxvf php-4.0RC2_jstring-1.0.tar.gz で展開したのですが、、
#make を実行すると最後に
make[3]: *** [jstring.lo] Error 1
make[3]: Leaving directory '/usr/local/src/php-4.0.5/ext/jstring'
make[3]: *** [install-recursive] Error 1
make[3]: Leaving directory '/usr/local/src/php-4.0.5/ext/jstring'
make[3]: *** [install-recursive] Error 1
make[3]: Leaving directory '/usr/local/src/php-4.0.5/ext'
make[3]: *** [install-recursive] Error 1
make: *** [all-recursive] Error 1
となります。本当に困りました。
0180ナナシファン
2001/05/18(金) 20:45ID:So5nwNRcなんかMLで話題になってなかった?
jstringの200102xxとかをいれてみそ。うまくいくから。
見つからなかったらftpsearchで。
0181PHP初心者
2001/05/18(金) 20:52ID:k6aRDiHQphp-4.0.5を辞めて付録のphp-4.0.3pl1で最初からやり直したら
インストールできたようです。
何分初心者なものでお騒がせしました。m(__)m
0182名無しさん@お腹いっぱい。
2001/05/19(土) 07:24ID:NfS52E.2$title = 'hoge';
} elseif ('haun', $result) {
$title = 'haun';
}
な感じで50個くらい続くのですが、
これではあまり効率が良くないですよね?
何か他に良い方法はあるでしょうか?
0183名無しさん@お腹いっぱい。
2001/05/19(土) 09:10ID:???解決したみたいだけど最新のjstringなら4.0.5でもいけるよ。
ftp://night.fminn.nagano.nagano.jp/php4/php4_jstring-1.1.1.tar.gz
0184初期不良
2001/05/20(日) 00:11ID:R6mR4c2oユーザを信用できない状況では PHP って使えないのかね。
まあ、そうでなくても Perl でもしばらくはやってきたわけだけど。
DB を使えば DB 独自のユーザ、パスワード、権限で制御できるから
何とかなるのかな?
一般的にはどうなんでしょ?
スタンドアローンなサーバで運用って事が多いのかな?
0185初期不良
2001/05/20(日) 00:28ID:???あんまりマルチユーザ利用を考えてないサーバって事ね。
0186ドキュソデザイナー
2001/05/20(日) 23:45ID:.g1VXZ4s当然、Authクラスを使って会員認証するのですが、会員IDとパスワードは、
デフォルトのテーブルではなく、既存のテーブルを使って認証したいのです。
どうやったらいいの?
0187ドキュソデザイナー
2001/05/21(月) 00:47ID:piAkqhBs$uid,$passと$permは違うテーブルになるけど、処理はどうやって分ければ
よいのでしょう?
0188電動ナナシ
2001/05/21(月) 02:23ID:???その DB 独自のユーザー名・パスワードをスクリプトに書いてしまうと
ほかの人から見られてしまうって問題でしょ。
例えばこんなスクリプトを書いて $file に適当なファイル名を指定すれば
ほかの人が書いたスクリプトを読めてしまう。
<?php
$file = "/home/other-user/other-script.php";
$fp = fopen($file, "r");
$r = fseek($fp, 0, SEEK_SET);
$buf = "";
while (!feof($fp)) {
$buf .= htmlspecialchars(fgets($fp, 8192));
}
fclose($fp);
echo "<textarea rows=\"25\" cols=\"80\">" . $buf . "</textarea>\r";
?>
0189電動ナナシ
2001/05/21(月) 02:40ID:???perms を格納するテーブルを $this->perms_table に入れてあり、その
テーブルのスキーマとして以下のものがあることを前提とすると、
CREATE TABLE perms (
:
userid int, /* ユーザー情報テーブルにおける ID 番号 */
perms int, /* 許可情報 */
:
);
こんな感じかな。
function auth_validatelogin() {
global $username, $password;
$uid = false;
$query = sprintf("SELECT u.uid, p.perms FROM '%s' u, '%s' p
WHERE u.id = p.id AND u.username = '%s' AND u.password = '%s'",
$this->database_table, $this->perms_table, $username, $password);
$this->db->query($query);
while($this->db->next_record()) {
$uid = $this->db->f("uid");
$this->auth["perm"] = $this->db->f("perms");
}
return $uid;
}
0190オラ狂うよ・・・
2001/05/21(月) 03:43ID:piAkqhBsDatabase error:
ora_parse() failed:
select * from event where (date between '2001-04-29' and '2001-06-02') and user_id = '9eda03dc8801523058abc42cc54da7df' order by start_time,end_time
Snap & paste this to sqlplus!
Oracle Error: 936 (ORA-00936: 式がありません。 -- while processing OCI function OPARSE)
Session halted.
start_time,end_timeは、NULLなのですが、それがダメなの?
0191電動ナナシ
2001/05/21(月) 03:46ID:???date BETWEEN TO_DATE('2001-04-29', 'YYYY-MM-DD') AND
TO_DATE('2001-06-02', 'YYYY-MM-DD')
としてみたら。date は DATE 型なんだよね。
ORDER BY については NULL だろうがなんだろうが関係ないよ。
0192ドキュソデザイナー
2001/05/21(月) 04:03ID:piAkqhBs明快かつ簡潔なコード例、ありがとう。
日曜のこんな時間ということもあってか、何かちょっと感動した。
ダメな営業がこの仕事をタダで受けて来ちゃったので、外注に出せず、なぜかWEBデザイナーの俺がやるハメに・・・。会社辞める、ぐらい言って、突っぱねればよかった。バカな俺・・・
0193電動ナナシ
2001/05/21(月) 04:12ID:???訂正
> WHERE u.id = p.id AND u.username = '%s' AND u.password = '%s'",
は
WHERE u.id = p.userid AND u.username = '%s' AND u.password = '%s'",
が正しい。
まあ何にせよ、きちんとジョインすれば簡単にできる。
0194オラ狂うよ・・・
2001/05/21(月) 04:37ID:EE3EK/S.ありがとう、以下のコードでうまくいったようです。また新たな問題が
発生したけど・・・
$db = new My_DB;
$sql = sprintf("select * from event
where (date between to_date ('%s', 'YYYY-MM-DD') and to_date('%s', 'YYYY
-MM-DD')) and user_id = '%s'
order by start_time,end_time",
$start["date"],$end["date"], $auth->["uid"]);
$db->query($sql);
0195電動ナナシ
2001/05/21(月) 04:54ID:???Oracle は時々自動的な型変換に失敗するから(再現条件は不明)、きちんと
変換関数を使って型変換をしたほうがいいよ。
>>193
また間違い
u.id は u.uid だな。
0196オラ狂うよ・・・
2001/05/21(月) 05:06ID:piAkqhBsなるほど。なんてことはないコードだしPostgresでは問題なく動いていたので、
悩んでしまった。その辺を中心にデバッグします。とりあえず家に帰って風呂だ。
ほんと、ありがとう。
0197名無しさん@お腹いっぱい。
2001/05/21(月) 09:48ID:oxRjCmREマッチさせる文字列を配列に入れておいて、ループで回すとか。
あと、「マッチした部分の文字列」を参照できるってことを知ってる?
正規表現系の関数の第三引数があるパターン。
これで1,2行で書けたりするかも。
0198名無しさん@お腹いっぱい。
2001/05/21(月) 09:51ID:oxRjCmREうげ、そりゃすごい問題ですね。
回避する(fxxx()系を無効にする)ことって出来ないんでしょうか?
0199antique
2001/05/21(月) 11:14ID:l/cyjLtQphp.ini の open_basedir で制限できると思う。
使ってないからわかんないけど。
http://snaps.php.net/manual/ja/html/configuration.html
0200199
2001/05/21(月) 11:19ID:???「ほかの人が書いたスクリプトを読めないように制限できる」
です。
fopenそのものを使えないようにする方法はわからない。
0201名無しさん@お腹いっぱい。
2001/05/21(月) 11:46ID:???さんきう。
ちょっと安心。
0202電動ナナシ
2001/05/21(月) 12:21ID:???System("cp $file ./tmp");
$fp = fopen("./tmp", "r");
ならどうよ。
0203電動ナナシ
2001/05/21(月) 12:26ID:???safe_mode と safe_mode_exec_dir も必須だなあ。
0204電動ナナシ
2001/05/21(月) 12:44ID:???safe_mode = On
safe_mode_exec_dir = "."
doc_root = "."
user_root = "."
という感じかな。
あと disable_functions という指示子もあるね。任意の関数を無効にできるらしい。
fopen を指定したら確かに無効になった。ちなみに無効にすると >>188 の
コードは無限ループに陥るから注意。
0205antique
2001/05/21(月) 12:55ID:???fopenは使えないと不便だからおいとくとして、
safe_mode = On
safe_mode_exec_dir = "."
doc_root = "."
user_root = "."
は信用できないユーザがいる場合は必須ですね。
オイラ>>202の方法全く気付かなかった(汗
0206169
2001/05/21(月) 12:56ID:Zc9DvZB2open_basedir で、特殊文字「.」を指定することでスクリプトの
ディレクトリ以下のファイルしかアクセスできなくなるんですね。
かつsafe_mode を ONにすれば、安心と…
PHP-ML 9775あたりからのスレッドで、PHPのセキュリティについての
話題があって結局、同一IPアドレスで運用している限り難しいという
ような結論だったので、ダメなのかと思ってました。
0207169
2001/05/21(月) 13:00ID:Zc9DvZB2あ、でもPHPだけならいいですが、Perl等、他のCGI実行環境も
提供している場合は、PHPだけで対応してもダメですね。
PHP自身の機能として、スクリプトの所有者の権限で動くモード
(sbitをみる)があってもいいと思うのですが、これは問題があるの
でしょうか。
問題点?(想像)
・実行権限変更するためにmod_phpをroot権限で動かさないといけない?
・ということはapacheもroot権限でうごかないといけない?
・Linuxでは、同一スレッドないで実行権限を切り替えられない?
0208antique
2001/05/21(月) 13:28ID:???CGIの場合はsuexec使ってパーミッションさえちゃんと設定すれば問題無い。
とは言え、パーミッションを666とかに平気で設定してる人が多い。
CGI配布してるサイトでsuexecの説明していれば助かるのだが、説明しているサイトを見たこと無いからな。
某KENT-WEBあたりが説明しててくれれば、皆真似するだろうに(爆
# ま、他人のが覗かれようが知った事じゃないですが。
CGIはsuexecでユーザ権限で動かせるんだし、問題点に書かれているような事は無いと思うよ。
# PHPってCGI版有るけどよく解らない。
どうでも良いけどApache1.3.20出たね。http://httpd.apache.org/ は 1.3.19のままだけど。
早速入れようかな。
0209169
2001/05/21(月) 15:24ID:Zc9DvZB2PerlなどのCGI側は、rwx------にしといてsuEXEC使えば安心なのは
そうなんですが、守りたいのはPHPのソースのほうなんです。
PHPのソースは、rwxr-----とかにしておいて、グループはnobodyだの
wwwだのといった全ユーザー共通のグループに所属しているので、
同じくnobody(またはwww)グループのユーザーのCGIからアクセスできて
しまうわけです。
PHPをCGIとして動かすのならsuEXEC使えばいいので問題ないです。
suEXECがなんでユーザー権限を変更できるのかちゃんと理解してないです。
suEXEC自身はRoot権限で動く必要があると思うのですがちがうのかな。
0210169
2001/05/21(月) 15:35ID:Zc9DvZB2(他のMLの話題をここにもってくるのはナンですが…)
PHP-MLでは、ソースに含まれるパスワードを隠す目的なら、
ZENDで暗号化しちゃえばいいかもという案もでてました。
ZEND使ったこと無いのでよく分からないのですが、暗号化する
際にパスワードとか指定するわけではないようなので、
ツールさえあれば復号できるんじゃないかなと思いました。
ZENDの処理系のソースも公開されているので、ツールつくるのは
難しい話じゃないような気がします。
0211電動ナナシ
2001/05/21(月) 16:09ID:???switch/case を使うという手もあるね。特に一致した文字列をそのまま
使うのではないとき。
submit なボタンが多数あって、value を見てどのボタンが押されたかを
判別しているような場合かな。
$cmd = strtoupper($POST_CMD);
switch ($cmd) {
case "ADD":
hogehoge;
break;
case "DELETE":
hagehage;
break;
case "MOVE":
hogehage;
break;
case default:
hagehoge;
}
0212U-名無しさん
2001/05/21(月) 22:12ID:l6KPt7/gphp3_pgsql.dllってどこかでダウンロード出来ますでしょうか?
googleとかで探してみても、全然見当たらないっす。
0213電動ナナシ
2001/05/21(月) 22:26ID:???0214U-名無しさん
2001/05/21(月) 22:41ID:l6KPt7/g0215オラ狂うよ・・・
2001/05/22(火) 00:36ID:si2Mb37Mイケたと思ってたのは勘違い・・・鬱だ。また同じエラーメッセージ。
Database error:
ora_parse() failed:
select * from event where (date between to_date ('2001-04-29', 'YYYY-MM-DD') and to_date('2001-06-02', 'YYYY-MM-DD')) and user_id = '9eda03dc8801523058abc42cc54da7df' order by start_time, end_time
Snap & paste this to sqlplus!
Oracle Error: 936 (ORA-00936: 式がありません。 -- while processing OCI function OPARSE)
Session halted.
うーむ。
ふと思い立って、このサーバのPHPのconfigureオプション調べてみたら、
--with-oracle=/opt/oracle/product/8.1.7
となってました。Oracle 8.xは、--with-ociですよね。微妙に使えないのは
このせいかな?
0216電動ナナシ
2001/05/22(火) 01:41ID:???date を別の列名に変えてみたら?
0217名無しさん@お腹いっぱい。
2001/05/22(火) 01:56ID:2l6v9h4o取得できるリモートアドレスではアクセスポイント
までしか特定できませんよね。
普通アクセス制限とはアクセスポイント単位でやる物なのですか?
個人単位でやる(個人を認識する)方法があったら教えてもらえませんか。
0218電動ナナシ
2001/05/22(火) 02:03ID:???0219オラ狂うよ・・・
2001/05/22(火) 02:52ID:O0XOpuVkその通りでした。てか、列名、dateじゃなくちゃんとaz_dateとかしてたのに・・・
すこぶる鬱だ。ありがとう。
0220pen
2001/05/22(火) 13:07ID:Qka3clQwDBへの書き込みに対して、CGIで言うファイルロックの必要ってないんですか?
いろいろ調べたんですが、そういう記述って全然見かけなかったんで…
0221名無しさん@お腹いっぱい。
2001/05/22(火) 14:37ID:Zxtvn842Webアプリ側でのロックは恐らく必要無いかと。
普通は、DB側が良きに計らってくれるかと。
0222名無しさん@お腹いっぱい。
2001/05/22(火) 22:04ID:HZ6q6VlYという英字形式の GMT 時刻を JST に変換したいのですが、
どのようにすればよいでしょうか?
因みに、同じ様な変換を while で10数回繰り返す予定です。
0223電動ナナシ
2001/05/23(水) 01:03ID:???$timestring = "Tue, 22 May 2001 12:50:01";
$time = strtotime($timestring) - 3600 * 9;
echo date("Y/m/d H:i:s::T", $time);
?>
0224222
2001/05/23(水) 02:01ID:uAS2r3aUありがとうございます。
が、試したところ
2001/05/23 01:53:57::
1970/01/01 17:59:59::
と、2つ目が変な時刻になってしまいます。
私の while の使い方が悪いんですかねぇ。。。
0225pen(220)
2001/05/23(水) 10:02ID:spFKaY.Y解答ありがとうございましたm(__)m
PHPでPostgreSQLと連携した簡単なスクリプト作ってるんですけど
Perlとくらべても容易でいいっすね<PHP
0227YO
2001/05/23(水) 16:54ID:xghf/r7I$var = 123;
func($var);
と与えたとき、
$var = 123
と出力させたいんですが、どうしたもんでしょう。
要するに変数の中身は取り出せるが、'$var'という変数名そのものを
取り出すにはどうしたらいいか、と言うことです。
よろしくお願いします。
0228YO
2001/05/23(水) 16:55ID:xghf/r7I$var = 123;
func($var);
と与えたとき、
$var = 123
と出力させたいんですが、どうしたもんでしょう。
要するに変数の中身は取り出せるが、'$var'という変数名そのものを
取り出すにはどうしたらいいか、と言うことです。
よろしくお願いします。
0229222
2001/05/23(水) 17:53ID:uAS2r3aUすみません、あれから自分でも色々とやってみたのですが、
わけが分からなくなってしまって……。
やりたいのは↓のような感じです。
---log.dat---
Wed, 23 May 2001 01:53:57
Wed, 23 May 2001 17:30:01
以下、同じ様なデータが続く
-------------
---test.php---
<pre>
<?php
$fp = fopen ('./log.dat', "r");
while ($timestring = fgetcsv ($fp, 1024)) {
$time = strtotime($timestring) + 3600 * 9;
echo date('D, d M Y H:i:s', $time) ."\n";
}
fclose($fp);
?>
</pre>
--------------
0230電動ナナシ
2001/05/23(水) 18:58ID:???fgets でしょ。
0231電動ナナシ
2001/05/23(水) 19:11ID:???無意味じゃないかなあ。
function varvar($var) {
// 処理
}
varvar($hoge)
というコードを考えたときに、"$hoge" と "$var" のどちらがほしいの?
"$var" なら関数見れば分かるし、"$hoge" なら関数からはそもそもまったく
知ることができない。参照渡しにしろ値渡しにしろ関数が知ることができるのは
どの値が渡されたかだけで、どのような変数名を通じて渡されたかは分からない。
0232YO
2001/05/23(水) 19:17ID:xghf/r7I私がしたいのは>>231でいうところのhogeですね。
PHPでちょっと変数の値が知りたいというときに
ソースにfunc($var)という形で渡せば、'$var=....'と
表示されれば便利だなあ。と思って。
0233222
2001/05/23(水) 21:07ID:???> fgets でしょ。
ここを変更するだけで上手くいきました。
ありがとうございました。
#マニュアル読みに逝ってきます。。。
0234松下
2001/05/23(水) 21:55ID:TMWYPOj.global $$var;
echo "$$var=".$$var;
}
var(hoge);
これでどう?僕は$GLOBALS展開しちゃうけどね
0235電動ナナシ
2001/05/23(水) 22:27ID:???$hoge = "hogehoge";
function varvar($var){
global $$var;
echo "$$var=" . $var . "<br>\r";
}
varvar($hoge);
?>
だと、
---------------------------
$hogehoge=hogehoge
---------------------------
となってしまうけど?
>>228 は
---------------------------
$hoge=hogehoge
---------------------------
という出力にしたいんでしょ?
0236初期不良
2001/05/24(木) 01:07ID:fHlXXmpcちょっと apache よりの話になるけど、この辺って
解決の可能性あるのかな。apache のコピー自体が
ユーザ権限で動かないと module の実行権限を変える
ってのは無理だよね。
apache 自体の動作に変更が加わらないとだめだと思うから、
apache グループの考え次第ですけど...
0237名無しさん@お腹いっぱい。
2001/05/24(木) 04:39ID:GEomzVSsセキュリティ問題の話題ですけど、php.iniのsafe_modeをonにするのが
良いというのはなんとなくわかったのですが、onにすると、具体的にどうなるんですか?
マニュアル読んでもわからなかったので…
>>電動ナナシさま
>>188の他ユーザのファイルを読むスクリプトで、fseek関数はどう動作してるのですか?
fopen()で指したファイルポインタで事足りるような気がするのですが…
0238電動ナナシ
2001/05/24(木) 05:15ID:???exec や system で実行可能なファイル名が safe_mode_exec_dir にある
ものに制限される。exec_dir が /bin だとすると /usr/bin や /sbin と
いった別の場所にあるファイルを実行できなくなる。
>>fseek
fopen では pointer が先頭にくる保証はないと思っていたけど、マニュアル
読んだら
'r' - Open for reading only; place the file pointer at the beginning of the file.
とあるから、先頭に必ず来るんだね。つうことで、勘違いのためこれは不要。
0239電動ナナシ
2001/05/24(木) 05:22ID:???「セーフモード設定」を見ればちょっと書いてある
0240237@ナナシファン2号
2001/05/24(木) 08:57ID:GEomzVSsすばやい解答ありがとうございます!!
safe_modeの件わかりました!
というか、safe_mode_exec_dirに書いてある文章に説明されてましたね…
「詳細情報についてはセキュリティの章を…」のところを必死に読んでました…
0241名無しさん@お腹いっぱい。
2001/05/24(木) 09:37ID:Zsm6s/8wていうか、一度マニュアル全部流し読みでもいいから読む事をおすすめします。
次からは自分である程度トラブル対処出来る程度にはなれるよ。
0242名無しさん@お腹いっぱい。
2001/05/24(木) 14:06ID:???function ufFunc($param) {
reset($GLOBALS);
while (list($key, $value) = each($GLOBALS)) {
if ($value == $param) {
echo "$key = $value<br>\r";
}
}
}
$var = 123;
// $hoge = 123;
ufFunc($var);
でどお?
問題はあるけどとりあえず無視。
0243ナナシファン2号@独り言
2001/05/24(木) 14:56ID:GEomzVSs精進します(^^;
で、更に新しく気付いたことは。METHOD=POSTのときにURLデコードが不要だということ。
まあ処理自体はrawurldecode()とか使って簡単に行えるから苦労しないけど…
何だかなぁ〜
0244YO
2001/05/24(木) 15:57ID:/eASZrZMスごい!
$GLOBALSというのは現在宣言されている変数の集合体でしょうか。
変数名 値がペアになってるんですね。
つかわせてもらいます。マンモス盆にはのってなかった。。
0245名無しさん@お腹いっぱい。
2001/05/24(木) 16:25ID:Zsm6s/8w動作確認してないけど注意しないといけないのは、
$GLOBALS はグローバル変数を指す為のものだから ローカル変数だと
うまく動作しないと思う。 マンモス本には確かどういう物か載ってたと
思うよ。
>>242
これは考えつきませんでした。かっこいいです。
0246電動ナナシ
2001/05/24(木) 17:56ID:???0248169
2001/05/25(金) 15:21ID:w1zVfjY.同じ値の変数があったら両方表示されてしまうような気がしますが、
デバッグ用だから、こまかいこと気にしないでOK?
でも別に変数そのものを渡すことにこだわらないで、「変数名」文字列
渡して、値は$GLOBALSからもってくればいいのでは?
function varvarpapa( $varname )
{
echo "$varname = " . $GLOBALS[$varname ] . "<BR>\n";
}
var = 123;
varvarpapa( "var" );
0249169
2001/05/25(金) 15:55ID:w1zVfjY.PHPのソースを(同じレンタルサーバの)他のユーザーに見られない
ようにする方法としてこういうのは、どうでしょう?
1.前提として現在稼働しているapache(*1)は次の設定で動いている
例) ポート:80 / グループ: www
2.PHP実行専用apache(*2)を別ポート/グループでもう1つ起動する
例) ポート:8080 / グループ: phpexec
3.サーバのユーザーは、PHPのソースは、wrxr-----の形式で保存する
ただしソースのグループは「PHPEXEC」
4.上記ソースは、*1のapacheは、PHPのソースにアクセスできない。(NG)
反面、そのapacheから呼ばれたCGIからもアクセスできない。(OK)
5.*1のapacheには mod_rewriteをインストールしておく。
拡張子が「php」か「php3」だったら、ポート8080で動いている
*2のapacheにリダイレクトするよう設定する。
6.「5」の設定により、phpのソースは、*2のapacheのみがアクセス
できるようになり、他のユーザー/CGIからのアクセスは遮断できる。
以上の設定と、既出のsafe_mode,open_basedir の設定を組み合わせれば
かなり完璧にできるような気がします。
まだ、見落としあるかな
0250名無しさん@お腹いっぱい。
2001/05/25(金) 16:31ID:???PHPってパーミッション600じゃ動かないような。。。
0251169
2001/05/25(金) 16:48ID:w1zVfjY.おっと、この辺はよくわからないままかいてます。
パーミッション640でもダメでしたっけ
0252antique = 250
2001/05/25(金) 17:07ID:???640でも動くが、600ではやはりダメ。
けど640じゃ、CGIからソース覗けてしまうような。
0253169
2001/05/25(金) 17:16ID:w1zVfjY.CGIから覗かれるのを防ぐために、>>249 の案では、PHPしか実行しない
Apacheを用意(グループはPHP実行専用のグループを作る)してCGIからは
アクセス出来ないようにしてるつもり。でも、だめかな
0254名無しさん@お腹いっぱい。
2001/05/25(金) 17:27ID:???CGIアップ用 USER:hogehoge GROUP:ftpuser
PHPアップ用 USER:hogehoge2 GROUP:phpuser
ってな感じでアカウント分けるの?
0255169
2001/05/25(金) 17:49ID:w1zVfjY.だいたいそうです。
でも、ユーザーわけると面倒なので、GROUPだけphpuserとかにします。
でも一般ユーザーは、chown hogehoge:phpuser herohero.php なんて
できないので、このchwonの処理だけは、なんか機構を用意します。
拡張子が、phpのファイルだけグループをphpuserにするスクリプトを
用意しておいて、誰でも実行出来るようにしとけばいいとおもいます。
phpのソースをアップロードしたのち、最初の一回は、このスクリプト
実行しないといけないので、ちょっと面倒ですけど。許容範囲かなと
0256antique
2001/05/25(金) 18:03ID:???俺の案。久しぶりに頭使ってみた。
データベースのパスワード等覗かれたくないモノは、別ファイルにPHPで作成&書き出して、
パーミッションは600にする。
PHPで書き出したファイルは nobody ( or www等 ) が所有者なので、suexecでユーザ権限で
CGIを動かす場合、CGIからは覗けない。
他のユーザのPHPからは safe_mode その他の設定で覗けない。
例
setting.php
--------------------------------
<?php
$fp = fopen ("./setting.dat", "w");
fputs ($fp, "password");
fclose ($fp);
chmod ("./setting.dat", 0600);
echo 'make password file';
?>
--------------------------------
dbaccess.php
---------------------------------
<?php
$fp = fopen ("./setting.dat", "r");
$dbpasswd = fgets($fp, 4096);
fclose ($fp);
・
(その他の処理)
・
?>
---------------------------------
もち書き出しが終わったら、setting.phpは削除。これをCGIで覗かれたら元も子もない。
って勢いで書いたけどダメだったらスマソ。ってかこれって前出てたっけ???
# やっぱ究極的にはユーザ側の責任でって事で。
## 初期設定じゃ対処のしようも無いので、対処できるようにして、案を考えるトコまでで私は逃げます(爆
■ このスレッドは過去ログ倉庫に格納されています