【PHP】質問スレッドPart3
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/02/17 13:23ID:N+9Uw5dE答えられる方、返答よろしくお願いします。
<<参考リンク>>
■本家
http://www.php.net/
■PHP日本語マニュアル
http://www.php.net/manual/ja/
■JapanPHPUsersGroup
http://www.php.gr.jp/
■PHP日本語ページ
http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/index.html
■Pearのドキュメント
http://phpdocu.sourceforge.net/peardocs/
<<過去スレ>>
■【PHP】質問スレッドPart1
http://ebi.2ch.net/test/read.cgi/php/982687820/
■【PHP】質問スレッドPart2
http://pc.2ch.net/test/read.cgi/php/1003283567/
<<教えて君>>
■ここ見習って書き込んじゃ、駄目よ
http://pc.2ch.net/test/read.cgi/unix/1011345180/242-245
0607nobodyさん
02/04/19 09:11ID:???お返事ありがとうございます。色々試しましたが、うまくいっておりません。
include("env QUERY_STRING=LOG=index /home/user/www/cgi-bin/hoge/stat.cgi"); //ダメ
こんなこともやってみましたが、ダメでした。
system("QUERY_STRING=LOG=index"):
system("export QUERY_STRING");
system('/home/user/www/cgi-bin/hoge/stat.cgi"); // エラーとなる。
ちなみに、上記表示で見えたところでは、サーバはLinuxでシェルは、bashです。(telnet不可)
他に stat.cgi にQUERY_STRINGを渡す方法はあるでしょうか?
0608nobodyさん
02/04/19 09:56ID:3KXoKyNvhttp://pc.2ch.net/test/read.cgi/php/983250751/209-213
から飛んできました。
Apache + mod_php を使っています。
データベースにアクセスするパスワードなんかをスクリプトに埋め込んで、
そのスクリプトを他のユーザに詠まれないようにしたい、ということです。
CGI なら suExec で user=www ( or nobody) => user=ore に
権限を変更できるので、パーミッション 600 で OK なんですが、
モジュールの場合は user = www ( or nobody) のままなので
600 にはできないです。
結局
safe_mode = on
safe_mode_exec_dir = "."
open_basedir , doc_root を適切に設定。
を適切に設定することで何とかなりそうかな、ということだったんですが、
それでもパスワードを含むスクリプトを 600 にはできないですよね?
となると、ssh とかでログインして作業している他のユーザには
読まれてしまうわけで……
まだあんまりやったことないですが PHP を CGI として動かそうかな、とか。
0609nobodyさん
02/04/19 10:17ID:???>system('/home/user/www/cgi-bin/hoge/stat.cgi"); // エラーとなる。
これそのままコピーしてきた奴?
だとしたら、「""」でちゃんと閉じてないよ。最初の方が「'」になってる。
あと、
http://www.itboost.co.jp/php/php_05.phpに説明がある
system("/home/your/bgprog $arg1 $arg2 > /dev/null &");
ではダメ?
0610すえぐぜく?
02/04/19 11:40ID:3KXoKyNvfilenotfound404error@yahoo.com
24-Mar-2002 12:09
If you install PHP as a CGI (http://www.php.net/manual/en/security.cgi-bin.php)
and then set up Apache with suexec enabled (http://httpd.apache.org/docs/suexec.html),
you can set your PHP scripts' permissions to 700, thereby making it more
difficult for other users of the system to get at your MySQL passwords. I
like this setup anyway, because under it a user's script runs with the
user's ID. Scripts thus inherit the user's permissions and can read and
write files without setting the files' permissions so as to open the files
up to other users -- handy for the user and the sysop, from a security
point of view.
Sure, running PHP as a CGI isn't as efficient as running it as an Apache
module (according to my informal benchmarks, the former setup can only
handle about one third as many concurrent users as the latter), but for
many people, the added security is worth the performance trade off.
いや、やりたかったのは Xoops っていう PHP ベースのポータルサイト構築
ツールを使いたかったんですが、その config.php ファイルに MySQL への
接続パスワードを書くようになってるので、パーミッションを 600 にしたい、
ということだったんです。
んが、さっき CGI として Xoops を動かしてみようとすると、動かなかった……
0611nobodyさん
02/04/19 12:29ID:3oF7V8+Fソースの書き換えが大量に発生する予感
とdev側でアナウンスされたというのはマジ?
前に日本語MLでちらっと話が出てたのだけど、気になって
JSPに移行しようかと悩む今日この頃
>>610
パスワードを返すところだけ、PHP以外を使うというのはどう?
マジかと。
で、PHP-dev ML.JPでは
<?php version="5.0"
?>
という風にバージョンわけ出来るように話して見ます?
みたいな事が投稿されてました。
まあ、PHP4とPHP5を一緒にインストール出来るように
なっていれば、そこまで問題ならないような気もするけど・・・。
php.iniでPHP4 or PHP5というのをディレクトリ別に
設定できるとうれしいかも。
0613nobodyさん
02/04/19 14:37ID:3oF7V8+F>設定できるとうれしいかも。
うちもうれしいかも
鯖管が新しい物好きという困った状況の時
拡張子phpをphp4にする作業がなくなるかも
0614nobodyさん
02/04/19 15:22ID:uydc7dr5たとえば、
$a=1;
while($a < 5){
$a++;
$wari=5+$a;
echo $wari;
}
というようなプログラムでこの$wariを
値が6のときは$wari1、値が7のときは$wari2・・・みたいに
名前を自動的に変えたいのですが。
いい方法を知っていらっしゃる方がいたら是非ご教授お願います。
ちなみに、実際作っているプログラムでの$wariの値はデータベ
ースの検索結果を当てています。
0615nobodyさん
02/04/19 15:25ID:uydc7dr5>while($a < 5){
ここの5という数字は適当です。
今書いてるプログラムではここに当てはまる数字がいくつでも対応する
ようにしなければいけないです。
すいませんが、よろしくお願いします。
0616nobodyさん
02/04/19 19:11ID:Kja3u5oC0617nobodyさん
02/04/19 23:05ID:???「いちおうdevloper」な立場から言わせて頂くと、
versionディレクティブが採用される確立は0に
等しいです。良いアイデアだとは思いますが。
ただ、4->5のスクリプトコンバータは作成される
可能性があります。
i18n関連はこれから実装されるでしょう。ただ、
なんとなくな方向性が決まっているだけなので
どうなるかはまだ分かりません。
>それでもパスワードを含むスクリプトを 600 にはできないですよね?
別にソース内にパスワードを書く必要は無いでしょ。
PHPでパスワードファイルを作成し、パーミッションを 600にします。
パスワード作成のPHPは削除します。(これを覗かれたら意味無い)
パスワードファイルの所有者は www (apacheのUser 以下wwwと表記),パーミッションは 600 になるので、
www 若しくは root 以外では開く事は出来ません。
CGIはsuexecにより、www以外のユーザで動くようにします。
これで www もしくは root 以外ではパスワードファイルは覗けない事になります。
しかしこのままでは他人のPHPから覗けることになるので、safe_mode等で制限するのです。
# ポイントは「PHPでパスワードファイルを作成」です。
# PHPで作成したファイルは所有者が www なのでパーミッションを600にしてもPHPから読み込めます。
# また、CGI、SSHなどでは読み込めなくなります。
## ローカルでパスワードファイルを作ってFTP/SSHでログインしてvi等でパスワードファイルを作成
## では所有者がwwwでは無いのでパーミッションを600にするとPHPからパスワードを読み込めなくなります。
わざわざパスワードファイル作成用のPHP作らないといけないし、パスワードファイルの
削除もPHPから行わないといけないし結構面倒です。
# けど、コマンドライン版PHPでCGIとして動かすぐらいならPHP止めて、Perl使うな俺は。
##(あくまで個人的にはです。理由は色々。)
suexecに対応すればそれが一番簡単なんですけどね。PHP5で対応してくれないかなぁ。
0619nobodyさん
02/04/19 23:40ID:???>設定できるとうれしいかも。
php.iniでは無くhttpd.confや.htaccessの範疇だと思いますが。
うーん、そうなんだ。
残念。
コンバータはどうなんだろう・・・。
結局手直しがかなりいりそうな予感も。
>618
suexec(またはそれに変わる何か)には対応してほしいね。
そのあたり、話にでてるのかなぁ・・・。
英語MLは読んでないから、情報ほしいところ。
>619
あー、そうっスね。
ディレクトリ別の設定ならphp_valueか。
0621nobodyさん
02/04/20 04:25ID:Mslw1o2NphpでのBasic認証ができません。
下記ソースにアクセスすると、[500 Internal Server Error]を返します。
apacheのerror.logには、「Bad header=HTTP/1.0 401 Unauthorized: c:/php4/php.exe」なんて
かかれてます。
もしかして、windows版phpは、これ使えないのでしょうか?
ちなみに、同じソースをLinux版で試すとokでした。
=====
<?php
if (!isset($PHP_AUTH_USER)) {
header("WWW-Authenticate: Basic realm=\"My Realm\"");
header("HTTP/1.0 401 Unauthorized");
echo "ユーザーがキャンセルボタンを押した時に送信されるテキスト\n";
exit;
} else {
echo "<p>こんにちは、$PHP_AUTH_USER さん。</p>";
echo "<p>あなたは、$PHP_AUTH_PW をパスワードとして入力しました。</p>";
}
?>
===
0623nobodyさん
02/04/20 13:01ID:???にしてみたら?
0624nobodyさん
02/04/20 14:48ID:???0625nobodyさん
02/04/20 22:08ID:Mslw1o2NphpをCGI版じゃなく、Apacheモジュールとして動作させ
解決しました。どうもでした。
0626nobodyさん
02/04/20 22:17ID:dRKvCqvIFatal error : The member function on a non-object is called. It is a /www2/flashkit/html/jump.php on-line. 5
これは、どうゆう意味でしょうか?ご教授ください。
0627nobodyさん
02/04/20 23:51ID:???0628nobodyさん
02/04/21 00:25ID:???Fatal error : The member function on a non-object is called. It is a /www2/flashkit/html/jump.php on-line. 5
0629nobodyさん
02/04/21 00:50ID:wb3vDYFUWindows2000だけでできるの?
Linuxとか使わないとだめ?
0631あえてウソを教えてみる
02/04/21 09:49ID:???そうだよ。君には Linux が必要だ。
何冊か本や雑誌を買ってきて、勉強しながらインストールしてみよう。
0632nobodyさん
02/04/21 11:47ID:/tnBoE3S知りたいんですよね。
0633nobodyさん
02/04/21 12:17ID:???エラー:The member function on a non-object is called.
0635nobodyさん
02/04/21 15:37ID:???http://〜/hoge.php/zzz みたいに使いたいんですが・・・・
0636nobodyさん
02/04/21 15:57ID:???サーバソフトで決まるだろ。
0637635
02/04/21 16:22ID:???hoge.cgi/zzz は期待通りに動くので、phpだとできないのかと思った次第です。
サーバの環境としては、Apache2.0.35にphp4.2RC3をDSOで入れてあります。
0639taketyan ◆JQJvqZpw
02/04/21 17:13ID:???0640nobodyさん
02/04/21 17:22ID:???http://jp2.php.net/manual/ja/ref.sockets.php
これではダメなのかえ?
0641635
02/04/21 17:23ID:???今のところ、hoge.phpとしては、
<? print "hello"; ?>
しか書いてません。
実際にPATH_INFOを取得するのはこれがきちんと動いてからやろうと思ってます。
hoge.cgiの方は、
#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
print "hello", $ENV{PATH_INFO};
で、正常に稼動しています。
0642nobodyさん
02/04/21 17:30ID:???0643635
02/04/21 17:33ID:???0644nobodyさん
02/04/21 17:55ID:73tQq+THPATH_INFO使わないで参照すると正常に動作するんだけど。
0645nobodyさん
02/04/22 02:36ID:AXvATEcmプログラムの問題ではないので恐縮ですが、
*.phpでHTML表記部分(?)の<A href="#NAME">がうまくいかず、困ってます。
拡張子を*.htmにするとうまくいくのですが、
これはどうすればいいでしょうか。
0646nobodyさん
02/04/22 03:20ID:???プログラムの問題ではないので恐縮ですが、
>>645の人は何がうまくいかない為状況が判らず、困っています。
私の環境ではうまくいくのですが、
コヤツにどう答えればいいのでしょうか。
0647nobodyさん
02/04/22 03:21ID:???↓
>>645の人は何がうまくいかないのか書いていない為、状況が判らず、困っています。
鬱だ詩嚢
0648nobodyさん
02/04/22 03:36ID:???$new_w=100;
$new_h=100;
header("Content-type: image/gif");
$dst_img=ImageCreate($new_w,$new_h);
$src_img=ImageCreateFromGif("./test.gif");
ImageCopy($dst_img,$src_img,0,0,0,0,ImageSX($src_img),ImageSY($src_img));
ImageGif($dst_img);
?>
test.gifは20×3の画像。色は赤一色。
この画像を$dst_imgに重ねたいのですが、
上記ソースを実行しても、100×100の赤く塗りつぶされた画像になってしまいます。
$dst_imgの背景色を白として、test.gifを重ねるにはどうしたらよいのでしょうか?
0651650
02/04/22 04:13ID:???ImageCreate使った後に
ImageColorAllocate使えば塗りつぶしできるな。
0652648
02/04/22 19:47ID:???ImageCreateしたイメージを一旦名前を付けて保存し、
改めて開き、ImageCopyすることで重ねることが出来ました。
0653645
02/04/22 21:20ID:AXvATEcmレスありがとうございます。
むちゃくちゃな質問してしまってすいませんでした。
原因がわかりました。
上手く動かなかったのは、サーバプログラムを導入していないPCでテストしていたためでした。
サーバに上げたら正常に動作しています。
お騒がせしてしまい、本当に申し訳ありませんでした。
0654_ ◆IVXmlxmI
02/04/23 12:50ID:3ZaaJEvLPHP4.2.0がでますた
ダウンロード
http://www.php.net/downloads.php
変更点
http://jp2.php.net/ChangeLog-4.php
今回の目玉は「register_globals defaults to 'off'」か?
0655nobodyさん
02/04/23 13:38ID:ztAlz169mb_http_output('SJIS');
ob_start('mb_output_handler');
と、
header("Content-type: text/plain");
とかヘッダー関数を一緒に使うとなんも表示されなくなった。
これはバグなのか?
4.1.2では両方とも同時に使えていたのだけど。
とりあえず、APCはcvsバージョンで普通に入った。
あと、safe_mode使ってるとsafe_mode_include_dirの書き方が
微妙に変わったらしく前のまま(シングルクオート)で囲ってると
ダメだった。
>654
register_globals のデフォルトがoffになるの、
思ったより早かったね。
4.3.0あたりからだと思っていたのに。
0657_ ◆IVXmlxmI
02/04/23 18:03ID:???解説本書いてる人たちは直し面倒だろうなぁ
MLみるとmb関連などで4.2.1が出そうな雰囲気なので
うちではちょっと我慢
0658655
02/04/23 18:07ID:ztAlz169表示はされるようになったが、今度はSJIS変換が効いてない・・
0659nobodyさん
02/04/23 20:27ID:???すようなものを作りたいのですが、権限なしとでます。
PHPスクリプト内で実行権限をnobodyから変えるようなことはできますでしょうか
0660nobodyさん
02/04/23 20:43ID:???0661nobodyさん
02/04/23 22:17ID:jWd71drqzend studio(PHP統合開発環境)で、デバッグURLできないんだけど、どうすれば良い?
デバッグURLというのは、実際に稼動しているサーバのPHPスクリプトをデバッグする機能。
今までに行った設定は、普通にzend studioをインストールして、ポート10000空けただけ。
ほかに必要な設定とかありますか?
0662661
02/04/23 22:26ID:jWd71drqlocalhostのウェブサーバに接続しています(WEBサーバのマシンとデバッグしているマシンが同じ)
デバッグURLを行ったときの状況は、
デバッグURL(F8を押したとき)
The Zend Debug Server did not connect.
Please check the Troubleshooting pane for possible causes.と出力される
zend server centerボタンを押したとき
the zend server is not installed on http://localhost/と出ます。
0663592=603
02/04/23 22:45ID:B45a096eえらく遅レスですみませんが、PHP3は、確かに国際化版です。
でも、PHP4の方は、PHP4.0.6なんですよ。(mb_なんちゃらの関数があるやつ)
だから、「PHP4の国際化版」ということですよね?
PHP4.0.6の「自動変換」系の処理はあまり信用したら
ダメだと思う・・・。
(何となくそのあたりのバージョンのmail関数に
バグがあった気がするんだけど覚えてない。
スマソ。)
PHP3国際化は化けなかったけど、PHP4にしたら
化けた、ってことも多かったし。
出来るだけ明示的に指定したほうがいいですよ〜。
0665663
02/04/23 23:48ID:B45a096eなるほどー、1つ物知りになりました。ありがとうございます。
0666nobodyさん
02/04/24 11:55ID:27Mq6623PHP側からMySQLへUPDATEでデータ更新を行うと思っくそ文字化けします。
データを投げる際、文字コードをEUCやSJISへの変換も試みてみたのですが
全くうまく行きません。表示側での文字化けでなく、DB内部で文字化けしています。
ドキュメントも全然見つからないので質問しました。
なにぶんDB自体まだ不慣れなので根本的な点で躓いているかもしれませんが、
助言お願いします。
0667nobodyさん
02/04/24 12:49ID:xs5bIMSGそれなら変換いらないはず。
たぶん入力フォームとデータ表示ページの文字コードが違ってるんではないかと。
関係するすべてのhtmlファイルににmetaタグでEUCを明示してみて。
0668666
02/04/24 13:40ID:27Mq6623ありがとうございます、解決しました。
ソースの文字コードを全部EUCにしたら変換無しでも
正常にデータ更新が行えました。
我ながら超初歩的な点で躓いていたなと反省します。
0669nobodyさん
02/04/24 14:25ID:qHnTuQcbiモードはs_jisしか対応してないみたいで文字化けします。
どーすりゃいいでしょうか
解決したみたいだけど、少し補足。
MySQLは確かデフォルトでEUCだったはずなので
ブラウザからの入力、ブラウザに対する出力がSJISなら
入力(SJIS)>(mbstringでEUCに変換)>DBにinsert
DBからselect>mbstringでSJISに変換>ブラウザに出力
ってかんじのことがいります。
他の方法として、自分は内部エンコードをUTF-8にして
MySQLのBLOB型にバイナリとして保存、ということをやってます。
以上参考になれば。
>669
単に出力をSJISにするだけでは?
0672nobodyさん
02/04/24 15:42ID:???opendir(),readdir()の結果から該当しないものをオミットするとか考えたんだけど、もっと簡単にできるものがありそうで。
0673nobodyさん
02/04/24 19:46ID:tWCSSODi4.2.0は我慢するしかないか?
0674nobodyさん
02/04/24 19:48ID:tHbMJxml0675nobodyさん
02/04/24 22:31ID:2H1uzio+君....
それは、難しすぎる
他の板に行ってくれ。
0676nobodyさん
02/04/25 01:35ID:Dqy3iBWZ最近PHPをはじめました。
んで、DBを使う時に、いろいろなページや本を見ると、
ほとんどすべてLinuxを使ってますよね。
やはり、本格的にPHPでDBを使うなら、Linuxを導入しなければ
いけないのでしょうか…。
http://hp.vector.co.jp/authors/VA023283/
このようにwinでPostgreSQLを使えるようなものもあるみたいですが、
どうなんでしょう…。
0679nobodyさん
02/04/25 10:10ID:iOYJ99hT>本格的にPHPでDBを使うなら
本格的にやるなら,Linux導入したほうがいいよ。
ネット上に落ちているPHP + DB(MySQL)連動のものは
ほとんどLinux + Apache環境で開発されてるからね。
PHPが使えるレンタルサーバーとかでもLinuxベースだしね。
0680nobodyさん
02/04/25 11:01ID:???$msg = file($message);
srand((double)microtime()*1000000);
$num = rand() % sizeof($msg);
echo("$msg[$num]");
という風にTOPページに馬鹿げたランダム嘘新着情報を表示してる俺…。応用でランダム馬鹿TOP画像も。
0681ok
02/04/25 22:13ID:???メールサーバーにqmailをつかっていてsendmailははいっていません
phpのバージョンは4.2です
0682nobodyさん
02/04/26 01:10ID:gdGuor6I0683ok
02/04/26 21:00ID:???って設定したんですけどこれじゃあダメですか?
0684名無し
02/04/26 21:00ID:hGC+fs9Vネットワーク接続するとライセンス違反であるというの
本当ですか。
会社のイントラネットで150台つないで使っています。
0685nobodyさん
02/04/26 22:25ID:Sgu23qbz構成されているかどうかを調べるには
どうすれば良いでしょうか?
0686nobodyさん
02/04/27 00:09ID:40Y3gDf/sendmail -t -i
でやってみ
0687nobodyさん
02/04/27 00:46ID:5ozKIanzif(ereg([^0-9,])){
}
よってるからだめだったらすまn
0688nobodyさん
02/04/27 01:47ID:???PHPで$str = base_convert($digit, 10, 62)なんてやってみましたが、2〜32進数までしか対応して
いないようです。
googleで調べたところ、perlの変換コードはあったので、それを応用しようとしていますが、
はまっています。
何か簡単な方法なぞあるのでしょうか?
0689nobodyさん
02/04/27 02:36ID:40Y3gDf/if (preg_match("/^([0-9,]+|[^.*])$/i", $str)){
}
こんなんはどう?
0690
02/04/27 14:32ID:o0HNGDqt0694nobodyさん
02/04/28 15:28ID:T4n5Tvqk0695nobodyさん
02/04/29 01:09ID:6cDOgkjXChora CVS Viewer とかで使われてるdiff.phpとかの中身参考にして作れば?
0696nobodyさん
02/04/29 04:54ID:g+MD6PFP0697nobodyさん
02/04/29 09:23ID:SgsfgQTv動的なレコードセットオブジェクトを作成する方法はありますか?
ADOやRDO、OO4OのようにSELECTで発行したレコードセット上でADDやUPDATE、
DELETEを行いたいんです
0698nobodyさん
02/05/01 00:54ID:c7UNrZdfPHPで、ヘッド、メイン、フットをくっつけられる
スクリプトを配布してるところありませんか?
0700nobodyさん
02/05/01 13:47ID:???小一時間問いつめて(・∀・)イイ?
<?php
readfile("~/public_html/header.html");
?>
0702nobodyさん
02/05/02 10:27ID:H4uNVy/3いろんなサイトを参考にして、Windows2000にApache、PHP4、MySQLをインストールして
ブラウザからローカルでPHPをテストできるところまで行きました。
あとはPHPからMySQLに接続すればSQL文を送信れきるんですよね?
そのためにはMySQLを起動するんでしょうか?
なんか信号機みたいなアイコンが出ます。信号は赤です。
できればサービスとして使いたいのですが。
0703kossy
02/05/02 11:32ID:Ogsl+RYnhttp://member.nifty.ne.jp/Y-Yamada/php/
赤ではサービスが動いていない。
0704nobodyさん
02/05/02 14:25ID:ReJCGtLpファイル書き込みで、バイナリで書き込みたいんですが
どうすれば良いですか?
fwriteの引数の型がstringの為、文字列として書き込まれてしまうのですが。。
ちなみにUNIXです。
$data = 1;
fwrite( $fp, $data );
ファイルの中身は0x31。
0x01で書き込みたい。
申し訳ありませんが、宜しくお願い致します。
0705nobodyさん
02/05/02 15:09ID:LWXh07pJfopen("FILE", "wb")
で開いてみれば?
0706nobodyさん
02/05/02 15:12ID:StaNwaI6参照することって出来ないんですか?
$a = new test;
$a->bar = "NG";
$b = $a;
$b->bar = "OK";
echo $a->bar;
class test {
var $bar;
}
このスクリプトの結果が"NG"になって
ちょっとショックなんですが・・・
■ このスレッドは過去ログ倉庫に格納されています