1 :
前スレ981 :
03/08/28 16:00 ID:/GsWsnZj
2 :
前スレ981 :03/08/28 16:00 ID:/GsWsnZj
3 :
前スレ981 :03/08/28 16:01 ID:/GsWsnZj
テンプレのスレはほとんどいきてまつね
4 :
1 :03/08/28 16:05 ID:/GsWsnZj
んがっ頭に■ついてた。ダメポ
8 :
nobodyさん :03/08/28 20:33 ID:zyBDSSoG
echo($_SERVER["REMOTE_HOST"]) とやっても何も表示されないのは何が原因でしょうか? もしかしてApacheの方の問題かも?
9 :
8 :03/08/28 20:45 ID:???
わかりました。たわいもないことですた。 回線釣ってきます。
11 :
nobodyさん :03/08/28 21:13 ID:eqLOXZF0
phpとデータベース対応してる無料鯖ってレッツPHPに載ってるところ意外に日本ではないですか?
12 :
??? :03/08/28 21:19 ID:???
セッション間のデータの受け渡しについて質問です。 $_GET/$POST/$SESSION などがありますが、参考書などを読むと GET だと URL にデータが連結されて外部に見えてしまい良くないと 書かれています。 それならいっそのこと、セキュリティ上の問題の有無に関わらず、基本的に POST あるいは SESSION を使うようにしてしまってよいと思うのですが、 どうなんでしょう? アドバイスいただければありがたいです。
13 :
nobodyさん :03/08/28 21:26 ID:03y9/d4l
printとechoの違いがよく分からないので教えてくれませんか?
15 :
12です :03/08/28 21:42 ID:???
16 :
13 :03/08/28 21:55 ID:???
17 :
剛 ◆V1qpS.dsbM :03/08/28 22:39 ID:P/uKn/BP
掲示板の改造について聞きたいのですがどこで聞けばいいですか?
arigato3さん、自作自演はかえって印象が悪くなると思いますよ。
19 :
219.117.222.18.user.rb.il24.net :03/08/29 00:42 ID:BPzH0JOh
レンタルCGIを目指して修行中なんですが皆さんのポリシー的な事を お伺いさせてくださいな。 コントロールパネルのログイン方法なんですがどれが良いんでしょうか SSLは大前提でおながいします。 ・BASIC認証 ・クッキー認証 ・セッション認証 ・登録式リモホ認証
あぼーん
23 :
nobodyさん :03/08/29 07:14 ID:4u48qIRe
そもそもPHPってなんなの?
基本ですね。 パーソナルホームページの略です。
PHP = Php Hypertext Preprocessor 頭文字をとってPHP
26 :
12です :03/08/29 11:06 ID:???
>>20 なぜ「ニヤニヤ(・∀・)」なの?
おしえて下さい。おながいです!
GNU や GOD みたいなもんだなw
GOD はわからんが GNU は GNU is Not Unix だっけか
30 :
25 :03/08/29 11:46 ID:???
再帰的頭字語ってヤツですね
31 :
nobodyさん :03/08/29 13:35 ID:E3UAHMQu
PHPでは否定はperlと同じですか? if (!ereg()){;}などのようにやりたいんですが、 単純に関数などの前に!を入れるだけでいいんでしょうか?
32 :
31 :03/08/29 14:24 ID:???
実際にやってみれば分かる質問は放置というわけですか!!(怒) もう二度と聞きませんよ!!(怒)
33 :
モソさん :03/08/29 14:45 ID:pNKV687J
そうですよ!!(怒)
34 :
nobodyさん :03/08/29 15:03 ID:/EvFMyE3
35 :
nobodyさん :03/08/29 15:31 ID:E3UAHMQu
>32は僕じゃないです。ただし、33さんのお怒りはごもっともです。 すみません。 PHPマニュアルでは該当項目が見つけられませんでした。 演算子の項でしょうか?どこですか?
>32のレスの最初から12文字程を100回ほど繰り返して読んでください。 できれば声に出して。
37 :
32です :03/08/29 16:41 ID:???
>>36 やってみました。周囲のスタッフがびっくりしています。
声に出して100回言ってみましたが、最後の方では涙も出てきました。
なぜでしょうか…
教えてやろう int i if i <> 0 then goto hell
41 :
nobodyさん :03/08/29 17:33 ID:E3UAHMQu
>39 ありがとうございました。いい加減疲れて頭が働かなくなっていた ようです(というかむしろ元からか?)。 >36でもやったら少しは目が覚めるかと思いますが、37みたく なるのは嫌です。つーか、なんなの〜?
あるテキストファイルを読み込んで、その内容をHTMLの一部として吐くような動作をさせたいと思っています。 今のところ 呼び元で print func(); として、funcの中身で while(!feof($fp)){ $line .= fgets($fp, 2048); } return $line; というようなコードを書きました。 とりあえず期待通りの動作はしてくれていますが、読み込むファイルのサイズが大きいと$lineの中に ファイルのサイズ分のデータが溜め込まれる形になるので効率が悪いかなと感じます。 もっと良い方法は無いでしょうか? 呼び元にループ書いて1行ずつprintすれば解決ですが、それだと使いまわしが・・・
fread()でいいじゃん
>>42 includeやrequireってのがあります。
サニタイズが必要ならダメですが。
requireするならそのまんま変数名を書き込んでも変数名が表示され るだけだからめんどくさいけど<?php print $name; ?>みたいにしたら吉
46 :
nobodyさん :03/08/29 20:45 ID:yif1D4PZ
<? echo $_GET[str]; ?> というソースで、 test.php?str=" とすると \" と表示されてしまいます。 ' や \ も同様に \' \\ 何故こうなってしまうのか、また、どうすればそのまま表示させられるのでしょうか。 PHPのバージョンは4.3.2 WindowsXP Apache 1.3
ぎゃあ前スレにあったんですねごめんなさいありがとう
>>42 そのまま出力するなら include() や require() 以外に、readfile() もあるけど。
解析しない分、readfile() の方が高速。
50 :
nobodyさん :03/08/30 20:23 ID:yJrx/a4c
拡張子 phps にしたら?まあ設定されてないと意味無いが
54 :
nobodyさん :03/08/31 16:30 ID:xLziQJBA
すごいマニアックなのに
独自ドメインとっててワロタ
>>54
56 :
nobodyさん :03/08/31 20:00 ID:4293Ov9h
append.phpというファイルをまちがって削除したのですが、 それ以後、どのphpを実行させても、基本的には動いているのですが、 Warning: Unknown(/Users/kondo/Sites/append.php): failed to create stream: No such file or directory in Unknown on line 0 のような警告が出てきます。 いったいappend.phpというのは何のためのファイルなんでしょうか? どこかから入手できるのでしょうか?
58 :
nobodyさん :03/08/31 20:51 ID:4293Ov9h
>>57 ありがと。appendファイルは空ファイルだったことを思い出し、
ファイル名だけ、append.phpにしたらおさまってくれました。
59 :
nobodyさん :03/08/31 21:44 ID:C/xJu/a4
あのー redhat8.0でインストール時のパッケージでPHPを選んだのですが どうも日本語処理系でCall to undefind functionがでます。 なんでー???
>>59 phpinfo(); で mb_* が有効になっているか調べる。
redhatのphpのrpmは有効になっていない(していない)って聞いた記憶があるな。
使いたいのなら、ソースからconfigureして入れる。
または、mb_*が有効になっている野良rpmを探してきて入れる。
--
◇おはようからお休みまであなたを見つめるレンタルサーバー◇
http://arigato3.net/
PHPで作ってるページのRSSを作成したいのですが、 PHPのRSS生成用のライブラリってありますか?
PEARにあったかと。
63 :
nobodyさん :03/09/01 09:07 ID:Ncyv7e5A
標準入力とファイル入力とを両方監視したい Cでたとえるならselectしたいんだけど PHP4だとstream_selectでいいんですか?
>62 parserはあったのですがgeneratorは無いようです。仕方ない、作るか・・・。
凄く初歩的なものかもしれないのですが。 function &hogehoge() みたいに、関数名の先頭についている「&」ってなんでしょうか?
リファレンス
>>66 関数のリファレンスってどんなものなのか
よくわからないのですが…
リファレンスを返す関数であって、 関数そのものがリファレンスなわけじゃない
PHPスクリプト上で、何かをすると、Apacheを動かしてる ユーザーと同じ権限で色々出来てしまうと聞いたのですが、 誰か知りませんか?知ってたら詳細を教えてください。
「何か」と「色々」がわからん そもそもPHPスクリプトは(モジュールの場合)Apacheの 実行ユーザー(nobodyとかwww)と同じ権限で動いてるわけだが
数字の頭に0を補いたいんです。 $hoge = 1 だったら001 $hoge = 98 だったら098 のように どうすればよいのだろうか?
format() か printf(), sprintf() あたりを調べる
format()はnumber_format()のミスで、これは前0の機能は無いや、すまん
おっ できたよ さんくす printf("%05d",$hoge);
書き込み専用モードでファイルをオープンした場合、 ファイルの中身はいったん空になるんでしょうか?
なる
77 :
75 :03/09/01 17:08 ID:???
ありがとうございました
78 :
nobodyさん :03/09/01 17:12 ID:nf6gij1n
59です。 60さんありがとう。探してやってみます。
カウント数と表示桁数、カウンタ画像へのパスを引数として 関数join_cntへ渡すと、画像を見せかけ上連結して送り返してくれるものを作っています。 見せ掛け上というのは、単に<img>タグを何個もつないでるだけということです。 function join_cnt($cnt, $figure, $path){ $cnt = sprintf("%0".$figure."d", $cnt); for ($i=0; $i<strlen($cnt); $i++) { $number = substr($cnt, $i, 1); $cnt_img .= "<IMG src=\"$path$number.gif\">"; } return $cnt_img; } これで一応まともに動作はするのですが、少しエラーがでます。そのエラーとは Notice: Undefined variable: cnt_img in W:\server\counter.php on line 46 というようなものです。エラーの出た変数を以下のようにしたらエラーは解消されました。 $cnt_img = ''; これについてなぜこのようなエラーが起きたのか原因が知りたいのです。 また、変数の初期化の方法は↑のようなやり方でOKですか? どなたかご教授下さい。
>>80 エラーじゃなくて、Notice(注意、警告)。
初期化の仕方はそれでイイヨー
82 :
nobodyさん :03/09/02 10:03 ID:awULgDnZ
PHP3を使っているんですが strpos関数を使った結果が空白ならA処理、数字ならばB処理というように したいのですが $str="ABC"; if(strpos($str,"A")==""){echo "A";}else{echo "B";} の処理では0が返されてるのにAの処理をしてしまいます。 どうしてなんでしょうか?
83 :
80 :03/09/02 10:25 ID:???
>>81 ありがとうございます。
もう少し突っ込んで聞きたいのですが、なぜこの場合は警告されたのでしょうか?
この変数に限り、初期化しないと警告されるのはなぜなのかよく分かりません。
あと、$cnt_img = '';よりもう少し見た目のいい初期化の方法、
それと、複数の変数を同時に初期化したい場合などはどのようにすればいいのでしょうか?
よろしくお願いいたします。
>>83 それだけいきなり追加してるからだよん
他は代入(=初期化)だからね
>82 どうやら "" が数値(または真理値)に変換されて比較されているようなので 期待した結果を得るには if((string)strpos($str,"A")==""){echo "A";}else{echo "B";} のようにキャストしてあげる必要があるみたい
86 :
80 :03/09/02 10:49 ID:???
なるほど、代入=初期化になるんですか。ありがとうございます。
87 :
82 :03/09/02 10:49 ID:awULgDnZ
>>85 なるほど、そうだったんですか。
どうもありがとうございました^^
型まで比較対象にするには === strpos($str,"A")==="" とすればよい
何個もある変数に同じ値を代入するにはどうすればよいのでしょうか? list($a, $b, $c) = 10; このようにしてもうまくいかなかったのですが、
あんまり好きじゃないが、、、 $a = $b = $c = 10; これじゃだめ?
91 :
80 :03/09/02 11:13 ID:???
>>90 Perlだと結構いろいろなやり方があったんですが、PHPだとその方法しかないでしょうか?
オレにはわからんなあ いろいろソース見るのがいいかと
93 :
nobodyさん :03/09/02 12:26 ID:+Pxa3UzG
あれ?もう一つのPHP質問スレはどこいった?
94 :
93 :03/09/02 12:28 ID:???
スマソ。
>>1 にリンクがあった。
もうdat落ちしてるのか……。早いな。
敷居を高くして次スレって話はどうなったんだ?
>88 それだと strpos の戻り値は元々 int なんだから永久に true にはならない罠 それに質問者の環境は PHP3 だよ。=== は PHP4 以降でつ。 >80 たしか初期化に関しては前スレで話題になった気がするんだけど前スレは DAT落ちしてるんだよな。 PCに残ってるログをちょっとあたってみるかな。
んー見つからない きのせいだったか 質問スレの方は新しい奴は立ってないみたいだな
97 :
nobodyさん :03/09/02 13:58 ID:3rUGrasl
>>97 それは鯖設定によってどうとでもなる。
AddType application/x-httpd-php .html
とかね。
お す す め で き な い が
99 :
nobodyさん :03/09/02 15:22 ID:3rUGrasl
>>98 >
>>97 > それは鯖設定によってどうとでもなる。
> AddType application/x-httpd-php .html
> とかね。
>
> お す す め で き な い が
57へー
echoとprint 負担がかかるのはどっち?
自鯖立てて拡張子(.html)でPHPを動かしてるのですが、 これはやらない方がよいでしょうか? # 自分しか使ってないので負荷がかかるのは良いですが、 # セキュリティ面ではどうなのでしょう・・ --- FreeBSD 4.8RE + Apache 1.3.27 + PHP 4.3.3
>>103 PHP スクリプト以外の HTML も parse の対象になるので、負荷が高くなるというのと、
php.ini で short_open_tag = On になっていると、<?xml で始まる xhtml 文書などは
parser error になるので注意する必要があるくらい。
もし、拡張子 html で PHP を動かすように設定しているのが、サーバに PHP が入って
いることを隠すのが目的なら、php.ini で expose_php = Off にしておかないと、
HTTP ヘッダを見ると、PHP が入っているのが分かってしまうので注意。
サーバで PHP が動いているのを隠すのが目的なら、apache の httpd.conf でもサーバ
情報を出さないように設定しておかないと意味がないけど。
ServerTokens OS
106 :
nobodyさん :03/09/02 18:47 ID:JNv1JGve
PHPでPDFを使いたいと思っています。ここを見て→
http://php.planetmirror.com/manual/ja/ref.fdf.php 下記に書いた作業をしましたが、FDFファイルが作成されません。
どうしたら使えるようになるでしょうか?
やったことは、まずサイトから fdftkv5.tar.gz をダウンロードし、
libfdftk.so を/usr/local/lib/に fdftk.h を/usr/local/include/に格納しました。
PHPを下記の引数で再コンパイルしました。
./configure --without-mysql --with-pgsql=/usr/local/pgsql \
--with-apxs=/usr/bin/apxs --with-fdftk --enable-zend-multibyte \
--enable-mbstring --enable-mbstr-enc-trans --enable-mbregex
問題のソース(FDFファイルが作成されません)
<?php
$outfdf = fdf_create();
fdf_set_value($outfdf, "status", $status, 0);
print(fdf_get_file("
http:/soc/simple.pdf ");
fdf_set_file($outfdf, "
http:/soc/simple.pdf ");
fdf_save($outfdf, "simple.fdf");
fdf_close($outfdf);
Header("Content-type: application/vnd.fdf");
$fp = fopen("simple.fdf", "r"); //ここでファイルが見つからないとエラーになる。
fpassthru($fp);
unlink("simple.fdf");
?>
環境は下記の通りです。
Debian 3.0 rev 1 Apache 1.3.26
PostgreSQL7.3.3 PHP4.3.2
107 :
nobodyさん :03/09/02 18:54 ID:JNv1JGve
106です。長文すみません。 上記、ソース内の2行目はコピペミスです。この行はコメントアウトになってます。 Forms Data Format 関数の情報があまりみつけられなかったので、 詳しいURL等ありましたら、一緒によろしくお願いします。
108 :
103 :03/09/02 19:02 ID:???
>>104 レスサンクスです。
勉強になりました。
$weekday = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); という配列を作った。 この配列は、この内容のままで変更されることはない。 しかしローカル変数だと毎回設定しなくてはならず、非効率的だ。 そこで、効率よくするためにはどうするか? 案1: 定数にする。 → PHPでは配列を定数にすることができないので却下。 案2: スーパーグローバル変数にする。 → やり方がわからん。どうやるの? いいアイデアあればおしえてくれ。
>>101 前にechoとprintの仕様が違うの
で調べたとき、内部的にも違ってた気がする。
で、気になった仕様の違いが...思い出せないので
あるいは全部気のせいだったかもしれぬ。
あぼーん
112 :
nobodyさん :03/09/02 21:51 ID:unZ7m5QL
環境はphp4 + MySQLです。 質問なのですが、データベース中に該当するレコードがあるかどうかわからないため あるとき→update ないとき→insert したいのです。 無いこと前提でupdateし、失敗したらinsertしようと思ったのですが、 無くてもupdateは成功するみたいで(どのレコードも変更されないが、失敗はしない) うまくいきません。 単純に 存在するかどうか調べて、分岐させるしかないのでしょうか? それだとある場合もない場合も2回クエリを発行しなきゃいけないわけで、あまり効率のいいやり方とは思えません。 どなたか、スマートなやり方を教えてください。
書き込むテーブルにユニークキーがあるなら先にINSERTしてみるとか
114 :
nobodyさん :03/09/02 22:53 ID:unZ7m5QL
>>113 残念ながらユニークであることが保障されているキーはありません...。
出入りが激しいテーブルなので、ユニークにしても抜けている箇所がある
可能性があります。たまたまそこにinsertしてしまったらアウト。
それでUPDATEでピンポイントに1件だけ変更できるの? そういう目的では無いのか・・・
ま、もう寝るから書くだけ書いちゃうけど UPDATEに複数のフィールドを使って検索してるなら それらを使って複合キーを作って、INSERT→UPDATEするなあ 目的に全然あってなかったら忘れてくれ
>UPDATEの人 mysql_affected_rows()は?
119 :
nobodyさん :03/09/03 01:57 ID:7BGOwnnf
>>117 $GLOBALS['varname'] = array(...);
でいいのかな?
やってみたけど、スーパーグローバルにならないぞ。
<html><body>
<?php
$GLOBALS['count'] += 1;
echo $GLOBALS['count'], "\n";
?>
</body></html>
このスクリプトを複数回呼び出しても、表示は1でかわらん。
ということは、スーパーグローバルになってないということだよね?
もしかしてCGIになってるのかな?
>>109 >>120 いまいち何がやりたいのかワカラン。
ちなみに、auto_append_fileというのもある。
>>121 説明が悪かったかな。
PHPのローカル変数って、PHPスクリプトを実行するたびに
初期化されるやん?そうではなくて、いわゆる(他の言語に
おける)グローバル変数のように、そのプロセスで一回だけ
初期化され、あとは(プロセスが同じであれば)PHPスクリ
プトを何度実行してもクリアされない変数が使いたい。
イメージは、Javaのクラス変数、Rubyのグローバル変数。
ここまで書いて思ったのだが、PHPの「グローバル変数」とか
「スーパーグローバル変数」ってのは単にスコープだけの問題で
あって実体はローカル変数とかわんないのかな。
おいらが求めているのは実はstatic変数なのかな。
ちょっと実験してみる。
123 :
106 :03/09/03 09:56 ID:9+6DUNbu
>>117 すみません。
>>106 でのエラーは下記の通りです。
Warning: fopen(simple.fdf): failed to open stream: No such file or directory in /home/****/public_html/pdf_test.php on line 9
Warning: fpassthru(): supplied argument is not a valid stream resource in /home/****/public_html/pdf_test.php on line 10
Warning: unlink(simple.fdf): No such file or directory in /home/****/public_html/pdf_test.php on line 11
9行目以降でファイルがないといっているのは、その前の段階でfdfファイルが作成されていないからです。
これ以外のエラーは出ていません。
よろしくお願いします。
>>122 staticでも無理だろ。
.htaccessでSetEnvで設定して、$_ENVで取り出すのはどうよ。
借鯖と実験鯖ではDBに接続するDSNが違うので、
俺は.htaccessで環境変数としてDSNを設定している。
>>123 そのまんま通したら作成されたが
パーミッションは問題ないか?
126 :
106 :03/09/03 12:00 ID:9+6DUNbu
>>125 さん、テストしてくださってありがとうございます。
ファイルは全てクライアント側からFTPでアップロードしているので
パーミッションは特にいじっていませんでした。
他のPHPソースは問題なく動きます。
ためしに、元のPDFファイルを777に変更してみましたが結果は同じでした。
また
/usr/local/lib/に格納したlibfdftk.so や
/usr/local/include/に格納したfdftk.h のファイルについても
何か権限の設定が必要でしょうか?
他に格納されている *.soや *.hと同じ権限になっていました。
fdftk.hは/usr/local/include/php/にも格納してみましたが、変わりませんでした。
106やここで記載した以外の設定は何もしていないのですが、
何か間違っていたり、足りなかったりしていませんでしょうか?
よろしくお願いします。
元のPDFファイルって何? ファイルを作成するには、そのファイルを置くディレクトリに wがついて無いとできないよ。 もしsuEXECとか無いんだったらファイルを作成するディレクトリを 707にしてみたら? (phpを置くディレクトリにオーナー以外書き込み権入れるのはよろしくないが)
128 :
106 :03/09/03 12:36 ID:???
>>127 さん、ありがとうございます!!
元のPDFファイルというのは、FDF作成元のPDFファイルと言う意味で書きました。
判りにくくてすみません。
> ファイルを作成するには、そのファイルを置くディレクトリにwがついて無いとできないよ
wというのは、権限の事ですね。カレントディレクトリの中に作成するようにしていた
ので下位ディレクトリを作成して、権限を707にしてみました。
これでPDFにデータが入った形で表示できるようになりました。
感激です。(つД`)
今週冒頭からずうっと悩んでいたのです。
本当にありがとうございました!
129 :
106 :03/09/03 12:42 ID:???
ついでに
>>106 に掲載したソースが違っていたようなので修正しました。
FDFの情報はあまり多くないので、今後のために整理して掲載しておきます。
■FDFのインストールと設定(詳細は
http://php.planetmirror.com/manual/ja/ref.fdf.php )
・fdftkv5.tar.gz をダウンロードし、libfdftk.so を/usr/local/lib/に
fdftk.h を/usr/local/include/に格納
・PHPに--with-fdftkをつけて再コンパイル。
・表示させるPDFを元にデータを格納するFDFファイル作成ディレクトリの権限に
書き込み権限が必要。
<?php
$outfdf = fdf_create();
fdf_set_encoding($outfdf,"Shift-JIS");
# フィールドの値を設定する
$text = "abc";
$status = "aaa";
fdf_set_value($outfdf, "text", $text, 0);
fdf_set_value($outfdf, "status", $status, 0);
# /F キー(オリジナルPDFファイルとパス)の値を設定する
fdf_set_file($outfdf, "
http://www.hogehoge.co.jp/~hoge/soc/simple.pdf ");
fdf_save($outfdf, "soc/simple.fdf");
fdf_close($outfdf);
Header("Content-type: application/vnd.fdf");
$fp = fopen("soc/simple.fdf", "r");
fpassthru($fp);
unlink("soc/simple.fdf");
?>
130 :
127 :03/09/03 14:35 ID:???
そういや、cgiモードでも無い限りphpでsuEXECを気にする事は無かったな・・・
phpでディレクトリ作ると所有者がapacheさんになるのは防げないのですが。
か?
133 :
nobodyさん :03/09/03 16:29 ID:cO5L0j/l
00.txt 01.txt 02.txt というファイルの中身を読みとり、 結合させたいと思うのですが、どうやればいいのでしょう? 00.txt あいうえお かきくけこ 01.txt さしすせそ なにぬねの 02.txt はひふへほ all.txt というファイルにして出力したい。 まみむめも
もう半日中悩んでおります。 fgets()で読むとスンナリいくんですけど、 file()で読むと二重改行みたいな感じになってしまいます。 $arr = file('text.dat'); $fp = fopen('text.dat', 'w'); fputs($fp, implode('', $arr)); ↑これをやると綺麗に並んでたtext.datが一行跳びに並びます。 なんででしょうか?
>>134 読むときに改行の扱いをどうするかの違いだな
text.datはどうやって用意した?Winで作ってftpする場合、
バイナリモードだと、crとlfがつくのでそういう状態になる、こともある
>>131-132 防げません。モジュールで動作しているものはユーザーの
切り替わるチャンスがありません。
別にディレクトリを作るプログラムを置き、それを
オーナー自分のままsビット立てておいてphpから
system等で実行すれば不可能ではないが・・・
>>133 どうやって書くかによるけど、例えば fopen のモードで、'a' を指定すれば追加できます。
>>136 レスありがとう。
phpでディレクトリ作ってそのパーミッションが777でも、その中にphpでファイルアップロードできないんですけど。
所有者がapacheのディレクトリにapacheがそのディレクトリにファイルを移動させたりするのは無理なんですか?
そもそも、apacheサーバーのphpプログラムはapacheが動かしたことになってるんですか?
そうだったらアップロードできるような・・・。
ん〜?
139 :
133 :03/09/03 17:11 ID:cO5L0j/l
しまった、書き方間違えた┐(´д`)┌
00.txt
あいうえお
かきくけこ
01.txt
さしすせそ
なにぬねの
02.txt
はひふへほ
まみむめも
all.txt というファイルにして出力したい。
でした。
>>137 fopenのaを指定するとポインタを最後に持ってこれるというのはわかるのですが
00.txtの内容を変数(配列?)に入れて、っていうのが分からないのです。
一行ずつなら読み込めるのですが…。
>>138 そもそも 777 で制限されるものは無いはずだし
できるはずだけどな。ずっとphpで通してるなら700でもいいくらい
141 :
134 :03/09/03 17:18 ID:???
>>135 全てwinのローカル環境でやっておりました。
cr+lfで作成したtext.datをこの環境でやるとcrになって一行跳びに表示
↓
unixサーバへftpして実行してみました。
何の問題もなくスンナリ綺麗に並びました。
うぅぅ・・・
何でこうなるのかよくわかってませんががありがとうございました。
>>139 1行ずつ読んでもいいし、fileでもいいけど、
行単位で扱う必要がないのであれば
filesize で大きさを調べて、fread で読み込めばいいんでないか
そのままfwriteに持ってけるし
143 :
134 :03/09/03 17:35 ID:???
>>139 file()だったら↓こんな感じかな(file()はメモリ喰うから必要なければ・・・)
$arr00 = file('00.txt');
$arr01 = file('01.txt');
$arrall = array_merge($arr00, $arr01);
$fp = fopen('text.dat', 'w');
fputs($fp, implode('', $arrall));
>>142 ありがとです!出来ました。
>>143 file()の方でも出来るんですね。メモリ食うらしいので、実験のみにしておきます(w
145 :
138 :03/09/03 18:13 ID:???
プログラム作ってみました。 パーミッションの関係ないwin鯖(自鯖)ならちゃんと動きましたが。 linux鯖(xrea)ではディレクトリ(パーミッション777)が生成されるだけでアップロードは無理でした。 コピーとムーブで両方で試してみましたがどちらも失敗しました。 これを可能にする方法はないんですか? そうだと自動生成していくプログラムは作れなくなってしまいますね・・・。 長文失礼しました。 <?php if ( is_uploaded_file ( $_FILES['file']['tmp_name'] ) ) { $tmp = $_FILES['file']['tmp_name']; $name = $_FILES['file']['name']; $dir = "a"; $mask = umask(); mkdir ( $dir, 0777 ); umask($mask); copy ( $tmp, $dir . "/copy_" . $name ); move_uploaded_file ( $tmp, $dir . "/move_" . $name ); if ( !is_dir ( $dir ) ) { echo "ディレクトリ生成に失敗しています。"; } else if ( !is_file ( $dir . "/copy_" . $name ) ) { echo "ファイルアップロード(copy)に失敗しています。"; } else if ( !is_file ( $dir . "/move_" . $name ) ) { echo "ファイルアップロード(move)に失敗しています。"; } else { echo "無問題"; } } ?> <form method="POST" enctype="multipart/form-data"> <input name="file" type="file"> <input type="submit"> </form>
146 :
nobodyさん :03/09/03 18:21 ID:GgqmqZ94
>>145 safe modeのせいだと思う。
safe modeがonだとスクリプトの所有者とディレクトリの所有者が同じでないとだめじゃなかったかな。
あぼーん
つーか、ディレクトリを作るにもその場所のパーミッションが きいてくるんだけど、777 で作れたの?
149 :
138 :03/09/03 18:35 ID:???
すみません、説明がたりませんでした。 その場所のパーミッションも777です。
Solaris9、Apache2.0.47、php4.3.2 で
707 のディレクトリに、
>>145 のphp置いたら動作した
オーナーがnobody になるんであとで消すのはやっかいだなw
すみません間違いがありました。 6行目を「$mask = umask();」から「$mask = umask(0);」に変えてください。
152 :
150 :03/09/03 18:45 ID:???
>>151 それはかえた。
まあ最初そのまま動かしたら、ディレクトリが 755 になるだけで
動作に支障はなかったけど。
コマンドからファイル消せなかったけどね
>>146 サーバーが無料レンタルサーバーでphp.iniをいじれないのからsafe modeは変えられないんです。
>>152 >>150 で言ってた通りにやってみましたが、無理でした。
こちらの環境(xrea)だとプログラムの置かれたディレクトリのパーミッションの最後の数字が7じゃないと、ディレクトリ生成もアップロードもできませんでした。
xreaでは無理なのでしょうか・・・。
154 :
150 :03/09/03 19:00 ID:???
safe mode( safe_mode = On 以外デフォルトのまま) にしたら ディレクトリも作れなかったよ 事前に自分で a を作成して707 にしたら無問題でした
155 :
150 :03/09/03 19:08 ID:???
作成するディレクトリの、親ディレクトリとphpファイルの 両方が実行ユーザーと同じだとsafe mode でも成功しました suEXEC環境でなければ、cgi使って事前に1つディレクトリを 掘っておけば何とかなりそうではあるが
ディレクトリのパーミッションをxx7 にする phpでその下にディレクトリを作成 phpを使ってphpファイルをアップロードする その最後に送ったphpファイルならphpで作ったディレクトリの下に ディレクトリ作れそうだな。safe mode をどこまで設定してるかにもよるかな?
ファイルの所有者を変更するchown()って関数があるけどroot権限がないと
変更できないっぽいんでmkdirの時点でもうアウトなのかも・・
>>150 さんの言うようにCGIで作るか、予め作っておくぐらいしか方法がないかな?
んー、phpでphpファイルを送ればそのphpファイルのオーナーはapacheと 同じになるはずなんで、それを使えばいけるんでないか?と思ってるんだけど
160 :
134 :03/09/03 20:48 ID:???
自己レス fopenの時、'w'ではなく'wb'にするとwin環境でもちゃんと並んだ。 知らなかった・・・。そんなこんなで○一日つぶれちゃった。
161 :
138 :03/09/03 22:04 ID:???
chown試してみましたけどやっぱり動きませんでした。 cgiつかうのは・・・できるだけphpだけでやっていきたいですね。 phpプログラムでphpプログラム生成して所有者を同じにするんんですよね。 ん〜移動もコピーも受け付けないとなるとどうすればいいんでしょう。 fopenのファイルが無かったらファイルを作ってくれるやつでいけるかな。 また、試してみますね。
>>145 のやつだけでいけますって
実行するディレクトリをA、145のphoを145.phpとすると、
145.phpはaというディレクトリ作成後ファイルのコピー先を
作ったディレクトリの上(A)にしておく
Aを707にして145.phpを転送し、
145.phpのディレクトリ作成先をaの下にした145-2.phpを作り
サーバの145.phpを使って送信する
あとはAを701に戻し145-2.phpを実行するだけ
うちの環境ではできたけど、他の環境で実行できるかはやってみないとわからん
163 :
599 :03/09/03 23:55 ID:Lk+ATmhr
TurboLinux7でphpを使うにゃどーしたらいいんすかねえ。 APATCHは動いてます。
PHP + mysqlです.というかmysqlです. 最新のレコードX件を残して、それ以外を全部deleteしたいのです。 一応ぐぐってみたのですが、古いものX件を削除するというのはあっても 私が望むようなものは見つかりませんでした。 1.レコードの数が何個あるか取ってくる 2.古い順にソートしてlimit 全体の数-Xで削除 というのは思いつきますが、これではどう考えても効率が悪そうなわけで・・・。 あとdeleteとorder byとlimitってmysqlで併用できますか? delete from hogehoge where name = '俺' order by カキコ時間 limit 10; とやってもエラー吐くんですが何か間違えてますか? どなたか教えてください。
DELETEにORDER BY や LIMITは意味を持ちません もうちょっと別の方法で絞り込まないと無理です
>エラー吐くんですが なぜ教えて君はエラーコピペも出来ないのか、小一時間考えたい…
“古いものX件を削除”←これのやりかたなんてあった? これができれば最新のX件を残して削除もできるはずだが おれには簡単にやる方法は思いつかないなあ(何通りかは思いつくけど、簡単ではない)
170 :
599 :03/09/04 00:34 ID:l9Hbw8Bd
>164 嘘つけ
>>167 そうか、スマンカッタ。
でも
you have an error in your SQL syntax near 'order by カキコ時間 limi' at line 1
としか言ってこないし。こんなんでもいいんかい?
>>168 MySQL のDELETE構文のLIMITは、分割削除のためにあるので
SELECTで使うLIMITと同じように考えてるとやけどするよ
>>172 手入力じゃなくてphpで消すんだよね?
普通に考えたら、ソートして最新から10件取り出し、
10件目の書き込み時刻より古いものをDELETEってなると思う
10件じゃねーや、X件か
>>171 limi じゃそりゃsyntax errorだわな
>>172 もしそれができるなら、ORDER BY xxx DESC ってやれば順番が逆になるので使える
しかしできるのかこれ
調べてみたが、今まで出てきたやつはバージョン4以上で追加らしい MySQLのバージョンは?
>>174 なるほど・・・。
どうしても無理なら1時間以上前のレコードは問答無用で削除でもいいんですけどね_| ̄|○
>>176 typoです・・・
>>179 3.23でした。調べたら4がもう出てるんですね。
安定しているようならインスコしてさっきの使ってみます。
181 :
nobodyさん :03/09/04 01:46 ID:wD/9gEl4
大きな?PHPスクリプトのソースをじっくり読んでみたいと 思ってるんですが、オススメのものありますか? PHPBB,XOOPS,e-XOOPSこの中から選ぶとしたらどれが 勉強に最適ですかね?
解決しました。4.0.14にバージョンアップしたら delete from hogehoge where name = '俺' order by カキコ時間 limit 10; が効きました。 とりあえずありがとうございます。 で、本題?なのですが、新しいのを10個残してそれ以外を全部削除するにはどうすればよいのでしょうか?
>>182 カキコする前にもう少し考えてみたら?もう十分情報は集まったでしょ?
184 :
nobodyさん :03/09/04 04:35 ID:tn8/En5p
$con = pg_connect("dbname=hoge") or die ("接続失敗"); $sql = "INSERT INTO diary VALUES('" . $daydate . "','" . $month_num . "','" . $today_day . "','" . $_POST['kind'] . "','" . $_POST['message'] . "')"; //固有ナンバー,月,月日,ジャンル,内容 @$result = pg_query($sql) or die ("書き込み失敗"); pg_free_result($result); pg_close(); こんな感じで接続してみたんですが、どうしても書き込み失敗してしまいます。 構文がどこか間違っているのでしょうか?
185 :
184 :03/09/04 04:45 ID:tn8/En5p
DBがEUC_JPなんですが、EUC_JPのコードで送ってないから書き込めないのかと 思い、色々と検索したんですが、ブラウザのフォーム上からEUC_JPのコードで 送るにはどうすればいいのでしょうか? とりあえず、フォームが表示されているページには <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=EUC_JP"> と入れたのですが、効果はなかったです。
186 :
184 :03/09/04 04:59 ID:???
ごめんなさい。スクリプト自体をEUCで書いていませんでした(´・ω・`)ショボーン
perlの~sを模したいのですが $str = "123421"; $pat[0] = "/12/"; $rep[0] = "21"; $pat[1] = "/21/"; $rep[1] = "44"; #213444 になってほしい echo preg_replace($pat,$rep,$str); #443444 になってしまい、置換した値がさらに置換されてしまってこまっています。 何かいい解決法ないですか・・・?
188 :
nobodyさん :03/09/04 05:23 ID:kT0o4tyK
>>184 set names 'SJIS' を送れば解決 フォームからSJISで送ってもOK
ただしエンジンに微量の負荷はかかる
>>124 文字列とか数値じゃなくて、2次元配列のような複雑なデータを
使いたいんだ。だから環境変数じゃだめじゃないかな。
例えばエラーメッセージを外部ファイルに書いておき、PHPスク
リプトから読み込んで配列にしまっておくとしよう。
こんな作業をPHPスクリプトを実行するたびにやっていては実行
速度が大幅に低下しちまう。
そこで、ファイルを読み込んで配列を作っちまったら、その
データを(そのプロセスから実行される)PHPスクリプト全体で
共有したいのよ。
Javaならクラス変数、Rubyならグローバル変数に設定すればい
いんだけど、PHPではそういう方法がないようだ。
phpは他のライブラリの例にならって ソース書き換えてコンパイルしてしまえw
osCommerce はどうよ?
>>189 $error = array( ... );
function test()
{
print_r( $GLOBALS['error'] );
}
のような感じ?
$error を別ファイルで定義して、require / include して、
どこかの関数から呼び出すようなことも可能だが。
function()とかを使うと、grobalを使わないと、外部の変数を参照できませんよね。 外部変数がたくさんあっても、いちいちgrobalを使わないといけないのですか? あと、defineのメリットってなんでしょう?変数で事足りる気がするのですが。
だから外部変数をたくさん必要とするようなプログラム書くなっつーの
>>195 global使わんでも,$GLOBAL['変数名']でアクセスすれば
どっからでも使える。
ローカル変数とグローバル変数を一目で区別出来るように
globalは使わない。
てか、グローバル変数を参照するような関数書いてンじゃねーよ。
定数は、再定義が出来ないので、コーディング上の
ミスを防げる。
(定数として使いたい変数に間違って代入したりとか)
まぁ、bugなしのコードが書けるってんだったら、
あんたには不要かもな。
つかglobal使いすぎるとわけわかんなくなるし。 perlに慣れた人には違和感感じるかもしれないけど、変数はきっちり区切っておかないと後で大変なことになる。 3年後にそのプログラムを見て、この変数がどこでどう使われていたか覚えている自信があるか? 漏れは$GLOBALにしてもバージョン情報やプログラム名、ファイルのパスぐらいにしか使わない。
$GLOBALってどうやって定義するのん?
singletonとかのクラスインスタンス作るときにGLOBAL使わなきゃいけないのが煩雑だ。 なんとかならんのかのう。
$GLOBALS ではないのか・・・。
>>200 static では駄目なのか?
202 :
201 :03/09/04 20:14 ID:???
スクリプトを1秒に何度も起動されない方法で簡単なものはないでしょうか? 今は、起動のたびにホストと時間を記録するファイルを読んだり書いたりしてます。 もっと良い方法があったら教えてください。
そりゃ本末転倒だべさ
$t = floor((microtime()+500)/1000)*1000; if($t > microtime()) exit; ってのはどうよ?
おいおい、質問者の目的から離れてないか?
>>194 ちょっと違うかな。
その例でいえば、配列$errorの生成には結構なコストがかかるんだけど
でも一度生成してしまえば内容を変更することがない、という場面を
想定している。
PHPはCGIではないから、同じプロセスで実行されるPHPスクリプト間で
その配列$errorを共有できるんじゃないかなー、その方法を教えてくれ、
という質問。
今はその方法がわからんから、PHPスクリプトが実行されるたびにその
配列を生成しなければならず、効率が悪いんだ。
(配列$errorを生成するコードを別ファイルにしてrequire_onceとかで
読み込むようにしても、毎回生成される点はかわんないよね?)
Javaならクラス変数に設定すればいいし、Rubyならグローバル変数にすれば
そういうことができるんだけど。
(Rubyでいう「グローバル変数」はPHPと違って、同じプロセスであれば
スクリプト間で共有できるので便利。それが問題になることもあるけど。)
209 :
203 :03/09/04 23:48 ID:???
>>206 $tが 0 になって全部止まるんですが。
質問が悪かったらすいません。
プログラムの中にaaa.php?bbb=ccc&ddd=eeeというリンクが何十個かあります。
普通の人は、一つずつリンクを押すのですが、たまにページ内のリンクを一気に
押す奴がいるんです。1秒に10リンクぐらい。それを数十分間やられてアクセス
できなくなるんです。
http://news2.2ch.net/newsplus/subback.html ここにあるリンクを全部一度に
押されるみたいな状態です。
212 :
203 :03/09/05 01:35 ID:???
>>211 早く気付いたらそうしてますけど、毎度ftpもできない高負荷になって
から気付くので無理なんですよ。それにいつも別のプロバイダーです。
色々な板を見ましたけど、自動巡回ソフトだと思います。
ip見たらネイバーのロボットもきてました。
今はこんなので、手動でブラウザいくつも開いてアクセスすると
止まりますけどツールで一度にやられた時がどうなるのか
わからなくて。flockも違うような。
$log="time.txt";
$ip = $REMOTE_ADDR;
$time = time();
$fp = fopen($log, 'r+');
flock($fp, LOCK_EX);
while (!feof($fp)) {
$buf = fgets($fp, 32);
list($ad,$t,) = explode(',', $buf);
if ($ip == $ad && $time - $t < 3) exit;
}
$new = "$ip,$time";
fputs($fp,$new);
flock($fp, LOCK_UN);
fclose($fp);
1つ止めたって次から次へとリクエスト来るんだから意味無いんじゃないか? それより各ページに画像兼用とかCGI呼び出すようにしといて 同一IPが一定時間に一定回数アクセスしてきたら.htaccessのdenyにいれちまうのはどう? どっかでBerryよけの手段として書いてあった方法
214 :
203 :03/09/05 02:29 ID:???
.htaccess は後始末も必要だけどな セマフォ、、、つかflockでもいいんでない? $ip の名前でファイル作ってロックすれば、同一ipの同時アクセスは待たされる ロックする直前に対象ファイルがあったら問答無用でsleepするとか
216 :
nobodyさん :03/09/05 17:36 ID:lSHCmSpH
今回PHP4.3.2から4.3.3にバージョンを上げたのですが 文字化けするようになってしまいました。 具体的には Formから入力された項目をmb_send_mailでメール送信するプログラムなのですが 届いたメールが文字化けするようになってしまいました。 インストール時のconfigureオプションはMySQLのオプションを追加しただけで 前バージョンのインストール時と変わらないです。 ./configure --enable-mbstring --enable-mbregex --with-gd --with-apxs=/usr/local/apache/bin/apxs --enable-zend-multibyte --with-zlib-dir=/usr 環境 TurboLinux 6.5Server + Apache1.3.8 + MySQL
>>216 php.ini の mb_ 関連の設定の影響が変わっているハズ。 PHP-users に流れていたかもしれん。
明示的に指定しているかどうかを中心にちょっと試行錯誤してみそ。
218 :
217 :03/09/05 18:30 ID:???
PHP-users じゃなくて /.J だったかも。色々調べてみれ。
Windows でディレクトリ内をパースしてファイル名を取得し、is_dir で判定を行うと失敗するのでつが、、 何が間違っているのか、教えて (´・ω・`) 欲すい Windows XP, PHP 4.3.2(cli) 再現コード -- $dir_handle = opendir($dir_name); while ($obj = readdir($dir_handle)) { if (is_dir($obj)) { print "dir: $obj \n"; } else { print "others: $obj \n"; } } closedir($dir_handle); -- 結果 -- dir: . dir: .. others: class others: crawl.html others: img others: index.html others: info.php cf) 実際は class, img はディレクトリ
>>216 php.ini で
mbstring.language = Japanese
これを入れたら解決した。同様の報告も数件。
>>219 is_dir()の引数に調べてるディレクトリのパスも必要でないんかい?
222 :
219 :03/09/05 18:55 ID:???
スマソ、、スクリプトとディレクトリの相対の位置関係を忘れてた、、 is_dir の引数は $obj (パースしたディレクトリの中身) じゃなくて ディレクトリへのパス + $obj つー事で解決しますた。スレ汚しスマソ。
>>221 あう、222 入れてから気が付きますた。回答入れてくれてありがとう。
Aというフォルダ内にあるファイルの数を数えて、その数字を表示したい。 ただし、ファイル名の頭に0が付いているファイルだけを集計したい。 こういう場合、どうすればいい?
225 :
nobodyさん :03/09/05 21:16 ID:RcJuiEiX
初心者ですみません。 今日PHPインストールしたのですが 日本語が表示できません。 httpdはApacheです。 OSはwindows2000です。 ご教授お願いします。
226 :
:03/09/05 21:21 ID:???
>224 フォルダオープンしてwhileでエントリを取得しつつ、 正規表現でで^0.+にマッチしてファイルなら集計用の変数をインクリメントすればいいのでは。 >日本語が表示できません。 アホか。
227 :
nobodyさん :03/09/05 21:22 ID:oaz00CyG
phpのスクリプトでページ内にどのページが人気あるかみたいのを表示できる スクリプトない?リアルタイムで。
>>225 とりあえず
echo "テスト";
とやってみましょう
230 :
nobodyさん :03/09/05 21:39 ID:RcJuiEiX
EUCで保存してないだけでした。 228 229さんありがとうでした!
>>208 興味があったので少し調べてみたけど、確かに PHP では無理のような気がする。
include するよりも低いコストで処理できる可能性がありそうだったのは、
セマフォと共有メモリを使うくらいかな。
でも、配列を生成するコストを気にするほどなのであれば、APC などを使って、
スクリプトキャッシュを有効にするとか、他の方法を使って効率を上げた方が
いいと思う。
232 :
224 :03/09/05 22:00 ID:???
233 :
216 :03/09/05 22:59 ID:xPvsDOuD
>>217 ,220
ありがとう。週明けに作業に入ってみます。
Cookieが正しく取得できません。 エンコードもデコードも正常にできているのですが、 いざグローバル変数から取り出そうとすると、 どんな文字(MB文字は含まず)も「i」になってしまいます。 非常に低レベルな質問ですが、ご教授のほどよろしくお願いいたします。 <?php $hogeuser = $HTTP_COOKIE_VARS["hoge"]; //ヘッダ部 if($hogeuser != ""){ setcookie("hoge", "id=$hogeuser[id]&pass=$hogeuser[pass]", time() + 30 * 24 * 3600); } $cookie = $HTTP_POST_VARS["cookie"]; //ログインする時に「自動ログイン」にチェックを入れたら if($cookie != ""){ $id = $HTTP_POST_VARS["id"]; $pass = $HTTP_POST_VARS["pass"]; setcookie("hoge", "id=$id&pass=$pass", time() + 30 * 24 * 3600); } ?> <?php if($hogeuser != ""){ //読み込み部 $id = $hogeuser[id]; $pass = $hogeuser[pass]; } if($id != "" && $pass != ""){ print "ようこそ!" . $id . "さん"; } ?>
235 :
nobodyさん :03/09/06 10:28 ID:/pMlcvtg
サーバをapache1.3.28のバージョンでphpを5.0.0b1を使って作業をしてるのですが HPを見て最初のブラウザー表示をする作業までやってるのですが「ページが表示できません」としかでません apacheとphpのバージョンについては特に、これとこれじゃないと動かないという事はありませんよね? 具体的な質問はもう少し自分でやって出来なかったらしたいと思いますので この質問だけご回答お願いします
>>235 PHP以前に普通のhtmlは見れてるの。
237 :
nobodyさん :03/09/06 10:42 ID:/pMlcvtg
>>236 それも作成しないといけないのでしょうか?
僕はそれを作成していないのですが、それが原因という可能性も有りだとしたら作らないと駄目ですね?
>>234 >$hogeuser = $HTTP_COOKIE_VARS["hoge"];
最初がおかしい。
$hogeuserには"id=xxxxx&pass=xxxxx"が入るだけで連想配列にはならない。
連想配列にしたいなら、
$tmp1=explode("&",$HTTP_COOKIE_VARS["hoge"]);
foreach($tmp1 as $tmp2){
list($tmp3,$tmp4)=explode("=",$tmp2);
$hogeuser[$tmp3]=$tmp4;
}
とかね。
いつまでもcookieが変わらないのは、cookieがあるときにその値を再びcookieに設定してしまうからかと。
>>237 せめて
あなたの予想に反して、このページが見えているでしょうか?
ぐらいは表示させろ。
240 :
nobodyさん :03/09/06 10:56 ID:/pMlcvtg
>>239 すいません、前は表示出来ていたのですが
apache phpをいじってしまってそれを表示できなくなってしまったのです
僕が思ってる原因は、モジュール読み込みの作業で追加モジュールの名前がないせいでエラーが起きてると思うのですが
mod4_php.cが無いんですよね、普通にphp解凍したらあるものですよね?
>>240 apacheのエラーログ見れ。
> apache1.3.28のバージョンでphpを5.0.0b1
問題無いと思うよ。
>>231 なるほど、PHPの言語仕様じゃ無理だから、言語仕様を越えたところで
別の方法を使うということか。なるほどね。
しかし残念だな、PHP単体ではできないのが。
機能としてはわりとあってもよさそうだと思うんだけど。要求がないのかな?
243 :
nobodyさん :03/09/06 12:54 ID:/pMlcvtg
>>241 エラーの内容としては
Syntax error on line 240 of c:/program files/apache group/apache/conf/httpd.conf
:
Cannot add module via name 'mod_php4.c': not in list of loade modules
なんです。
これは、mod_php4.cが見つからないと言うことは分かるのですが、mod_php4が何処を探しても無いのでどうしようか
考えてるんです。
それとも他に間違いがあるのでしょうか?
>>243 「mod_php5.c」に変えれ。
正直、開発版であるPHP5に手を出す人間が、マニュアルオンリー
(最近はマニュアルですら怪しいのだが)で、その程度の検索能力なのはどうかと思うが。
Dev-MLの過去ログ探すのが一番だけど、Googleを日本語に限定しても見つかる程度のことよ、それ。
多分このまま色々関数使おうとすると他にも?というところが出てくるので、
今のうちに検索能力磨いといてください。
245 :
nobodyさん :03/09/06 14:22 ID:/pMlcvtg
>>244 それは、前に僕もやりましたが変わらずに、「Cannot add module via name 'mod_php5.c': not in list of loade modules」
となるんです。
説明を見て、ファイルやフォルダは入れる所に入れてやってみたのですが、いっこうに変わりません。
apacheを再起動させる際に、mod_php5.cというモジュールは無いという事を言われるわけですが何故なのでしょう。
その言葉通りに言うと”無い”となるわけですが。
243で言ったエラーで言うと全部を訳すと
240行目の作業をやったけど、エラー発生したよ
mod_php4.cという名前の物が無いから追加出来ないよ。
という意味合いになるのでしょうかね?
LoadModule php5_module libexec/httpd/libphp5.so とかとちがうん? こっちよりアパッチスレで聞いた方がいいような。 そんでたらい回しになるとか。
247 :
nobodyさん :03/09/06 14:31 ID:/pMlcvtg
そうですか、こっちで聞くよりもアパッチスレの方がもしかしたら僕と同じ症状の人がいるかもしれませんね。 いえ、エラーは最初に述べたエラーでした。 最初の作業が間違っていて凄く見つけにくいエラーとかなのかもしれませんね。 質問に乗ってくれてありがとうございました
>>247 httpd.confは、最低2行追加が必要だが、
1ヶ所しかしてないっしょ。
マニュアルのインストールの項を一言一句
違えず写経してみな。
>>247 まだいるかな?
モジュール版PHPの場合、libphp5.soを読み込めなかったときに
"mod_php5.cが云々"のエラーが出るのでつよ。
247さんも言ってくれてるけどAddTypeも忘れずにね。
あとマニュアルを音読。黙読じゃなくて、声に出して嫁。
250 :
234 :03/09/06 16:01 ID:???
>>238 レスありがとうございます。
無事解決いたしました。
…それにしても、私の持っている3冊のリファレンス本には、
$HTTP_COOKIE_VARSで連想配列に格納されると書かれていたのには困ったもんです。
それとも、私の読解力不足かな?
ともあれ、ご親切にありがとうございました。
251 :
nobodyさん :03/09/06 16:08 ID:lKlaMXu1
現在PHP4.3.2を使用しているのですが、 ページを自動転送する際に header() 関数を利用しているのですが、 どうもapache(ver1.3.27)にどこから転送されてきたのかのログの履歴が残らないみたいです。 なんとか転送元の履歴を残す方法ってないでしょうか?
>>250 setcookie()する時にクッキー名を配列で書けば、受信した時に配列にセットされるよ。
例のやつだと、
setcookie("hoge[id]",〜);
setcookie("hoge[pass]",〜);
って感じ。
php.netのマニュアルのクッキーの章のファイル名が、
features.Crackers.php になっとる(w 誰かのいたずらだろうか?
254 :
nobodyさん :03/09/06 18:49 ID:VJAICQgv
MySQLの日付型「2003-09-06 18:50:00」 というのを03/09/06 18:50とか他の形とかに変換したいので sprintfについて調べていますが、よく分かりません。 どういう形で投げ込んだらいいでしょうか?
簡単なPHP配布してるとこないですか? 一度じっくり理解できる範囲で中身を見てみたいので
256 :
254 :03/09/06 19:20 ID:???
頑張って自己解決しました。sscanf()がいいようですね。
257 :
nobodyさん :03/09/06 19:36 ID:/+pHJ5vA
>>254 そりゃ、sscanf()でもいいけど、
別解としては
・strtotime()で Unixタイムスタンプを取得して、date()とか
・SQL的にほしい形を指定しておく( SELECT DATE_FORMAT(date, '%y/%m/%d %H:%i:%S') )とか
>>255 入門書買った方が良いよ。
俺も少し前まで君みたいな存在でネット中探し回っていくらか勉強できたが、
入門書を買ったら上達速度がかなりアップした。
入門は本で、その後のステップアップやリファレンス的なものはネットが重宝するけどね。
259 :
250 :03/09/06 20:18 ID:???
>>253 へぇ〜(16へぇ)なるほど。
そういう手もあるんですね。
勉強になりました、ありがとうございます。
260 :
nobodyさん :03/09/06 23:07 ID:V2JcpQO6
phpのバージョンを、4.2.?(失念)から、4.3.0にし、 $HTTP_GET_VARS⇒$_GET、 $HTTP_POST_VARS⇒$_POST、 $HTTP_SERVER_VARS⇒$_SERVER に置換しました。 すると、あるスクリプトが、 (閲覧環境はWindowsXPです) IE6.0だと、「サーバーが見つからないか、DNS エラーです。」 ネスケ7.0だと「このドキュメントには、データが含まれていません。」 Opera7.11 だと、そのスクリプトへのリンクをクリックしても、「接続中」のまま、という状態です。 問題がどこにあるのか分からず、問題切り分けをしようとしているのですが、 ●<? phpinfo() ;?>とだけ書いた.php拡張子のファイルでは、正常に情報が表示されますので、phpは動いてる。 ●<? phpino() ;?>とだけ書いた.php拡張子のファイルは、 Fatal error: Call to undefined function: phpino() in /(中略)/test.php on line 1 と、エラーを表示してくれます。 (php.ini では、 error_reporting = E_ALL display_errors = On にしてますので) ●でも、問題のスクリプトは、前述のように、phpからはエラーが表示されません。 こういう場合、いったい、どこら辺から疑っていけばいいのでしょうか? なお、問題のスクリプトは、postgresに接続しています。 その辺も含めて一通りスクリプトを見直しているのですが、手がかりが見つからず・・・ どなたかヒントやポインタだけでもいいので、教えていただければ幸いです。
261 :
258 :03/09/06 23:11 ID:V2JcpQO6
なお、共有サーバですが、VPSとかいう仕組みで、httpd.confなどをいじれる、仮想的なルート権限を持っています。
というか、Rapidsite社のVPSプランというやつです⇒
http://vps.rapidsite.jp/ サーバのOSは、FreeBSD 4.4です。
>>260 エラーは無いけど、出力がない状態かな?
263 :
260 :03/09/06 23:25 ID:V2JcpQO6
(OpenJane上で番号がずれてしまってまして、
>>261 の名前欄に258と書いてしまいましたが、
>>260 =
>>261 = このレス です)
>>262 そうですね。
でも、仮に、
「<? ?>」 とだけ書いたphpファイルを置いたら、
空白ページが表示されるだけなんですよね・・・(これ自体は、当たり前かとは思いますが)
これと、問題のスクリプトとの。挙動の違いが分からず・・・
>>263 空白ページと言っても、画面上に表示されるものの他に
サーバからは Content-type: text/htmlとかいろいろ流れてきてます。
>>262 が言いたいのは そういうのも一切出力されてないってことかな。
IEの方のエラーが気になるなぁ...
サーバのログや HTTPのステータスコードを見たりできないの?
265 :
nobodyさん :03/09/06 23:50 ID:yF8GU03n
GDがphpinfoに表示されません(;;) Windows XPでapache1.3.27のサーバでPHP4.3.1を入れています。 「php_gd.dll」をC:/WINDOWS/systemにコピー、「extension=php_gd.dll」の;もはずしています。 他に何かやることってあるんでしょうか? 調べてもこんな事で引っかかってる人なんかいないみたいで、ぜんぜん分かりません。 よろしくお願いします。
>>265 うちはphp_gd2.dllをWINDOWSにいれてるが
>「php_gd.dll」をC:/WINDOWS/systemにコピー が変。php.iniのextension_dirディレクティブを適切なものに設定する。 あとPHP4.3系からGDはGD2の方がバンドルされてなかったっけ? 4.3.1は両方だったかもしれんが、GD2で支障がないのなら、 今後のことを考えて2に移行しておいた方が良いと思う。
268 :
260 :03/09/07 02:23 ID:NNJKliPY
あ、そりゃそうだ。。。とおもってApacheのエラーログみました。 [Sun Sep 7 02:17:44 2003] [notice] child pid 13634 exit signal Segmentation fault (11) だそうです。。。
269 :
260 :03/09/07 02:27 ID:NNJKliPY
>>269 PHP本体が落ちちゃってるみたいですね。
apacheのエラーの内容は、phpかphpから呼び出されたライブラリの中で
なんかわかんないけどすっごいエラー起きたので実行するのを辞めた、ってことです。
そのせいで何も出力されずにブラウザの画面がエラーになる、っと。
スクリプトの問題じゃないので、$_*に変えただけではでない気もするしなぁ....
後ろ向きな解決法ですが、PHPをバージョンアップしてみてはどうでしょうか?
271 :
nobodyさん :03/09/07 09:30 ID:Ke95mWaO
>>249 そうなんですか、AddTypeは入れてたはずなんですよ、説明に乗ってたから
マニュアルってphpかapacheのやつってことでしょうか?
アパッチ板でも同じ事言われたんですが、これって英語ですよね?
日本語パッチがあるとか、翻訳している所が有るって事ですか?
272 :
:03/09/07 09:37 ID:???
apache板て。 SunやIBM、CERN、NCSAなどの立場は。
ブラウザから Accept-Encoding: gzip された時、出力を圧縮するにはどうすればいいのですか?
phpで圧縮するの?
マニュアルのどのあたりが飲み込めないとかこうやってもうまくいかなかったとかそういうのは。
>>272 IISの立場は。
じゃあ、AN HTTPDの立場は。
276 :
nobodyさん :03/09/07 16:18 ID:Hod360WF
p2(Mac)スレから誘導されてここに来ました。 konfabulatorのTVJPを大変重宝しているんですが、 phpで作った携帯でも見れるTVガイドみたいなもの はないでしょうか。 放映中、soon、映画、旅行などとジャンルを指定 しておけば、常にそれを呼び出すことができると いうものなのですが、どなたか既に作られた方は いらっしゃるでしょうか。
278 :
276 :03/09/07 21:52 ID:Hod360WF
MySQLで order by name とやると、'が,より上位にきてしまうのですが、これを,>'>a>b>... という優先順位に変えたいのですがいい方法はありませんか?
280 :
276 :03/09/07 22:00 ID:Hod360WF
281 :
nobodyさん :03/09/08 00:21 ID:BRjxKgTF
こんなの(trim関数のマルチバイト対応版)作ったんだけど、 strに全角スペースだけの文字列や空文字列を渡すと mb_ereg_replace() が FALSEを返してくるので実用になりません。 どこが間違ってるか分かる方教えて下さい。 環境は Linux + PHP4.3.3 + apache1.3.27です。 function mb_trim($str) { return mb_ereg_replace('^[ ]*(.*?)[ ]*$', "\\1", $str); }
282 :
281 :03/09/08 00:22 ID:BRjxKgTF
補足です。 []の中はどちらも全角スペース1個と半角スペース1個が並んでます。
^[ ]*(.*)[ ]*$
284 :
281 :03/09/08 01:03 ID:BRjxKgTF
>>283 サンクス、さっそく試してみました。
mb_ereg_replace('^[ ]*(.*)[ ]*$', "\\1", " あ ");
の結果が
"あ "
になってしまいます。
それ以外の症状("" や " "を渡すとFALSEを返す)は同じでした。
条件を小出しにするのやめてくれ
>>281 難しく考えすぎ。
最初または最後の空白を '' に置き換えればいい。
mb_ereg_replace('(^[ ]*|[ ]*$)', '', $str);
287 :
281 :03/09/08 02:13 ID:BRjxKgTF
>>286 レスどうもです。提示頂いた正規表現の実行結果はこうなりました。
※結果文字列はurlencode()してあります。
mb_ereg_replace('(^[ ]*|[ ]*$)', '', "") → "%00"
mb_ereg_replace('(^[ ]*|[ ]*$)', '', " ") → "%00"
mb_ereg_replace('(^[ ]*|[ ]*$)', '', " あ ") → "%A4%A2%00" (="あ\0")
>>285 条件を小出しにしてるつもりは無いんだけど・・・
>>287 正規表現自体の文字コードと、$strとして渡される文字列との文字コードの
違いとかは関係無いのだろうか?
、、とか思ってみただけですんで気にしないで下さい。独り言です。
<?php
$str=" あ か さ ";
die("「".mb_ereg_replace("^( )+|( )+$","",$str)."」");
?>
<?php function mb_trim($str){ return mb_ereg_replace("^( | )+|( | )+$","",$str); } $hoge=" . あ か さ "; echo "変換前:[".$hoge."]"; echo "<br>\r\n"; echo "変換後:[".mb_trim($hoge)."]"; exit(); ?>
<?php function mb_trim($str){ return mb_ereg_replace("^( | |\n|\r|\t|\v|\0)+|( | |\n|\r|\t|\v|\0)+$","",$str); } $hoge=" \n \t . あ か さ \r\n"; echo "変換前:[".$hoge."]"; echo "<br>\r\n"; echo "変換後:[".mb_trim($hoge)."]"; exit(); ?>
291 :
286 :03/09/08 12:04 ID:???
>>287 Linux で EUC-JP の環境で試したけど確かに最後に \0 が付いた。'*' の挙動がおかしいような気がする。
mb_ereg_replace のバグの可能性もあるけど、とりあえず、代替案。
mb_ereg_replace('^[ ]+|[ ]+$', '', $str);
292 :
:03/09/08 12:08 ID:???
trim($str, ' ');
293 :
:03/09/08 12:56 ID:???
ミスった。trim($str, ' ');とやっちゃうと\sが消えないっぽい(;´Д`)。 2つ目の引数にリストを作るか、trim(trim($str,' '));もしくは再帰しないと駄目か。
294 :
281(たぶん解決) :03/09/08 13:05 ID:BRjxKgTF
レス有り難うございます。1つずつ検証してみました。
>>288 テストスクリプトはEUCで、HTTPのGET,POST等は使ってません。
また、必要最小限と思われる以下の3行を先頭に書いてます。
mb_language("Japanese");
mb_internal_encoding("EUC-JP");
mb_regex_encoding("EUC-JP");
>>289 >>290 どちらも期待した動作をしました。
制御文字も置換したいかどうかで使い分ければ良いですね。
"\a","\b","\f"等を付けといてもいいかもしれません。
>>291 mb_ereg_replace('^[ ]+|[ ]+$', '', $str);
だと、置換後の文字列が常に "" になってしまうようです。
>>292 ちょっと手直しして、
trim( $str, " " ); //全角と半角のスペース各1個
とすることで、どちらも期待する動作になりました。
295 :
281(たぶん解決) :03/09/08 13:06 ID:BRjxKgTF
続きです。 ■まとめ■ Linux+PHP4.3.3+Apache1.3.27+文字コードEUCでは、以下の方法で期待する動作をした。 ただし検証は不十分である可能性がある。 ・スペースだけ除去したいとき mb_ereg_replace("^( | )+|( | )+$","",$str); または trim($str," "); ・コントロールコードも除去したいとき mb_ereg_replace("^( | |\n|\r|\t|\v|\0)+|( | |\n|\r|\t|\v|\0)+$","",$str); または trim($str," \n\r\t\v\0"); ■備考■ ・mb_ereg_replace() のバグの可能性あり。 ・trim() は本来マルチバイトに対応していないはずなので、少し様子を見た方が良いかもしれない。 ・mb_ereg_replace() のオプション引数および、mb_regex_set_options() に "p" "m" "s" などを指定してみたが結果は変化なし。 というわけで、レスくれたみなさんに感謝!
正直、trim()関数の第2引数なんて知ランカッタ。いや、常用してなかった。 まぁ個人的には、preg_replace()なのですけどね。
297 :
:03/09/08 15:54 ID:???
確かにtrimの第二引数は謎だよな。 何のために作られたのやら。
298 :
291 :03/09/08 16:01 ID:???
mb_ereg_replace('^[ ]+|[ ]+$', '', $str);
が常に "" になるというのが気になるけど、解決したみたいなのでいいとして、
>>295 の trim はマルチバイト対応していないので使わない方が安全。
いわゆる全角空白の場合、EUC-JP では16進数表現の A1 が削除対象になるので、A1 を
含むマルチバイト文字列の半分だけが削除される可能性がある。
例えば、
trim( ' ◇◆ ', " " );
とかを試してみると分かると思うけど。
299 :
nob :03/09/08 16:12 ID:Oh6GOO2V
HTTPで外部のサイトを開いてHTTPレスポンスコードを調べるのは、どのような方法が良いのでしょうか。データベースに登録してあるURLのリンク切れを自動検索するスクリプトを作ろうと思っています。 fopen では、HTTP ヘッダの情報は取得できないんですね・・・
mbstring.encoding_translation On mbstring.http_input auto mbstring.http_output SJIS mbstring.internal_encoding EUC-JP mbstring.language Japanese こんな感じで設定してるんですが、PHPをEUC-JPで記述して print "ハルクボーガン"; とすると、SJISで出力されるってことですよね?どうもEUC-JP で出力されてるようなのです。 <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS"> と指定すると文字化けする。何か勘違いしてますか?
301 :
:03/09/08 16:27 ID:???
>299 そんなんどっかで見たけど、忘れてしまったな、、。 とりあえずソケット開いて、HEAD /ファイル HTTP/1.1\r\n〜 で帰ってきたメッセージを読むとか。
302 :
:03/09/08 16:30 ID:???
>300 Shift_JISに変換するためにバッファリングする必要があるんじゃなかったっけ。 スクリプトからだと ob_start('mb_output_handler'); みたいにするけど。 たぶんマニュアルになんか書いてある。
303 :
nob :03/09/08 16:43 ID:Oh6GOO2V
>>301 思い出したら教えて
>>300 ,
>>302 俺は、
mb_internal_encoding('EUC-JP');
mb_http_output('SJIS');
ob_start('mb_output_handler');
としてるけど。ちゃんと動いてるよ 4.3.3
mbstring.language は、mbstringで使用される 言語のデフォルト値を定義します。 このオプションは、 mbstring.interanl_encoding のデフォルト値を定義し、php.iniにおいて mbstring.interanl_encodingは、 mbstring.languageの後に置く必要があることに 注意して下さい。
>>302-304 レスどうもです。
ob_start('mb_output_handler');
をスクリプトのほうに追加したらうまく動きました。
これで携帯端末用のページ作れそうです。ありがとう。
306 :
:03/09/08 17:06 ID:???
>305 まあお目でと。 iniで output_buffering = On output_handler = mb_output_handler みたいな弄り方も出来るので知っておくだけでも。
Vine2.6 + PHP4.2.3 を使用しています。 PHP のWebアプリケーションがあり、バックアップボタンを 押すと、sqlのバックアップ操作がされるのですが(ヘッダとかつけて) 毎日手でボタン押すのでは、忘れてしまいそうなので、cronとかに登録したいのですが 何かいい手はないでしょうか? コマンドラインから Web画面から表示されるように php backup.php?action=backupnow ってやってみましたけど、エラーは帰ってこないもののやっぱりだめでした。 よろしくお願いします。
>>305 おお、これならスクリプト中に
ob_start('mb_output_handler');
を書かなくても成功しました。うまく使い分けていこうと思います。
>>307 webアプリって、phpMyAdminか?
>> 309 コメントありがとうございます。 アプリというのは、phpMyadminではないです。 MySQLと連動したフリーのソフトなのですが・・ やはり画面からできる=コマンドラインからできるというものでは 無いのでしょうか。。 出来上がってくるのはバックアップされたSQLのテキストファイルです。 タイトルがあったり、テーブルが複数あったりで、後でそのソフトが リストアできるような感じのソースになっています。 よろしくお願いします。
>>310 なぜそのアプリの名を明かさないのか。。
まあ、俺なら自分でバックアップアプリ(というほどたいそうではないけど)作る。MySQLのバックアップコマンドもあるし。
すみません。
oscommerce というモールのソフトです。
ttp://www.oscommerce.com/ 雑誌で見かけて、今試しにインストールしてます。
マイナーすぎて出しても意味が無いかと思いまして。。
ソース見たのですが、結構長くて、自分で作るのには
挫折してしまいました。。。
313 :
nob :03/09/08 18:40 ID:Oh6GOO2V
>>301 こんな感じかなぁ
function get_http_response_code ($url) {
$arr_parse_url = parse_url($url);
if (isset($arr_parse_url['port'])) {
$port = $arr_parse_url['port'];
} else {
$port = 80;
}
$host = $arr_parse_url['host'];
$path = $arr_parse_url['path'];
314 :
nob :03/09/08 18:41 ID:Oh6GOO2V
続き $fp = fsockopen($host, $port, $errno, $errstr, 30); if ($fp) { fputs ($fp, "HEAD $path HTTP/1.0\n"); fputs ($fp, "Host: $host\n"); fputs ($fp, "Accept: */*\n"); fputs ($fp, "\n"); $str_fgets = fgets ($fp, 50); fclose ($fp); $tmp = spliti (' ', $str_fgets, 3); $response_code = $tmp[1]; if (is_numeric($response_code)) { $response_code = intval($response_code); } else{ return -2; } } else { //echo "$errstr ($errno)<br>\n"; return -1; } return $response_code; } 改善案求む。
>>312 管理者のセッションチェックもやってるしあのままじゃ無理だろ
実際にバックアップしてる部分は100行くらいだし
がんばって抜き出すのがいいと思うよ
316 :
:03/09/08 20:12 ID:???
>314
一応送信ヘッダーにキャッシュコントロールとか入れたほうがいいかも。
pearのHTTPパッケージだと単純に以下のようになってる。参考までに。
if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|", $response, $status)) {
$headers['response_code'] = $status[1];
}
$headers['response'] = $response;
while ($line = fgets($fp, 4096)) {
if (!trim($line)) {
break;
}
if (($pos = strpos($line, ':')) !== false) {
$header = substr($line, 0, $pos);
$value = trim(substr($line, $pos + 1));
$headers[$header] = $value;
}
}
CGIっぽいスクリプトなら、
http://pc2.2ch.net/test/read.cgi/php/1049514428/へどうぞ 。
>>315 ありがとうございます。
抜き出せば、コマンドラインから実行可能ということでしょうか?
>>312 どう抜き出せばいいのか自信がなければ辞めといた方が無難かと。
cron使うなら直接mysqldumpでやっちゃう手もあるし。
あと、osCommerceはマイナーじゃないよ
320 :
nobodyさん :03/09/09 02:32 ID:sx5Ek4Ba
スレ違いかもしれないんですが、どこに書けば良いか分からないんで…。 PHPで画像を表示させているんですが、 右クリック→「画像を保存」する時のファイル名って指定できるのでしょうか? どうしてもファイル名がスクリプト名になってしまいます。 これは仕方ない事なんでしょうか(^^;
>>320 たぶん無理。画像を一旦サーバーに保存するしかないと思う。
324 :
nob :03/09/09 10:05 ID:???
>>316 PEAR って手があったわけですね・・・。すっかり忘れてた。
まぁ、勉強になったからいいか。
しかし、HTTP ヘッダなしでいきなりデータを送ってくるサーバもあるんですね。
右クリックだぜ? ScriptAliasで拡張子無しのcgiにしてPATH_INFOで引数取るように したら.jpeg とか使えないかね
326 :
325 :03/09/09 10:20 ID:???
まあ.cgiついたままでもいいけど
327 :
nobodyさん :03/09/09 12:28 ID:xTi8mDwe
標準関数とPEARで同じ機能がある場合(例えばDBMS接続)はどちらを使うのが推奨なのでしょうか?
328 :
nobodyさん :03/09/09 12:55 ID:A/1KPC9j
>>327 柔軟性はpearの方が良。
「普通に」作るなら、そろそろpearにすべきかなと個人的に思う。
>327 どういう意味で推奨を求めているのかわからないけど,結局のところ 標準関数の場合はドキュメントは揃ってるけどDBMS毎に関数群が 異なるため移植性を考慮するなら手間が増える PEARの場合はドキュメント不足だけどインターフェースが広い範囲で 共通なので移植性が高い ってことかと思う.将来的な話はわからないけどPEARが安心して 触れるようになるのはまだ時間がかかるんじゃないかと思うけど. システムが大規模になりそうならPEARを使っておいたほうが後々 楽かもしれないね.
330 :
327 :03/09/09 14:57 ID:???
>>328 >>329 PEARのDBMS接続と標準関数で用意されているものは実装から別物だと思っていました。
PEARのソースを見ると、標準関数のラッパーに過ぎないのですね。
現在既に標準関数で開発しているので、このまま標準関数で開発を続けようと思います。
331 :
nobodyさん :03/09/09 17:15 ID:gdEe3pOI
文字列の置き換えを行いたいのですが $test='カ'; $test=str_replace("J",'1', $test); echo $test; とすると・が表示されてしまうのですがどうしたらいいのでしょうか?
332 :
:03/09/09 17:29 ID:???
>331 文字コードを何とかしたらいいんじゃないか。
333 :
nobodyさん :03/09/09 17:48 ID:NcFJCxK6
配列のソート方法がわからないのですが、教えて下さい。 名前,住所,年齢,身長,体重のような配列を作っています。例えば 太郎,東京,13,150,42 一郎,大阪,12,156,48 次郎,京都,12,152,43 というファイルがあって、それを$adoresuという変数に読み込み、 for($bango=0; $bango<sizeof($adoresu); $bango++){ list($namae,$juusho,$nenrei,$sincho,$taiju) = split(",",$adoresu[$bango]); print 省略します。 } こんな感じで一覧表示してるのですが、これを体重の軽い順に表示するには どうすればいいのでしょうか? sort文など調べたのですがよくわからなかったです。
>>331 シフトJISの場合、'カ'の2バイト目が'J'と同じ(0x4a)なので
mb_internal_encoding('SJIS');
mb_regex_encoding('SJIS');
と、内部エンコーディングをちゃんと設定した上で
$test = mb_ereg_replace('J','1', $test);
とすればいい。
それかUTF-8に変換して
$test = preg_replace('/J/u', '1', $test);
としてからSJISに戻すか。
正しく日本語の検索置換をするなら上記のどちらかしかないけど、
そこまで要求しないのならEUCでstr_replaceでも十分かも。
#コマセの臭いがするのは気のせい?
335 :
331 :03/09/09 18:12 ID:gdEe3pOI
ありがとうございます。 しかしphp3なのでmb関数は使えないんです;; 変換方法を調べたほうがよいのでしょうか・・ str_replaceでも化けてしまうんです〜
>>335 それならjcode.phpsを使って
require_once('jcode.phps');
$test = SJIStoEUC($test);
$test = str_replace('J', '1', $test);
$test = EUCtoSJIS($test);
しか手がないね。
補足。 PHPのコードは全部EUCで書いた方がいいよ。 GETやPOSTの入力もEUCに。 header()関数とmetaタグの両方で文字コードを明示するのも忘れずに。 携帯に出力するときだけ最終的にSJISに変換。
338 :
:03/09/09 18:49 ID:???
>333 色々やり方はあると思うが、、。 こんなんでどうよ。 usort ( $address, 'weight_sort' ) ; //第二引数はコールバック関数名。比較結果を-1, 0, 1で返すもの。 function weight_sort( $aaa = 0, $bbb = 0 ) //コールバック関数 { $weight_a = explode ( ',' , $aaa ) ; $weight_b = explode ( ',' , $bbb ) ; return gmp_cmp ( $weight_a[4], $wieght_b[4] ) ; //配列の5つ目の要素だけを取り出して比較。文字列比較ならstrcmp(); } foreach ( $address as $key => $value) { lsit(・・・) = explode ( $value ) ; print } #これってバブルソートって奴?
>>337 コードはshift_jisでもいいんだけどな。
EUCでないと困る事は稀。
340 :
333 :03/09/09 21:56 ID:NcFJCxK6
338さん丁寧にありがとうございます。 やってみたのですがエラーがでました。 Parse error: parse error, unexpected '@' in D:\home・・・・ と、関数のところでエラーになったみたいです。 ( $aaa = 0, $bbb = 0 )この$aaaなどは変えなくてこのまま使っても いいのでしょうか?
341 :
333 :03/09/09 22:07 ID:NcFJCxK6
338さん、ごめんなさい。 わたしの記述ミスでした。 やり直しますので上の書き込みは気にしないでください。
342 :
nobodyさん :03/09/10 01:50 ID:GlMeQ4Oy
ファイルのアップローダでアップロードしたファイルの日付を元のファイルの 日付と同じにしたいのですが、やり方が分かりません。 GETで取得できる属性には入っていないように思えるのですが。 もしできるのならば、やり方を教えてもらえないでしょうか?
123456 のような秒数の数字を、*時間*分*秒 のように時間 に変換してくれる都合のよい関数って無いですかね…。 割って、余り割って…というぐらいしか思いつかないんですが、 もっと効率の良い方法はありますか?
>>343 >>345 この場合gmdate()だよ。localtime()は9時間ずれちゃうもん。
347 :
:03/09/10 04:01 ID:???
>343 そうするしかないんじゃないの。 別に効率悪くない。
348 :
345 :03/09/10 05:17 ID:???
ああ、10000を2時間46分40秒にしたいということか。 それなら割るしかないだろ。 てっきりtime()が返したものから時間を得たいのかと思った。
349 :
nobodyさん :03/09/10 08:09 ID:YceGzrXM
351 :
nobodyさん :03/09/11 04:01 ID:wSWG2otQ
PerlのClass::DBIみたいなのはPHPにはあるのでしょうか。
現在のファイル名と行番号に置換される予約語はありますか? gccでいうところの__FILE__や__LINE__に相当するような。 デバッグに使いたいんですけど。
> gccでいうところの ワラタ
>>356 まるでgcc独自の機能・・・というかマクロみたいだろ。
あれはANSIの標準規格に含まれるマクロだ。
XXで言うところの、からはそういう感じは受けないけどなあ gccにもプリプロセッサは入っているんだし
漏れにはここの内容でさえさっぱりなんだが。 こういうのは初心者じゃなくて無知って言うんだろうな。
情けないことなんですけど、わからないんで教えてください。 PHPのソース見てると、よく、 -> って文字を見かけますけど、 これの役割はなんなんでしょうか?どういうわけか、今手元にある入門書二冊とも載ってなくて よくわかりません。役割がわからないんで調べづらくて… 手元にあるPHPファイルのソースに echo $d->show_head(); だとか、 $fp = fopen($this->logfile, "w"); とかで使われてるんですが…
>>362 入門書二冊に載ってない?
どんな入門書だよ、それ。入門書で、クラスとかオブジェクトとかが載ってるページを熟読しる
>>362 入門書なんで、記述を端折ってるんだね。(「基礎PHP」には出てたけど)
それはオブジェクトのメソッド/プロパティに対するアクセス。
PHPのマニュアルに出てるので、まずそちらをあたってみれ
#あと「::」とか
私も->の意味を知らなかった時、どう調べて良いかわからなかったよ。
検索しても->じゃ出てこんし。
>>362 がんばって(≧▽≦)/
OOPには不可欠だから、覚えておいても損は無いと思う。
$xx = array( 'a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D' ); のような配列の中で、例えばキーが'a'と'c'の要素を抽出したいのですが array_filterだと、キーが受け取れないので使えませんでした。 スマートな方法あったら教えてください・・ ちなみに、$xxの内容は変動します。
>367
質問の意図がいまいちはっきりしない
> $xx = array( 'a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D' );
> のような配列の中で、例えばキーが'a'と'c'の要素を抽出したいのですが
Array
(
[a] => 'A'
[c] => 'C'
)
を得たいということ?
> array_filterだと、キーが受け取れないので使えませんでした。
キーが受け取れないとは何を指している?
マニュアル
http://www.php.net/manual/ja/function.array-filter.php を参照したところ第二引数はコールバック関数になってるから
キーはコールバック関数が参照できる形で用意しておけば
いいと思うが(グローバル変数とか,引数を得るための関数を用意しておくとか)。
> スマートな方法あったら教えてください・・
> ちなみに、$xxの内容は変動します。
もう少し具体的にどういう結果が欲しいのか提示してもらえると
色々考えられると思うけど。
369 :
368 :03/09/12 10:23 ID:???
引数を得るための → キーを得るための
370 :
368 :03/09/12 10:30 ID:???
>367 すまんようやく理解できたよ(笑) 例からすると array_filter にかけられるコールバック関数の引数には 「値」しかないから「キー」を判断できないじゃないかというわけだね
371 :
368 :03/09/12 10:59 ID:???
>367 とりあえずこんなものしか思いつかないな・・・ キーが絡むとスマートにはいかない気がする PEARに何か便利なものがあるかもしれない。 function hoge($ar, $keys, &$result) { $result = false; foreach($keys as $key) { $result[$key] = $ar[$key]; } } $array1 = array( 'a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D' ); $array2 = false; hoge($array1, array('c', 'a'), $array2); if (false !== $array2) { print_r(array_filter($array2)); } else { print "empty"; }
372 :
nobodyさん :03/09/12 11:28 ID:NNIPffqh
>>367 俺的にはこう書く
<?php
function choose_data_by_keys(&$item, $key, $choosed)
{
if(!in_array($key, $choosed)) $item = null;
}
function drop_null_data($var)
{
return $var;
}
$a = array('a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D');
$b = $a;
array_walk($b, 'choose_data_by_keys', array('a', 'c'));
$b = array_filter($b, 'drop_null_data');
print_r($a);
print_r($b);
?>
元の配列の大きさと,実際に取り出したい要素の数によって 変わってくるだろうね.
374 :
nobodyさん :03/09/12 14:06 ID:qZIVPFa2
多次元配列内を検索する関数はありますでしょうか? 例えば、下記のような多次元配列があり ---------- $ar = array( array("aa", "ああ", "アア"), array("ii", "いい", "イイ"), array("uu", "うう", "ウウ"), array("ee", "ええ", "エエ"), array("oo", "おお", "オオ") ); ---------- $ar[n][0] にあると思われる文字列を検索したいのです。 上記配列の例の場合に当てはめると、アルファべトの箇所に指定した値が 存在するかを確認したいのです。 下記のような式の場合、両方ともFalseが返ってきます。 ---------- if (in_array ("uu",$ar)) { echo "is_array = True"; } else { echo "is_array = False"; } if (array_key_exists ("uu",$ar)) { echo "array_key_exists = True"; } else { echo "array_key_exists = False";} ---------- 条件式に、$ar[2] のようにキーを指定すれば、 is_array = True array_key_exists = False が返ってきますが、キーを指定せずに、多次元配列を検索したいのです。 ループを使って関数を作るしかないでしょうか?よろしくお願いします。
あの・・・ あるフォームがあってそれに例えばAと入れると a.datファイルを新規作成してもしbと入れたらb.datを新規に作成したいのですが やり方がいまいちよくわかりません・・・。 でそのdatファイルをphp?db=aというように読み込ませるにはどうすればいいのでしょうか?
377 :
:03/09/12 14:26 ID:???
>375
textフォームのname属性の値がfnameだった場合、Aと書いてポストすれば、$_POST['fname']にAが入るだろ。
小文字のaにしたけれstrtolower();を使えばいい。次に不正な文字列を排除するして、末尾に .dat、頭に
パスをつけて 、ファイルを作るだけなら、touch();、操作したいならwb+モードのfopen();に渡せばいい。
Getからの値を取得するには、$_GET['db']、これを使ってファイルを読み書きする。
テキストは何使ってんの?
サンプルに書いてあるでしょ。
http://jp.php.net/manual/ja/language.variables.external.php
>374 基本的に配列を再帰的に扱う関数は無いみたい。 とりあえず例のような2次元配列に限定して 検索値があるかないかだけ調べられれば良いなら こんな方法は叩き台としてどうだろう <?php function test_array($var) { return (in_array('aa', $var)); } $ar = array( array("aa", "ああ", "アア"), array("ii", "いい", "イイ"), array("uu", "うう", "ウウ"), array("ee", "ええ", "エエ"), array("oo", "おお", "オオ") ); if(count(array_filter($ar, "test_array")) > 0){ print "YES"; } ?>
>>367 スマートかどうかは知らないけど。
<?php
$a = array('a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D');
$b = array('a','c');
$c = array_flip($b);
array_walk($c, create_function('&$v,$k,$arr','$v = $arr[$k];'), $a);
print_r($c);
?>
>>374 <?php
function search( $str, $n, $ar )
{
foreach ( $ar as $key => $arr ) {
if ( $arr[$n] === $str ) return $key;
}
return FALSE;
}
$ar = array( array("aa", "ああ", "アア"),
array("ii", "いい", "イイ"), array("uu", "うう", "ウウ"),
array("ee", "ええ", "エエ"), array("oo", "おお", "オオ") );
$key = search( "aa", 0, $ar );
echo ( $key !== FALSE ) ? "True:$key\n" : "False\n";
?>
381 :
374 :03/09/12 15:25 ID:???
>378さん 回答ありがとうございます。 その上、サンプルまでつけてくれてありがとうございます! array_filterって使った事がなかったので、とても参考になりました! やはりこういった関数は無いんですね。 おっしゃるとおり2次元配列で、存在するかどうかのチェックがしたいだけです。。 ちなみに、私が考えてたのはこんなのです↓ ------ for ($i=0; $i<count($ar); $i++) { if (in_array ("ua",$ar[$i])) { $a = $a | 1; } else { $a = $a | 0; } } print $a; ------ 378さんのものの方が応用が利きそうですね。 …(´・ω・`) ショウジンシマス
382 :
374 :03/09/12 15:28 ID:???
おお!書き込んでいるうちにレスが! >380さん ありがとうございます。 ===を使っても確認ができるんですね。 試してみます。 色んなやり方がありますね。とても参考になります。 ありがとうございました!
383 :
nobodyさん :03/09/12 16:30 ID:x0AjWmKy
parse errorが消えません・・・。どなたか原因をご教授いただけないでしょうか。 エラー Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in c:\apache\htdocs\chap3\download.php on line 5 ソース <?php $con = mysql_connect("localhost","user","pass"); mysql_select_db("db"); $sql = "select * from members limit $_GET['st'],$_GET['n']"; $rs = mysql_query($sql); ・ ・ ?> php ver.4.3.3です。
$sql = "select * from members limit {$_GET['st']},{$_GET['n']}";
385 :
nobodyさん :03/09/12 16:43 ID:gs4DWdC1
このカウンタに同一IPが連続カウントされるのを抑えたいんですが・・・どうすれば? $file = fopen("/home/virtual/eqjp.net/public_html/modules/news/count.txt","r+") or die("count.txtが開けません"); $counter = fread($file, filesize("/home/virtual/eqjp.net/public_html/modules/news/count.txt")); fclose($file); $counter +=1; $file = fopen("/home/virtual/eqjp.net/public_html/modules/news/count.txt","w+"); fputs($file, $counter); fclose($file); echo $counter ;
386 :
383 :03/09/12 16:43 ID:???
>>384 ありがとうございます!ずっと悩んでいたので本当に助かりました!
>>385 IP を記録しておいて、一致したらカウントしない。一致しなければカウントして、IPを記録。
388 :
nobodyさん :03/09/12 17:09 ID:dkNyBOYs
perl使ってる時は、内部コードをeucにして文字化けを防いでいたのですが、 php使うようになってからは、文字化けしなくなったような気がします。 phpって文字化けしにくいのでしょか?
>>388 eucパススルーな部分はさほどperlと変わらないと思うよ。
もちろんコードにsjisが使えるようにビルドされてるphpもあるけど、
それの話じゃなければ、http出力時の「自動」エンコード変換がうまく動いてる
ケースだからじゃないのかな。
どっちにせよそういう「運」にたよるようなプログラムの作り方しちゃ駄目(笑
390 :
367 :03/09/12 18:39 ID:???
>>368 ,372,379
みなさん有難うございます。きちんと動きましたし、とても満足しています。
恥ずかしながら、array_flipと言う関数を始めて知りました(^^;
お尋ねです。 PHPって うpしたファイルの MIME タイプを教えてくれますが ファイルがバイナリだった場合ってどの位の正確さで MIME Type 合ってます? で、テキストの場合は拡張子を見ているようですが そうなんですか?
392 :
nobodyさん :03/09/12 22:25 ID:tS0e0mKE
今時系列の掲示板(新しいカキコが上に追加されていくふつーの)をMySQLを使って作っています。 次/前ページの移動の仕組みは $sql = "SELECT * FROM `$db_table` ORDER BY `id` DESC LIMIT $start, $entries_per_page;"; で、ソートで新しい番号を上にして、LIMIT使ってできたのですが、 はじめID〜終わりIDを指定して、表示するためのSQL構文が分かりません。 bbs.php?beginid=40&endid=60 と指定して、idが40から60の書き込みを表示させたいのです。 最近データベースに手をつけはじめたため、もしかしたらすごいチューボー発言かもしれませんが、 分かる方いらっしゃいましたら、教えてください。
>>392 ちょっとした発想の転換で、
if (isset($_GET['beginid']) && isset($_GET['endid']) && intval($_GET['beginid']) < intval($_GET['endid'])) {
$start = $_GET['beginid'];
$entries_per_page = $_GET['endid'] - $_GET['beginid'] + 1;
}
〜同じSQL文〜
てな感じでいいと思うんだけど、どうでしょ?
394 :
393 :03/09/12 23:00 ID:???
ごめん嘘書いてた。 上の方法だと、ORDER ASC にしないとダメだった。 つーか同じ構文を使い回せないのなら WHERE id >= $_GET['beginid'] AND id <= $_GET['endid'] のほうがいいとオモタ。 #間違ってたら修正お願いします。<偉い人
395 :
nobodyさん :03/09/13 04:10 ID:U7nicQF5
クッキーについて質問です php4.3 register_globals=onです。 クッキーって言うのは、セットしたページ内でしか 有効じゃないんでしょうか。 掲示板で、ユーザー情報や1ページあたりのレス数を設定するための ページを別に作って、そこでした設定をクッキーに保存して 掲示板ではその保存されたクッキーを読み込もうとしても 読み込んでくれません。
>>395 ??????イ
何のためのクッキーなのかと
MySQLでテーブルを連結させて検索する場合、 二乗になるので、データ数が多いと遅くなると思うんですが 大体データ数どの程度まで速度や負荷など気にしなくても平気なんでしょう? スペックやフィールド数、バイト数にもよると思うんですけど…
398 :
nobodyさん :03/09/13 09:46 ID:U7nicQF5
399 :
nobodyさん :03/09/13 10:02 ID:9EKNju5Z
1.10項目ぐらいのフォームに入力してpostする。 2.フォームの変数をチェックする。(文字数とか不適切な入力とか) 3.その変数を使って「この内容でいいですか?」ページを表示。 4.OKだったらもう一回変数のチェックをして、データファイルに入れる。 この時、3から4への変数の持ち回りはフォームのhiddenに全部書き出す 他に何か適切な方法はありますか? パスワードとか平文でhiddenに書き出してもいいんでしょうか?
400 :
399 :03/09/13 10:06 ID:9EKNju5Z
なんかPHPと関係ない感じになってしまいましたがPHPで作ってます。 sessionに登録するとか、hiddenにserializeして入れておくとか、 一般的なのはどんな方法なんでしょうか?
>>399 重要な情報扱うわけじゃなければhiddenでも問題ないと思うが。
(個人情報やクレカとか)
個人で使う掲示板や日記程度のなら一般的にはhiddenが一番多いと思う。
>>398 何について聞きたいのかはっきりさせろ
そもそも質問じゃねーし・・・
違うページで読めないのか?→読めます
で終わっちゃうだろ
cookie の pathとdomainをどういう設定にしてる?
403 :
nobodyさん :03/09/13 14:01 ID:U7nicQF5
>>402 pathとドメインは設定してません。
具体的なコードはこんな感じです。
$subはフォームからPOSTで渡されます。
<?
if($sub=="on")
{
$cookiename = "on";
}else {
$cookiename = "off";
}
$expire = time()+365*24*86400;
$cookie = "scolor";
setcookie($cookie, $cookiename ,$expire);
echo "設定を変更しました。<p>";
?>
404 :
nobodyさん :03/09/13 14:08 ID:U7nicQF5
ああああああ pathを変えたらうまくいきました。 ありがとうございます!!!!!!!
>>403 問題ってほどでも無いんだが、
> $expire = time()+365*24*86400;
てのは如何なものかと。
406 :
399 :03/09/13 16:14 ID:???
>>401 IDとパスが一致したら詳細が見れるって程度の事をする
簡単な会員登録システムなんでhiddenで渡す事にしました。
407 :
nobodyさん :03/09/13 20:53 ID:BbpX/FZ2
$lines = file("log.log");//いままでのログを配列に読み込む $fp = fopen("log.log","w");//ログをオープン(空になる) fputs($fp,$dat);//データを書き込む(先頭に) for($i = 0; $i < 99; $i++)//いままでの分を追記 fputs($fp, $lines[$i]);//(配列0-98→現ログ1-99行目) fclose ($fp); これってファイルロックしなくても大丈夫? これにファイルロックするにはどうすればいいのでしょう?
408 :
nobodyさん :03/09/13 21:04 ID:U7nicQF5
ログを配列に読み込んだ後にロック
409 :
407 :03/09/13 21:29 ID:???
$lines = file("log.log");//いままでのログを配列に読み込む flock($fp, LOCK_EX); $fp = fopen("log.log","w");//ログをオープン(空になる) fputs($fp,$dat);//データを書き込む(先頭に) for($i = 0; $i < 99; $i++)//いままでの分を追記 fputs($fp, $lines[$i]);//(配列0-98→現ログ1-99行目) fclose ($fp); flock($fp, LOCK_UN); こんな感じですか?
phpプログラム内にて、あるディレクトリ直下のディレクトリ数 をカウントしたいのですが、何かよい方法はございますか? 例えば、サーバ上 〜/2ch/giko/index.html 〜/2ch/mona/index.html 〜/2ch/shiy/index.html というディレクトリ構成があった場合、 「〜/2ch/」直下のディレクトリ数「3」をカウントしたいのです。 「giko」や「mona」の下にあるディレクトリはカウントしなくてよいです。 何かよい方法がございましたら、ご教示願います。 厨な質問だったらごめんなさい。
>>409 flockの$fpは、オープンされたファイルポインタでないと駄目だから、
$fp = fopen(); flock($fp); の順にやらないと。
でも、file()はflockしてないと思うから、意味無いような気もしたり。
>>410 素直に readdir()とis_dir()は駄目でしょうか?
>>411 while文でまわしながら、readdir()で直下の情報を読み込んで、
is_dir()でtrueのモノのみカウントしていくということですね。
なるほど、うまくいきそうです。
ありがとうございました。
414 :
392 :03/09/14 00:54 ID:SxMgLT7D
>>393 さん2つめのWHERE使ったやつで無事実装できました!!!
まじ感謝です!
415 :
412 :03/09/14 08:33 ID:???
>>413 カレントと親ディレクトリですね。
ありがとうございます。
PHPってCGIとして使うと処理がとぎれとぎれになりますよね。 クラスを使ったプログラムに挑戦してみようと思ったんです けど、PHPを呼び出す度にクラスを定義してインスタンスを 作るって動作は処理が重くなりそうな気がするんですが。実際 はどうなんでしょうか。変数と関数を毎回includeするのと別に 負化はたいして変わらないですか?
417 :
nobodyさん :03/09/14 17:55 ID:NJT0IDp2
$donadona = array(1,2); $ref = "donadona"; print $$ref[0]; としても何も表示されません。もちろん print $donadona[0]; ならOK。こういう使い方は出来ないのでつか?
cgi+binってファイルはどうすれば使えるようになりますか?
OSによる
ウインドウズのMeなんですが
ダウンロードしたエロ動画です。コードとか言われると知識がないので 何について聞かれているかわかりませんがこの答えであっているでしょうか? ていうか今見直したらbin+cueと見間違えていました。 鬱だ
>>418 が次にどこのスレに現れるのかが非常に気になる
むしろどこにいけばいいか教えてくれw 具具ったらそれらしいとこはでてきたが
ん?PHP関係ないの?
phpってもの自体よくワカランし(w cdrwinをダウンロードすればよさげなのはわかったが
427 :
:03/09/14 19:08 ID:???
>422 それはROMディスクを仮想ドライブに読み込んだものだ。 daemon toolsをダウンロードして、マウントすると再生できる。 PHPとは無関係だ。
なんだ割れ厨か
>>417 $$ref[0] だと、 $ref[0] が先に解釈されるので、この場合だと、
$ref[0] == 'd'
になってしまって、$d という変数を呼び出そうとするので $d が定義されていないと 失敗する。
以下のようにすれば大丈夫。
$donadona = array(1,2);
$ref = "donadona";
print ${$ref}[0];
>>427 さん ありがとうございます。
無事できました
>>428 さん
エロゲーのおかげで明日一日暇で家で過ごさずに住むことになりそうなんです
(どっちにしろ家でエロゲーですが)
どうか許してやってください
そんな自分勝手で個人的な理由が言い訳になるわけないだろ
お尋ねしたいのですが、 一枚のWEBページに複数のファイルを読み込ませたい場合どのようにしたら良いでしょうか。 不躾な質問でございますが、何卒ご教授下さい。
433 :
nobodyさん :03/09/15 00:17 ID:9NFnem5D
複数回ファイルを読み込んでください。
>>433 即レスありがとうございました。
includeを利用することでどうにかなりそうです。
それでは失礼しました。
include? 複数回読み込みたいって、そういうことだったのか。
>>435 1ページ分のHTMLを分割ファイル化して、
ヘッダ・フッタ・内部テーブルみたいな感じにしたかったのじゃないかな?
まぁあんまり気にしない
437 :
nobodyさん :03/09/15 01:00 ID:0DSPDdIF
ジンジャエール
>>429 おおー、なるほど。
こいつは勉強になりました。もしかしてちゃんとマニュアルに
書いてあるのかな?とにかくサンキュー!
LINEを渡さなくても、ユーザー関数の呼び出しもとのクラス名・行番号を得る事は出来ますか?
442 :
:03/09/15 13:13 ID:7THLasrG
443 :
nobodyさん :03/09/15 13:39 ID:HzcwV9T4
PHPで継承したクラスのメソッドの中で親クラスのメソッドを呼び出すことはできますか? Javaで言うところのsuper.xxx()見たいな感じです。
>>443 $this->xxx()
または、
parent::xxx()
445 :
恵子 :03/09/15 17:12 ID:ruRRzX5l
>>441 デバッグ用途で使いたいんだろうけど、たぶんできない。
フレームスタックを調べる方法があればできるだろうけど。
447 :
nobodyさん :03/09/16 00:10 ID:1fX3DuqB
エラーが出て困っています。 Warning: file("./count.dat") - そのようなファイルやディレクトリはありません in /home/service/public_html/cgi/counter/counter.php on line 34 Warning: fopen("./count.dat", "w") - 許可がありません in /home/service/public_html/cgi/counter/counter.php on line 58 Warning: flock(): supplied argument is not a valid File-Handle resource in /home/service/public_html/cgi/counter/counter.php on line 59 Warning: fputs(): supplied argument is not a valid File-Handle resource in /home/service/public_html/cgi/counter/counter.php on line 60 Warning: flock(): supplied argument is not a valid File-Handle resource in /home/service/public_html/cgi/counter/counter.php on line 61 Warning: fclose(): supplied argument is not a valid File-Handle resource in /home/service/public_html/cgi/counter/counter.php on line 62 58:$fp = fopen("$data","w");// 書きモードでオープン 59:flock($fp, LOCK_EX);// ファイルロック 60:fputs($fp, $new_data);// 書き込み 61:flock($fp, LOCK_UN);// ロック解除 62:fclose($fp);// ファイルを閉じる こんな感じです。count.datはちゃんと存在していて、パーミッションは 644、counter.phpのパーミッションも644です。 エラーの原因が何か分からず困っています。ご教授お願いします。
448 :
:03/09/16 00:19 ID:???
debug-backtrace();を仕込んどけばいいんでないの。
> Warning: file("./count.dat") - そのようなファイルやディレクトリはありません エラー内容からすると、count.datはあるかもしれんが場所が違うかパラメータの与え方が違うんだろ > Warning: fopen("./count.dat", "w") - 許可がありません 644で許可がありませんといってるんだから606にしてみようとは考えないのか
> fopen("./count.dat", "w") はファイルが無い時に新規作成しようとするから、 ディレクトリのパーミッションで出てるんじゃないかな?
451 :
nobodyさん :03/09/16 02:24 ID:ZJ9fbVpQ
PHPのライブラリとかは、一般的に何処に置けばよいでしょうか? RedHat Linux 9をつかっています。
452 :
447 :03/09/16 07:25 ID:1fX3DuqB
count.datを606にしたのですがエラーは変わりません・・ 他にどこを直せばよいのでしょうか? ANHTTPDで試したときは問題なく動作したんですが、 サーバーにアップしたらエラーがでました。
453 :
:03/09/16 07:28 ID:???
スルーされたな(笑
454 :
447 :03/09/16 07:29 ID:1fX3DuqB
あ、なんか新しくやり直したらできました^^ ありがとうございました。
すいません、PHPの関数で、 接続するDBがPostgresだろうが、MySQLだろうが、 同じ書き方で接続できる関数があったと思うのですが、 何でしたっけ? リファレンスをひととおり見回したものの、見あたらない・・・ 見過ごしたか、あるいは、関数ではないのだろうか・・・
あ、PHPか
458 :
456 :03/09/16 11:14 ID:???
オンラインマニュアル見たら dbx というのがあるが これのことか?
>>416 おれもしりたい。
たぶん、毎回クラス定義しなきゃいけなくて、そのオーバーヘッドは減らせないと思う。
>>416 , 459
bcompiler使えば、パースにかかる時間は
短縮できる。
>>455 PEAR::DBか?
DSNの書き方や、接続に関しては同様に扱えるようになってたと思うが
462 :
nobodyさん :03/09/16 18:57 ID:uqtMJgrk
みなさんOOPってどうやって勉強しました? 参考にした書籍やサイトがあれば教えて頂きたいのですが。
関数を学ぶときあなたはどうしましたか? 関数とはなんなのかについて先に勉強したりしましたか?
464 :
nobodyさん :03/09/16 19:31 ID:X1KHAMi2
>>462 オブジェクト指向に関する本を読んだ方がいいよ。
465 :
:03/09/16 19:32 ID:???
関数という言葉からは、f(x)のようなものを想像したし そこから入って困る事は無かったなあ
お前もいいかげんにしろっつーの
468 :
462 :03/09/16 19:56 ID:uqtMJgrk
すれ違いな事聞いてすいません。。 PHPのOOPの書籍が見つからなかったもので。。 OOPの書籍はあってもたいていJAVA中心に書かれてたりしてて、 みなさんどうやって勉強したのかと思った次第でして。。 すいませんでした。。
469 :
447 :03/09/16 19:56 ID:???
やっぱりうまくいきません。。 一回、index.phpと同じ階層にcounter.phpとcount.datを持ってきて それぞれパーミッションを644、606にすると問題なく動作したのですが、 cgiというフォルダに入れたとたん警告エラーが出てしまいます。 フォルダから出すと問題ないのですが、これはどうすればよいのでしょうか?
470 :
nobodyさん :03/09/16 20:31 ID:X1KHAMi2
>>468 憂鬱なプログラマのための〜
って本いいですよ。
phpに特化してはいないですけど。
ていうか、phpに特化した本はないです。
他の鯖にあるファイルへアクセスする時にincludeとかを使うと、 zipファイルとかのときダウンロードダイアログが表示されずに、 そのままテキストで表示されてしまいます。 MIMETYPEの指定などをするっぽいですがよろしければ簡単なサンプルをお願いします。
472 :
nobodyさん :03/09/16 20:54 ID:X1KHAMi2
ダウンロードしたいなら javascriptつかったほうが いいんじゃない? includeはそもそも 目的が違うよ。
473 :
nobodyさん :03/09/16 20:56 ID:rcFmQiNN
>>447 >>469 もう一回パスやパーミッションを確認してみる。
ディレクトリのパーミッションも。
cgiって名前のディレクトリ以外にしてみる。
それでだめなら、鯖屋の名前から使ってるスクリプトから
全部晒して誰かに検証してもらう。
474 :
nobody :03/09/16 20:58 ID:FDXLG/uk
475 :
471 :03/09/16 21:07 ID:ijo1Fg8O
>>472 リダイレクトとかの挙動をさせずにZIPやテキストを
ダウンロードダイアログを表示させてダウンロードさせたいのです。
socket関数を使うのかな?
>>475 Content-Type: application/zip とかを吐けばいいみたいよ。
header("Content-type: application/zip");
include '
http://localhost/test.zip ';
当然のことながら、他に何も出力しちゃいけません。
477 :
462 :03/09/16 21:49 ID:???
>>470 レスありがとうございます。
明日早速買ってこようかと思います。
スレ汚してすみません。
そしてありがとうございました。
478 :
471 :03/09/16 22:08 ID:ijo1Fg8O
>>476 ありがd。header関数についてもう少し勉強しておきますm(_ _)m
479 :
nobodyさん :03/09/16 23:45 ID:X1KHAMi2
phpでクラス変数は使えるんでしょうか。
481 :
nobodyさん :03/09/16 23:53 ID:X1KHAMi2
どうやったら、使えるんでしょうか。 サンプルコードとか、ほしいです。
私は毒男なので彼j(ry
強力にファイルロックする方法ってあります ? 最近ログが飛びまくるんですが・・・
>>484 そもそもロックの掛け方が悪い場合も。自作でっか?
ロック箇所のソース抜き出して晒してみ?
ログならPEARのLogをつかいなはれ。
487 :
447 :03/09/17 07:13 ID:???
っシャーーーーーーーーーーーーーーーーやっと分かった。 index.phpからcount.phpをincludeしたからcount.datのパスも index.phpから相対的に指定するのか。 普通にcount.phpから相対指定してた。
488 :
nobodyさん :03/09/17 08:04 ID:IlBHCtzA
sessionって携帯でも使えますか?っていうかクライアントは関係ないんですか?
489 :
nobodyさん :03/09/17 08:20 ID:nZo3lUrS
結局クラス変数は使えないのかな。
>>489 お前なぁ…
マニュアルくらい読めよ。
お前がいくらスキル無しでも、Googleで検索することくらい出来るだろ?
491 :
nobodyさん :03/09/17 08:46 ID:nZo3lUrS
検索してもでてこないよ。
>488 使えるっしょ。 Cookieが通らない環境ではURLにセッションIDを埋め込む必要があるけど。
493 :
:03/09/17 09:25 ID:???
$hogeって変数に$_SERVER["REMOTE_ADDR"]なんかの連想配列を含んだ言葉を入れたい場合ってどうやるんですか? $ip = $_SERVER["REMOTE_ADDR"]; $hoge = あなたのIPアドレスは$ipです。 みたいにすればできるんですが・・。
>>492 ありがとうございます。
cookieが使えない環境って言うのはどういう事でしょうか?
携帯は基本的にcookieは使えないですよね?
>493
よく分からんが、エスケープするなり、連結演算子使うなりすればいい。
>494
cookieが使えない環境って言うの言葉どおりの意味。
しかしphp4ではセッションにCookieが使えるか勝手に判定、だめなら定数SIDに「セッション名=セッションID」が入る。
スクリプトを呼び出すGETクエリにこれをくっつければセッションが使えるというお手軽さ。
http://jp.php.net/session
496 :
493 :03/09/17 10:09 ID:???
あ、連結すればいいんでした。失礼しました。
$hoge = "あなたの IP は {$_SERVER['REMOTE_ADDR']} です";
あなたのIPはfusianasanです
こっちでも $hoge = "あなたの IP は ${_SERVER["REMOTE_ADDR"]} です"; そして禁じ手 $hoge = "あなたの IP は $_SERVER[REMOTE_ADDR] です";
500 :
nobodyさん :03/09/17 17:26 ID:VsGth0S0
リンクをフォームのボタンの代わりに使おうとしています。 リンクで値を取得したい時は、url/***.php?aaa=bbb とか指定すれば $_REQUEST で値が取得できるのと同じような事がしたいです。 フォームのボタンの代わりに使う場合には、 1. どうやったらJavaScriptから値が渡せるのか 2. 渡された値をどうしたらPHPで取得できるのか 両方判りませんでした。 上記1のHTML側は下記のように考えて見ました。 --- <SCRIPT language="javascript"> <!-- function mySubmit(formName,i){ formName.submit(); document.formName.dt.value=i; } // --> </SCRIOPT> --- <FORM method="post" action="test.php" name="test"> <A href="javascript:mySubmit(fnctest,1)">リンク1</A> <A href="javascript:mySubmit(fnctest,2)">リンク2</A> <A href="javascript:mySubmit(fnctest,3)">リンク3</A> </FORM> --- hrefで指定した数値をPHPファイルの方で取得したいのです。 PHP4.3.2 で Smarty使ってます。よろしくお願いします。
>500 そこまでできてるんならあとは form 中に hidden で箱つくっておいて mySubmit で submit する前に値をセットしろ
>>500 うむ、
>>501 のもいいし、どうにでもなると思う
どーしても***.php?aaa=bbb にしたければ
submit()する前に、action プロパティを変えてやればいいし
503 :
nobodyさん :03/09/17 18:24 ID:NPScx1nS
自分自身のフルパスを取得するのに
$URL = "
http:// " . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
でバッチしでしょうか?
定石があれば教えてくだたい。
504 :
500 :03/09/17 18:42 ID:VsGth0S0
>501-502 ご返事ありがとうございます。 やはりJavaScriptで処理しておかないとダメなんですね。 -------- <HTML><HEAD> <TITLE>テスト</TITLE> <SCRIPT language="javascript"> <!-- function mySubmit(formName,i){ document.formName.dtt.value=i; document.formName.submit(); } // --> </SCRIPT> </HEAD><BODY> <FORM method="post" action="/~bndb/test.php" name="fnctest"> <A href="javascript:mySubmit(fnctest,2)">リンク</A> <INPUT type="text" name="dt" value="10"> </FORM> </BODY></HTML> -------- こんな風にして見たんですが、エラーになります。 何処がおかしいのでしょうか。 引き続きなのでここで質問しましたが、スレチガイが問題でしたら 移動します。。。 てか、、JavaScriptが全然できない事に気づきました。(;´Д`) ハァ〜
505 :
500 :03/09/17 18:44 ID:VsGth0S0
上記JavaScriptは以下に修正です。 function mySubmit(formName,i){ document.formName.dt.value=i; document.formName.submit(); } コピペ時のミスです。すみません。
>>504 いやいや、JavaScriptを使うと言う指定は
>>500 であったんじゃないか
LINKの時に、href="***.php?aaa=bbb&ccc=ddd " とか
ずらずらつなげてやればそのままhtmlだけで使えない事も無いよ
507 :
500 :03/09/17 19:10 ID:VsGth0S0
>506 判りにくくてすみません。 リンクをクリックした時に、複数の操作をPHP側で処理したいのです。 他のフォームに入ったデータの送信もしたいのです。 そういう場合は、SubmitするためにJavaScriptじゃないとダメかなと思った次第です。 JavaScript使わなくて済む方法を知らないのです。 それに、URLの後ろにずらずらつけるのだと色々問題がありそうで、できることなら POSTで処理したいです。 よろしくお願いします。
PHPってCSVのファイルを読み込んで 表が作れるって書いてあったんですけど サンプルにあるようなすべてを表示するような表ではなくて No,Name,Info,Prise 1,てすと,てすとです,100 2,TEST,This is test,200 を $name<br> $info<br> $prise円<br> に入れることはできますか? 最初のNoのとばし方がわからないんです。 よろしくお願いします
510 :
503 :03/09/17 21:30 ID:???
イインジャネーノ? GETガアルトダメダケド
>>510 $_SERVER['PHP_SELF'] だと、環境変数PATH_INFOが存在した場合にその
値まで反映してしまうので、もしやるんだったら、
$url = "
http:// " . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'];
513 :
503 :03/09/17 23:48 ID:???
なるほど。 ありがとデス。
>508 最初にヘッダー行のみ読んで、fpを進めてから処理すればいいだけ。 $header = fgetcsv( $fp, 1025, ',' ) ; while( list($name, $info, $prise) = fgetcsv( $fp, 1025, ',' )) ; ;
>514 とばしたいのは列のようだよ.
>504 document.formName.dt.value=i; document.formName.submit(); ここのところは formName.dt.value=i; formName.submit(); こうかな. formName は変数だから document の下にくっつけたらおかしい.
517 :
500 :03/09/18 09:39 ID:2lD9YT1s
>516サン をを!ありがとうございます!挑戦して見ます! これで何とか思った通りの事ができそうです。 どうもありがとうございました! できたらまたご報告します。
518 :
500 :03/09/18 10:47 ID:???
下記の方法で、リンクをフォームのボタンの代わりに使って、 POSTで値を受け取る事ができました。ありがとうございました。 --- <HTML><HEAD> <TITLE>テスト</TITLE> <SCRIPT language="javascript"> <!-- function mySubmit(formName,i){ formName.dt.value=i; formName.submit(); } // --> </SCRIPT> </HEAD><BODY> <FORM method="post" action="test.php" name="test"> <A href="javascript:mySubmit(test,1)">リンク1</A> <A href="javascript:mySubmit(test,2)">リンク2</A> <A href="javascript:mySubmit(test,3)">リンク3</A> <INPUT type="hidden" name="dt" value="0"> </FORM> </BODY></HTML>
他のphpファイルで使っている変数を 変数の値ごともう片方のphpファイルで 使用する場合どうすればいいでつか? a.phpで使用している$a=1をb.phpで$aとして使いたい。 実際の値はその都度かわりますがとりあえず$a=1を使用したいのです。
521 :
519 :03/09/18 17:55 ID:???
>>520 言い忘れましたが正確には
a.phpのファイルには $a=$_GET['c'];で$aに値がはいるようになっています。
でこの$aの中身をb.phpで使用したい場合ですが
b.phpで$a=$_GET['c'];と書いても$aの中身は空だったので
a.phpから持っていこうと思ったのですが・・・。
ちなみに$aの中身はバッチファイルです。
522 :
nobodyさん :03/09/18 18:47 ID:MKHYTQCq
100以上あるHP内のファイルをそれぞれ全部require_onceを使って 同じ構文を読み込む形にしてるんだけど、こんなことして問題ない?
小数点以下の切捨て ってどうするんですか?
マニュアル嫁
>>521 b.phpの中でinclude("a.php"); のようにするの?
それとも、
b.php -> ブラウザに表示、ボタンクリック -> b.php なの?
>>522 読み込めない場合があるんじゃないか?って話なら、問題無いよ。
526 :
522 :03/09/18 22:32 ID:WxQfQBwo
>>525 ありがとう。
どちらかというと、メモリ消費の方を心配してたんだけど
こっちも問題ないのかな。ちなみに512メガです。
ファイル1つあたり512MB?? そりゃやばいかも
>>527 PHPのスクリプトで512M分B書いてたら、すごい。つか神。
(PHP自身のソースでもそんなに、にゃーよ)
実装メモリで512MBあれば問題ないと思うけど。メモリの使い方にもよるけど
>>525 >b.php -> ブラウザに表示、ボタンクリック -> b.php なの?
こちらのほうです・・・。
リンクには ○○○.php?c= ここまでしかでません。
>529 a.php -> ブラウザに表示、ボタンクリック -> b.php じゃないんすか。 ソース出すのが早そう。 PostないしGetで値が受け取れてるかどうかチェック。 受け取れていたらどの処理で消失しているかチェック。 未定義エラーが出てないようなのでvar_dump();で。
>519 a.php から b.php へどういう風に遷移するのかわからなければ どうやって $a の中身を伝播させるかアドバイスのしようもないよ. とりあえず前提条件無い場合の回答としては session を使うことかな.
532 :
519 :03/09/19 14:31 ID:???
私も説明しにくく、申し訳ないのですが 変数の中身がバッチファイルなのは前回に言いましたが 私がやりたいのはa.php?c=○○.batからb.phpにまずとぶことはできますが それからb.phpからa.php?c=○○.datに戻ることができません・・・。 エラーメッセージはWarning: file("") - Inappropriate ioctl for device in /var/www/html/sr/goods4.php on line 200 と出ますが戻るリンクのソースを見るとa.php?c= しか表示されてません。 コードは'a.php?c='.$aとしています。 結果として$aにバッチファイルが入ってないからなのですがa.phpでは 最初にリンクとしてa.php?c=○○.datと指定してあるので$aに値は入るようになってます。 $aをb.phpで使用する方法がわかりません。
>>532 が、何もかもメチャクチャだと思うのは俺だけ?
>519 b.php に飛ぶときにどうやってるんだ? アンカーつかってるなら b.php?c=hoge って書いておかなきゃ b.php の中で $_GET['c'] の中身は空になるのは当然だが? フォーム使ってるなら method=get で hidden で値をセット しておくとかなしなきゃだし. 説明しにくいのならやはりソースを晒すべきだろう. (固有名詞やセキュリティに関する定数などは適宜置換してな)
536 :
nobodyさん :03/09/19 15:59 ID:fjORpedQ
php-4.3.2 を使っています。php.ini で allow_url_fopen をon にし、
HTTP/1.1 を使用しているサーバーに対して
$fp = fopen ("
http://hogehoge.net/foober/ ", "r");
while(!feof($fp)){
$line = fgets($fp, 4096);
print $line;
}
などとすると、
failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
となってしまいました。
HTTP/1.0 を返すサーバーにたいしては、文字化けするものの、
読み込んで表示することができました。
HTTP/1.1 を返すサーバーに対して、上記相当のことをしたい場合、
どういう手段をとれば良いのでしょうか? アドバイスをお願いします。
飛んだら変数はそのまま渡せんがな
>>536 「HTTP/1.1 403 Forbidden」ってなぁに?
あぼーん
あちゃー やっちゃいましたねー
542のカキコまじでやばくない??
<?php
//kinen.php
die('
>>542 ');
?>
548 :
519 :03/09/19 19:32 ID:???
>>542 はい、すいません・・・。
そもそもこのスクリプトはショッピングカートでフリースクリプトを改造してます。
>a.phpとb.phpの関係をはっきりしろ。
a.phpは商品のページであり、ここから買い物かごにいれるとb.phpに飛んで
合計金額、発注できるようになっています。
この中でまた商品を選びたいときにa.phpに戻りたいわけですが
フリースクリプトではカテゴリがひとつしかないので
$_GET['c']でdatファイルわけで複数のカテゴリを作ってます
>値の渡し方をはっきりしろ。
設定のページを新たに作ってフォームに入力すると新規datファイルを作成します
それをa.php?c=○○.batでリンクを張っています。
a.phpには$a=$_GET['c']と書いてあるので$aにはdatファイルが入ってます。
echoで確認済み。
>Echoデバッグしたのかはっきりしろ。
上記の通りです。
>.datか.batかはっきりしろ。
.datです。
>$a, $_GET['c']がファイル名なのか内容データなのかはっきりしろ。
ファイル名です。中にはデータが入ってます。
>$a = $_GET['c'] という無駄な処理をどっちのファイルでやってるのかはっきりしろ。
a.datファイルでやっています。
>$aに値が入ってるのかどうかはっきりしろ。
a.phpでは値が入ってます。
>b.phpに値をどうやって転送したのかはっきりしろ。
転送できてません・・・。
>
http://jp.php.net/manual/ja/language.variables.external.phpを試したのかはっきりしろ 。
初心者なので試し方がわかりません・・・。
>>548 おお、相変わらず謎ですね。
ショッピンカートなら>531のいうとおりセッション変数に放り込んでしまえばいいと思う。
リンクアンカーで渡すなら、b.phpを呼び出すときにクエリをつけるだけ。>534に書いてあるが、
要するに <a href="b.php?a=xxx"> を踏ませれば、bが呼び出されるときに値がセットされる。
b.phpにPostするならなら、フォーム内に <input type="hidden" name="a" value="xxx"> か何かを
創れば、ポチっと逝ったときにb側の $_POST に値が入る。
Htmlから、b.phpを呼ぶときにPOSTかGETで値を渡す、もしくはセッション変数に $_GET['c'] を
放り込んでページ越境するのいずれかの方法を。
DBから「ユーザー名」・「パスワード」・「カテゴリ」を参照したいのですが、 「カテゴリ」の取得だけ、どうしても上手くできません。 自分なりにいろいろ調べてみたのですが、どうしてもわからないので、 ご教授願いたくカキコします。よろしくお願いします。 $master = @mysql_connect("ぬるぽ", "hoge", "hogehoge") or die("サーバに<br>接続できません。"); @mysql_select_db("master", $master) or die("データベースに<br>アクセスできません。"); $users = @mysql_query("SELECT * FROM users", $master) or die("テーブルに<br>アクセスできません。"); $user = @mysql_fetch_array($users) or die("値を取得できません。"); foreach($user as $key => $value){ if($user[id] == $_SESSION["id"] && $user[pass] == $_SESSION["pass"]){ $_SESSION["category"] = $user[category]; break; }elseif($user[id] == $_SESSION["id"] && $user[pass] != $_SESSION["pass"]){ $case = 1; } } …いくつかの処理が続く 当然ですがSessionはすでにスタート済みで、 $_SESSION["id"]と$_SESSION["pass"]は ユーザが入力したのを$_POSTまたはCookieから代入しています。 DBより、「ユーザー名」と「パスワード」が一致したら、 「カテゴリ」を$_SESSION["category"]に代入し、 表示できるページをコントロールできるようにしたいと考えています。 低レベルな質問かとは存じますが、お力添えいただければ幸いです。
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←
>>550 (_フ彡 /
"select id, pass, category from users where id = '".addslashes($_SESSION['id'])."' and pass = '".addslashes($_SESSION['pass'])."'";
ってSQL流した方がいいんでない?
せんせー!動きません!!
エラーすらでません!
どこが悪いのか教えてください!(頭以外。
<?php
$data = file("
http://slashdot.jp/ ");
$i = 0;
foreach ($data as $v) {
if (ereg("dispStory;misc;default -->", $v))
break;
$i ++;
}
for (; $data[$i]; $i ++) {
$v = trim($data[$i]);
if (ereg("<font size=\"4\" color=\"#FFFFFF\"><strong>", $v)) {
$topic = ereg_replace("<[^<]+>", "", $v);
} elseif (ereg("もっと読む", $v)) {
$v = strip_tags($v, "<a>");
$v = ereg_replace("\( |\|.*", "", $v);
$v = ereg_replace("もっと読む…", $topic, $v);
echo "<li>$v</li>\n";
} elseif (ereg("fancybox;misc;default", $v)) {
break;
}
}
?>
>>552 エラーが出ないってことは動作してるんだよ
ブラウザの漢字コード変えたりしてブラウザからソース確認できる?
errorなしでブラウザ上のソースも空ですね。。。 何も出力されてませんね。
555、と。
初心者です。配布CGIの設置(主にBBSやチャット、自動リンク)はしたことがあるのですが、
scriptをいじったことはありません(パスワードや色の設定、アクセス制限くらい)
で、サイトにきてくれる人の自己紹介名簿を設置しようと思い、検索したところ
ttp://www.avion.co.jp/kamui/main_f_ent.html というのを見つけました。どうやらPHPを使っているようです。
機能もかなり充実しているのですが、それを検索しても出てきません。
かれこれ1年くらい検索しているのですが、やはり配布していないのでしょうか?
このような自己紹介名簿(みんなのプロフィールSPは有料・・・)を配布している
ところは存在しないのでしょうか?
全くの初心者がこのような専門板に書いて申し訳御座いません。
ほんとよろしくお願いします。長文ごめんなさい・・・
>>556 そうか、1年くらい検索してたのか。
その間にPHP勉強して自作できてたね。
>>556 おもしれぇなぁ。
これネタだったら、座布団1枚ってところだね。
1年間何してたの?
1年あれば、十分自作するだけの勉強はできたね。
でも、1年経っても検索スキルが上がらないようなら、自作も無理かw
1年間ぶっとうしで探していたわけじゃないんです。 PHPて私にとって敷居が高すぎるというイメージがあって PHPやXOOPSの解説サイト見てもちんぷんかんぷんなんですよ。 煽るだけで、その実わからないんじゃないの?
で、私が聞きたいのは、
ttp://www.avion.co.jp/kamui/main_f_ent.html のようなのが配布してあるかどうかってことなんです。
色々自己紹介名簿の配布CGI見つけたけど、
それっぽいのはみんなのプロフィールSPというのでした。有料だけど。
確かにヘボサイト5年近くやってるけど、CSSもわからないし。
検索に関しては、WEB板のPRスレ、ロボットエンジンスレ系を初代から
見てますよ。
敷居が高い板は、初心者には不親切ですね。
>>562 です。ここは一応Webプログラミング板なんで。
プログラムの話じゃなくても、要件(こういう機能があって、こうした時はどうのこうの)が
きちんと出せるならここでも良いと思うけど、多分漠然としたものしか出せないでしょ。
564 :
550 :03/09/20 05:54 ID:???
>>551 レスサンクスです。
$_SESSION["category"] = @mysql_query("SELECT id, pass, category FROM users WHERE id = '" . $_SESSION["id"] . "' and pass = '" . $_SESSION["pass"]) . "'";
ってことでいいんですよね?もちろん、addslashes付きでも試してみたのですが。
ダメです。echoデバッグしてもなんの値も帰ってきませんでした。
せっかくレスいただいたのにすいません。出直してきます。
>>564 新しい知識の量に溺れてしまってる気がする。以下PHPのマニュアルからの抜粋。
mysql_queryはクエリーが成功したかどうかを 表すためにTRUE(非ゼロ)またはFALSEを返します。
またSELECT文の場合は、クエリーが成功してれば新規の結果IDを返します。
このIDは、mysql_result()の引数とすることができます。
参照:
http://www.php.net/manual/ja/function.mysql-result.php 実際には、mysql_resultの説明の下の方にある記述のとおり、
別の関数(mysql_fetch_*)を使うことが殆ど。具体的な値の取り出し方は
googleでその別の関数を探せば多数の例が見つかると思うので、
焦らずに、もちょっと腰落ち着けて読んでみるのがいいよ。
566 :
565 :03/09/20 06:32 ID:???
550見てみたら、判ってるような判っていないような... 変数の使いまわし(and違和感のある命名)してるようなんで、判りづらいッス。
>>564 関数の前に @ を付けていたらエラーが出ないのは当然では?
@ を外してエラーを表示させてみたら分かるかも。
もし、Web ブラウザにエラーを表示させたいのであれば、先に
ini_set('display_errors', 1);
を実行するのを忘れずに。
php.ini で display_errors が Off になっている可能性があるので。
>>554 そのソース、まんまコピペして動かしたらちゃんと動作したぞ
別の理由じゃないか?
そもそもphpなんだから前後にHTML書いておけば少なくとも
何もでないってことは無いだろ?
>>554 私も自鯖(DDNS使用)で動かそうとしたら白紙でした・・・
568さんがいうようにソースに問題がないとしたら、何が問題なのでしょう・・・
>>569 必要なRequet headerを全て付けてページを要求しる
なにが必要かは知らんが、IE6.0が送るもんと
同じものをおくってみな。
572 :
564 :03/09/20 12:42 ID:???
レスありがとうございます。
>>565 ええ、溺れているどころか思いっきり見ず飲み込んで心配停止、脳酸素欠乏状態です。
PHPはおろかWEBProgというかプログラミングを組む事自体が初めてなんです(;^_^A アセアセ…
つい2〜3週間前に勉強を始めたばかりでして、検索スキルもまだ身に付いてないのかもしれません。
mysql_fetch_assoc,object等も試したのですが、やはり同様の結果しか得られませんでした。
変数の使い回しはしてない(ハズ)と思います。しかし、仰るとおり見にくいソースかもしれません。
個人の趣味ページなのでまぁいいか…的な考えではここに書きこする権利ありませんね…
いろいろと調べていただいたのに申し訳ないです。
>>567 @無しでもやってみました。
ローカルテストサーバ、リモートサーバ両方ともなんのエラーも出ません…
ちなみにローカルのphp.iniの設定は確認済みです。
573 :
:03/09/20 16:21 ID:???
配列をグローバルとして扱いたい場合どうやるんですか? $GLOBALを使いたいんですがどうしても上手くいきません。
なんで上手くいかないの
575 :
nobodyさん :03/09/20 16:40 ID:+4uOTOE1
PHPのクラス構造について手を伸ばしました。 <?php class test{ function test(){ $this->old = $old; } function makestr($name){ $rec = $name."の年齢は".$this->old."才です"; return($rec); } } $c = new test(); $c->old = 24; $sd = $c->makestr("私"); print $sd; exit; ?> メンバ変数$oldに年齢をいれてメンバ関数makestrに名前文字列を格納し た引数を渡して戻り値に結合を文字列指定してやり結果として 私は24才です と表示されるように意図しています。 結果は意図した通りに得られましたが構文や用法としてこれは正しい のでしょうか? おながいします。
$this->old = $old; イラネ
577 :
575 :03/09/20 16:43 ID:+4uOTOE1
$this->old = $old; が初期値を設定するつもりは無いので $this->old = ""; が正しいのかとか思うんですがどうでしょうか? 他にもアフォな部分あればおながいします。
578 :
:03/09/20 16:44 ID:???
$GLOBALって配列ですよね?だから多次元配列の容量で参照すればいいのかなと思ったんだけど、$GLOBAL[hoge][0][0]とかってできないんですよ。 連想配列と配列って一緒には使えないんですか?
>>577 それでいい。
でも
var $old = "";
の方が正しいのかな。
varについては、現段階ではあんま意味無い絵k度
<?php $GLOBAL['hoge'][0][0] = 'hoge'; echo $GLOBAL['hoge'][0][0]; ?> 何の問題もないが。
581 :
575 :03/09/20 16:54 ID:+4uOTOE1
>>576 さっそくありがとうございます。
こういうのは初期値を設定してメンバ変数を初期化したい場合に
用いるんでしょうか?
プロトタイプ宣言っていう類ですよね。
582 :
nobodyさん :03/09/20 17:08 ID:c49yCwnt
>>575 何のためにクラスを書くんだよ?
普通はこんなもんだろ。
<?php
class person {
var $age = '年齢不詳';
var $name = '名無しさん';
var $sex = 'お釜かお鍋';
function person($age = null, $name = null, $sex = null) {
$this->age = isset($age) ? "{$age}歳" : $this->age;
$this->name = isset($name) ? $name : $this->name;
$this->sex = ($sex == '男') ? '男性' : (($sex == '女') ? '女性' : $this->sex';
}
function show_info() {
return "{$this->name}は、{$this->age}の{$this->sex}です。";
}
}
$man = new person(15, 'ギコ猫', '男');
echo $man->show_info();
?>
変数の引渡しができません、助けて下さい。 ---------------------------------------------- 値をフォームに入力するファイル( test1.html ) <html><body> <form action="test4.php"> <input type=text name=yyyy> <input type=submit value="送信"> </form></body></html> ↓ test1.htmlより渡された値を受け取るファイル( test1.php ) <HTML><BODY> <? $hensuu = $yyyy - 1000; print "$hensuu "; ?> </BODY></HTML> -1000 という結果が表示されます( test1.htmlのフォームに0をいれない場合 )
584 :
575 :03/09/20 17:37 ID:+4uOTOE1
>>582 用法として参考になります。
でも私の環境(Apache2.0.47+PHP4.3.3)ではerrorなるのは仕様の違いでしょうか
>>584 誤 $this->sex = ($sex == '男') ? '男性' : (($sex == '女') ? '女性' : $this->sex';
正 $this->sex = ($sex == '男') ? '男性' : (($sex == '女') ? '女性' : $this->sex');
閉じ括弧がぬけてた、スマソ。
あとは全角スペースは適当に置き換えれ
586 :
585 :03/09/20 17:47 ID:???
間抜けだ >もれ 正 $this->sex = ($sex == '男') ? '男性' : (($sex == '女') ? '女性' : $this->sex);
register_globalsがらみのヤシは何時のサンプル、マニュアル、参考書見て勉強してるんだろ。
588 :
575 :03/09/20 17:54 ID:+4uOTOE1
>>586 ありがとうございます。
var $age = '年齢不詳';
var $name = '名無しさん';
var $sex = 'お釜かお鍋';
function person($age = null, $name = null, $sex = null) {
のnull値が有効でないんですがこれはどうすればよいんでしょうか
>583 何もかも駄目。マニュアル行き。 >588 あれ、仮引数つかえないの?
違った。仮引数 -> デフォルト値
591 :
583 :03/09/20 19:44 ID:???
逝ってくるのれす (´▽`) はじめてのプログラミングなのれす
基本的には、プロパティの宣言と初期化は同時にやったら駄目。 宣言だけして、初期化はコンストラクタ内で。
>591 マニュアルの「U.7章、PHPの外部から来る変数」んとこです。
594 :
583 :03/09/20 20:00 ID:???
>>589 できたのれす! $_post[]を利用したのれす!
小一時間小躍りしてくるのれす!(´▽`)
595 :
575 :03/09/20 21:00 ID:+4uOTOE1
Delphiのクラス慣れてたんですが勝手が結構違いますね。 好みの差ですが。お手軽さではPHPが分があるかも
PHP、DB関連でのお勧め書籍を教えて下さいペモ
掲示板を作るにはDBの知識は必要ですか? 規模の小さい簡単な物だったら必要無いのでしょうか。 (DBに対する知識は全くありません。PHPも同様です。)
>597 httpd.confに決まってる。 >598 不必要。 >DBに対する知識は全くありません。PHPも同様です。 意味不明。
>>599 レスありがとうございます。
でもそのアドレス(?)入れてみても何も出ませんでした。
apache起動後にやってみたのですがダメでした。
ごめんなさいバカで。
>>600 Cドライブからhttpd.confというファイルを検索しる。
>>598 自分のしたいことを相手に正確に伝えるスキルが必要かと。
602 :
nobodyさん :03/09/21 07:36 ID:kPJ/tg2Z
>>600 httpd.confも知らないで何故apacheがインストール出来ているのか
不思議でしょうがないんだが。
windowsならapacheをインストールしたフォルダにあるhttpd.confを
そのおまいさんが参考にしてるページの通りに書き換えなさいって事だべ?
レスありがとう
httpd.confは書きかえれましたが、最後のアドレスを入力すると、
ページが表示されずにファイルのダウンロードが始まってしまいます。
これは別の所の設定が違ってるのかな。
>>602 インストーラが勝手にやってくれました>apache
605 :
nobodyさん :03/09/21 12:22 ID:YodxgvUG
Apache2ならここにある C:\Program Files\Apache Group\Apache2\conf\httpd.conf で173行目あたりに LoadModule php4_module c:/php/sapi/php4apache2.dll AddType application/x-httpd-php .php を追記して再起動 意味を簡単に説明すると Apacheは本体以外にオマケがいっぱいあってそれらが各種機能を 実装してる。Windows機においてPHPを追加するなら「php4apache2.dll も抱き合わせで起動しろ」と指定する事でApacheがPHPを自分の一部 に取り込んでくれる。これは本来なら外部アプリのはずのPHPを Apacheと合体できるようにする接点として機能する。 で、.phpファイルがPHPを記述したファイルだよと教えてあげれば完了。 ビックワン・ガムと同じでオマケも重要な要素になる。
フレームチャットを作っています。 URLから変数を受け取り、どのモードで動作するか決定しているのですが 入室前はchat.phpで入ります。 もし$modeがformならform画面を表示、logならログを表示 という感じにしているのですが、$modeが無い場合、つまり chat.phpでアクセスしたときは、フレームを作成する(上下二分割)ようにしています。 その場合、 if ( !$_GET['mode'] ) { MakeFrame(); } とすると、ちゃんと動作はするのですがエラーがでます。 @マークをつければエラーは消えるのですが、 つけずに処理を行いたいのです。どなたかご教授下さい。
607 :
nobodyさん :03/09/21 19:29 ID:2Z6bD5eu
正規表現なんですが、 perlの~ /\W/ はphpでは何になるか教えてください。 eregでは使えないと書いてあったのですが、本当でしょうか? 躓いています。
isset($_GET['mode']) || MakeFlame();
609 :
608 :03/09/21 19:33 ID:???
うっわ、恥ずかしいスペルミスしてるよ。LANケーブルで吊ってくる
配列内の文字列の置換を行いたいのですが $test="リンゴ","200"; $data = "リンゴ", "赤いリンゴ","熟したリンゴ","青いリンゴ"; と定義した配列を test[0]と全く同じの$data[0]のみ$test[1]に置換するには どうしたらよいでしょうか?
X個のデータがデータベース内にあるとして <tr><td>$row[url] $row[name]</td><td>$row[url] $row[name]</td>・・・</tr> <tr>・・・</tr> といった出力を得たい場合にどのようにすれば良いのでしょうか。 ご指導頂ければと思い書き込ませてもらいます。 $query ="select name,url from links where types = 'aboon'"; $result = mysql_query($query); while($row = mysql_fetch_array ($result)){ echo "<td>$row[url] $row[name]</td>"; } PHP4.3+mysql
$data[0]=$test[1]; またはarray_searchかin_arrayを使って痴漢する
echo "<td>{$row[url]} {$row[name]}</td>"; にしても、この質問やたら多いな
614 :
612 :03/09/21 20:15 ID:???
615 :
611 :03/09/21 21:05 ID:???
説明が不足しておりました。<(_ _)> <tr> <td>$row[url] $row[name]</td> ←これを4度繰り返す </tr> <tr> <td>$row[url] $row[name]</td> ←そして、まだデータがある場合は2行目を生成する </tr> ・・・以下、3行、5行とデータがある限り続行する。 よろしくご指導のほどお願いいたします;
>605 パターナリズムは駄目初心者を増やすだけだぞ。
>>607 [^[:alnum:]_]
最近だとPCRE(preg_???関数)は標準で有効だから、
ターゲットでphpinfo()なりしてほんとに使えないのか確認したほうがいいよ。
eregは互換のためだけでメリットないから。
>>615 説明不足しすぎ。
4列で改行させたいのであれば、while{}中で$c=1,$c=2.....とカウントしていき、$c=4となったら
echo "</tr><tr>";
を挟み込んではどうだろう
619 :
611 :03/09/22 03:37 ID:???
for($t = 1; $t <= 8; $t++){
echo "<tr>";
for($i = 1; $i <= 4; $i++){
$row = mysql_fetch_array ($result);
echo "<td>$row[url] $row[name]</td>";
}
echo "</tr>";
}
まったく不備だらけで申し訳ございませんです。
自分なりにやってみましたが・・・
・・・これじゃ、セルが埋まるたびにfor($t = 1; $t <= 8; $t++){をいじらないといけないですよね(汗
>>613 >>618 説明不足でしたすみません。
whileの中でカウントをする方法がわかりま(ry
逝ってきます・・・
UN*XのShell上から使える日本語のオンラインマニュアルってないのでしょうか?
621 :
606 :03/09/22 07:02 ID:???
>>608 ありがとうございます。無事にエラーがでませんでしたm(_ _)m
掲示板を作っているのですが、壁にぶつかりました。 ログを新しい順に表示するにはどうすれば良いのでしょうか。 以下の手順をやってみましたが、どうも効率が悪い気がします。 1)$aaa=file("aaa.txt"); ログの内容を全て読み出す。 2)$fp=fopen("aaa.txt","w"); ログを消去。 3)fwriteで今投稿された内容を書きこむ。 4)読み出しておいた元のログを続けて全て書き込み直す。 こうする事で表示方法を変えずにログの中身を新しい物から順に並べられると思ったのですが、 一々ログを読み出すと言うのがちょっと・・・効率が悪そうです。 何か良い方法はありませんか?
>>622 悪いったって新しいものを前に書くとなるとどんなやりかたでもそんなふうになるだろ
ファイル自身には古い順に書き足していって、表示するときにひっくりかえす、とか?
$_SERVER['QUERY_STRING']でできました。すいません。
>>623 レスありがとう。
その方法で解決しました。
whileとarray_popを使って表示方法を変更し、
ログの上書き等をせずに新しい物から順に表示する事に成功しました。
これなら鯖負荷も小さそう(?)です。
PHPは楽しいですね。
応募フォームで応募してきた人に返信メールを送りたいのですが それに受付番号などを自動的に割り振ることは可能でしょうか? またどうやってやればいいでしょうか?
>>627 ただの連番でいいならカウンタの仕組み使ったら?
掲示板で現行ログの最大保持数を超えたら、 現行ログを過去ログへ移動させたいんだけど、 その時の過去ログのファイル名を、 log + 今ある過去ログのファイル数プラス1 + .txt としたい。(例:log1.txt log2.txt log3.txt .......) これを実現する為に、ログとは別にkanri.txtと言うファイルを新たに作って、 そこに現行ログの投稿数と過去ログのファイル数を記録するようにしたんだが、 どうも上手く行かない。 考え方がすでに悪いのだろうか? 自分でもかなりややこしいキモイ事してる希ガス。 とりあえず実装したいのは、「現行ログの最大保持数を超えたら過去ログへ移動」 そして後から過去ログを観覧しやすいようにする事、です。
630 :
nobodyさん :03/09/22 13:21 ID:+PAcu5+e
負荷かかるけどファイル数を調べて+1するとか。 一番無難なのは現行と過去ログの管理ファイルを分ける事。
631 :
nobodyさん :03/09/22 13:25 ID:+PAcu5+e
>>626 漏れは他の言語で応用が利くようにする為にもそういうPHPにしかないような
マイナーな関数は自分で作ってしまう。
値渡しの引数が理解できればすぐに実装できるはず。
>>629 log生成年月日.txt とかはどうだろうか。一日でログが一杯になることはないし、
もしもそういうことが考えられるのなら時間も足すってことで。
>629 >630 ログファイルがかならず揃ってる保証は無いので ファイル数を見るのはあてにならないと思われ 漏れならファイル名に日時を含めるようにするね 掲示板のログファイルなら日時がかぶるほど 更新頻度は上がらないだろうし
ケコーンしてしまった 補足情報としてログファイルにはヘッダ情報を含めると 後々活用できていいと思うよ 特にログファイルのバージョン情報を持たせておけば データ移行時も楽だ
新しく新規で作ったページを他のページに自動リンクさせる方法はありますか?
htmlを書き換える。以上。
638 :
635 :03/09/22 14:36 ID:???
訂正 設定ファイルというものを作ってフォームに名前を入れると そのページが自動作成。 そのページをTOPページからいけるようにTOPに自動リンクを張りたい。 ・・・・教えれ。
639 :
635 :03/09/22 14:37 ID:???
トップページを書き換える。以上。
>>639 ページ自動作成PHPにトップページ書き換えのルーチン入れりゃいいだろ。
自動でhtmlを書き換えればいいだろうが
<!-- DATA_IN --> <!-- DATA_OUT --> というタグを入れておいて、その間を書き換えるようにする。 こうすりゃ自動だ。文句言う前に少しは考えろよ。
2重婚
この馬鹿はプログラムの丸投げしたいだけか?
646 :
635 :03/09/22 14:47 ID:???
言うのは簡単なんだよ 初心者の俺にわかりやすくおまいらサンプルコードぐらい書けや
なんだ、釣りか。
648 :
635 :03/09/22 14:52 ID:???
釣りじゃねー
こいつは釣り師じゃないな 本気で言ってる やばい
こいつ口調からして他の初心者系スレで暴れまわってるやつだろ。 あんまりいじめると逆切れして執拗なコピペ荒らしを始めるから、 完全スルーするがよろし。
そうしよう
652 :
635 :03/09/22 15:38 ID:???
おまいらほんとはわからんのだろ? 初心者板だしな、馬鹿ばっかだな・・・。
スルーだな。
ああ、スルーだ。
655 :
nobodyさん :03/09/22 16:01 ID:+PAcu5+e
非望中傷は、ダメ・ヨ!
作ってやるから金くれ
本7死ね
× 非望中傷 ○ 誹謗中傷
661 :
nobodyさん :03/09/22 16:16 ID:+PAcu5+e
ガキはアメやりゃ泣き止む
とりあえず、教えて貰う奴は謙虚な姿勢で臨めよな そっちの態度一つで答えられる物も答えたくなくなるから
663 :
nobodyさん :03/09/22 17:27 ID:qbVE7obs
データベースから表示させたデータのリストを 検索したり検索解除(=全件表示)したりする物を作りたいと思ってます。 こんな感じです↓ <FROM action="test.php" method="post" name="test"> <INPUT type="text" name="txtfil"> <INPUT type="submit" value="検索" name="btnfil"> <INPUT type="submit" value="解除" name="btnclr"> </FROM> 表示データを検索する物はできたのですが、ここで疑問があります。 HTMLの <INPUT type="submit"〜> は、一つのFROMに対して 一つしか使えないのでしょうか? 一応<INPUT type="submit"〜> にもname属性があるので、どのボタンを 押されたのかの判別ができるのではと考えました。 PHPでは、一つのFROM内のどのsubmitボタンが押されたかを 判別するにはどうしたら良いのでしょうか? それとも、そのような事はできないのでしょうか? PHP4.3.2 で Smarty使ってます。よろしくお願いします。
664 :
nobodyさん :03/09/22 17:42 ID:+PAcu5+e
FROMか・・・
>>662 謙虚かどうかよりも、
1.こういうことがしたい(具体的に)
2.で、こういうことを試してみた(ここ大事)
3.でも、こういうエラー(現象)がでてダメだった
4.特に分からない部分を具体的に
が揃ってるかどうかだな。
特に2が抜けてて「xxがやりたいんで作ってください」みたいな
ヴァカが多すぎる。
FROMはオレもよくやるんだよなぁ 単語として普通だからタイプミスに気がつかないw
そういや、技術評論社のPHPポケットリファレンスはTRUEの誤植が凄く多かったな。 TUREって書いてあった。
669 :
nobodyさん :03/09/22 18:43 ID:0NQ8na7X
初心者でPHPを勉強してるのですが、うまくいきません。どうかご教授ください。 PHPのバージョンは4.3.3です。 sample.php <FORM> <INPUT TYPE="TEXT" NAME="aaa" VALUE=""> <INPUT TYPE="SUBMIT"> </FORM> <?php echo $aaa; ?> これだと Undefined variable: aaa が出ます。 かといって、次のようにaaaを定義しても、サブミットの度にクリアされしまいます。 どのようにaaaを定義すればよいのでしょうか? <?php (string) $aaa=""; ?> <FORM> <INPUT TYPE="TEXT" NAME="aaa" VALUE=""> <INPUT TYPE="SUBMIT"> </FORM> <?php echo $aaa; ?>
670 :
663 :03/09/22 19:04 ID:???
>664 ウホッ! スバラスィ〜サンプル、アリガトウ!! (´ε`)-♪ 大変良く判りました。unko.phpファイルは宝にします。 ちなみに、下記フォームを ---- <form method="POST"> <p><input type="submit" name="B1" value="送信"><input type="submit" name="B2" value="送信"><input type="submit" name="B3" value="送信"></p> </form> ---- こんな風に受け取るサンプルでした。 ---- foreach($_POST as $a => $b){ if($b == "submit"){ print $a; } ---- >665-668 失礼ししました。
671 :
663 :03/09/22 19:06 ID:???
>670 訂正 ---- foreach($_POST as $a => $b){ if($b == "送信"){ print $a; } ---- >669 こんな感じかな。 <FORM action="sample.php" method="post"> <INPUT TYPE="TEXT" NAME="aaa" VALUE="abc"> <INPUT TYPE="SUBMIT"> </FORM> <?php echo $_POST["aaa"]; ?>
672 :
nobodyさん :03/09/22 19:29 ID:0NQ8na7X
>663 様、ありがとうございます。 sample.php ----- <FORM action="sample.php" method="post"> <INPUT TYPE="TEXT" NAME="aaa" VALUE=""> <INPUT TYPE="SUBMIT"> </FORM> <?php echo $_POST["aaa"]; ?> 試しましたが、やはり Undefined variable: aaa が出てしまうのですが・・・。
>>672 じゃあ、これで
$aaa = $_POST["aaa"];
674 :
nobodyさん :03/09/22 19:42 ID:0NQ8na7X
>>673 こんどは
Undefined index: aaa が出てしまいました。
バージョン4.3.3がよくないんでしょうか。
4.2.x と 4.3.xはかなり違うという話もありますし。
んじゃあんましお勧めしないが import_request_variables('gp', ''); これをなるべく上の方に置いて、echo $aaa; してみて
676 :
nobodyさん :03/09/22 19:57 ID:0NQ8na7X
今、こんな感じなのですが、やはり駄目です。 <?php import_request_variables('gp', ''); ?> <FORM action="sample.php" method="post"> <INPUT TYPE="TEXT" NAME="aaa" VALUE=""> <INPUT TYPE="SUBMIT"> </FORM> <?php echo $_POST['aaa']; ?> import_request_variables(): No prefix specified - possible security hazard と Undefined index: aaa が出てしまいます。
単純に safe_mode というだけじゃなさそう? エラー出力が最大になってるんだろう、submitする前のエラーなのか? かまわずsubmitできないかね?
POST受け取れてないっぽいな POSTが受け取れない状況なんてあるっけ
679 :
676 :03/09/22 20:15 ID:0NQ8na7X
submit はできますが、 最初に表示させた時点で、エラーメッセージが表示されて しまうのです。
680 :
nobodyさん :03/09/22 20:21 ID:fh6K5MyE
<?php if (isset($_POST['aaa'])) { echo $_POST['aaa']; } ?>
681 :
676 :03/09/22 20:22 ID:0NQ8na7X
二つのファイルの分けたら、エラー出ませんでした。 でも、1ファイルだとうまくできないんですかねぇ・・・。 どうも、ありがとうございました。 sam1.php <FORM action="sam2.php" method="post"> <INPUT TYPE="TEXT" NAME="aaa" VALUE=""> <INPUT TYPE="SUBMIT"> </FORM> <?php (string)$aaa=""; ?> sam2.php <?php echo $_POST['aaa']; ?>
682 :
nobodyさん :03/09/22 21:43 ID:xOLiE8Dr
すみません。Javaプログラム初心者なんですが 1.シンボルを解決できません 2.<identifier>がありません の意味をご教授ください
ここはPHPスレですが…
684 :
nobodyさん :03/09/22 21:48 ID:xOLiE8Dr
あ!すいません
685 :
nobodyさん :03/09/23 01:21 ID:6Mk4vLXQ
1,title,Q,A1,,A3,,2003:09:23 00:48:20 2,title,Q,A1,A2,A3,A4,2003:09:23 00:52:29 3,title,Q,A1,A2,,,2003:09:23 00:53:26 4,title,Q,,A2,A3,global,2003:09:23 00:54:48 この様な内容のファイルから 4,title,Q,,A2,A3,global,2003:09:23 00:54:48 ↑この4(最終行の最初の番号)を取得したいのですが 逆ソートする方法しか思いつかないのですが他に何か無いでしょうか?
とりあえずDB使うとか。
>>685 普通に最終行の最初の番号取得すればいいじゃん。ソートとかせずに。
,で分割して最初の要素をとるとか。
688 :
nobodyさん :03/09/23 02:46 ID:6Mk4vLXQ
689 :
nobodyさん :03/09/23 03:06 ID:2l0WTZfM
今似たような事やってるとこ。 一行一行読みながら(file()でもいいけど) ファイルポインタの位置を見て、最後までいったら 前の行からその番号を取得するでいいんでない? #自分のはループのネストが3つ、その中で2つのファイルを読み書きで #ファイルポインタ移動したりでもう死にそう。
パーミッションってなんですか。
検索しろ
スレッド型の掲示板を作ろうと思うのですが、 各スレッドの1番目の投稿(タイトル)を記録したファイルと、 その他のレスのファイルは別々にすれば良いのでしょうか? どう作れば良いのかいまいち分からないです。 DBを使うべきでしょうか?
>>692 スレッド型の掲示板とだけいわれてもピンキリあるが。
>>693 2ch掲示板の上から3つ目の緑枠(スレ一覧)のみの形にしたいんです。
ここからスレッドをクリックすると、下の部分にレスを表示と言う機能もつけようと思ってます。
695 :
nobodyさん :03/09/23 08:32 ID:/wROj+xt
>>695 インデントがめちゃくちゃで気持ち悪いよ。
697 :
nobodyさん :03/09/23 11:42 ID:/wROj+xt
その程度のコメントしかできないか
まだバグフィクスって、今までにフィックスできたことあったっけ?www
>本7 まともな指摘は素直に受け取れよ。 タブ・スペース2個・スペース4個・インデント無しが入り混じりだぞ。 読む前に突っぱねたくなる。 閉じ括弧がインデント無しで↓みたいに連続してるのはさすがに目を疑った。 } } }
>>669 <FORM>
<INPUT TYPE="TEXT" NAME="aaa" VALUE="">
<INPUT TYPE="SUBMIT">
</FORM>
<?php
if (!empty($aaa)) echo $aaa;
?>
でいいんじゃないの?
702 :
nobodyさん :03/09/23 14:26 ID:AVDEDK0L
notfound.phpってphp使う意味がわからん
703 :
nobodyさん :03/09/23 14:27 ID:/wROj+xt
>>699 ほとんどメモ帳で書いたから許せ。
そのうちに前面改修すると思う。
704 :
nobodyさん :03/09/23 14:30 ID:AVDEDK0L
if(file_exists("うんこc:/afolistlog/$brd.log")){ $lls = file($fpath.$brd."/lastmes.dat"); $cn = count($lls); if($cn < 10){ $cr = 0; }else{ $cr = $cn -10; } てめえプログラマをなめてんのか?
705 :
nobodyさん :03/09/23 14:37 ID:/wROj+xt
>>704 作りかけの規制ロジックを無効にしてるだけだよ。
公開バージョンと1000GEX実装でずいぶん差が開いてきたんで
そろそろ更新しようかとも思うが時間がない。
全部クラスに取り込んで構造を明確化したいんだが
707 :
nobodyさん :03/09/23 14:49 ID:AVDEDK0L
//************ スレスト if(ereg("★",$name) && ($mes == "****")){ $name = "停止しました"; $mail = "停止"; $mes = "真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ"; $suresuto = 1; } //************ スレスト if(ereg("★",$name) && ($mes == "fukki")){ $name = "スレスト解除しました"; $mail = "解除"; $mes = "真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ"; chmod($fpath."$brd/dat/$sid.dat", 0777); } chmodの意味無いし、キャップで****って書いたらスレストか。
708 :
nobodyさん :03/09/23 15:07 ID:/wROj+xt
709 :
:03/09/23 15:28 ID:???
弄るなよ喋りたがり供が
本7死ね
もう、本7は徹底放置でやってくれ。 みんなが構うから本7が質問しまくってスレが荒れる。 頼むよ・・・(;´д`)
セッション管理について質問です。 クッキーの使えない状況下ではセッションIDをURLにつけますが、 このときのセッションIDを一過性というか、毎回ランダムにしたいです。 どうしたらいいでしょうか? session_name(uniqid("")); などを実行して毎回ユニークなセッションIDに改名しようと思ったのですが どうもこれではセッションID名が変わらないみたいです。
本7死ね
715 :
nobodyさん :03/09/23 19:48 ID:3LvyB+ux
GetImageSize関数を使っているのですがご教授下さい。
1つのサーバの中に仮想サイトAとBとCを作っていて、
AとBそれぞれにある画像のサイズを、Cのサイトで取得したいのです。
今まで下記のようにしてうまく取得出来ていました。
$size = getimagesize("
http://www.AAA.co.jp/image1.jpg ");
ところがAのサイトから突然サイズを取得出来なくなってしまいました。
Bのサイトからは普通に取得出来ています。
両方のサイトは同じような設定で、画像ファイルやフォルダのパーミッションや
所有者も確認して、同じような設定になっているのを確認しました。
$size = getimagesize("
http://IPアドレス/~ユーザ名/image1.jpg "); にしてみても変わりません。
$sizeに何も入ってこない状態です。(エラーやwarningは出てません)
なぜAのサイトだけからサイズの取得が出来なくなったのか、、何か考えられる、
チェックするべきところありましたらアドバイス下さい。
716 :
nobodyさん :03/09/23 19:50 ID:cxgYlhLB
同じ鯖のファイルだったらHTTP介するよりも $size = getimagesize("/virtual/username/siteA/image1.jpg"); みたいにフルパスで指定した方が速いしトラブルが少ないと思うんだけど。
718 :
715 :03/09/23 20:09 ID:3LvyB+ux
>>717 ありがとうございます。
試してみたところ下記のwarningがでました。
SAFE MODE Restriction in effect. The script whose uid is 3014 is not allowed to
access /home/省略/image1.jpg owned by uid 80
これは所有権によるエラーですかね?
>>718 同じサーバーに複数のアカウントを持ってるのね。
で、PHPがセーフモードで動いていると。
その場合はパーミッションが読み書きOKでも他のアカウントの
ファイル/ディレクトリを操作できないので(うろ覚えだけど)
やっぱりHTTP経由で取得するしかなさそう。
そして役に立てなくて悪いけど俺には
>>715 の原因はわからない。
他の人のヘルプを待ちましょう。
720 :
nobodyさん :03/09/23 20:24 ID:V0eyRyS0
>>713 セッション一からやり直せ
session_nameを何か勘違いしてる
>>718 SAFE MODE言うとるがな
sendmailが使えないと メールの送信はできませんか?
723 :
715 :03/09/23 20:49 ID:3LvyB+ux
>>719-720 ありがとうございます。同じサーバに複数のアカウント、です。
>>717 のwarningはセーフモードによってユーザIDが違う為読めないというように
解釈しました。
>>715 の件なのですが、サーバ上からはサイトAの画像サイズGETは出来ないのですが、
自宅ローカル環境からはgetimagesizeで普通に取得出来ました。(httpからの指定です)
724 :
721 :03/09/23 20:53 ID:zsX51j5/
726 :
nobodyさん :03/09/23 21:02 ID:/wROj+xt
>>725 そないなことせんでもphpにSMTP喋らせればええやんか。
728 :
713 :03/09/23 22:17 ID:???
>>720 ありがとうございます。 結局、セッションを一度破棄したあとに
適当なセッションIDに替えてセッション変数は全て再登録しました。
最新のならセッションIDのリネームが出来たのですが
最新ではないので出来ませんでした。 残念です。
>>713 session_nameとsession_idは違うよ。
それとuniqid("")だと予測がつきやすいので、
マニュアルにもあるとおりmd5()で再処理した方がよい。
730 :
nobodyさん :03/09/24 12:13 ID:aJnK3rxv
質問させていただきます。 WindowsXP上で、PHP4.3.3+AN HTTPDAEMONを使っています。 phpファイルの記述はUTF-8にしています。 データを外部アプリケーションに受け渡すため、XMLの形式に 構造体を変換しようとしています。 そこで、xmlrpc_encode()を使ってみたのですが、 全角文字が文字コードや、得体の知れない文字に置き換えられてしまいます。 例) <?php $myDog = array ( "color"=>"茶色"); $theString= xmlrpc_encode ($myDog); print $theString; ?> ……このとき「茶色」が「??¶??」となる この状況を解決したいのですが、どなたかご教授頂ければ幸いです。 宜しくお願い致します。
731 :
730 :03/09/24 12:16 ID:aJnK3rxv
すみません、投稿した文章じたいが文字化けしてしまいました。 上の「茶色」が置き換わる文字は 「&#232;&#140;¶&#232;&#137;2」(&#は半角) です。
>730 解答ではないのですが,現象としては"茶色"(UTF-8)という文字列が 1バイトずつ変換されているようですね. 当方に XMLRPC 関数を使用できる環境が無いので実験も出来かねる 状況ですが,UTF-8 の仕様から考えてもバグのような気がします. XML RPC を利用したいということではなく,単純に XML のデータを 作成したいということであれば DOM XML 関数を使うとか PEAR の XML コンポーネントを使った方が楽かもしれませんね.
733 :
730 :03/09/24 13:54 ID:???
>732 早速のご回答、有り難うございます。 やはり現状では、XMLRPCの使用は避けた方が 無難かも知れないようですね。 > DOM XML 関数を使うとか PEAR の > XML コンポーネントを使った方が それでは、こちらからのアプローチを検討してみます お忙しい中、有り難うございました。
4.3.3はphp.iniのmb_xx も効いてくる。まあ他の関数で問題なければいいか
735 :
732 :03/09/24 16:20 ID:???
>734 mbstring.internal_encoding を明示的に UTF-8 に設定しないと 誤動作の原因になるってことかな? 初期状態では NULL (no value)になってるみたいだけど このままだとどうなんだろう・・・
>>735 とりあえず、↓の設定入れて違いを比べてみて
mbstring.language = Japanese
RedHat8.0 PHP4.3.3をインストールしました。 ですが、 Fatal error: Call to undefined function: 状態で マルチバイト関数が使えません。 おそらくコンパイル時に --enable-zend-multibyte --enable-mbstring --enable-mbregex あたりを指定してなかったからだと思うのですが・・ 再コンパイルせずにマルチバイト関数を使えるようにするには どうすればよいでしょうか?
738 :
nobodyさん :03/09/24 16:52 ID:vH3BvScd
configureとかmakefileに記述されてるmbstring関係を手動でやればできるかも。 ヤマカンだが
ここで聞いて回答を待つよりコンパイルし直した方が早いと思う。
740 :
nobodyさん :03/09/24 17:16 ID:vH3BvScd
こんな感じでどうだろ ./configure ¥ --with-apxs2=/usr/local/apache2/bin/apxs ¥ --enable-mbstring ¥ --enable-mbstr-enc-trans ¥ --enable-gd-native-ttf ¥ --with-gd ¥ --with-freetype-dir=/usr ¥ --with-jpeg-dir ¥ --with-zlib=/usr ¥ --with-png-dir
741 :
732 :03/09/24 17:25 ID:???
気持ち悪いのでローカルにApacheとPHP入れてみた これから試してみます(逃避)
742 :
732 :03/09/24 18:11 ID:???
XMLRPC について
結論から言うと今回のケースで PHP の値を XML に変換したい場合
xmlrpc_encode を使うと日本語は化けてしまうみたいです。
おそらく XMLRPC の内部で設定されるオプションが
日本語にやさしくないのだとおもいます.
(ソースを確認したわけではないのではずしているかもしれませんが)
とにかく化けてなくて XML の形になってればいいということであれば
次のようにすることで実現できました.
<?php
$output_options = array(
"escaping" => array(""),
"encoding" => "utf-8"
);
$myDog = array ( "color"=>"茶色");
$theString = xmlrpc_encode_request ("TEST_METHOD", $myDog, $output_options);
print $theString;
?>
参考にしたURL
■xmlrpc-epi-php
http://xmlrpc-epi.sourceforge.net/main.php?t=php_api やはり XMLRPC 関数群は XMLRPC のサーバー及びクライアントを記述
するためのものなので用途外の使用は自己責任でってことですね
743 :
nobodyさん :03/09/24 18:34 ID:P03itb4/
バイナリーファイルのデータを表示したいのですが、 以下のプログラムではうまくいきません。(すべて0で表示されてしまう) どのようにすれば良いのでしょうか? test.datは4byte単位でintegerデータが格納されています。 <html> <?php $fname="/home/test/test.dat"; $fd=fopen($fname,"rb"); $o=0; for($i=0;$i<10;$i++){ $ans=fseek($fd,$o); $o=$o+4; $a=fread($fd,4); settype($a,integer); printf ("%d<br>",$a); } fclose($fd); ?> </html>
>>743 settype($a,integer);
printf ("%d<br>",$a);
を
$a = unpack("l1int",$a);
printf ("%d<br>",$a["int"]);
にするとか
745 :
744 :03/09/24 19:32 ID:???
つーか、unpack 覚えればそのループいらなくなる phpのunpackが一番わかりにくいが、いろいろ試せ
746 :
nobodyさん :03/09/24 19:39 ID:Sr+L93eT
748 :
746 :03/09/24 19:49 ID:???
元ページ見にいったらサムネイル版てのがあるじゃん これの ImageCopy の最後の4つが、コピー先の縦横サイズ、コピー元の縦横サイズ だから、コピー元をコピー先と同じにすればカットになるよ
750 :
746 :03/09/24 20:06 ID:???
情報ありがとうございます さっそく試してみます
つーか、元のはImageCopyResampled か。 ImageCopyにして引数2つ外せば同じことになる、、ね
752 :
nobodyさん :03/09/24 20:34 ID:EOude8h6
DBの接続について教えてください 現在PHP3でDBを介したWebシステムを作っているのですが DBの接続に関してmysql_connect()を使った方がいいのか mysql_pconnect()を使った方がいいのかいまいちわかりません。 持続するかしないかの違いはわかるのですが どっちの方が効率的なのか教えていだだけないでしょうか? よろしくお願いします。 またエラー等に関しても教えていただければ幸いです。
753 :
nobodyさん :03/09/24 21:54 ID:vH3BvScd
とりあえずPHP4にするべきだな
質問させてください。 php-4.3.2を使用しているのですが、 ダブルクォートなどのデータをフォームからPOSTで送信したときに 文字の前にエスケープ文字「¥」がついてしまいます。 これの原因はphp.iniの magic_quotes_gpc = On になっているからというのは分かるのですが、サーバーの設定ができないため 設定を変更することができません。 正規表現でエスケープ文字を排除したいのですが、 以下のように書くとWarningが出てしまいます。 どのように書けばよいでしょうか。 $data = ereg_replace('\\','',$data); //自分でもなんとなくダメっぽいのはわかるのですが・・ こんなメッセージが出ます。 Warning: ereg_replace(): REG_EESCAPE in ... よろしくお願いします。
>>754 $data = ereg_replace('\\\\','',$data);
または
stripslashes($data);
シングルクオートかダブルクオートかろくに見ないで コピペしちまった。適当に読み替えてちょ
757 :
nobodyさん :03/09/24 23:09 ID:bmeLGGxY
>>744 様
>>745 様
ありがとうございます。見事表示されました。
unpackをしっかり勉強いたします。
>>755 ありがとうございます。
明日やってみます。
759 :
nobodyさん :03/09/25 08:36 ID:d6wIetxr
2packも勉強汁
760 :
730 :03/09/25 10:17 ID:cH0TouD3
昨日質問させていただいた730です。 あれから732様をはじめ、多数のフォローを受け 感激しております。ありがとうございました。 さて、お勧めいただいた方法のひとつDOM XML関数を 用いて挑戦しているのですが、やはりマルチバイト文字が コードに置き換わってしまいます。 (今回は前回と違い、化けのない正しいコードになっています) 例) <?php $documents = domxml_new_doc("1.0"); $pet = $documents->create_element("pet"); $pet = $documents->append_child($pet); $dog = $documents->create_element("myDog"); $dog = $pet->append_child($dog); $color = $documents->create_element("color"); $color = $dog->append_child($color); $text = $documents->create_text_node("茶色"); $text = $color->append_child($text); print $documents->dump_mem(true); ?> これで生成されるXMLが <?xml version="1.0"?> <pet> <myDog> <color>&#x8336;&#x8272;</color> </myDog> </pet> php.iniのマルチバイト関連をあれこれいじっているのですが どうにも結果が変わりません。また、print "茶色";は、ソースでも 「茶色」と、正しい表示がされます。 どなたかご教授いただければ幸いです。宜しくお願い致します。
$documents = domxml_new_doc("1.0"); を $documents = domxml_open_mem('<?xml version="1.0" encoding="EUC-JP"?><dummy />'); $documents->remove_child($documents->document_element()); とかにしたらどうなる?
762 :
730 :03/09/25 12:19 ID:???
>761 早速のお返事、ありがとうございます。 お伝え頂いた方法(文字コードはUTF-8にしました)を 試したところ、問題なくマルチバイト文字が処理されました。 大変助かりました。 なぜこの方法でうまくいったのかが、勉強不足で分からないため 今からdomxml_open_memについて調べてみようと思います。 お忙しいところをご教授いただき、ありがとうございました。
763 :
nobodyさん :03/09/25 15:53 ID:d6wIetxr
Apache2.0.47+PHP4.3.3RC1で成功 <?php $documents = domxml_new_doc("1.0"); $pet = $documents->create_element("pet"); $pet = $documents->append_child($pet); $dog = $documents->create_element("myDog"); $dog = $pet->append_child($dog); $color = $documents->create_element("color"); $color = $dog->append_child($color); $text = $documents->create_text_node(mb_convert_encoding("茶色","UTF-8")); $text = $color->append_child($text); print $documents->dump_mem(true); ?>
764 :
nobodyさん :03/09/25 15:56 ID:d6wIetxr
<?php $documents = domxml_open_mem('<?xml version="1.0" encoding="SJIS"?><dummy />'); $documents->remove_child($documents->document_element()); $pet = $documents->create_element("pet"); $pet = $documents->append_child($pet); $dog = $documents->create_element("myDog"); $dog = $pet->append_child($dog); $color = $documents->create_element("color"); $color = $dog->append_child($color); $text = $documents->create_text_node(mb_convert_encoding("茶色","UTF-8")); $text = $color->append_child($text); print $documents->dump_mem(true); ?> の間違い。失礼
765 :
nobodyさん :03/09/25 17:38 ID:gVK7vwAH
phpのマニュアル読んでも日付・時刻に関する関数の種類が 少ない気がするんですが、よくある使い方としてある日付を 基点とする日数分の過去・経過日付を求めるのって どうすればいいんでしょうか?
date('y/m/d', time() ± n * 86400)
juliantojd()とか使うんじゃないか って、オプションつけてコンパイルが必要か・・・
単純に、元時間が秒でできているから、それから計算してるけど。
1970以前とか、2038以降が無いんだったらそれでもいいんじゃないか
PHPってintは32bitなん? まあオレは2038年には生きて無いわけだが
>>769 で、34歳以降の人だけ計算がfailするスクリプトのできあがり。
773 :
nobodyさん :03/09/25 18:29 ID:d6wIetxr
mod_phpで実行権限を実行ファイルの所有者で利用する方法(suExec)を ご存知の方おられませんか?
無理
>>773 PHP-usersで出てたことがある。
結論は、出来ない。だったような。
PHPの将来性に危機感を抱いているのですがPHPのシェアが破綻したら皆さんは どの言語に乗り換えられますか? やはりJSPなんでしょうか。
>>776 乗り換えつうか、PHPも出来てJSPも含むJavaも出来るというパターンでは?
将来性...個人的にはソフト産業(構造)自体に疑問が。
まあ出来てからそんなに経ってない産業だからかもしれぬか。
PHPなんか覚えても無駄。 無駄無駄無駄。
779 :
nobodyさん :03/09/25 19:47 ID:NEF9q2qx
黙れ!
780 :
nobodyさん :03/09/25 19:53 ID:NEF9q2qx
>>773 >>775 773ではないけど、
それってapacheやPHP自体のソースをいじくっても
できないものなの?
つまり原理的に無理ってこと?
>>780 mod_phpはApacheの一部として動作させてる訳だから、
実行権限はApacheそのものになるって事じゃ?
MLかどこか失念したけどApache2系だと それに近いことができるモジュールがあるってのを見たことがある。 1.3.xでは無理。
>>765-766 mktime(0, 0, 0, 9, 25 + $n, 2003);
の方が確実じゃねえか?
784 :
nobodyさん :03/09/25 21:17 ID:d6wIetxr
>>780 それなんですよ。
WebDAVのMLでDAV上から生成したファイルの所有者をディレクトリに
なるような事に成功しているようなんでPHPでも可能性はあるかと思った
んですが私はCがよく分かっていないので他の情報をアテにしちゃってるんですが。
785 :
nobodyさん :03/09/25 21:18 ID:d6wIetxr
訂正 ファイルの所有者をディレクトリになるような事 × ファイルの所有者をディレクトリ所有者に同期するような事
あのう、クッキーでディレクトリに関わらず、 ドメイン内で使いたいんですが、pathのところにはなんていれればいいのでしょうか? 教えてくださいお願いします。
787 :
:03/09/26 04:03 ID:RaZMqe21
>>787 さま
それだと、オペラで表示できないとか・・・
どうなんでしょ?
789 :
787 :03/09/26 06:30 ID:RaZMqe21
微妙なところはブラウザによって挙動が変わる あきらめるかブラウザによって変えるか・・・
>>784 それ見たわけじゃないけど、ファイル生成部分を別プロセスに
することで実現しているような気がしないでもない
phpでプロセスを別にするってことはcgiとかわらない罠
>>780 そりゃapacheやphpを変えれば可能にはなる
とっさに思いつくのは、Apacheをrootで動かし、
php実行時にユーザーを切り替える、という仕組み
Apacheをrootで動かすというリスクがあるのが難点
793 :
792 :03/09/26 11:02 ID:???
って、終了時に元に戻れないから別プロセス起動すんのと あんまかわんないか、、、今のは無し…
すいません、質問なんですが。 クッキーを使用しないセッションをテストしているのですが、 有効期限を設定したいと思いまして、 session_cache_limiter('private'); session_cache_expire(1); としています。 一方、出力するHTMLのヘッダでは <!-- disable cache for HTTP/1.1 --> <meta http-equiv="Cache-Control" content="no-cache, must-revalidate"> <!-- disable cache for HTTP/1.0 --> <meta http-equiv="Pragma" content="no-cache"> としています。 これらは同じ物を設定しようとしているのでしょうか? もし同じなら統一しないとマズイことになりそうで・・・ 厨なこと言ってすいません。
>>794 キャッシュの設定は、ブラウザやそのバージョンによって違う
(古いものはCache-Controlを認識しない、とか)
そのために両方設定してるのだと思いますが
>>795 ということは同じ物を2通りの方法で設定しているということですね。
今、telnetでテストしてみましたところ、
session_cache_limiter('private'); は
Cache-Control: private, max-age=10800, pre-check=10800
と帰ってきて、効いているようなのですが、
session_cache_expire(1); は
Date: Fri, 26 Sep 2003 02:32:58 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
と帰ってきて、効いてないように見えます。
他にはそれらしいものはヘッダ内に見当たりません。
(しかしなぜ、過去の値がデフォで設定されているのか・・・アパッチノ設定カナ)
ということは
session_cache_limiter ---> ヘッダのCache-Control
session_cache_expire ---> どこかヘッダ以外のところ?
ということなんでしょうか。
ほんじゃ、session_cache_expire っていったいどこに効いてるんでしょうか?
しかし、session_cache_expireはsession_cache_limiter('no-cache'以外)にしなければ有効にならないとなっているのに、この2つの関数が別々のところを操作してるなんて・・・フクザツ杉
797 :
nobodyさん :03/09/26 11:46 ID:GW+buTSd
ある年月日がその月の第何週に当たるのかを求めたいのですが、 便利な関数はないでしょうか? $firstdate = strtotime("2003-9-1"); $date = strtotime("2003-9-25"); echo strftime("%U", $date) - strftime("%U", $firstdate)."<BR>"; これだと1日と同じ週だとバグっちゃうし。。
>>796 禿げしく間違っておりました。もう一度テストしてみたところ、
session_cache_limiter('private');
session_cache_expire(1);
で
Cache-Control: private, max-age=60, pre-check=60
と帰ってきてて
session_cache_expireは
max-age, pre-checkを設定してるということがわかりました。
お騒がせしますた。
>>797 未確認だけど
date('w')をループで回して日曜か月曜をカウントするってのは?
>>799 ありがと。これでうまくいったYO!
799タンと同じ考えだったね。
function get_week($yy, $mm, $dd)
{
$firstdate = strtotime($yy."-".$mm."-01");
$date = strtotime($yy."-".$mm."-".$dd);
$dateU = strftime("%U", $date);
$firstdateU = strftime("%U", $firstdate);
$datew = strftime("%w", $date);
$firstdatew = strftime("%w", $firstdate);
if ($datew < $firstdatew)
$ret = $dateU - $firstdateU;
else
$ret = $dateU - $firstdateU + 1;
return $ret;
}
(1日の曜日[0 = 日曜,6 = 土曜] + 日にち[1-31] - 1) / 7 で出ると思うが
もしかして第X何曜日って知りたいの? だったら、(日付 - 1) / 7 なんだけど・・・
803 :
797 :03/09/26 13:10 ID:???
>>802 マジっすか!!!
ショボーン。
でも、ありがd。
804 :
学生 :03/09/26 19:12 ID:inh4HiXw
教えてくださーい! max_execution_timeが設定されているレンタルサーバで ブラウザにファイルを保存させる処理を作ってるのですが ダイアログでファイル名を選択している間に、 max_execution_timeを消費してしまい 全てのデータが保存されない場合があります。 しかも困ったときに途中までのデータのファイルが作成され エラーになりません。 これをエラーにすることって可能でしょうか?
>>805 2ステップに分ければ?
・一時ファイルを保存
・ファイル名を選択した後、一時ファイルをリネーム or 削除
807 :
732 :03/09/26 19:36 ID:???
>804 トグル変数を用意してスタイルのクラスを切り替えましょう
>>806 ありがとうございます。じつは
レンタルサーバで容量も限られてるので
できればサーバ上に保存はしたくないんです。すみません。
一時ファイルの削除処理がうまくつくれればいいのですが、
どうしてもcronのようなもので削除する方法しか思い浮かばなくて
タイムラグが気になります。
headerでlength出力してもブラウザは無視するようですし、
なにかいい方法はないでしょうか?
>>808 gzipとかで動的ファイルを整理するフローを覚えたら役に立つと思う。
>>808 ファイルの内容をセッションに書き出すとか・・・
内容が巨大だと無理だけど。つか、そのファイルの大きさってどのくらいよ?
もっと具体的に何をしたいか言ってくれないとどうしようもないのだが。
>>808 /varディレクトリが開放されていないかな?
safe_modeに引っかかるかもしれないが
813 :
808 :03/09/27 00:33 ID:???
>>808 されてないっすー
shellもcronも使えないレンタルサーバ(WebARENA)です
max_execution_time のエラー?を検地するのは難しそうですね。
素直にダウンロード用のファイルを作るなど、
別の仕組みを考えてみます
ありがとうございましたーー
814 :
nobodyさん :03/09/27 01:21 ID:7nql3/tO
815 :
nobodyさん :03/09/27 01:36 ID:efY9iLPN
>>814 思いっきりマニュアルに出ているんだが。
>>813 新しいアクセスが来たら前のアクセスの一時ファイルを消すような感じ
じゃだめなん?複数の順番を記録して削除スケジュール作ってもいいと思うし。
>>816 そんな簡単なもんじゃない
いいかげんなこというなよなー
819 :
学生 :03/09/27 09:55 ID:61F6YpQx
>>807 ありがとです。
あとは自分で調べて考えてみます。
820 :
nobodyさん :03/09/27 10:15 ID:braCVDna
ずばり、PHP3で文字コードをEUCにするにはどうすればよろしいのでしょうか?
↑ うんこが主食 ↓
imap_open("{".$server.":110/pop3}INBOX",$account,$pass)) でアクセスしようとすると、Couldn't open streamと表示され通信が 行なえない様です。Web検索すると数件ヒットするものの解決したものみつける 事が出来なかったので質問させて頂きます。 メールソフトからIMAPサーバーへのアクセスは行なえるのでIMAPサーバー の問題ではないと想われます。またphpinfo()では、 IMAP c-Client Version2001 SSL Supportenabled Kerberos Supportenabled となっております。 PHPは4.2.2であり、imap.soも存在します。 原因と解決策を御存じの方は教えて頂けないでしょうか?
824 :
814 :03/09/27 16:14 ID:???
>>815 すいません。
見たけど意味がわかりません
>>823 IMAPサーバって言うことは、IMAP使えるんだよね?
110でpop3を使ってるのはどういった理由?
>>824 例 2追加ヘッダを付加してメールを送信する
mail("
[email protected] ", "the subject", $message,
"From: webmaster@$SERVER_NAME\r\n"
."Reply-To: webmaster@$SERVER_NAME\r\n"
."X-Mailer: PHP/" . phpversion());
828 :
814 :03/09/27 18:36 ID:???
829 :
814 :03/09/27 18:37 ID:???
少し休んだのでわかるようになりました。
830 :
nobodyさん :03/09/27 18:41 ID:z1Qwr1Ct
apache2.x + php4.x で <?include
http://hoge.checker/? > (IPアドレスとかみれる確認ページ)を
表示させるとIPがサーバ側になってアクセスできてしまうんですが、これを
IPがクライアント、またはアクセスさせないようにすることは可能でしょうか?
include自体無効にしようにも、includeで内部ファイル指定してたりするので、
includeそのものを無効にはできないのです。
これを応用されてproxyとかに使われそうで....。
831 :
ポルノクウラ :03/09/27 19:11 ID:PgFm1LtN
チンドー
833 :
830 :03/09/27 21:26 ID:z1Qwr1Ct
includeされるサーバにとってはincludeするサーバがクライアントになるからでは。
835 :
:03/09/27 21:31 ID:???
ハァ・・・
>>833 サーバAのphpでサーバBのファイルをincludeすると、
AがBにアクセスしてその結果を出力する。
プロキシの心配をしているってことは、
includeの引数をユーザが設定できるようになっているのか?
838 :
830 :03/09/28 00:14 ID:SGKixdue
>>834 そうですね。
>>837 そんな感じです。
<?include
http://* ?>は無効で
<?include /home/* ?>とかは可能なようにphp.iniなどで設定できればいいんですが...。
>>838 --enable-url-fopen-wrapper 無しでコンパイル。または、
php.iniの allow_url_fopenで設定。
840 :
nobodyさん :03/09/28 01:27 ID:3KKnzsrV
サーバーにアクセスがあったけどファイルが存在しなかった場合に
404.phpというファイルを表示させるように.htaccessで設定しています。
で、この404.phpが呼び出された時、訪問者がどんなURLにアクセスしているのか
取得する方法はないでしょうか?
過去ログを見たところ、自分自身のURLを取得する方法はあったのですが、
今回の場合はそれだと常に
http:// 〜〜〜/404.phpとしかならないので。
よろしくお願いします。
841 :
715 :03/09/28 01:56 ID:tGfRKpu1
842 :
830 :03/09/28 01:57 ID:SGKixdue
>>840 $_SERVER['REQUEST_URI']
>>845 同意。
ホントにいろんなコーディングする人がいるな。
↑ うんこが主食 ↓
848 :
nobodyさん :03/09/28 11:55 ID:R65WBK9G
phpでポップアップウインドウを出して、 そしてurl転送するにはどうすればいいんでしょうか?
phpはハイパーテキストプリプロセッサーだって言ってるだろ。
850 :
nobodyさん :03/09/28 12:19 ID:2wjusCgF
うう
>>849 プリプロセッサと言うことは本ちゃんのプロセッサがどこかにいるって事だな。
Webサーバか?
ZEBDエンジンだろ
それZOPEとごっちゃになってる
あと、相対リンクには聞かないで絶対リンク (外部へのリンクだけ)にこのように働きかけるように してもらいたいとも思っています。 わかる方レスお願いします 以下ソースの転載
<?php
/////////////////////////////////////////////////////////////
// Title : Frame Branding Hack for Xoops Mylinks //
// Author : Freeop //
// Email :
[email protected] //
// Website :
http://www.Belizecountry.com //
// System : Xoops RC 3.0.4 / 3.0.5 10-14-02 //
// Filename : myheader.php //
// Type : Module Hack for MyLinks //
/////////////////////////////////////////////////////////////
// Code below uses users current selected theme style //
include("../../mainfile.php");
$currenttheme = getTheme();
print("<html><link rel='stylesheet' type='text/css' media='all' //HREF='".XOOPS_URL."/themes/".$currenttheme."/style/style.css'></style><BODY>");
// Add your Regular html Below, Banner, Logo Below.
// The Php < echo $url > passes the link url to this
// page the target _top just destroys the frame reloading
// the $url
?>
<html><head></head><body>
<center><table class=bg3 width=90% border=0><td>
<a href="
http://www.google.co.jp/ " target="blank">
Google に戻る</a>
</td><td align=right valign=bottom>
<small><a target='_top' href="<? echo $url ?>">閉じる</a></small>
</td></center></table></body></html>
859 :
nobodyさん :03/09/28 18:34 ID:01sfCu9G
保守
んー、、どこから始めればいいのか・・・
>>848 > phpでポップアップウインドウを出して、
> そしてurl転送するにはどうすればいいんでしょうか?
「url転送」ってなんだ。俗語だなぁ。
なんらかのポップアップ窓を出した後、元窓が、「転送先URL」の「ページ」にかわるということだとすれば、難しくないけど、それでいいのか?
もう少し解説してくれ。
関数の戻り値に array を使用することができますが、このとき 配列の要素に オブジェクト を入れることが出来ません。 function hoge() { $a = new nannka; return array( $a ); } $b = hoge(); $bは中身が空になります。
863 :
nobodyさん :03/09/29 02:16 ID:6bLJhInk
初心者丸出しですみませんが、教えて下さい。 二つの条件A,Bがあって、さらにAに二つの条件分岐a,bがあったとします。 bとBの処理を同じにしたい場合通常はどのように記述しますか? if (A) { if (a) { hoge } else //bの処理 { geho } } else //Bの処理 { geho } というスマートじゃない記述かswitch構文くらいしか思いつかんのです。。
>>863 if(A and a){
hoge;
}else{
geho;
}
何かが間違っている気も・・・
865 :
nobodyさん :03/09/29 02:37 ID:6bLJhInk
>>864 さん
有り難うございました、解決しました。。
>>855-858 とりあえず、もうちょっとわかりやすくやりたいことを書いてくれないか
サイトの運営をしてるし、xoopsを使っていたとか実装とかいうセリフからも
経験があってけっこう知識があるのかと思ったんだが、
貼り付けたソースを見て、もしかしてphpもhtmlもよくわかってないのか?
と思ってしまったよ。
例に出しているサイトでは単にフレームを使って上下分割してるけど
そのやり方でいいのかな?
ほとんどHTML上での工夫になると思うので、まず出力したいページを
HTMLだけで作ってみることから始めることをお勧めします
867 :
nobodyさん :03/09/29 07:34 ID:zBADduAt
ところで.cgiよりログファイルを覗かれにくい拡張子だれか 知りませんか? あと 拡張子を.phpにして <?php/* ここは覗かれないポ。 */?> こうしたら覗けないと思ってるんですが、どうなんでしょう? 覗かれますか?
.htaccessでアクセス禁止にした方がいいんでね?
>>867 Webサーバの指定するディレクトリの外を使うわけにはいかないの?
どうしても無理なら .htaccess で制限できるか検討
それもだめなら、、.cgiでも.phpでもいいじゃん。
でもその文字列、扱いにくくない?スクリプトで読み書きするんでしょ?
>>869 ケコーン。
漏れもドキュメントルート外にファイルが置ける鯖ではそうしてます。
そうでないときは、.htaccessをこんな感じにしてる。
<FilesMatch "\.(bak|conf|csv|dat|inc|ini|log|sql|tpl)$">
Order Allow,Deny
Deny from all
Satisfy All
</FilesMatch>
SSIのincludeをPHPでやろうとして、 <?php $fp=fopen("a.txt","r"); print $fp; ?> としたのですが、出来ませんでした。 どこが間違っているのでしょうか?
>>867 拡張子を.cgiにして実行権を与えなければ500が帰るわな。
ただ、昔のバグありNSCAサーバーだとちょっとしたことでソースが読めちゃう罠。
もはやそんなん使ってる人いないと思うが。
そんなんよりも、ログディレクトリを作ってそこの.htaccessに
deny from all
とでも書いておけ。
874 :
867 :03/09/29 13:22 ID:zBADduAt
どうも、みなさんありがとう。 .htaccessを使うのが良いんですね。 .htaccess新しいの覚えんのメンドクサソーだから避けてたけど、 今、調べてやってみたら簡単でした。
875 :
nobodyさん :03/09/29 14:39 ID:GVFmm1O8
php3でページへのリンク元を取得する関数って何か 有りましたでしょうか?
877 :
nobodyさん :03/09/29 16:39 ID:hkBZ43UF
cronでphpを実行させようとして $a = exec("/bin/ping -c 4 hogehoge.com",$b,$c); としても sh: line 1: 1/ping: No such file or directory と返されます。どうしてでしょうか?
879 :
nobodyさん :03/09/29 16:53 ID:hkBZ43UF
>>878 shシェルを起動して実行してみましたが正常な動作でした。
safe_modeはoffです。
/bin上のコマンドをいくつかexecで呼び出してみましたがエラーでした。
>>879 正常なのかエラーなのかどっちよ
phpのスクリプトそのものはどうやって動かしてるの?
1行目に#!/..../bin/php 入れて実行のパーミッション?
それともphpコマンドの引数にスクリプト名?
881 :
nobodyさん :03/09/29 17:19 ID:hkBZ43UF
>>880 スクリプトはcronからphp -q **.phpで実行しています。
exec("〜のコマンドを/bin/ping以外のコマンドも入れてみて試しましたが
sh: line 1: 1/ping: No such file or directoryや
sh: line 1: 1/ls: No such file or directory
といったエラーになりました。
>>881 cron 使わないで $ php -q **.php とかやった場合は動くのね?
cron では /usr/local/bin/php -q **.php とかフルパスで指定してる?
そもそもなんでshがエラー出してるんだろ、、
スクリプト貼り付けられる?
883 :
nobodyさん :03/09/29 17:49 ID:hkBZ43UF
<?php $a = exec('/bin/ping -c 4 hogehoge.com',$c,$c0); if(!$a){ print "error open \"ping\" command\n\n"; exit; } $dt = ereg_replace("rtt min/avg/max/mdev = ([0-9\./]*) ms","\\1",$c[8]); $dat = split("/",$dt); $ctd = file("/home/***/public_html/ct.dat"); $ct = $ctd[0]+1; $fp = fopen("/home/***/public_html/ct.dat","w"); flock($fp,2); fwrite($fp,$ct,strlen($ct)); flock($fp,3); fclose($fp); $times = time(); print "{$ct}:{$times}:{$dat[1]}\n\n";
884 :
nobodyさん :03/09/29 17:50 ID:hkBZ43UF
$sql = "insert into pingdb(no,time,ping) values({$ct},{$times},{$dat[1]})"; $con = connect(); $result = mysql_query($sql,$con); mysql_close($con); function connect() { $con = mysql_connect("localhost","user","pass"); $selectdb = mysql_select_db("pingdb",$con); if ($con == false) { print "can not connect database\n\n"; exit; } return $con; } ?> ってな感じです。 /usr/bin/php -q /home/**/ping.php で実行してましたが /usr/local/bin/php -q /home/**/ping.phpにしたら正常に動作しました。 ありがとうございました。激しく鬱なオチですみません
UNIQUEキーに複数登録したいのですが、可能でしょうか たとえば CREATE TABLE t ( c INT NOT NULL, d INT NOT NULL, UNIQUE k ( c,d ) ); として、cとdのフィールドが両方とも一致したレコードを許さないようにする、とか (cかdどちらかだけならッ重複を許す)
886 :
nobodyさん :03/09/29 20:09 ID:rmYj7GYl
質問です! works.xrea.jp:8080/accessories/ ここにある、携帯にメールを送るPHPを使いたいのですが、 UPしてテスト送信してみたところ Fatal error: Call to undefined function: mb_language() in ***/mobile_url/mobile_url.php on line 42 と出てしまいます。ダウンロードしたものをそのままUPしてみても同じエラーが出ました。。 41、42の所はこう書いてあります。 41 require_once 'htmltemplate.inc'; 42 mb_language("Japanese"); 他のPHPはちゃんと動いています。どうしたら良いでしょうか。。
>>886 $ php -m
か、
<?php print phpinfo();?>
で、mbstring が組み込まれてるか確認
なかったら、、、自分でインストールしたなら
--enable-mbstring --enable-mbregex つけてリコンパイル
>>885 環境がわからないが、MySQLでも複合キーは対応している
889 :
nobodyさん :03/09/29 21:00 ID:rmYj7GYl
>>887 ありがとうございます!!
確認してみましたら、なかったです。。
「mbstring インストール」でググってみたのですが・・・(汗)
これはサーバーの管理者ではなくて、
私がインストールすれば使えるようになるものなのでしょうか?
890 :
nobodyさん :03/09/29 22:32 ID:DoZHjQz8
>866 レスありがとうございます。 >例に出しているサイトでは単にフレームを使って上下分割してるけど >そのやり方でいいのかな? 全くそのとおりです。 自分が行いたいのは相対リンク、自分のサイトのドメイン以外 へのリンクで先にあげたサイトのように上部にナビゲーション用の フレームを自動で追加するものです。 やりたいのはひとつのphpですべてのページに 上記のような効果を持たせることです。 そのようなphpは可能なのでしょうか? シンプルでいいんです。もし可能なら書いて頂きたい。 設置方法も・・・ 階層が深いサイトで、そうファイル数数千あるのでどうしたもんかなぁー と思っています。 スキルに関しては正直自身ありません。 他の方が書いたソースを試行錯誤しながら 不十分に理解できる程度です・・・。 レスよろしくお願いします
>>889 使えない。
jcobe.phpsでやろう
892 :
nobodyさん :03/09/30 00:22 ID:lSvF6W/o
>>891 教えてもらったのを入れてみたらmb_send_mailでエラーが出ました。。
サーバ管理者に頼んでみます。
どもありがとうございましたー。
893 :
nobodyさん :03/09/30 00:36 ID:tYOqlmUU
掲示板を作ってるんですが、もしコメントが改行だけの場合 コメントを空としたいんですが下記の部分が分かりません。 どう書けばいいんでしょうか? $value = ereg_replace( "\r\n|\r|\n", "<BR>", $value); $value = ereg_replace("(<BR>){4,}", "<BR>", $value); //4回以上の連続した改行を1回に。 if($value == '(この部分が分かりません)')$value = '';
894 :
nobodyさん :03/09/30 01:20 ID:xL/W3CDM
ログのフォーマットで処理が変わるな。
895 :
nobodyさん :03/09/30 01:31 ID:xL/W3CDM
簡単にするなら 文字列処理の先頭に持ってきて if(ereg_replace("\r\n|\r|\n","",$value) == "")$value = ''; ちょっと考え甘いかな?
896 :
nobodyさん :03/09/30 01:39 ID:MVWjnIdx
897 :
nobodyさん :03/09/30 01:46 ID:xL/W3CDM
適当にいろんな所の\nを削ってみたらいずれ目的の箇所にヒッするだろう。 そういう無駄な努力がスキル向上になる。 めんどくさがらずに手当たり次第にやるべし
898 :
nobodyさん :03/09/30 01:47 ID:tYOqlmUU
>>897 895のやり方でうまく行きました。どうもありがとうございます。
899 :
nobodyさん :03/09/30 01:56 ID:xL/W3CDM
HTMLのナビゲーション部分を外部ファイルとして参照したいのですが、 includeでやるよりもinclude_onceでやる方が負荷は小さくなるのでしょうか? また、SSIと比較してPHPの方が負荷は小さいのでしょうか? (SSIにもinclude等がある為どちらを使おうか迷っています) 自分の知識ではこの辺りの判断がつかない為、 どなたかご教授お願いします。
901 :
nobodyさん :03/09/30 09:58 ID:xL/W3CDM
プログラムが動き出す事=プロセスと言ってSSIはクライアントが要求する 度にSSIプロセスが起動する。多くの場合はサーバが毎回perlを呼び出す訳ね。 対してPHPは多くの場合はサーバが常にPHPを起動させていてクライアント の要求があればすかさず動作する。常にプロセスが立ち上がっていて 1つのプロセスで処理する。 したがってクライアントがアクセスした瞬間ではPHPに起動する手間がないので 動作が軽い。 だがPerlとPHPの処理速度を比較したらほとんどの場合でPerlの方が 優れた処理速度を持っているといわれている。 複雑な関数を処理しファイルI/Oがいくつも発生するスクリプトならPerlを 用いたSSIの方が処理が早くなる可能性がある。 掲示板等の比較的処理内容が少ない物はPHPが大きく優勢なんじゃないだろうか。
902 :
794 :03/09/30 12:09 ID:???
すいません、
>>794 でsessionの有効期限について厨なこと言ってたnewbieです。
クッキー不可のサイトなのですが、
session_cache_limiter('private');
session_cache_expire(1);
が、HTTPヘッダのCache-Controlを変更するというのは分かったんですが、
こうすると、当然ながらページ自体のキャッシュを無効にできません。
ページのキャッシュを無効にしつつ、かつセッションの有効期限を設定するこ
とはできるんでしょうか?
まさか、セッションの有効期限とページの有効期限が同じなんてことはないと
思いまして…
903 :
nobodyさん :03/09/30 12:12 ID:xL/W3CDM
クライアント環境に依存する構造は避けるべきだと思うよ
>>900 ベンチとってみれ。結果あげてね。
>>901 ssi execの話ではないような気がするが。
905 :
794 :03/09/30 12:17 ID:???
906 :
nobodyさん :03/09/30 12:17 ID:gEtB7FNl
perlのuntilはPHPでは何ですか?
while の判定を ! で反対にすればいいんじゃないかな?
908 :
nobodyさん :03/09/30 16:07 ID:j7/d6sL8
特殊な事情により、GDのイメージ型をシリアル化したいと考えております。 リソース型をシリアル化することは可能なのでしょうか? 試しに、 $img = @ImageCreate (50, 100); $s = serialize($img); とやりましたが、うまくシリアル化できていませんでした。 よろしくお願いいたします。
909 :
nobodyさん :03/09/30 19:36 ID:gEtB7FNl
rand(0,100)ってさ、0〜100整数だけだよな。 少数点以下4桁までだしたいなら $test = rand(10000,1000000)/10000; って感じにするしかないの?
あいうえお かきくけこ (略) やいゆえよ わいうえを 上の文章のかきくけこから やいゆえよだけを、使用したいのですが、 どうすればいいんでしょうか?
>911 ドラッグで反転選択してコピー。必要なところにペースト。
>>911 まず、“使用”とは何か、から説明してくれないか
かきくけこからやいゆえよだけ、というのもわからん
2行目から最後の手前2行目まで、なのか
文字のか行からや行まで、なのか
それ以外なのか
914 :
911 :03/09/30 22:17 ID:???
説明不足ですまそ 例が悪かったか・・・ <html> <body> Welcome To My Home Page<br> 内容 <br> <a href="home.html">HOME</a> </body> </html> 内容だけ取り出したいってこと
>>914 <br>をカウントってのはどうせダメなんだろ。
で、Welcome To ... も変化するし、内容の行数も可変なんだろ。
そら無理。
なんか固定なもんを示せ。
スミマセン Welcome To My Home Page<br> と <br> <a href="home.html">HOME</a> は 固定です。
918 :
nobodyさん :03/09/30 22:38 ID:xL/W3CDM
識別フラグのタグを埋めてやるかキーワードになる文字を入れる。 <html> <body> Welcome To My Home Page<br> <!--ここから--> 内容 <!--ここまで--> <br> <a href="home.html">HOME</a> </body> </html> $file_data = file("index.htm"); $line_num = count($file_data); for($i=0;$i<$line_num;$i++){ if(ereg("<!-ここから-->",$file_data[$i])){ $start=$i; } if(ereg("<!-ここから-->",$file_data[$i])) $end=$i; break; } } for($i=start;$i<$end+1;$i++){ switch $i{ case $start:$new_data .= substr($file_data[$i],strpos("<!-ここから-->",$file_data[$i]));break; case $end:$new_data .= substr($file_data[$i],strpos("<!-ここまで-->",$file_data[$i])-14);break; default:$new_data .= $file_data[$i];break; } 試してないけどこんな感じじゃない?
919 :
nobodyさん :03/09/30 22:39 ID:xL/W3CDM
訂正 $file_data = file("index.htm"); $line_num = count($file_data); for($i=0;$i<$line_num;$i++){ if(ereg("<!-ここから-->",$file_data[$i])){ $start=$i; } if(ereg("<!-ここから-->",$file_data[$i])) $end=$i; break; } } for($i=start;$i<$end+1;$i++){ switch ($i){ case $start:$new_data .= substr($file_data[$i],strpos("<!-ここから-->",$file_data[$i]));break; case $end:$new_data .= substr($file_data[$i],strpos("<!-ここまで-->",$file_data[$i])-14);break; default:$new_data .= $file_data[$i];break; } }
920 :
nobodyさん :03/09/30 22:45 ID:uGvhdsmS
includeでファイルを呼び出すカンジのweb pageを作ってるんですが、 cgiをincludeで呼ぶとソースがそのままでてしまいます。 コレを直接cgiを実行した時のような出力をincludeすることってできるのでしょうか?
>>920 phpからcgiを呼び出して表示したい、とかいうこと?
「cgiを実行した時のような出力」ってそら実行しないと出ないし、、
fopen で
http:// からURI指定で呼び出して結果をprintしたら?
924 :
923 :03/10/01 01:23 ID:???
ああ、fopenと書いたけど、file()でもreadfile()でもすきなの使って httpサーバ使わずに単独で実行した結果でいいんだったら passthru()とかも使えるか
925 :
nobodyさん :03/10/01 01:23 ID:yG0+We25
>>920 $flag = exec("/usr/local/bin/perl hogehoge.cgi",$feedback,$tmp);
foreach($feedback as $var){
print $var;
}
926 :
920 :03/10/01 03:36 ID:ZIP8qpPv
>>923 >>924 URI指定だとエラーになってしまいます。
readfile()ではソースがそのままでてしまい、file()やpassthru()は真っ白ですた。
>>925 真っ白になりまつ。
927 :
nobodyさん :03/10/01 03:51 ID:6+Aao+hS
教えてください。 フォームで「+」が入力されてきた場合、「+」の文字が半角スペースに勝ってに変更されてしまうのです。 どうすれば、「+」がプラスのまま、下記例のTEST2.PHPで表示されるようになるのでしょうか? 助けてください。 検索エンジンで調べたつもりなのですが、判らないのです。 test1.php <form method=post action=test2.php> <input type=text name=teststring> <input type=submit> </form> test2.php <? $teststring = $_REQUEST[teststring]; print "##".$teststring."##"; ?>
>>927 test2.php
<?= "## ".urlencode(@$_REQUEST['teststring'])." ##" ?>
>>920 fsockopen()関数版
<?php
$host="localhost";
$port=80;
$path="/hoge/hoge.cgi?hoge=hoge";
$fh=fsockopen($host,$port,$errno,$errstr,10) or die($errno.$errstr);
fputs($fh,"GET ".$path." HTTP/1.0\n\n");
while($a=fgets($fh,1024)) if(preg_match("/^(\r?\n)$/",$a)) break;
while($a=fgets($fh,1024)) echo $a;
fclose($fh);
exit;
?>
>>920 popen()関数版
<?php
$pp=popen("perl /usr/local/apache2/htdocs/hoge/hoge.cgi","r");
while($a=fgets($pp,1024)) if(preg_match("/^(\r?\n)$/",$a)) break;
while($a=fgets($pp,1024)) echo $a;
pclose($pp);
exit;
?>
>>911 対象ファイル中に有る、抽出したい箇所を<!-- befor -->と<!-- after -->で
囲んで下さい。その箇所を抽出します。
<?php
$file=file("./hoge.htm");
$flag=false;
while(list(,$value) = each($file)){
if(preg_match("/<!-- befor -->/",$value)) $flag=true;
if($flag) echo $value;
if(preg_match("/<!-- after -->/",$value)) break;
}
exit;
?>
>>926 パーミッションで実行属性ついてないんだろ・・・
933 :
nobodyさん :03/10/01 10:10 ID:yG0+We25
perlのパスも環境に合わせてないだろうな。
934 :
nobodyさん :03/10/01 10:46 ID:yQq1d4Yr
log.logファイルの内容 ああああ いいいい うううう それで、 $log=file("log.log") $search=array_search("いいいい",$log) print"$search"; で、$searchがNULLになります。 なぜ1と出ないんですか?
>>934 ファイルの2行目($log[1])は、"いいいい\n" だから
936 :
nobodyさん :03/10/01 11:06 ID:yG0+We25
>>934 好みの問題もあるけど読み出したデータ等はそのまま処理にかけずに
別の変数へ渡し、その際に必要に応じて加工してやったほうが安全だよ。
このパターンがデータ消失の原因で一番多いんじゃないかな。
937 :
nobodyさん :03/10/01 11:34 ID:yQq1d4Yr
>>937 おまえわかってないだろ
回答の意味がわからんのならそう書け
何が「NULLのままだよ」だ
939 :
nobodyさん :03/10/01 11:56 ID:yQq1d4Yr
>>938 $search=array_search("いいいい\n",$log)
こう書けってことではないのか?
file()関数は改行ごと配列に格納するってことだろ
ちなみに、
>>939 ので1が表示されたぞ、うちでは
941 :
開店準備中 :03/10/01 12:01 ID:L9ZAlkPa
>>939 それ、やってみたけどダメっぽいね。
私んとこはfalseが返ってきた。
配列まわして改行を取り除いたらokだったけど。
942 :
開店準備中 :03/10/01 12:02 ID:L9ZAlkPa
内部エンコ-ディングとかそういうもんが関係してるのかな? (よく分かってない^^;)
943 :
nobodyさん :03/10/01 12:08 ID:yQq1d4Yr
944 :
nobodyさん :03/10/01 12:10 ID:yG0+We25
$log=file("log.log") foreach($log as $var){ $newdata = ereg_replace("\r\n|\r|\n","",$var); }
945 :
908 :03/10/01 12:14 ID:bpdfKdyc
>>921 いや、リソース型をserializeでシリアル化はできないのは
理解していたのですが、その他の方法でもできないのかという疑問です。
裏技的な方法もないですかね?どうにかして保存したいのですが。
searchがうまくいかなかったら var_dump とかprintf で何が入ってるのか調べるのが先でしょう
947 :
nobodyさん :03/10/01 12:37 ID:yQq1d4Yr
>>941 ありがとう。
trimつかたらイケタヨ。
eval();
949 :
920 :03/10/01 15:22 ID:ZIP8qpPv
950 :
nobodyさん :03/10/01 15:26 ID:yG0+We25
>>949 こっちのローカルでは成功してるが。
環境を教えれ
951 :
920 :03/10/01 15:37 ID:ZIP8qpPv
>>950 Redhat9(kernel2.4.20-19.9) + apache2.0.40-21.5 + php-4.2.2 でつ
953 :
nobodyさん :03/10/01 15:52 ID:yG0+We25
>>920 当該CGIスクリプトの所在を確認して正しいパスで実行してみそ
954 :
920 :03/10/01 16:34 ID:ZIP8qpPv
>>952 あってまつ。
>>953 cgiを確認し、そのとおりそこまでの絶対パスを入力してまつ。
相対でも絶対でも動きませんですた。
>>954 の環境ってどうなってんの?
php.ini で全部実行できなくしてんじゃねーの?
書かないから自宅機でテストしてるんだと思ってたが・・・
956 :
nobodyさん :03/10/01 16:53 ID:yG0+We25
>>920 関係ないかも知れんが試しにスクリプトを置いてるディレクトリのパーミッション
を755にして、ディレクトリとスクリプトとの所有者をApacheと同じにしてみて?
957 :
nobodyさん :03/10/01 16:54 ID:yG0+We25
訂正 Apacheと同じにしてみて Apacheの実行ユーザと同じにしてみて
<?php print phpinfo();?> の出力から safe_mode で始まる項目全てとallow_url_fopen がどうなってるかみてみるといい
959 :
911 :03/10/01 21:05 ID:???
いくらで?
ここっていつからコード書いてもらうスレになったの?
>>945 > いや、リソース型をserializeでシリアル化はできないのは
> 理解していたのですが、その他の方法でもできないのかという疑問です。
理解してたら、
>>908 みたいな書き方はしないと思うが、まぁ・・いい。
> 裏技的な方法もないですかね?どうにかして保存したいのですが。
コネクションまたぎたいというだろうけど、それは、出来ませんって。
なにをしたいのかわからないので、説明要。
#imagecreate用の値を、serializeでもそのまんまでもいいから、sessionなり、
#なんなりに保存しておいてやればいいと思うのだがね。
963 :
nobodyさん :03/10/01 22:23 ID:S6/LMUEu
すごくあほな質問ですが PHPをMacOS9で制作したいのですが 可能でしょうか? 調べてもOS9用の記述が全くないので; ソフトウェアなども無い?のかも。。
>>963 オフィシャル、セミオフィシャル(オフィシャルからのリンク)では
Mac OS9用は無かった筈。ユーザレベルで作ってる人がいるのかも知れませんが、
Macユーザってこれまでunix系のポーティグに関心が薄かったから、いないかも
965 :
963 :03/10/01 22:59 ID:???
>>964 そうですか、OSの特徴考えると無いのも納得できてしまいます。
参考書もMacは度外視されてますね、さらなる情報を希望します。
964さんありがとうございました。
>>965 蛇足とは思いますがテキストエディタのmiにはPHPモードもあるし、
チェック用サーバを用意できるのならOS9での開発も可能ですよね。
ただレンタルサーバでの動作確認はすべきでないのでローカルで
PHPが動作するサーバを立てられないのであれば止めた方が良いです。
(PerlのCGIでも同じことですが)
OSXなら自前でコンパイルすればOKですしentropy.chのパッケージも利用できます。
#僕はOSXでPHPの開発を行っています。
#HTMLレンダリング確認用にWindows機を用意できればベターですね。
967 :
nobodyさん :03/10/01 23:25 ID:yG0+We25
968 :
920 :03/10/01 23:26 ID:ZIP8qpPv
>>955 知人のサーバ借りてやってます。
>>956-957 元々そうなってまつ。
>>958 safe_mode On On
safe_mode_exec_dir no value no value
safe_mode_gid Off Off
safe_mode_include_dir no value no value
safe_mode_allowed_env_vars PHP_ PHP_
safe_mode_protected_env_vars LD_LIBRARY_PATH LD_LIBRARY_PATH
allow_url_fopen no value no value
になってまつ。
969 :
nobodyさん :03/10/01 23:42 ID:wpMUMwLJ
ある日時になったら 指定したアドレスに自動的にメールが送られるようにする にはするにはどうすれば良いでしょうか? 「時間になったら勝手にプログラムが動く」ようにするにはどうすればいいのか? という所を教えてください、お願いします。
972 :
nobodyさん :03/10/02 00:00 ID:SD/hM9rJ
973 :
963 :03/10/02 00:02 ID:???
>>967 難しく無いのであればお願いしたいです。
と、軽く頼んでみたり..
974 :
nobodyさん :03/10/02 00:07 ID:SD/hM9rJ
>>973 あくまでOS/9用だからMacOS9では動きません。
ごめん。マジレス貰うと胸が痛い
975 :
963 :03/10/02 00:17 ID:???
>>974 浮かれてました( -_-)σσフィニッシュデス
>966 Mac OS-Xはunixベースだから、それ以前とは全然違うので。 Mac OS9ってcygwinみたいなのないんだっけ? 無ければVirtual-PCとか使ってエミュレータ上でPHPを動かすかな。
>>974 わしもOS/9のことかと思って、ちょっと胸が躍った。
そうすればX68が現役に復帰できるかもとか。
今の子らはOS9といえば、Mac OS9のことを指すんですな。
ジジイは会話にも入れてもらえんか。
>>968 その設定だと、今までにでた実行方法は無理
もしそのディレクトリでSSIが許可されているなら、
virtual("hoge.cgi"); が使えるかもしれない。
それが無理なら、自力でhttp通信してcgiの結果を引っ張ってくるか、
php.ini の書き換えが必要
実行可能にすると共有サーバだとセキュリティに問題出るので
allow_url_fopen を On にして、"
http:// 〜/xx.cgi"をreadfileするのがいいかも
979 :
890 :03/10/02 22:38 ID:lLLhgFxm
どなたかわかる方いめせんか? 色々調べても判らない・・・ phpじゃなくてcgiでもいいです そのようなスクリプトは無いのでしょうか?
981 :
nobodyさん :03/10/03 00:00 ID:bJULOZa9
>>977 24歳ですが昔中古のX68000エキスパート買いました。
あの広大さはいまだ心に残っています。
なつかしいなぁ
982 :
969 :03/10/03 00:06 ID:???
PHPで関連をつかうにはどうしたらいいんでしょう? ポインタないですよね?
>>983 言葉足りなかったですが
オブジェクト指向プログラミングの時の話です。
>>983 関連ってなぁに?
ポインタは無くて、似たような感じのだとリファレンスかな。
他のポインタのハンドラです。 Cだと、メンバ変数にポインタを持たせるのですが phpだとどうするのかなぁ。
×他のポインタ ○他のクラス
クラスのプロパティにオブジェクト持たせりゃいいんでないのかい