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

■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/
0160ナナシファン2001/05/13(日) 18:32ID:05DbuIGY
>>59
そそ。あと一番問題なのがセッションね。
外部にリンクを許しちゃうと、リンク先のHTTP_REFERERで
セッションIDが見えちゃうとか。
0161JAPU2001/05/14(月) 18:29ID:???
未だにURLの一部にセッションキー埋め込んでいるところってあるんですか?
0162名無しさん@お腹いっぱい。2001/05/14(月) 18:39ID:???
沢山あります。
0163ナナシファン2001/05/14(月) 20:27ID:EsWUXNIE
>>161
PHP4だって、何も考えずにsession_start()を使っちゃうと
クッキーが使えればクッキーを使うが、ダメだと自動的に
URIにセッションIDを張り込んじゃうでしょ。

「ななしファン」だと誰のファンかわからないので、電動ナナシさんのファンであることをアピールする
ために「ナナシファン」に改名。
0164初期不良2001/05/15(火) 03:51ID:qIx5vtWI
>>139
今 ports を cvsup したら php4_jstring-1.1.1.tar.gz になってた。
ただいまコンパイル中...
0165初期不良2001/05/15(火) 04:41ID:qIx5vtWI
あとは何もせんでいい状態になった。
apachectl restart までやってくれた。
全然触ってなかったから分からなかったんだけど、
驚くかもってのはなんのこと?気になる...
0166電動ナナシ2001/05/15(火) 11:35ID:???
多分 jstring が PHP にマージされるってことじゃないの?
PHP-4.0.6 から jstring が標準配布に統合されるって出てたね。
0167名無しさん@お腹いっぱい。2001/05/17(木) 13:35ID:vuz.jAiQ
最近PHPを使ってて気になること。(4.0.5)

・なんかif文とかが多いページを開くと、反応が無くなってしまうことがある。
 原因不明。
 ネストの深さ問題では無いと思う。

・PEARのDB(PostgreSQL)を使ってるんだけど、SELECTが戻って来なく
なることがある。これも原因不明。
pg_exec()にすると戻ってくる。
ブラウザを再起動したら戻ってくるようになったり、CSSをはずしたら
戻ってくるようになったり。

使い方が悪いのかなー。
0168名無しさん@お腹いっぱい。2001/05/17(木) 20:20ID:???
また、[PHP-jp 11772]で近藤氏がマヌケなことを言ってます。
どうもこの近藤氏と近藤くんを混同してしまいますな。
0169名無しさん@お腹いっぱい。2001/05/17(木) 21:41ID:dr1laO2o
 レンタルサーバで(同一サーバで契約している)他のユーザーからの
セキュリティの確保について教えて下さい。

 PHPのページは、suExec等で実行権限を変更した状態で実行
できない(?)ため、レンタルサーバでPHP動かしてるときは
非常に困るんですが、なんとかならないんでしょうか?
 自分の書いたPHPスクリプトから読み書き出来るファイルは
当然、同じサーバのユーザーのPHPスクリプトからも読み書き
出来るわけで、セキュリティーもなにもあったもんじゃない。
 この状態だとDBへアクセスするパスワードをPHPのソースに
書いて置いても、他のユーザーから見られちゃうし。(PHPで
指定ファイルを表示するプログラムを書けばよい)

 こういった問題はどのように対処すればよいのでしょうか?
 phpスクリプトの所有者権限で実行させることが出来れば
一番よいのですが。
0170名無しさん@お腹いっぱい。2001/05/17(木) 22:19ID:vgMMOG.Q
CGI版でコソパイルすれば?

#/usr/local/bin/php

rwx------
01711692001/05/17(木) 23:41ID:dr1laO2o
ありがとうございます。CGI版ですか。
 mod_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:???
イメージ関数使いたいからってことで、php4入れることになった。
今日の朝まで元気に動いていたphp3の環境は先輩が作ったもので、
Linux + postgres + apache + php3。
で、php4のインストールやってみてねと言われて・・・。

自分はLinuxを触ったことはほとんどないわけで。
apacheもphp3もぶち壊してきました(藁

いろんなサイトでインストール方法とかのってたりしますが、
今までインストールして来たものも把握できていないため、
ばっさり消してというのも、ちとやりにくい。
さらにphp3とphp4は同居させる予定。

いやぁもうさっぱりなわけで。
助けてくれと言ってもなかなか難しいんだろうけど、誰かに助けて
もらいたい気分です。

誰か・・・!
0174名無しさん@お腹いっぱい。2001/05/18(金) 09:00ID:mi2YgIEw
>>173
まずはapacheのインストール
解凍したディレクトリで以下を実行
./configure --enable-shared=max
make
make install
httpd.confの設定
apache起動
0175名無しさん@お腹いっぱい。2001/05/18(金) 09:58ID:???
>>172
Windows系の方か、仕事でコーディングしてない方だと思いますが。
私の周りでは、数十万ぐらい中規模の仕事はPHPが主流です。
個人的には、得意な言語ではないので、「PHP嫌いだから」って
言って断ることもおおいですが。

が、あなたは事前調査も足りないし、現状では
仕事を受けるべきではないです。というか、ウチにきたら
即座にチェンジおねがいするでせう。
0176名無しさん@お腹いっぱい。2001/05/18(金) 11:53ID:jsJYtRGo
>>175
どうもRESありがとうございます。
昨日派遣先から連絡あって、土曜に話を聞きに行くので
事前調査できなかったんですよね。まぁとりあえずPHPの
情報があるここで聞いてみようかなっと思いまして。

中規模ではPHP主流ですか。ありがとうございます。
とりあえずもう少しNETなどで調べて話を聞いてみることにします。
0177PHP初心者2001/05/18(金) 17:43ID:k6aRDiHQ
PHP4でカンタンWebDB構築ガイドという本を購入して
PHP4をインストールしようとしたのですが、、

#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:???
jstringを/usr/local/src/ext以下に展開していない、に1000ペソ
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
>>179
なんかMLで話題になってなかった?
jstringの200102xxとかをいれてみそ。うまくいくから。
見つからなかったらftpsearchで。
0181PHP初心者2001/05/18(金) 20:52ID:k6aRDiHQ
自己レスします。
php-4.0.5を辞めて付録のphp-4.0.3pl1で最初からやり直したら
インストールできたようです。
何分初心者なものでお騒がせしました。m(__)m
0182名無しさん@お腹いっぱい。2001/05/19(土) 07:24ID:NfS52E.2
if eregi('hoge', $result) {
 $title = 'hoge';
} elseif ('haun', $result) {
 $title = 'haun';
}

な感じで50個くらい続くのですが、
これではあまり効率が良くないですよね?
何か他に良い方法はあるでしょうか?
0183名無しさん@お腹いっぱい。2001/05/19(土) 09:10ID:???
>>181
解決したみたいだけど最新の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
>>169
ユーザを信用できない状況では PHP って使えないのかね。
まあ、そうでなくても Perl でもしばらくはやってきたわけだけど。
DB を使えば DB 独自のユーザ、パスワード、権限で制御できるから
何とかなるのかな?

一般的にはどうなんでしょ?
スタンドアローンなサーバで運用って事が多いのかな?
0185初期不良2001/05/20(日) 00:28ID:???
スタンドアローンって言うか
あんまりマルチユーザ利用を考えてないサーバって事ね。
0186ドキュソデザイナー2001/05/20(日) 23:45ID:.g1VXZ4s
PHPLIBを使って、ちょっとしたWEBアプリケーションを作っています。
当然、Authクラスを使って会員認証するのですが、会員IDとパスワードは、
デフォルトのテーブルではなく、既存のテーブルを使って認証したいのです。
どうやったらいいの?
0187ドキュソデザイナー2001/05/21(月) 00:47ID:piAkqhBs
function auth_validatelogin()をオーバーライドすれば、よいのかな。
$uid,$passと$permは違うテーブルになるけど、処理はどうやって分ければ
よいのでしょう?
0188電動ナナシ2001/05/21(月) 02:23ID:???
>>184
その 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:???
>>187
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:piAkqhBs
なぜだー!

Database 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 ... のところを

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
>>189
明快かつ簡潔なコード例、ありがとう。
日曜のこんな時間ということもあってか、何かちょっと感動した。

ダメな営業がこの仕事をタダで受けて来ちゃったので、外注に出せず、なぜかWEBデザイナーの俺がやるハメに・・・。会社辞める、ぐらい言って、突っぱねればよかった。バカな俺・・・
0193電動ナナシ2001/05/21(月) 04:12ID:???
>>189
訂正
> 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.
>>191
ありがとう、以下のコードでうまくいったようです。また新たな問題が
発生したけど・・・

$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:???
>>194
Oracle は時々自動的な型変換に失敗するから(再現条件は不明)、きちんと
変換関数を使って型変換をしたほうがいいよ。

>>193
また間違い
u.id は u.uid だな。
0196オラ狂うよ・・・2001/05/21(月) 05:06ID:piAkqhBs
>>195
なるほど。なんてことはないコードだしPostgresでは問題なく動いていたので、
悩んでしまった。その辺を中心にデバッグします。とりあえず家に帰って風呂だ。

ほんと、ありがとう。
0197名無しさん@お腹いっぱい。2001/05/21(月) 09:48ID:oxRjCmRE
>>182
マッチさせる文字列を配列に入れておいて、ループで回すとか。

あと、「マッチした部分の文字列」を参照できるってことを知ってる?
正規表現系の関数の第三引数があるパターン。
これで1,2行で書けたりするかも。
0198名無しさん@お腹いっぱい。2001/05/21(月) 09:51ID:oxRjCmRE
>>188
うげ、そりゃすごい問題ですね。
回避する(fxxx()系を無効にする)ことって出来ないんでしょうか?
0199antique2001/05/21(月) 11:14ID:l/cyjLtQ
>>198
php.ini の open_basedir で制限できると思う。
使ってないからわかんないけど。
http://snaps.php.net/manual/ja/html/configuration.html
02001992001/05/21(月) 11:19ID:???
>制限できる
「ほかの人が書いたスクリプトを読めないように制限できる」
です。

fopenそのものを使えないようにする方法はわからない。
0201名無しさん@お腹いっぱい。2001/05/21(月) 11:46ID:???
>>199-200
さんきう。
ちょっと安心。
0202電動ナナシ2001/05/21(月) 12:21ID:???
$file = "/home/other-user/other-script.php";
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 の
コードは無限ループに陥るから注意。
0205antique2001/05/21(月) 12:55ID:???
にゃるほど。
fopenは使えないと不便だからおいとくとして、
safe_mode = On
safe_mode_exec_dir = "."
doc_root = "."
user_root = "."
は信用できないユーザがいる場合は必須ですね。
オイラ>>202の方法全く気付かなかった(汗
02061692001/05/21(月) 12:56ID:Zc9DvZB2
>>199,203
 open_basedir で、特殊文字「.」を指定することでスクリプトの
ディレクトリ以下のファイルしかアクセスできなくなるんですね。
 かつsafe_mode を ONにすれば、安心と…

 PHP-ML 9775あたりからのスレッドで、PHPのセキュリティについての
話題があって結局、同一IPアドレスで運用している限り難しいという
ような結論だったので、ダメなのかと思ってました。
02071692001/05/21(月) 13:00ID:Zc9DvZB2
>>206
 あ、でもPHPだけならいいですが、Perl等、他のCGI実行環境も
提供している場合は、PHPだけで対応してもダメですね。

 PHP自身の機能として、スクリプトの所有者の権限で動くモード
(sbitをみる)があってもいいと思うのですが、これは問題があるの
でしょうか。

 問題点?(想像)
・実行権限変更するためにmod_phpをroot権限で動かさないといけない?
・ということはapacheもroot権限でうごかないといけない?
・Linuxでは、同一スレッドないで実行権限を切り替えられない?
0208antique2001/05/21(月) 13:28ID:???
>>207
CGIの場合はsuexec使ってパーミッションさえちゃんと設定すれば問題無い。
とは言え、パーミッションを666とかに平気で設定してる人が多い。
CGI配布してるサイトでsuexecの説明していれば助かるのだが、説明しているサイトを見たこと無いからな。
某KENT-WEBあたりが説明しててくれれば、皆真似するだろうに(爆
# ま、他人のが覗かれようが知った事じゃないですが。

CGIはsuexecでユーザ権限で動かせるんだし、問題点に書かれているような事は無いと思うよ。
# PHPってCGI版有るけどよく解らない。

どうでも良いけどApache1.3.20出たね。http://httpd.apache.org/ は 1.3.19のままだけど。
早速入れようかな。
02091692001/05/21(月) 15:24ID:Zc9DvZB2
>>208 antiqueさんどうも
 PerlなどのCGI側は、rwx------にしといてsuEXEC使えば安心なのは
そうなんですが、守りたいのはPHPのソースのほうなんです。
 PHPのソースは、rwxr-----とかにしておいて、グループはnobodyだの
wwwだのといった全ユーザー共通のグループに所属しているので、
同じくnobody(またはwww)グループのユーザーのCGIからアクセスできて
しまうわけです。

 PHPをCGIとして動かすのならsuEXEC使えばいいので問題ないです。

 suEXECがなんでユーザー権限を変更できるのかちゃんと理解してないです。
 suEXEC自身はRoot権限で動く必要があると思うのですがちがうのかな。
02101692001/05/21(月) 15:35ID:Zc9DvZB2
>>209 続き
(他のMLの話題をここにもってくるのはナンですが…)
 PHP-MLでは、ソースに含まれるパスワードを隠す目的なら、
ZENDで暗号化しちゃえばいいかもという案もでてました。
 ZEND使ったこと無いのでよく分からないのですが、暗号化する
際にパスワードとか指定するわけではないようなので、
ツールさえあれば復号できるんじゃないかなと思いました。
 ZENDの処理系のソースも公開されているので、ツールつくるのは
難しい話じゃないような気がします。
0211電動ナナシ2001/05/21(月) 16:09ID:???
>>197
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/g
ちょっと質問イイデスカ?

php3_pgsql.dllってどこかでダウンロード出来ますでしょうか?
googleとかで探してみても、全然見当たらないっす。
0213電動ナナシ2001/05/21(月) 22:26ID:???
PHP4 に付属のやつを使ってみたら?
0214U-名無しさん2001/05/21(月) 22:41ID:l6KPt7/g
php4のやつ使おうとしたら、怒られました・・・
0215オラ狂うよ・・・2001/05/22(火) 00:36ID:si2Mb37M
>>191 >>194

イケたと思ってたのは勘違い・・・鬱だ。また同じエラーメッセージ。

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 が予約語だからじゃないかな。
date を別の列名に変えてみたら?
0217名無しさん@お腹いっぱい。2001/05/22(火) 01:56ID:2l6v9h4o
CGIでアクセス制限をかけたいのですが
取得できるリモートアドレスではアクセスポイント
までしか特定できませんよね。
普通アクセス制限とはアクセスポイント単位でやる物なのですか?
個人単位でやる(個人を認識する)方法があったら教えてもらえませんか。
0218電動ナナシ2001/05/22(火) 02:03ID:???
認証を要求する
0219オラ狂うよ・・・2001/05/22(火) 02:52ID:O0XOpuVk
>>216
その通りでした。てか、列名、dateじゃなくちゃんとaz_dateとかしてたのに・・・
すこぶる鬱だ。ありがとう。
0220pen2001/05/22(火) 13:07ID:Qka3clQw
なんか、すごく初歩的な質問なのですが、DB(PostgreSQL)を使ったWebアプリって、
DBへの書き込みに対して、CGIで言うファイルロックの必要ってないんですか?
いろいろ調べたんですが、そういう記述って全然見かけなかったんで…
0221名無しさん@お腹いっぱい。2001/05/22(火) 14:37ID:Zxtvn842
>>220
Webアプリ側でのロックは恐らく必要無いかと。
普通は、DB側が良きに計らってくれるかと。
0222名無しさん@お腹いっぱい。2001/05/22(火) 22:04ID:HZ6q6VlY
Tue, 22 May 2001 12:50:01

という英字形式の GMT 時刻を JST に変換したいのですが、
どのようにすればよいでしょうか?

因みに、同じ様な変換を while で10数回繰り返す予定です。
0223電動ナナシ2001/05/23(水) 01:03ID:???
<?php
$timestring = "Tue, 22 May 2001 12:50:01";
$time = strtotime($timestring) - 3600 * 9;
echo date("Y/m/d H:i:s::T", $time);
?>
02242222001/05/23(水) 02:01ID:uAS2r3aU
>>223さん

ありがとうございます。
が、試したところ

2001/05/23 01:53:57::
1970/01/01 17:59:59::

と、2つ目が変な時刻になってしまいます。
私の while の使い方が悪いんですかねぇ。。。
0225pen(220)2001/05/23(水) 10:02ID:spFKaY.Y
>>221さん
解答ありがとうございましたm(__)m
PHPでPostgreSQLと連携した簡単なスクリプト作ってるんですけど
Perlとくらべても容易でいいっすね<PHP
0226電動ナナシ2001/05/23(水) 16:26ID:???
>>224
もとデータを見ないとなんともいえない。
0227YO2001/05/23(水) 16:54ID:xghf/r7I
関数で質問です。
$var = 123;
func($var);
と与えたとき、
$var = 123
と出力させたいんですが、どうしたもんでしょう。
要するに変数の中身は取り出せるが、'$var'という変数名そのものを
取り出すにはどうしたらいいか、と言うことです。
よろしくお願いします。
0228YO2001/05/23(水) 16:55ID:xghf/r7I
関数で質問です。
$var = 123;
func($var);
と与えたとき、
$var = 123
と出力させたいんですが、どうしたもんでしょう。
要するに変数の中身は取り出せるが、'$var'という変数名そのものを
取り出すにはどうしたらいいか、と言うことです。
よろしくお願いします。
02292222001/05/23(水) 17:53ID:uAS2r3aU
>>226さん

すみません、あれから自分でも色々とやってみたのですが、
わけが分からなくなってしまって……。
やりたいのは↓のような感じです。


---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:???
fgetcsv じゃ CSV としてパースされちゃうじゃん。
fgets でしょ。
0231電動ナナシ2001/05/23(水) 19:11ID:???
>>228
無意味じゃないかなあ。

function varvar($var) {
  // 処理
}
varvar($hoge)
というコードを考えたときに、"$hoge" と "$var" のどちらがほしいの?
"$var" なら関数見れば分かるし、"$hoge" なら関数からはそもそもまったく
知ることができない。参照渡しにしろ値渡しにしろ関数が知ることができるのは
どの値が渡されたかだけで、どのような変数名を通じて渡されたかは分からない。
0232YO2001/05/23(水) 19:17ID:xghf/r7I
電動さんいつもありがたう。

私がしたいのは>>231でいうところのhogeですね。
PHPでちょっと変数の値が知りたいというときに
ソースにfunc($var)という形で渡せば、'$var=....'と
表示されれば便利だなあ。と思って。
02332222001/05/23(水) 21:07ID:???
>>230さん
> fgets でしょ。

ここを変更するだけで上手くいきました。
ありがとうございました。


#マニュアル読みに逝ってきます。。。
0234松下2001/05/23(水) 21:55ID:TMWYPOj.
function var($var){
global $$var;
echo "$$var=".$$var;
}
var(hoge);

これでどう?僕は$GLOBALS展開しちゃうけどね
0235電動ナナシ2001/05/23(水) 22:27ID:???
<?php
$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
>>210
ちょっと apache よりの話になるけど、この辺って
解決の可能性あるのかな。apache のコピー自体が
ユーザ権限で動かないと module の実行権限を変える
ってのは無理だよね。
apache 自体の動作に変更が加わらないとだめだと思うから、
apache グループの考え次第ですけど...
0237名無しさん@お腹いっぱい。2001/05/24(木) 04:39ID:GEomzVSs
>>198-205
セキュリティ問題の話題ですけど、php.iniのsafe_modeをonにするのが
良いというのはなんとなくわかったのですが、onにすると、具体的にどうなるんですか?
マニュアル読んでもわからなかったので…

>>電動ナナシさま
>>188の他ユーザのファイルを読むスクリプトで、fseek関数はどう動作してるのですか?
fopen()で指したファイルポインタで事足りるような気がするのですが…
0238電動ナナシ2001/05/24(木) 05:15ID:???
>>safe_mode
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:???
補足すると、http://www.php.net/manual/ja/configuration.php の
「セーフモード設定」を見ればちょっと書いてある
0240237@ナナシファン2号2001/05/24(木) 08:57ID:GEomzVSs
>>電動ナナシさま
すばやい解答ありがとうございます!!
safe_modeの件わかりました!
というか、safe_mode_exec_dirに書いてある文章に説明されてましたね…
「詳細情報についてはセキュリティの章を…」のところを必死に読んでました…
0241名無しさん@お腹いっぱい。2001/05/24(木) 09:37ID:Zsm6s/8w
>>240
ていうか、一度マニュアル全部流し読みでもいいから読む事をおすすめします。
次からは自分である程度トラブル対処出来る程度にはなれるよ。
0242名無しさん@お腹いっぱい。2001/05/24(木) 14:06ID:???
>>232
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
>>241
精進します(^^;
で、更に新しく気付いたことは。METHOD=POSTのときにURLデコードが不要だということ。
まあ処理自体はrawurldecode()とか使って簡単に行えるから苦労しないけど…
何だかなぁ〜
0244YO2001/05/24(木) 15:57ID:/eASZrZM
>>242
スごい!
$GLOBALSというのは現在宣言されている変数の集合体でしょうか。
変数名 値がペアになってるんですね。
つかわせてもらいます。マンモス盆にはのってなかった。。
0245名無しさん@お腹いっぱい。2001/05/24(木) 16:25ID:Zsm6s/8w
>>244
動作確認してないけど注意しないといけないのは、
$GLOBALS はグローバル変数を指す為のものだから ローカル変数だと
うまく動作しないと思う。 マンモス本には確かどういう物か載ってたと
思うよ。

>>242
これは考えつきませんでした。かっこいいです。
0246電動ナナシ2001/05/24(木) 17:56ID:???
なーるほど、そんなやり方があったんだ・・・。お見事でした。
0247初期不良2001/05/25(金) 01:31ID:???
>>242
まるっきり perl な書き方ですな(笑)
02481692001/05/25(金) 15:21ID:w1zVfjY.
>>242
 同じ値の変数があったら両方表示されてしまうような気がしますが、
デバッグ用だから、こまかいこと気にしないでOK?
 でも別に変数そのものを渡すことにこだわらないで、「変数名」文字列
渡して、値は$GLOBALSからもってくればいいのでは?

function varvarpapa( $varname )
{
echo "$varname = " . $GLOBALS[$varname ] . "<BR>\n";
}

var = 123;
varvarpapa( "var" );
02491692001/05/25(金) 15:55ID:w1zVfjY.
>>236
 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:???
>>249
PHPってパーミッション600じゃ動かないような。。。
02511692001/05/25(金) 16:48ID:w1zVfjY.
>>250
 おっと、この辺はよくわからないままかいてます。
 パーミッション640でもダメでしたっけ
0252antique = 2502001/05/25(金) 17:07ID:???
一般ユーザのグループをApache実行グループと同じにすれば、
640でも動くが、600ではやはりダメ。
けど640じゃ、CGIからソース覗けてしまうような。
02531692001/05/25(金) 17:16ID:w1zVfjY.
>>252
 CGIから覗かれるのを防ぐために、>>249 の案では、PHPしか実行しない
Apacheを用意(グループはPHP実行専用のグループを作る)してCGIからは
アクセス出来ないようにしてるつもり。でも、だめかな
0254名無しさん@お腹いっぱい。2001/05/25(金) 17:27ID:???
>>253
CGIアップ用 USER:hogehoge GROUP:ftpuser
PHPアップ用 USER:hogehoge2 GROUP:phpuser

ってな感じでアカウント分けるの?
02551692001/05/25(金) 17:49ID:w1zVfjY.
>>254
 だいたいそうです。
 でも、ユーザーわけると面倒なので、GROUPだけphpuserとかにします。
 でも一般ユーザーは、chown hogehoge:phpuser herohero.php なんて
できないので、このchwonの処理だけは、なんか機構を用意します。
 拡張子が、phpのファイルだけグループをphpuserにするスクリプトを
用意しておいて、誰でも実行出来るようにしとけばいいとおもいます。
 phpのソースをアップロードしたのち、最初の一回は、このスクリプト
実行しないといけないので、ちょっと面倒ですけど。許容範囲かなと
0256antique2001/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で覗かれたら元も子もない。

って勢いで書いたけどダメだったらスマソ。ってかこれって前出てたっけ???
# やっぱ究極的にはユーザ側の責任でって事で。
## 初期設定じゃ対処のしようも無いので、対処できるようにして、案を考えるトコまでで私は逃げます(爆
02571692001/05/25(金) 19:44ID:w1zVfjY.
>>256
 antiqueさんの案なら、apache1個ですみますね。なるほどー
 あとはsuExecの使用を徹底してもらえばいいのか。
 うーん、シンプルですばらしい
0258電動ナナシ2001/05/25(金) 23:24ID:???
ユーザーごとに chroot した環境で Apache を動かすって手段もあるみたいだね。
http://penguin.epfl.ch/chroot.html

ただ一般のレンタルサーバー屋ではここまでやってくれないだろうけど。
0259antique2001/05/26(土) 06:24ID:???
>>258
たしかtripodとか先日お亡くなりになった(笑)Datablocksは
chrootしてCGI実行してましたね。
0260初期不良2001/05/26(土) 12:52ID:eKGwZyuI
>>258
perl の path とか sendmail の path とかは
/usr/local とかにリンクを張っておくのか...
/usr/bin も欲しいか。
/usr だと home に入れちゃってだめやね(笑)
あと、良くやってそうなのが docroot のリンクとか。
他にもリンクが無いか気をつけないといけないのか...
■ このスレッドは過去ログ倉庫に格納されています