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

【PHP】くだらねぇ質問はここに書き込みやがれpart9

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/09/03(土) 11:53:32ID:7OO4C5e5
PHPに関するくだらない質問用すれです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい

・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
【PHP】くだらねぇ質問はここに書き込みやがれpart8
http://pc8.2ch.net/test/read.cgi/php/1123431535/
0334nobodyさん2005/09/08(木) 15:22:08ID:???
>>333
不可能です。

> メールからのクリックでこのフォルダにあるページに飛ばそうと思い、
これだと当然、Refererは取れません。
しかもプログラム側じゃなくて、.htaccessでReferer制限してるんですよね…。

プログラム側で制限しているのであれば、
メールでクリックされるURLに、ランダムなGET引数を仕込むなりして
メールから来たことをチェックできます。
0335nobodyさん2005/09/08(木) 15:33:25ID:???
>>334
メールクリックでRefererが取れないのは分かります。
なので、アクセス制御をかけていない/public_html/にあるファイル(例えば redirect.php)に
一度とばしてから、この redirect.php が /lib/ 内のファイルへ転送させる、と言う仕組みにしたいんです。

0336nobodyさん2005/09/08(木) 15:42:37ID:???
>>333
Location:〜も<meta>のリフレッシュも、リファラを吐かないのが仕様。
そこのURI自身にリファラ相当のものを仕込むしかないよ。
03373332005/09/08(木) 15:48:36ID:???
>>336
やはりそうですか…。
他の手を探してみますOrz
0338nobodyさん2005/09/08(木) 16:15:28ID:???
>>337
リファラ相当といったけど、セッションID仕込めばいいんだよ。
Locationでもmetaリフレッシュでもクッキーは効くから、それ使ってもいいけど。
03393332005/09/08(木) 16:16:46ID:???
>>338
ありがとうございます。
まさしく今、セッションIDで構築し始めたところでした♪
最初からこうすれば良かったんですね。
0340313=3142005/09/08(木) 16:30:21ID:???
>>324

<IMG src="image/<?php $time = DATE("YmdHis"); echo"$time";?>.jpeg">
で画像を貼ることが出来ました!!

しかし入力した文章が文字化けを起こしたり画像が乱れたりするのですがこれはフォントの問題だと思いますので
こちらは自分で何とかしてみます。
0341nobodyさん2005/09/08(木) 17:27:11ID:???
<input type="text" id="title" name="text00" size="30">

で入力した文章を読み出そうとすると文字化けを起こします。
htmlファイルとphpファイルを違う書体で編集していることに原因があるのですが。
ただ表示する書体を変更しただけでは解決しません。
 ・htmlファイル・・・SHIFT−JIS
 ・phpファイル ・・・EUC
これを解決するにはhtmlで入力した文章をphp見ることが出来るようにするには
どうすればよいのでしょうか?
0342nobodyさん2005/09/08(木) 17:32:03ID:sy+tsgYD
>>341
$test00 = mb_convert_encoding($_POST["text00"],"SJIS","EUC-JP");
0343nobodyさん2005/09/08(木) 18:23:19ID:YSOhy9W+
入力されたURLのページの特定の部分だけを表示するようにしたいんですがどうすればいいですか?

(例として2chのスレを入力したら>>1と>>2のレスだけを表示するようにする みたいな)
0344nobodyさん2005/09/08(木) 19:02:46ID:???
どんなページのどのように特定される部分かを決めてくれないと答えられない
0345nobodyさん2005/09/08(木) 19:07:35ID:YSOhy9W+
じゃあ、2chのスレの>>1-10を表示ってので、、、
0346nobodyさん2005/09/08(木) 20:08:12ID:???
>>345
サイトを読み込んで、正規表現を使って件数分抽出する
0347nobodyさん2005/09/08(木) 20:11:34ID:YSOhy9W+
>>346
それを詳しく、、、
0348nobodyさん2005/09/08(木) 20:12:59ID:???
>>342
<?
$title = mb_convert_encoding($_POST["title"],"SJIS","EUC-JP");
print($title);
?>
と入力しても文字化けを起こすどころか表示すらされないんですけど・・・
0349nobodyさん2005/09/08(木) 20:13:44ID:???
つか、引数に含まる記事をDB等から引っ張って表示すれば良いだけなんじゃねーの?
0350nobodyさん2005/09/08(木) 20:16:29ID:???
http://www.mshonin.com/main/price.asp
の「利用条件」を見ると、メール送信は利用者のSMTPサーバを使うらしいが、
そんなことって可能なの??

たとえばPHPでやるなら、自鯖のスクリプトから他鯖のSMTP鯖にメールを
渡す(送信処理を任せる)のはどうすればいいんだろう・・・??
socket関係?
0351nobodyさん2005/09/08(木) 20:20:01ID:CBnc7l0P
>>348
GETで送ってるとか。
0352nobodyさん2005/09/08(木) 20:29:43ID:???
>>348
元のhtmlファイルはpostで送ってますが・・・
0353nobodyさん2005/09/08(木) 20:41:25ID:???
>>350
自分でSMTPしゃべらせるか、PEARのライブラリ使うか
PHPMailerライブラリでも使え。
0354nobodyさん2005/09/08(木) 20:42:39ID:???
>>343
一般的な処理の手順としては、
1. 入力されたURLのページからデータを取得 - ファイルシステム関数、fsockopen
2. 取得したデータの希望する場所を抜き出す - 正規表現やら文字列操作の関数
3. それを出力
つー形になるかと。
実際のソースコードがどうなるかは、相手のサイト次第。

>>348
string mb_convert_encoding ( string str, string to-encoding [, mixed from-encoding])
なので、SJISの文字列をEUC-JPに変換するなら、指定の仕方が逆だね。
0355nobodyさん2005/09/08(木) 20:45:54ID:???
>>353
>自分でSMTPしゃべらせるか

スマソ、ド素人なので言ってる意味がわかりません。orz
0356nobodyさん2005/09/08(木) 21:11:23ID:???
>>350
こういうのとかどうよ↓
http://bytesmailer.sourceforge.jp/
0357nobodyさん2005/09/08(木) 21:18:30ID:???
>>355
いや、自分で言ってることだよ
>socket関係?
socket関数を利用してSMTPの仕様にしたがってMTAとやり取りをする。
基本はこれ。
0358nobodyさん2005/09/08(木) 21:28:45ID:???
>>354
ありがとうございました!
上手く認識いたしました。
0359nobodyさん2005/09/08(木) 21:29:09ID:???
socket関数ってマニュアルとか読んでもかなり意味不明な気がしる。
少なくとも漏れは使ったことないね・・・

>>357
つか、相手(よその鯖)のMTAがsocket接続を受け入れてくれるもんなの?
だったら、不正中継送信とか簡単じゃね??
0360nobodyさん2005/09/08(木) 21:35:13ID:???
>>355
Webサーバとのやり取りに HTTP(HyperText Transfer Protocol)を使うように、
メール関係には、SMTP(Simple Mail Transfer Protocol)という決まり事を使うんよ。
実際にそれらを使う時には、相手サーバに接続して コマンド送信・応答受信、
次のコマンド... のようなやり取りをするので、「しゃべる」と表現する事も多い。

メール送信・中継(SMTP)は仕組み上誰に届けるかしか気にしないので、
>>350にあるような他鯖のSMTPを使うこともできる。
(spamとか成りすましが問題になってきたので、いろいろ制限されるようになったけど。)
0361nobodyさん2005/09/08(木) 21:43:47ID:???
>>355
そういう時の為のPearです。
0362nobodyさん2005/09/08(木) 22:08:54ID:???
ってか、>>350のような「他鯖のSMTPに渡す」のって何かメリットあるの??
どうせ他鯖に渡すための元のメール生成は自鯖のスクリプトでやるんだし、
結局他鯖のSMTPに渡すことで軽減される負荷とかってあるのだろうか?
0363nobodyさん2005/09/08(木) 22:15:16ID:???
いま>>350のリンク見たけど怪しさ爆発だな
0364nobodyさん2005/09/08(木) 22:24:32ID:???
>>362
複数の宛先がある時は効果絶大。他鯖にとっては迷惑な事この上ないかと。
0365↑2005/09/08(木) 22:25:55ID:???
と、、、RCPT TOが複数の場合の話ね。(メッセージbodyが1つ)
0366nobodyさん2005/09/08(木) 22:27:58ID:???
>>364
だよねぇ、超迷惑だよなぁ。。。

こんなことを商売でやってて、
他社から文句言われないのだろうか?>>350の業者。
0367nobodyさん2005/09/08(木) 22:49:32ID:???
>>332
implodeするんだったら配列を詰める必要はないような気がする。

以下のように1行で配列の要素を消して配列を詰めることもできるけど、
foreach よりもスマートだとは思えない。

$test = array_values(array_filter($test, create_function('$a', 'return $a != ' . $in_data . ';')));
0368nobodyさん2005/09/08(木) 23:02:22ID:???
array_diff
0369nobodyさん2005/09/08(木) 23:06:45ID:???
array_searchとarray_splice組み合わせるとか
0370nobodyさん2005/09/08(木) 23:25:11ID:???
以下のソースで画像を読み込むと画像がおかしくなってしまいます。
同じjpegの画像ファイルを読み込んでも画像がおかしくなります。
画像がおかしくならずに完全な状態で画像ファイルを読み込むにはどうすればよいでしょうか。

もしかして同じjpeg画像でも拡張子が『JPG』や『jpeg』で違うものと処理されたり
画像ファイルの大きさによっておかしくならなかったりするとか・・・

なお、画像ファイルの保存先のフォルダ(image)の属性はちゃんと777にしています。
〜〜 school.html 〜〜
<FORM enctype="multipart/form-data" name="pl_info" action="./form.php" method="post">
<INPUT TYPE="hidden" NAME="_template_confirm" VALUE="./form.php">
<input type="file" id="upfile" name="upfile">
<INPUT type="submit" name="SUBMITBUTTON" value="確認画面へ" onClick="NEXT()">
<INPUT type="hidden" name="page" value=""></TD>
</FORM>
〜〜 form.php 〜〜
<?php
$hizuke = DATE("YmdHis");
if(!is_uploaded_file($_FILES['upfile']['tmp_name'])) {
echo "ファイルを保存できませんでした!<br>\n";
echo "元の画面に戻るにはブラウザの『戻る』ボタンをクリックして下さい。";
exit;
} else {
copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");}
?>
 (中略)
<IMG src="image/<?php $time = DATE("YmdHis"); echo"$time";?>.jpeg" alt="upfile">
0371nobodyさん2005/09/08(木) 23:36:06ID:???
>>370
UPLOAD_MAX は?
03723702005/09/09(金) 00:31:31ID:???
>>371
設定していません・・・
設定していたときは30000に設定していました

もしかしてこれが原因で画像がおかしくなっているとか・・・
03733702005/09/09(金) 00:55:04ID:???
>>372の訂正
UPLOAD_MAXは全く設定していません
0374nobodyさん2005/09/09(金) 01:20:34ID:???
>>370
php.ini -> upload_max_filesize
0375nobodyさん2005/09/09(金) 01:33:18ID:???
>>370こいつまた来てるのかよ
03763702005/09/09(金) 01:59:08ID:???
>>375

すみません・・・phpについてはまだまだ素人なものでして・・・
0377nobodyさん2005/09/09(金) 02:06:49ID:???
>>370
何のためにマニュアルがあると思ってんの?
0378nobodyさん2005/09/09(金) 02:10:38ID:???
マニュアルを読んでてもUPLOAD_MAXの説明が書かれていない上に
「UPLOAD_MAX」で検索しても書かれている説明がよくわからないんです・・・
0379nobodyさん2005/09/09(金) 02:44:39ID:???
質問ですが、プログラムってどっかの会社とかから頼まれてシステムとか作るときに
著作権とかはどうしてんの?ちょっと疑問に思ったもので。
0380nobodyさん2005/09/09(金) 03:09:06ID:???
>>378
そういうのはプログラマー板のほうが
03813802005/09/09(金) 03:09:43ID:???
ごめん、>>379にね
0382nobodyさん2005/09/09(金) 04:57:01ID:???
0件ならば「Not Pages」1件ならば「1 Page」2件以上ならば「nr Pages」という具合に異なるメッセージを表示したいですが、もっとスマートにできないものでしょうか?

$arr = array();
$arr[] = ($num == 0) ? "Not" : $num;
if ($num != 1) $arr[] = "s";
echo "<span>". join(" Page", $arr) ."</span>";
0383nobodyさん2005/09/09(金) 05:02:10ID:???
>>382
printf厨でもいいですか?
printf("<span>%sPage%s</span>",
($num == 0 ? "No" : $num) . " ",
$num > 1 ? "s" : "");
0384nobodyさん2005/09/09(金) 05:27:06ID:???
>>383
ふむふむ、printf関数を使うことなど思いつきもしませんでした
今回はそのまま文字列として返したいので、sprintf関数を使うことにします
本当にありがとうございました
0385nobodyさん2005/09/09(金) 05:54:55ID:???
>>382
一番楽なのは余計なことせずに "$num Page(s)" で終わらすって手もある(英語圏の香具師らもけっこうやる)。
とにかく色々ありうるので、自分の好きな方法でやればいい。
蛇足かもしれんが、Not Pagesだと「ページじゃない」って意味になってしまうよ。
0386nobodyさん2005/09/09(金) 06:16:43ID:???
>>385
早速修正しておきました
ご指摘ありがとうござケコーン汁!!
0387nobodyさん2005/09/09(金) 07:48:05ID:???
>>370
copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");}
?>
 (中略)
<IMG src="image/<?php $time = DATE("YmdHis"); echo"$time";?>.jpeg" alt="upfile">

(中略)の処理中に秒の数値が変わる可能性あり
そのまま$hizuke使え
03883702005/09/09(金) 08:45:35ID:???
>>387
駄目です・・・
以下のソースを設定しても問題は解決しませんでした・・・
それどころか画像ファイルの大きさによっては認識しないものもあります。
(htmlファイルで画像サイズの設定は行なっていません)

copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");} ?>
 (中略)
<IMG src="image/<?php echo"$hizuke";?>.jpeg" alt="upfile">
0389nobodyさん2005/09/09(金) 09:11:43ID:???
>>388
画像がおかしくなるって言われても、どういう状態をさしておかしいと言ってるのか分からんよ。
ttp://www.php.net/manual/ja/features.file-upload.errors.php
その次のページの「陥りやすい落とし穴」のページも必読。
03903702005/09/09(金) 09:29:22ID:???
>>389
画像で表すとこんな感じです。
(貼付前):『http://land.issaigassai.com/cgi/upload/source3/No_2080.jpg』

(貼付後):『http://land.issaigassai.com/cgi/upload/source3/No_2081.jpg』

なぜか画像によってはおかしくならない場合もあるのです。
(おかしくならなかった例):
   『http://land.issaigassai.com/cgi/upload/source3/No_2082.jpg』
   『http://land.issaigassai.com/cgi/upload/source3/No_2083.jpg』
03913702005/09/09(金) 09:38:32ID:???
>>390の続き
また、場合によっては貼り付けた画像ファイルが壊れて全く読み込まなくなる場合もあります。
0392nobodyさん2005/09/09(金) 09:52:08ID:???
} else {
copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");
echo 'タイプ=' . $_FILES['upfile']['type'] . '<br>';
echo 'サイズ=' . $_FILES['upfile']['size'] . '<br>';
echo 'エラーコード=' . $_FILES['upfile']['error'] . '<br>';
}
を入れて正常な時と異常な時を比較してみれば?
エラーコードの値は >>389 が書いてくれているURLを参考に。
03933702005/09/09(金) 11:33:07ID:???
>>392
『http://land.issaigassai.com/cgi/upload/source3/No_2080.jpg』の場合
タイプ=image/pjpeg
サイズ=7357
エラーコード=0

『http://land.issaigassai.com/cgi/upload/source3/No_2082.jpg』の場合
タイプ=image/pjpeg
サイズ=10538
エラーコード=0
03943702005/09/09(金) 11:35:48ID:???
>>393の続き
下は
『http://land.issaigassai.com/cgi/upload/source3/No_2080.jpg』
を貼り付けた結果です

http://land.issaigassai.com/cgi/upload/source3/No_2085.jpg
0395nobodyさん2005/09/09(金) 12:05:59ID:???
>>394
copyじゃなくて
move_uploaded_file
にしてみたらどう
03963702005/09/09(金) 12:47:07ID:???
>>395
『http://land.issaigassai.com/cgi/upload/source3/No_2080.jpg』
を貼り付けて試してみましたが駄目でした
タイプ=image/pjpeg
サイズ=7357
エラーコード=0

貼り付けた結果
http://land.issaigassai.com/cgi/upload/source3/No_2087.jpg
03973922005/09/09(金) 12:59:50ID:???
ダメです、ダメです、って言うだけなんだね。
少しでも自分でアレコレやってみようとは思わないのかな。
もう、昼休みが終わるので思いつく分だけ書いてみるけれど。。。

・先のカキコでファイルサイズを表示させたけど、元のファイルサイズと一致している?
・アップロードされたイメージファイルを直接(ブラウザ経由ではなく)開いても同じ?
・copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg"); の前に
 while (true); と入れるとブラウザがずっと接続中になって、一時ディレクトリに
 php???.tmp とかいうファイルができるはず。
 このファイルをコピーして拡張子を .jpeg に変えて直接開いても壊れてる?
・PHP4.2の頃だったか、アップロードファイルが壊れるってバグがあったように記憶しているけど
 PHPのバージョンは?
0398nobodyさん2005/09/09(金) 13:16:46ID:DEOx5IdR
[email protected]
0399nobodyさん2005/09/09(金) 13:24:41ID:LpJamP+r
これかな。

POST body corruption in some configurations
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=82967

>Use either the AddType *or* the original <Files *.php> section in php, just
>don't use both, as the PHP bug explains. (They are pretty much equivalent)
0400nobodyさん2005/09/09(金) 13:49:52ID:???
(,,゚Д゚)∩先生質問です
下記のもので4行目のifでの$newの値についてですが複数指定することは可能でしょうか?
現行「no」以外のリストを抽出するようになっていますが、
これを「no」もしくは「空白」の条件に当てはまらない場合は実行。
にしたいのです。おねがいします><

function attnew($attlist,$new,$att,$attsort=''){
$data=array();
foreach($attlist as $k => $v){
if($v[$new]!='no'){
$data[$v[$att].'_'.$k]=$v;
}
}
if($attsort==''){
ksort($data);
}
return $data;
}
0401nobodyさん2005/09/09(金) 14:01:22ID:???
>これを「no」もしくは「空白」の条件に当てはまらない場合は実行。
難しい言い回しだな。それと「空白」の定義も曖昧なんだが、スペース1文字という意味だとすると
! ($v[$new]=='no' || $v[$new]==' ')
だから
($v[$new]!='no' && $v[$new]!=' ')
ということでいいのかな?
0402nobodyさん2005/09/09(金) 14:06:04ID:???
401さんありがとうございます
無事できました。

言い回しわかりづらいのに分かってもらえて嬉しいです
&&でつなげるのですね
0403nobodyさん2005/09/09(金) 16:41:24ID:???
>>397
>・先のカキコでファイルサイズを表示させたけど、元のファイルサイズと一致している?
全く一致していません
●変更前:4368 [byte] ●変更後7357 [byte]
$hizukeでは誤差が発生するのではないかと考えて$hizukeをtestに変更しても同じでした。
copy($_FILES['upfile']['tmp_name'], "./image/$hizuke.jpeg");}
↓
copy($_FILES['upfile']['tmp_name'], "./image/test.jpeg");}

<IMG src="image/<?php $time = DATE("YmdHis"); echo"$time";?>.jpeg" alt="upfile">
↓
<IMG src="image/test.jpeg" alt="upfile">

また、PHPファイルを保存しているサーバーのバージョンを調べたところ以下のような結果が出ました。
ちなみにOSは『Red Hat Linux release 8.0 (Psyche)』です
[root@ns root]# rpm -qa |grep http
httpd-2.0.40-11.9
httpd-manual-2.0.40-11.9
libghttp-1.0.9-5
httpd-devel-2.0.40-11.9
redhat-config-httpd-1.0.1-13
[root@ns root]# rpm -qa |grep php
(何も表示されず)

もしかしたらこれまでの原因はphpが入っていないからなのでしょうか?
もしそうでしたらApacheを入れなおしてPHP5を入れなければならないと考えているのですが
現状の『Red Hat Linux release 8.0 (Psyche)』でPHP5は使用できるのでしょうか?
0404nobodyさん2005/09/09(金) 16:48:19ID:???
>>403
PHPはrpmじゃなくてソースからインストールしたんじゃないの
[root@ns root]# php -v
でバージョンが表示される

>>399の件なんだがhttpd.confの設定はどうなってる
0405nobodyさん2005/09/09(金) 16:58:04ID:???
ttp://shu.sub.jp/
久々に行ったらNotFoundだった
ふざけんなロリポッ糞
0406nobodyさん2005/09/09(金) 16:59:21ID:???
>>403
The default httpd configuration on RH8.0 use

<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
</Files>

so is this RedHat fault? I replace above lines with

AddType application/x-httpd-php .php

and it works!!!
0407nobodyさん2005/09/09(金) 18:33:10ID:yKtNTjvx
1000行ほどのテキストファイルの数行だけを
書き換えるスクリプトを作っています。
file_get_contents関数かfile関数かどっちを使うべきでしょうか?

またfile_get_contentsで1000行を$contentに格納して
str_replaceで数行を書き換えたのを変数$content2として
fputs($fp, $content2);
としてファイルの内容を書き換えてるのですが、
この場合、数行を書き換えるためだけにわざわざ1000行、また書き込むことに
違和感を感じますし、書き換え中にファイルが破損しないか
非常に不安です。

何か良い方法はないでしょうか?
一部分だけを書き換えるような関数はないでしょうか?
どうかよろしくお願いします。
0408nobodyさん2005/09/09(金) 18:48:49ID:???
>>407
一行ずつ、変数 x に代入していく
一時ファイルに一行ずつ書き込んでいく
全部終われば一時ファイルを元のファイルにリネーム

一時ファイルが残っていれば、異常に終了した証
0409nobodyさん2005/09/09(金) 20:12:02ID:6XNF9M7t
今日PHP5.0.5とApache2.0.54でプログラミング環境を整えた、しかし
WEB製作板より
4 名前: Name_Not_Found [sage] 投稿日: 2005/08/07(日) 00:49:48 ID:???
過去スレ名言より
〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜
PHPはcgi(Common Gateway Interface )とは違うのだが・・・・

知ったかぶり、ものすごくかっこ悪い。

PHPはサーバー上での動作の仕方が違う。
実はCGI動作のPHPもあることはあるけどものすごくマイナー。
通常、こっちを使うことはない。
まあ、エセWEBデザイナーの集まりだからしょうがないか。
〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜
これをみて不安になってきた。自分が作ろうとしてるものはPHPなのかCGIなのか・・・
なにか手っ取り早い確認方法はないものだろうかと小一時間
自分はエセWEBデザイナーなのか・・・
0410nobodyさん2005/09/09(金) 20:52:25ID:???
>>407
408とは別のアプローチ
ランダムアクセスはDBに任せるか、同じような仕組みを実装すればいい
と言ってもfseek()で目的の場所へ移動する程度だけど
更新頻度によっては1000行くらい気にしなくていい場合もあると思う

>>409
echo php_sapi_name();
CGIについてはググれ
04114102005/09/09(金) 20:57:19ID:???
更新頻度はロックすればどうでもいいか。データ次第だった
一時ファイルをいきなりwで開いてflock台無しにしないようにね
0412nobodyさん2005/09/09(金) 21:03:10ID:???
CGIだけど何かる?
0413nobodyさん2005/09/09(金) 21:08:41ID:???
$_GETもしくは$_POSTの変数をそのままsqlに組み込んではいけない、
ってのは良く言われてる事ですが、具体的にはどんな対策をすればよいのでしょうか?

プログラムのバグの可能性ももちろんありますが、悪意のあるイタズラが一番怖いので、まずは$_GETと$_POSTの値をチェック。
これに「;」みたいにヤバそうな文字が含まれてたらエラーフラグを立てて問答無用にたたき落とす、って感じでよいのでしょうか?

また入力画面から渡された値はhtmlspecialcharsとstripslashesで処理したあとでDBに格納することになると思いますが、htmlspecialcharsとstripslashesをどのタイミングで使うのかとか、頭が混乱してきました。

登録時:入力画面→確認画面→(修正画面)→DBに格納
修正時:修正画面→確認画面→(修正画面)→DBに格納

という感じの流れではどのタイミングで使うのがよいのでしょうか?

※register_globals = off、magic_quotes_gpcもオフという前提です。
0414nobodyさん2005/09/09(金) 21:13:40ID:???
>>413
「SQLインジェクション」でググる
0415nobodyさん2005/09/09(金) 21:19:37ID:???
>>409
CGIというのは特定の言語を指すわけじゃなくて、仕組みを表す言葉。
ブラウザでアクセスした時に次のような感じになるのだけど、

ブラウザ -> Webサーバ -> 外部プログラム実行 -> Webサーバ -> ブラウザ

このWebサーバと外部プログラムとのやり取りの部分がCGIと思ってよいかと。(gateway - 出入り口)
この「外部」という単語がポイントで、これが「内部、Webサーバに組み込み」だと、
モジュールと言ったりする。(module - 機能単位、パーツ、SAPIとも言う)

CGI形式の場合、外部とのやり取りが決まり事(これがCGI)を守っていれば、
外部のプログラムが何の言語で書かれていようが構わない。

PHPの場合は、
・CGI形式(CGIを使える各種Webサーバで共通)
・モジュール形式(Webサーバ内部に組み込めるように各Webサーバごとに存在)
・コマンドラインから使うためのもの
の3種類がある。
0416nobodyさん2005/09/09(金) 21:21:25ID:???
>具体的にはどんな対策を

基本各DB用に用意された関数でエスケープ。こいつらはバイナリセーフ。
エラー処理せずそのまま突っ込む。

>た入力画面から渡された値はhtmlspecialcharsとstripslashesで処理したあとでDBに格納

教科書的にはHTMLのエスケープは出力直前てのが正しい。これはXSS対策で、DBの保護とは
関係ない。あとmagic_quotesならstripslashesは意味なし。
0417nobodyさん2005/09/09(金) 21:22:28ID:???
×magic_quotesなら
○magic_quotesオフなら
0418nobodyさん2005/09/09(金) 21:30:49ID:???
>>404
>PHPはrpmじゃなくてソースからインストールしたんじゃないの
>[root@ns root]# php -v
>でバージョンが表示される
[root@ns conf]# php -v
PHP Warning: Unknown(): Unable to load dynamic library './pgsql.so' - ./pgsql.s
o: cannot open shared object file: No such file or directory in Unknown on line
0
PHP 4.3.2 (cli) (built: Jan 14 2004 14:03:54)
Copyright (c) 1997-2003 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies

> >>399の件なんだがhttpd.confの設定はどうなってる
え・・・え〜と何行目を見ればよいのか分からないのですが・・・
0419nobodyさん2005/09/09(金) 21:36:19ID:6XNF9M7t
>>410
出力結果は
apache2handler
でした。
一応ソース
<?echo php_sapi_name();?>
-----------------------------
それと関連してるのかわからないが
phpinfoの出力結果
Server API Apache 2.0 Handler
一応ソース
<? phpinfo() ?>

という結果はでたのだが意味がいまいち分からない
これはPHPとして動いているといえるのか
自分はCGIとしてではなくPHPとして動かしたい
0420nobodyさん2005/09/09(金) 21:40:31ID:???
>>413
stripslashesはaddslashes()の間違いじゃなくて?
つかaddslashes()、stripslashes()って使わんね

>>419
うごいてるうごいてる
04214072005/09/09(金) 21:53:28ID:???
>>408
>>410

非常に参考になりました、
本当にありがとうございます!!!!!!!!!
0422nobodyさん2005/09/09(金) 21:57:04ID:???
>>419
ttp://jp2.php.net/manual/ja/function.php-sapi-name.php
0423nobodyさん2005/09/09(金) 22:12:30ID:6XNF9M7t
>>422
ソース
<?php
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == 'cgi') {
echo "You are using CGI PHP\n";
} else {
echo "You are not using CGI PHP\n";
}
出力結果
You are not using CGI PHP
Excite訳
あなたはCGI PHPを使用していません。
PHPで動いているでFA?
0424nobodyさん2005/09/09(金) 23:03:06ID:???
>>423
馬鹿かおめーは
モジュール版のPHPなのか、CGI版のPHPなのかということ
0425nobodyさん2005/09/09(金) 23:46:19ID:???
>>423
結果がどっちになろうとも
このプログラムが動くということは
PHPが動いたということじゃん。
0426nobodyさん2005/09/10(土) 00:01:40ID:???
>>416
その辺、あやふやなまま、現在に至ってしまった。
入力チェックしないまま平気で稼働してるプログラムがいくつもあります。
一応、defaultに落ちたら全部print_rして漏れにメールが飛ぶようにしてるんだけど、変なイタズラって、手間もかかるからなのか、運がいいのか知らんけど、全然告知メールは飛んでこないな。
入力値のチェックについては、部分的に詳しく書いてあるサイトはあっても、プログラムの流れの中でどういう対策をしたらよいか、って解りやすい例を挙げてるとこって見た事ない。
もし、しっかりまとまってるサイトがあったら漏れもしっかり勉強したいです。
0427nobodyさん2005/09/10(土) 00:54:43ID:gX4RDOln
ホームページとかについてるパスワードって他人がわかる方法ってないかな?どうしてもしりたいやす
0428nobodyさん2005/09/10(土) 01:00:28ID:???
>>427
帰れ
0429nobodyさん2005/09/10(土) 01:05:18ID:???
>>426
脳が沸いてるようだから相当しっかり勉強したほうがいいよ

>>427
パスワードというのは、脳内情報は他人に盗めないという前提に
基づいてる。調べるには推論と実験しかないね。
実験したらここで報告してくれ
0430nobodyさん2005/09/10(土) 01:20:21ID:???
このサイトの画像045056_w300.jpg?1126282720
jpgの後ろに、文字がついてるけどどうしてですか。
ttp://www.peppynet.com/shop/shop.php?g=151&id=045056
0431nobodyさん2005/09/10(土) 01:28:27ID:???
>>430
たぶん実体はCGI
0432nobodyさん2005/09/10(土) 02:35:43ID:???
>>430
仕組みは知らないけど、目的は呼び出された時点のUNIXTIMEを付加して
ブラウザの画像のキャッシュが無効になるようにしてる。
DBの商品リストから動的生成してると、キャッシュが邪魔になることがあるからね。
まあ常にクライアント側のキャッシュが働かないというのも、良し悪しだが。
(サイト設計上、注意すべきポイント)
0433nobodyさん2005/09/10(土) 03:37:03ID:???
解像度ごとに違う文字を出したいと思っているのですが、
PHPでは解像度を調べるような変数がないと聞きました。
それでもPHPでやりたい場合、
どのようにしたらできるかわかる方いらっしゃいませんか?
■ このスレッドは過去ログ倉庫に格納されています