【PHP】下らねぇ質問はここに書き込みやがれpart16
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/02/05(日) 22:35:34ID:sf8bx52Dここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/
過去スレは>>2
0152nobodyさん
2006/02/08(水) 18:21:31ID:???<?
$max_size = 1024 * 100;
$kb = $max_size / 1024;
if($_FILES["hoge"]["size"] > $max_size){
exit("アップロードされたファイルは最大ファイルサイズ(".$kb."KB)を超えています。");
}
?>
0153nobodyさん
2006/02/08(水) 18:23:28ID:0zkvAuO5phpのコードに出てくる「 => 」の意味は何ですか?
貰ってきたコードに出てきました。
数字=>"ファイル名"みたいになってます。
0156nobodyさん
2006/02/08(水) 18:35:32ID:???ini_set関数でも設定は変えられるわな。
場合によっては、upload_max_filesizeだけでなく、post_max_sizeも変える必要もあるかと。
>>152
これって、実際にPOSTされた後でしか実行できないよね?
0157149
2006/02/08(水) 18:36:25ID:zajb1emB0158nobodyさん
2006/02/08(水) 18:37:04ID:0zkvAuO5うひょー。どうもです。
=>を使えば、順番にかかわらず配列の中身をコントロールできますね。
すげー。わかりやすいし。
ありがとうございました。
0159nobodyさん
NGNGどうもありがとうございます。
>>151
あ、.htaccessでもできるんですか。
それは知りませんでした。
てっきりphp.iniでしかできないのかと思ってました。
>>152
その方法でやってみたんですが、
>>156のとおり
アップロードされた後にチェックする感じになってしまいましたorz
>>156
phpスクリプトの中からも変えられるんですね。
できるだけphpスクリプトの中だけやりたいので
それで行こうと思います。
0160nobodyさん
2006/02/08(水) 18:43:25ID:o/oLkGrK$cnt1〜$cnt100まで、今のところ100個の変数にそれぞれ数値が格納されています。
コレを「一番大きいもの」を見つけるにはどうやったらいいのでしょうか?
正規表現でこういうのとかあるんですか?
それとも比較して1つ1つ気の遠くなるような作業をするんですか。。。orz
どうやればいいのか分からないので、アドバイス下さい。
0163150
NGNGなんかうまくいきませんでした。
で、なんでだろうとググったりしてみたら
>>156の方法が有効なのはPHP 4.2.3 までらしいです。
それ以降のバージョンでは
upload_max_filesizeとpost_max_sizeが
PHP_INI_PERDIRという分類になってて
.htaccessとかphp.iniからしか変更できないっぽいです。
なのでphpスクリプトから制限するのは諦めて
.htaccesで制限する方向でやってみようと思います。
0164nobodyさん
2006/02/08(水) 19:27:48ID:???あれ?upload_max_filesizeってPHP_INI_SYSTEM|PHP_INI_PERDIRじゃなかったっけ?
0165nobodyさん
2006/02/08(水) 19:28:50ID:???0166nobodyさん
2006/02/08(水) 19:38:24ID:???push(@cnt, ${"cnt$_"}) foreach(1..100);
$max = (sort(@cnt))[-1];
だからPerlでもあんまりかわらんと思う
0167nobodyさん
2006/02/08(水) 19:46:15ID:???0168156
2006/02/08(水) 20:00:58ID:???うぉ、すまんかった。
パラメータによって有効無効があるのは知っていたけど、いちいち確認してなかった…
htaccessからでも、<FilesMatch>ディレクティブか<FilesMatch>ディレクティブを使えば、
ファイルごとに設定を変更できるよ。
0169nobodyさん
2006/02/08(水) 20:05:19ID:???ここまでやんなきゃ大したことないって。ふつーふつー
0170150
NGNGありがとうございます。
一応うまくいきました。
でもちょっと気になることがあるんですが、
upload_max_filesize を10Kにして、さらに
<input type="hidden" name="MAX_FILE_SIZE" value=100000000000>
というタグを入れてブラウザに知らせるマックスファイルサイズを大きくした上で
100Mbyteのファイルをアップロードしようとすると、
upload_max_filesize が10Kなのにもかかわらず
ブラウザはずいぶんと長い時間送信し続けるようになります。
そして最終的にアップロード失敗や成功の画面ではなく
投稿フォームの初期の画面に戻ります。
スクリプトは実行されていないみたいで
テンポラリファイルのサイズを調べることができません。
これってブラウザが勝手に送りつけてるだけで
サーバー側は upload_max_filesize 以上受け取っていないと考えて良いんでしょうか?
読みにくい文章ですみません(・・;
0171nobodyさん
2006/02/08(水) 22:07:23ID:???Apache自体は全部受信してて、それをPHPコアがフォーム分解してテンポラリを作る際に、
サイズが大きすぎたら処理を中断してエラーフラグを設定して、スクリプトの実行を開始、
って感じだと思う。
サーバー負荷を下げるのが目的ならname="MAX_FILE_SIZE"で指定してやんないといけないし、
それを無視するブラウザを弾きたいということであればApache側でPOSTの制限をするなどの
設定をしてやる必要があると思う。
0172156
2006/02/08(水) 22:08:28ID:???んー、PHPマニュアルには、
『MAX_FILE_SIZEはブラウザへの勧告に過ぎません。この最大値を 出し抜くのは簡単なことなので信頼してはいけません。
しかし、 PHP側の最大サイズの設定を欺くことはできません。 しかしそれでもMAX_FILE_SIZEを指定すべきです。
なぜなら、 巨大なファイルを転送しようとして、
実はそれが大きすぎて転送できないということを長時間待ったあとで知らされるのを防げるからです。 』
とあるので、
MAX_FILE_SIZE(HTML) < POSTしようとするファイルサイズ < upload_max_filesize(PHP) の場合は、
(MAX_FILE_SIZEを欺くことは簡単にせよ)ブラウザ側で警告が出る。
upload_max_filesize(PHP) < POSTしようとするファイルサイズ < MAX_FILE_SIZE(HTML) の場合は、
ブラウザ側で警告は出ずに、サーバ側から"大きすぎて転送できないということを長時間待ったあとで知らされる"。
ということだろうから、その挙動は合っていると思う。
エラーコード、$_FILES['userfile']['error'] をechoしてみれば分かるんじゃ?
0173nobodyさん
2006/02/08(水) 22:32:04ID:???ini_setで関係のありそうな場所を設定してるのですが、気を付けた方がいい所はありますか?
漠然とした内容ですいませんが、第一引数に「ー」や「]」などを入れると文字化けして、ini_setや他の関係ありそうな関数を使っても必ずどっちかが文字化けしたりで途方に暮れてます…
0175nobodyさん
2006/02/08(水) 23:41:03ID:???現在ある掲示板を、携帯絵文字対応にしようと思っております。
既存の掲示板では携帯から絵文字を投稿すると
<img src="img/i/F8C7.gif" width="12" height="12" border="0">
と変換されているのですが、これを携帯から見た時に
?
と変換したいのです。
このような変換を行う場合はどのようにしたらよろしいでしょうか?
よろしくお願いいたします。
0176175
2006/02/08(水) 23:41:43ID:???です。文字化けしてしまいました・・。
0178nobodyさん
2006/02/09(木) 00:06:23ID:MhSFpTrNhttp://c-others.2ch.net/test/-/php/1139146534/w ←こんな感じで書き込めるようにするにはどうしたらよいでしょうか
hiddenの値とかは何とかなると思いますが、ソケットプログラミングが全くわかんないので、できたら実際に書き込みできるスクリプトを見せていただきたいのですが・・・
よろしくお願いします。
0179nobodyさん
2006/02/09(木) 00:12:01ID:???すでに「p2」というPHP製の非常に優れたGATEWAYプログラムが存在してますので、
まずはそちらの中身を解析してみて、それ以上のものを作って公開してくださいね。
0181179
2006/02/09(木) 00:21:24ID:???>>178で参考になるスクリプトが見たいといってるから、
存在するオープンソースで一番目的に近いものを紹介して
なんで、「死ね」とか言われなきゃならんのだ・・・凹むぞ
0182nobodyさん
2006/02/09(木) 00:37:21ID:???0183nobodyさん
2006/02/09(木) 01:00:28ID:???0184nobodyさん
2006/02/09(木) 01:21:00ID:???0185150
NGNGありがとうございます。
そして遅レスですみません。
>>171
Apache側の設定のこと完全に忘れてましたw
それでApache方面でググった今の自分にぴったりな(?)文章を見つけました。
http://multix.jp/html/memo/030521.html#00010201
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LimitRequestBody
クライアントから送信されてくる POSTや PUTデータを受け入れる
最大値を指定します。初期値は 0(無制限)で、バイト単位で
2147483647(2GB)までを指定できます。これを使えば CGIで
ファイルアップローダを運用するような場合、CGIプロセスが
起動する前に巨大すぎるデータの受け入れを容易く拒否することができます
(CGIプロセスに渡ってからではほとんどの場合、手遅れ)。
それ以外でもバッファオーバーフローやサーバクラッシュ目的での
DoS攻撃を回避するのに有効ですから、サーバ管理者は必ず再設定しておくべきです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
>>172
upload_max_filesize以上post_max_size未満のサイズなら
$_FILES['userfile']['error']でちゃんとエラーを拾えるんですが
post_max_sizeを超えてしまうと拾えなくなってしまいます。
というか何もPOSTされなかったかのような反応になります。
しかも送信してる間にハードディスクがガリガリいってるぽいので
どうも>>171のとおりPOSTされたデータをApache側で
全部受け取ってるのかもしれません。
うーんでもApache側で一旦受け取るんだったら
upload_max_filesizeとupload_max_filesizeの意味無いような気がするし。。。
もうわけわかめ。
0186nobodyさん
NGNGそれにphpのテンポラリディレクトリは
ウェブディレクトリの外側なので
LimitRequestBodyで設定できませんでした。
0187nobodyさん
2006/02/09(木) 02:07:21ID:???鯖のリソース余ってるやつちょっと来い@自宅サーバ
http://pc8.2ch.net/test/read.cgi/mysv/1137564375/l50
0188150
NGNG>というか何もPOSTされなかったかのような反応になります。
良く調べたらこれはMAX_FILE_SIZEに引っかかっただけでしたorz
MAX_FILE_SIZEを100000000000000000000にして
やってみたらエラーを拾えるようになりました。
いろいろやってみた結果、
結局サーバー側は upload_max_filesize 以上受け取っていない
ということかもしれません。
ご迷惑をおかけてすみませんでした。
0189nobodyさん
NGNG0190nobodyさん
2006/02/09(木) 03:40:24ID:???0192nobodyさん
NGNG0194nobodyさん
2006/02/09(木) 07:55:13ID:???(my) $hoge = 1;
(my) $hige = 2;
// hogeにhigeを加える
$hage = $hoge + $hige; //hogeをhageに間違える
print $hoge;
0196nobodyさん
2006/02/09(木) 09:01:55ID:???str_replace("\n", "<br>", stripslashes($textarea))
としているのですが、テキストエリアにタグを入れた場合、改行が入っていると
<br>が入ってしまいます(当然ですが)
例)
<table>
<tr>
<td>テキスト </td>
</tr>
</table>
これを改行無しに記述すれば問題はないのですが、ホームページ作成ソフトなどから
直接タグをコピペする時もあります。
どうすれば整形済みのタグを入れても<br>だらけにならないように出来るのでしょうか?
説明が下手ですが、何かアドバイスをいただければと思います。
0198196
2006/02/09(木) 09:29:55ID:???それが、普通のテキスト文字の場合は改行した時、<br>に変換が必要なんです。
ブログの記事書き込み部分のようなイメージです。
ブログ(MTなど)でも記事フォームにタグを入れている場合は、改行せずに
入れているような気がしないでもないですが、もし何か良い方法があれば、ご教授願います。
0199nobodyさん
2006/02/09(木) 09:49:35ID:???HTMLでの記事書き込みとテキストでの記事書き込みとをモード切替してるとこはある。
同一のものとして扱うのであれば、タグの開始と終了<hoge></hoge>を判別して、
その間だけ<br>変換やめるとか。
同じ名前のタグをネストされた時の対処が必要だしちょっと面倒かもしれんが…
XMLパーサとか使ってみるのもテではないでしょうか?
0200nobodyさん
2006/02/09(木) 09:51:04ID:???0201196
2006/02/09(木) 10:12:05ID:???なるほど。やっぱり、入力フォームを分けるという対処しかありませんよね。。
1つのテキストエリア上で出来たら、便利だと思っていたのですが、
入力する側が手間になるといけませんので、断念します。
アドバイスありがとうございました。
0202149
2006/02/09(木) 10:17:13ID:g3a/RWdO0203nobodyさん
2006/02/09(木) 10:24:38ID:???これってなにか問題ありますか?
0204nobodyさん
2006/02/09(木) 10:25:48ID:???ttp://hrgs.itbdns.com/diary/item/24
ていうか少しは自分で調べる事を知れ。
ttp://www.google.co.jp/search?hl=ja&q=PEAR+%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89&lr=
思いっきり一番上に出てきたぞwww
0206nobodyさん
2006/02/09(木) 10:48:04ID:???includeもしてないです。
a.phpにb.phpで作ってる関数と同じ名前の関数を作ったらエラーになったので
試しにa.phpの関数を消して呼び出しだけを行ったら普通にb.phpの関数が呼ばれてたので
0207nobodyさん
2006/02/09(木) 10:52:33ID:???include山ほどしとりますた・・
a.php内で
<?php〜?>外に
<!--〜-->ってコメントにしてたんですが、これって
<?php〜?>外なのに生きてるんですね
0208nobodyさん
2006/02/09(木) 10:55:31ID:???でも
やっぱコメント扱いっぽいけど、インクルードはされてるみたいだなあ
<!--<?php include("b.php"); ?>-->
これって、b.phpは実際には呼ばないけど内部関数の定義はされるんですか?
0209nobodyさん
2006/02/09(木) 10:59:21ID:???つ http://www.php.net/manual/ja/language.basic-syntax.comments.php
0210nobodyさん
2006/02/09(木) 11:05:06ID:???え?あれ?
いや、コメントになってるっぽくて確かにb.phpは呼ばれてはいないのに
b.phpの関数が呼べるのが疑問なんですよ、俺変なこと言ってます?
0211nobodyさん
2006/02/09(木) 11:08:43ID:???こういうのはロジック以前にルール作りをどうするかだと思うんだけど、
例えば「各行の末尾が">"で終わっていなければテキストの改行とみなして<br>を入れる」とかじゃダメ?
$test = <<<TEXT
<table>
<tr>
<td>テキスト </td>
<td>テキ
スト </td>
</tr>
</table>
TEXT;
foreach(explode("\n", $text) as $line) {
$newtext .= $line . ((substr($line, -1) != '>')? '<br>': '') . "\n";
}
結果
<table>
<tr>
<td>テキスト </td>
<td>テキ<br>
スト </td>
</tr>
</table>
0212149
2006/02/09(木) 11:08:45ID:g3a/RWdOありがとう!
家に来て俺の妹とファックしていいよ。
0214nobodyさん
2006/02/09(木) 11:11:35ID:???フレームを解除させて飛ばす場合はどのようにすればいいのでしょうか?
0215nobodyさん
2006/02/09(木) 11:12:36ID:???>208の書き方では、HTMLではコメントとされても、PHPとしては実行される。
ただ、b.php内でechoしてると、<!-- hogehoge -->となるので、ブラウザ上では表示されない。
HTMLソース見れば、b.phpが読み込まれた上に実行されていると思うが。
0216nobodyさん
2006/02/09(木) 11:13:31ID:???いやそれはわかってるんですが、実行されてる様子がないんですよ。
b.phpで適当な文字をechoしてるのですが、
<!-- -->でくくってると、文字が出なくて<!-- -->を取ると文字が出ます。
ひょっとすると俺の根本から間違ってますか?
0217nobodyさん
2006/02/09(木) 11:15:16ID:???出力されたHTMLソース見れ。
<!-- 適当な文字 --> って出力されてて、PHPは実行されてるがブラウザから見れなくなってるから。
0218nobodyさん
2006/02/09(木) 11:15:26ID:???嗚呼、わかりますた。
どうやら俺の根本が間違ってました。
確かにソースをみると、実行されてますねこれ・・
コメントになってるんでブラウザには表示されてないだけか・・・
0220nobodyさん
2006/02/09(木) 11:16:56ID:???PHPの呼び出し元HTMLでtargetを指定してやるか、Locationで飛ばした先のHTMLを
target解除してさらに別ページに飛ばすJavaScriptのページにして連続遷移。
0221nobodyさん
2006/02/09(木) 11:16:57ID:???ちょっと前にも同じ質問があったぞ…
フレームはHTMLの仕様であり、PHPから直接いじることは無理。
どうしてもやりたければ、PHPのheaderで飛ばすのではなく、
PHPでJavaScriptを生成してwindowオブジェクトを操作すべし。
0222nobodyさん
2006/02/09(木) 11:20:30ID:???サーバー側の処理を考えればそんな所にはいきつかん。
<!-- ここに書かれた文字列 -->を表示しないと言うのはブラウザ側の機能。
サーバー側はあくまで取得してきたファイルを処理し、整形されたHTMLをクライアントへ投げるだけだ。
0223nobodyさん
2006/02/09(木) 11:22:06ID:???例えば、a.phpからb.phpの自作関数を呼ぶ場合って
b.phpでは関数のみを作成し本体には何も書かないのがいいんですか?
0224nobodyさん
2006/02/09(木) 11:24:27ID:???本体って何を指してんだよw
ていうか、関数郡、実際稼動ファイルと分けておいた方が後で自分でも見やすいだろ?
お前次第だよそれはw
0226nobodyさん
2006/02/09(木) 11:32:10ID:???言ってる意味が分からんがな。
本体=a.php 、 関数のみ=b.php という意味なら、
>>224が言うように見やすくなり管理し易くなる。
その関数を他のファイルで使いたい場合も、b.phpをincludeするだけでよくなる。
0227nobodyさん
2006/02/09(木) 11:37:17ID:???そそ、それそれ、ってやっぱ自分次第なんですよね。
>>226
ですね、<?phpでかこめば関数を作らなくても記述できる点がCとは異なるので
ちょっとアレだったんですよ
0229nobodyさん
2006/02/09(木) 11:55:47ID:???Cと異なるってのはどういうこと?
メイン関数を作らなくてもいいってこと?
関数呼び出しに関してはいたってCと同じ構造だと思うぞ。
0230nobodyさん
2006/02/09(木) 11:56:23ID:???extract($_GET);
extract($_POST);
extract($_COOKIE);
extract($_SERVER);
っていうのがあるんですが、これはどういう意味があるんですか?
0231nobodyさん
2006/02/09(木) 11:58:19ID:???ttp://php.s3.to/man/function.extract.html
ttp://php.s3.to/man/language.variables.predefined.html
0235nobodyさん
2006/02/09(木) 12:11:02ID:???ちゃんとサニタイズしてね。
0237nobodyさん
2006/02/09(木) 14:01:39ID:???0238nobodyさん
2006/02/09(木) 14:54:57ID:???いやCは必ず関数が存在するけどphpて関数いらんっしょ
例えば、
<?php
なんか
この部分とか
function aa( )
{
}
?>
0240nobodyさん
2006/02/09(木) 15:09:41ID:???<?php
include ("b.php");
func();
?>
----b.php----
<?php
echo "test message";
function func() { echo "hello world.\n"; }
?>
----終了----
Cなら echo "test message";はエラー返される、とか
言い方が分からないけど、グローバルな部分で関数を呼び出したりifやwhileが使えないって事かな。
0242229
2006/02/09(木) 15:25:09ID:???インクルードするだけって点ではCと同じじゃないかと書いたのですが、
どうやら私の方が227の文面を読み違えていたようでしつれしました。
0244nobodyさん
2006/02/09(木) 15:56:49ID:eu00qYyittp://www.xxxx.com/zzz/hello.php
のアドレスに
ttp://www.xxxx.com/zzz/hello
だけで行くのは出来ますか?
お願いします。
0246nobodyさん
2006/02/09(木) 16:05:12ID:???↑の文を
<form action="aaa.php" method="post">
<input type="hidden" name="name" value="write">
<textarea name="text" cols="20" rows="5" wrap="soft"></textarea>
<input type="sub" value="送信">
</form>
↑で送信して
if ($_POST['name']=='write'){
print $_POST['text'];
}
↑みたいな感じでで受け取ると、
<a href= \'http://www.yahoo.co.jp/\'>Yahoo!</a>
↑みたいに変化してしまいます。回避策あったら教えてください。
0247nobodyさん
2006/02/09(木) 16:14:13ID:???単にPHPの場合は各ファイルにmain()関数を置けるってだけだな。
Cとの最大の違いは「main()関数の中身を複数ファイルにバラバラに配置できる」ってとこか。
0250nobodyさん
2006/02/09(木) 16:58:06ID:???Apacheのコンテントネゴシエーションが有効ならそのまま拡張子無しでアクセスできるかも
あとはmod_rewriteを使う
どっちにしてもPHP関係ねー
■ このスレッドは過去ログ倉庫に格納されています