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

【PHP】質問スレッド Part4

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/06/02 15:32ID:f3afNVBG
レスは気長に待つのが良い感じかも。


<<参考>>

■本家
http://www.php.net/

■日本 PHP ユーザ会
http://www.php.gr.jp/

■PHP マニュアル
http://www.php.net/manual/ja/

■PEAR マニュアル
http://pear.php.net/manual/ja/


過去スレ, 関連スレは>>2を見よう。
075675002/08/26 21:41ID:???
失礼な。
テーブルは、できるだけ少ない方がイイに決まってる。
同じ構成のテーブルが千件あるだけで大問題だろう。

と言ってみるテスト
0757nobodyさん02/08/26 21:43ID:???
750じゃないが、
そのバラバラのテーブルをどうやって管理すんのよ。
テーブル名を管理するテーブルを作るのか?
訳分からんな。
0758nobodyさん02/08/26 21:46ID:???
>>755
別のレコードに入れて参照させりゃいいだろ。
0759nobodyさん02/08/26 21:58ID:???
>>757
千件もあるスレッドを貴方はどのように管理するのでしょうか?
0760nobodyさん02/08/26 22:01ID:3hDPVfbt
Javaでは
Process java.lang.Runtime.exec (String[] command, String[] envp, File dir)
のように、プログラムを実行する際にプロセスの環境変数を設定する関数があるけど、PHPではそういう関数はないの?
exec ()やproc_open ()を当たってみたけど、それらしい物はないし.
076175702/08/26 22:26ID:???
>>759
スレッド毎にテーブルを作らない方法で。
0762nobodyさん02/08/26 22:41ID:???
>>761
スレッド毎にテーブルを作らない方法で、1000件以上のスレッドをどう管理するの?
076375702/08/26 22:45ID:???
>>762
スレッド毎にレコードを作る方式で。
面白いな(藁
076475702/08/26 22:48ID:???
その後>>758
0765nobodyさん02/08/26 22:52ID:???
>>763
ってことは、スレッドを管理するテーブルは結局作るわけですね。
757を読むと、スレッドを管理するテーブルすら作らなくてもいいよにと
思えたのでした。作らなくてもいいとはどこにも書いてないけどね。

だから確認したの。煽ってスマソ。
076675702/08/26 23:17ID:???
>>765
スレッドを管理するテーブルを作るとは言ってないよ。
スレッド型掲示板っていっても色々あるから、
制限、表示方式等分からないと何とも言えんな。
0767nobodyさん02/08/26 23:31ID:???
>>766
確かに言ってないな。
スレッド毎にテーブルを作るのは論外としても、スレッド管理テーブルと
ログテーブルは別けちゃうよ。
各スレッドのレス数が、多くても数十って程度なら、いっしょにしても
いいか...
0768nobodyさん02/08/26 23:36ID:ggUoz7FV
>>758>>767
スレッド管理用テーブルとログだけのテーブルに分けるということですか?
分ける必要って何ですか?
0769nobodyさん02/08/26 23:47ID:???
>>768
スレッド管理テーブルは、
スレ番号、スレタイ、スレ立て人、timestamp、...
ログテーブルは
スレ番号、本文、timestamp、....

766の言う通り形式によって違うだろうけど、
昔のhypernotes形式なら別でいいかと... ダメっすか?
077075702/08/27 00:19ID:???
>>768
2chのようにスレッド全体に1つのタイトルがあって、
最初に表示されるページがスレッドタイトルの一覧を出すような形式の場合、
>>769
のような形式が考えられるだろう。
しかし、
本文一つ一つにタイトルがあるような場合、
最初に表示されるページをなるべく高速に出したい場合は
工夫が必要になる。
0771nobodyさん02/08/27 00:36ID:BywL+zC1
>>769-770
すごく基本的なことなんですが、1回の処理で複数のテーブルにアクセスすると遅くなったりしないんですか?
0772nobodyさん02/08/27 00:47ID:???
>>771
設計次第。
0773nobodyさん02/08/27 09:40ID:29/b2lpR
die()を強制終了じゃなく、最後の出力って意味で使ったらマズイですか?
0774nobodyさん02/08/27 10:52ID:Pwc6QKdg
sleep(36000);
等はsleepしている間、かなりサーバに負荷がかかるんでしょうか?
また、これ以外、何時間後かに動作させるにはどうするいいんでしょうか?
0775nobodyさん02/08/27 10:52ID:Pwc6QKdg
あ、スマソ・・。
スレ間違えました。。
0776nomony02/08/27 10:57ID:L02RF0Lh
win32環境でmb_eregxは使えないんですかねぇ〜
使おうとするとno functionエラー出るし...
0777nobodyさん02/08/27 11:43ID:/KR5b3gy
>> 776
そんな関数ありません
使えなくて当たり前
0778nobodyさん02/08/27 13:24ID:ZUROk4Fr
こんな関数作ってみました。
これって、法律的にどうなんでしょうね?
単なるリンク張りを自動的に行っている、と見るか
それとも、いわゆる「無断引用」に当たるのか。
//----------------------------------------------------------------
function NewsFromAsahi(){
$URL = "http://www.asahi.com/";
if( ($fp=fopen($URL,"r")) ){
for($phase=0;!feof($fp);){
$str = fgets($fp);
switch( $phase ){
case 0:
if( mb_eregi("<!--\ Start\ of\ Top\ 5\ -->",$str) ){
$HTML = $str; $phase = 1; }
break;
case 1:
$HTML .= $str;
if( mb_eregi("<!--\ End\ of\ Top\ 5\ -->",$str) ) $phase = 2;
case 2: break;
}
}
$HTML = mb_eregi_replace("<img[^>]+>","<li>",$HTML);
$HTML = mb_eregi_replace("<a[ ]+href=\"","<a href=\"".$URL,$HTML);
$HTML = "<dl>\n<dt> News from <a href=\"http://www.asahi.com/\">asahi.com</a>\n<dd>".$HTML."</dl>";
}
return( $HTML );
}
//----------------------------------------------------------------
詳しい人の意見が聞きたいです。
077977802/08/27 13:25ID:ZUROk4Fr
↑見にくくなってしまった....

上の関数は、asahi.comから最新ニュースへのリンクだけを抜き出すものです。
0780nobodyさん02/08/27 13:40ID:???
確か、アメリカでそんな訴訟があったと思ったが。二ヶ月前くらいか。
0781nobodyさん02/08/27 14:54ID:JlzB8Squ
>>778
これは動きますか?
0782nomony02/08/27 16:17ID:L02RF0Lh
>>777

mb_eregxってmb_ereg()等の事なんですがね...
0783nomony02/08/27 16:20ID:L02RF0Lh
>>778
>>780

リンク側が敗訴でしたねぇ〜
サムネイル(タイトルもか?)を表示してうるのが原因だったような
0784nobodyさん02/08/27 16:24ID:/KR5b3gy
>> 782

だったら、そう書け ex. mb_ereg(), mb_eregi()等って
4.2.xだったら、php.iniに

extension_dir = (drive letter):\(php_install_dir)\extensions
extension=php_mbstring.dll

を書く
0785nomony02/08/27 16:29ID:L02RF0Lh
>>784
それは書いてある。
mb_ereg()は動かない(未定義関数エラーが出る)が、mb_send_mail()は動く

PHPマニュアルに「実験的なステータス」とある関数がどうやら使えないようなんだよね
078678402/08/27 16:48ID:/KR5b3gy
>> 785
スマソ

print_r(get_defined_functions());
に含まれてないね。
--enable-mbregexを省いて作成されているようだ。4.2.2-win版
078778402/08/27 16:54ID:/KR5b3gy
>> 785

こっちなら、よさそう
http://www.geocities.jp/rui_hirokawa/php/win/php-4.2.2-Win32-mb-1.0.lzh
0788nobodyさん02/08/28 00:01ID:???
『コアラ>おれはやってないよ。』
と文字列の コアラ> を取りたいんだけど、どうすればいいの?
stripslashes では取れんのかな? 取り方おしえてください。
0789nobodyさん02/08/28 00:14ID:???
>>788
君、何歳?
0790nobodyさん02/08/28 00:47ID:???
>>789
僕は何歳? 例が幼稚って。解決しました。
079178802/08/28 00:49ID:???
↑>>790
0792nobodyさん02/08/28 01:32ID:rTh+CXwx
>>788
質問の仕方がオコチャマだって…
0793初心者02/08/28 03:35ID:ayLaxrUo
初心者です。環境:windows98+Apache+php4

<? phpinfo ?>

で表示される「Server API」が「CGI」なんですけど、これを
「Apache」と表示させるには(ApacheのモジュールとしてPHP4
を動かすためには)どうすればいいのでしょう?

くだらない質問かもしれませんがどうか教えてください。
よろしくお願いします。
0794初心者02/08/28 05:56ID:???
>>793
自己レス
自己解決しました。単なる勘違いでした。
0795nobodyさん02/08/28 07:59ID:???
『コアラ>おれはやってないよ。』
コアラをパンダに変えるにはどうしたらいいのでしょうか?
079675702/08/28 09:19ID:???
>>795
ereg_replace
0797tekitou ◆NM99TIzo 02/08/28 09:20ID:???
??
0798nobodyさん02/08/28 09:29ID:???
$logs = str_replace("795>", "逝ってよし>", $logs);
0799nobodyさん02/08/28 10:12ID:???
残念ながらstr_replaceは全体を置き換えてしまう
0800nobodyさん02/08/28 21:34ID:???
PHP使いの偉い人に宿題でし。
Apacheを15分毎に監視し、応答がない等の正常ではない反応があった場合、
Apacheを再起動する。
そういうスクリプトを書くべし。

0801 02/08/28 23:50ID:???
>>800
で、答えは?
0802nobodyさん02/08/29 01:42ID:???
>>800
Apache落ちてたらphp使えないじゃん。
cron使うんだろうけどUNIX板できけば?
0803nobodyさん02/08/29 06:27ID:???
>>802
いや、Win版で頼む。
UNIX版だとそーいうスクリプト(Perl)が多いな。
Win版Apacheでそういうのは見かけないのう。
0804nobodyさん02/08/29 06:30ID:???
まず、fopenで、http://localhost/hoge.htmlを開く。(hoge.htmlの中にはunkoと埋め込んでおく。)
んで、予定されたタスクでこれを15分間隔で実行。

fopenした時、unkoと言う文字列があればなにもしない。
unkoと言う文字列が取得出来ない場合、execでアパッチを停止、起動させる。

これで解決じゃん。
0805nobodyさん02/08/29 14:49ID:???
daemontoolsでも使え
0806nobodyさん02/08/29 17:39ID:???
構造体の変わりにクラスに変数だけ入れて使ってるんだがヤバイかね。
こんな使い方は(;´Д`)
0807 02/08/29 23:05ID:???
>>802
Apache 落ちてても PHP は使えるだろ。
モジュールとしては使えないが・・・
0808nobodyさん02/08/29 23:40ID:???
>>806
別にヤバくはないが、うまみもない。
0809 ◆tIyj783Q 02/08/30 01:25ID:???
>>800
/sapi/cliをコンパイルして
cronで15分毎に実行。
$sock = fsockopen("localhost",80, $errno, $errstr);
でsockがfalseだったら/usr/local/apache/bin/apachectl restartを実行
もしもっと確実に監視したいならHEAD / HTTP/1.0でも送信すればよろし
0810nobodyさん02/08/30 06:14ID:???
>>809
fsockopenならWin版PHPでも使えるね。

>もしもっと確実に監視したいならHEAD / HTTP/1.0でも送信すればよろし
それはどのようにして送信?

0811 ◆tIyj783Q 02/08/30 12:14ID:???
>>810
http://jp2.php.net/manual/ja/function.fputs.php

ちなみにWinなら再起動は
C:\Program Files\Apache Group\Apache\Apache.exe -w -n Apache -k restart
0812nobodyさん02/08/30 13:44ID:IarIlbJG
PHPでmy.yahooのような個人用ポータルサイトをつくるのにはどうしたらよいのですか?
一旦認証して、色々なサービスに認証を引き継ぎたいです。
(シングルサインオンのようなイメージ)
よろしくお願いいたします。
0813nobodyさん02/08/30 16:03ID:???
>>812
http://pc.2ch.net/test/read.cgi/php/1030630239/l50
は削除依頼しましたか?
http://qb.2ch.net/saku/index2.html
0814nobodyさん02/08/30 16:13ID:okP1fGcQ
http://www.p0t.jp/phpinfo.php
の環境でGETは平気なんですがPOSTでデータが受け取れないです。
ようするに↓がちゃんと表示されないです。
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<form name="form1" method="post" action="<?print $PHP_SELF;?>" enctype="multipart/form-data">
<input type="text" name="file1"><br>
<input type="submit" name="submit" value="送信"><br>
</form>
<?
if($submit){
print $file1;
}
?>
</body></html>

PHP Version 3.0.9のほかのサーバでは大丈夫だったんですが・・・。
どなたかわかる人がいればお願いします!!!
0815 ◆tIyj783Q 02/08/30 17:53ID:???
>>814
過去ログを読みましょう。
$submit=$_POST['submit'];
$file1=$_POST['file1'];
0816nobodyさん02/08/30 18:43ID:okP1fGcQ
あ、すみません、
register_globalsはonで、$_POST["submit"]でやっても動かないって前提っす。
そもそもGETはうけとれます。
0817 ◆tIyj783Q 02/08/30 19:13ID:???
>>816
もしかしてファイルを受け取ろうとしてる?
0818山師さん02/08/30 21:20ID:FsiYdmKt
最高齢の現役プログラマって何歳ですか?
0819nobodyさん02/08/30 22:08ID:???
register_globalsはoffちゃうん?
0820すれ違いだろ02/08/30 23:17ID:???
>>818
コンピュータの歴史を読み登場人物の中から生き残りを探せ。
0821nobodyさん02/08/30 23:47ID:???
>>814
submitはボタンを押さないとpostされないんじゃないか。
テキストエリアでEnterキーを押して送信したら$submitにはなにも入りませんよ。

たしか...
0822nobodyさん02/08/31 09:50ID:MUbldWgg
誰かFFADVENTUREのPHP版を作って配布してください。
した方は神と呼ばせていただきますので。
0823nobodyさん02/08/31 09:58ID:???
神と呼ばれる以外に何かメリットは?
082481402/08/31 11:09ID:McY4kGnj
>816
File送信以前にPOSTがうけとれないんで
まずそれをどうにかしたくて・・・。

>819
ONです。

>821
submitボタン押して送信してます。
082574402/08/31 12:30ID:727MmemG
>>746
遅レスすまそ。一応作ってみたけど、こんな感じでいいかな?
こっちの方がいいとかあったら、アドバイスプリーズ。
while(current($_POST)) {
$key=key($_POST);
$_GET[$POST] = mb_convert_encoding($_POST[$key],"EUC-JP");
next($_POST);
}
082682502/08/31 12:31ID:???
あ、上の間違ってるね。
while(current($_POST)) {
$key=key($_POST);
$_POST[$key] = mb_convert_encoding($_POST[$key],"EUC-JP");
next($_POST);
}
082774602/08/31 13:02ID:???
>>826
ちゃんと処理されるんならそれでええやないの。

以下は未検証だけど、
foreach($_POST as $key => $value){
$_POST[$key] = mb_convert_encoding($_POST[$key],"EUC-JP");
}
で、どぉよ。
少しずつレパートリーを増やしていくしかないわなぁ。
082874602/08/31 13:07ID:???
あぁ、$valueにせっかく値を渡しているのだから、
$_POST[$key] = mb_convert_encoding($value,"EUC-JP");
の方がいいかも。
0829nobodyさん02/08/31 15:30ID:???
これ(mb_convert_encofing)って入力が SJIS かつ、
「\」が2バイト目に来る文字列の時におかしくなんねー?

===== cut here =====
<FORM action="<?= $PHP_SELF ?>" method="POST" enctype="multipart/form-data">
<INPUT type="text" name="test" value="機能表示ソフトウェア">
<INPUT type="submit">
</FORM>
<HR>
<PRE>
<?= $_POST['test'] ?>
↓
 mb_convert_encoding()
↓
<?= mb_convert_encoding($_POST['test'], 'EUC', 'SJIS') ?>
<HR>
php_version: <?= phpversion() ?>
magic_quotes_gpc: <?= get_magic_quotes_gpc() ?>
</PRE>
===== cut here =====
0830nobodyさん02/08/31 15:55ID:???
>>829
> magic_quotes_gpc: <?= get_magic_quotes_gpc() ?>

なんでおかしくなるのか、わかってんじゃねぁかよ。
0831nobodyさん02/08/31 16:27ID:???
>>830
いや、漏れはわかってるんだけど、お前等わかってますか?
ってゆーのと、あわよくば

 magic_quotes_gpc = On

のままで回避できる方法が得られないかと(w
0832nobodyさん02/08/31 20:36ID:???
>>831
あんさんこそわかっとるんけ?
magic_quotes_gpc = On
が何するものかと知ってれば、その解決方法も判るじゃないかよ。
0833nobodyさん02/08/31 22:08ID:???
>>832
悪りぃ、確認不足やったわ。
化けた状態で stripSlashes() 効かないかと思ったら効いたわ。

よう考えたら、単に「\」が二倍になってんのを元に戻すだけやから
当然と言えば当然か。ちょっと勘違いしてたわ。

ってわけで、

 $var = stripSlashes($_POST['test']);
 $var = mb_convert_encoding($var, $internal_encoding, $input_encoding);
 $var = addSlashes($var);

みたいに、一旦消し去ってから再追加で(゚Д゚)ウマー
0834nobodyさん02/09/01 00:59ID:???
>>814
これで問題の切り分けしてみろ。

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<form name="form1" method="post" action="<?print $PHP_SELF;?>" enctype="multipart/form-data">
<input type="text" name="file1"><br>
<input type="submit" name="submit" value="送信"><br>
</form>
<?
echo "file1 = ".$file1."<br>";
echo "GLOBALS[file1] = ".$GLOBALS[file1]."<br>";
echo "_REQUEST[file1] = ".$_REQUEST[file1]."<br>";
echo "_GET[file1] = ".$_GET[file1]."<br>";
echo "_POST[file1] = ".$_POST[file1]."<br>";
echo "submit = ".$submit."<br>";
echo "GLOBALS[submit] = ".$GLOBALS[submit]."<br>";
echo "_REQUEST[submit] = ".$_REQUEST[submit]."<br>";
echo "_GET[submit] = ".$_GET[submit]."<br>";
echo "_POST[submit] = ".$_POST[submit]."<br>";
if($submit){
print $file1;
}
?>
</body></html>
0835nobodyさん02/09/01 09:59ID:sTyltltt
ローマ字文字列から成る配列を
50音順に並び替えたいのですが、
どのような方法があるのでしょうか?
0836nobodyさん02/09/01 12:51ID:???
>>835
asort
0837nobodyさん02/09/01 12:52ID:???
>>836
あっ、スマソ
50音準だったね。
083881402/09/02 15:35ID:9QT5bee6
>834
ありがとうございます。
やってみましたが全滅で一個もでません・・・。
0839nobodyさん02/09/02 15:39ID:???
GZIP による圧縮転送を行いたく以下のソースにてテストしてみました。
http://php.weblogs.com/http_compression

結果は何も表示されない状態で、
header("Content-Encoding: gzip")
の部分をコメントアウトすれば圧縮された状態のものが表示されました。

perl にて同じようなことを行った際には問題なく意図どおりの結果を得られましたが
PHP ではうまくいかず悩んでおります。

http://www.php.net/manual/ja/function.gzcompress.php
も参考にしましたが、上記と同じく Content-Encoding: gzip を出力させると空白になります。
他に確認すべきことなどございますでしょうか。

PHP 4.1.2
Apache 1.3.23
zlib が使用可能なことは確認しました。
クライアントは Win2KSP3、IE6.0 です。
0840nobodyさん02/09/02 17:48ID:???
>>839
ログは見た?
0841nobodyさん02/09/02 19:15ID:???
>>839
>GZIP による圧縮転送を行いたく
鯖側でgzipで圧縮するが、ブラウザ側では何も意識することなく表示する事を言っているなら、
スクリプトの頭(headerの前)で、ob_start ("ob_gzhandler"); と書けばよい。
これは、ココのユーザーノーツの中に(php、ブラウザのバージョンについても)書いてある。
http://www.php.net/manual/ja/function.ob-start.php
0842nobodyさん02/09/03 01:33ID:???
>>838
"file1 = "
とか
"GLOBALS[file1] = "
とかの文字列は出てるの?
あと環境は一般的なの?
OS,Webサーバ,PHPのバージョン,ブラウザの種類は?
084383902/09/03 13:39ID:???
アドバイスありがとうございます。

>>840
自前でサーバ管理をしておりませんので、ログの閲覧が出来ません。

>>841
>鯖側でgzipで圧縮するが、ブラウザ側では何も意識することなく表示する事
説明不測で申し訳ありません。行いたいことはおっしゃるとおりです。
ob_gzhandler にはメモリリークの問題があると以前に知り
現在は解決されているかどうかまで調べずじまいでした。

http://www.php.net/manual/ja/function.ob-gzhandler.php
上記の例1のコードでテストを行いましたが、状況は同じです。

phpMyAdmin でも ob_gzhandler を使用していたので、試してみたところ
同じように何も表示されないので、PHP等の設定に問題があるのかもしれません。
phpinfo() で見る限りデフォルト設定のままのようです。

もう少し検索してみる必要がありそうです。
お気づきの点がございましたらお教えいただけると幸いです。
084484102/09/03 15:09ID:???
>>843
>ob_gzhandler にはメモリリークの問題があると以前に知り
知らなかった。でも、メモリリークが報告されているのは Ver4.0.4pl1なので
(http://www.geocrawler.com/archives/3/5/2001/1/0/5063854/)
もう解決されているんじゃないだろうか(推測)。
http://www.php.net/ChangeLog-4.php では、4.2.0で、ob_startに第3パラメータが
追加されているのが該当するかもしれない(これも推測)。
いずれにしても、解決したら詳細きぼ〜
084581402/09/04 10:17ID:khCnGqdv
>>838
"GLOBALS[file1] = "などの文字列はでてました。
そして他のサーバからのうちのサーバのページへPOSTすると表示されるんですが
自分のサーバからPOSTすると何もうけとらない状態でした。
しかし、次の日またやってみたら何故かいけました・・・。
0846nobodyさん02/09/04 11:00ID:LeJnVSk1
\の表示で困ってます。
フォーム入力の料金表示で直接入力の\を使うと、
hidden fieldで次のページにパスしたときに、
\\と表示されてしまいます。
$priceA = "\\" . $priceB といったように関数を
割り当てているのですが。
多分、バックスラッシュとの関係だと思うのですが。
分かる方いますか?
0847nobodyさん02/09/04 11:18ID:???
>>846
>>829-833
0848nobodyさん02/09/04 13:15ID:qzuYRAZQ
FORMで$aaaをPOSTで送って、次のページでecho $aaa;とやっても
表示されまくなりました。
PHPのバージョンが上がって仕様が変わったのでしょうか?
0849nobodyさん02/09/04 13:21ID:???
↑
ネタですか?
0850nobodyさん02/09/04 14:14ID:???
>>848
>>4
おながいします。
0851nobodyさん02/09/05 17:06ID:NDL2LKCG
<?php
echo "<tag>";
echo "</tag>";
?>

のようにして、ブラウザにタグを表示させたいのですが
表示できません。ソースを見ると「<tag></tag>」となって
いるだけです。タグをそのまま表示させるためにはどうすりゃ
いいのでしょうか?
0852名無しさん02/09/05 17:11ID:???
>>851
HTMLの基本から出直せ
0853nobodyさん02/09/05 17:24ID:???
>>852
禿同
さいきんこんなんばっかやな
PHP-usersもregister_globalsネタがつきないし
0854nobodyさん02/09/05 17:35ID:???
>>851の意図が解らないんだが...。
0855nobodyさん02/09/05 17:42ID:???
>>854
'<' や '>' をどうやって表示させるかってことよ。
■ このスレッドは過去ログ倉庫に格納されています