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

【PHP】下らねぇ質問はID出して書き込みやがれ 81

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/18(水) 21:09:16ID:xNLzAD7T
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0537nobodyさん2009/02/26(木) 20:25:10ID:???
>>512-513
。・゚・(ノД`)・゚・。
0538nobodyさん2009/02/26(木) 21:31:11ID:???
http://webhosting.yahoo.co.jp/

契約の金額が増えるほど
ディスクの容量が減る
ステキなヤフーのホスティングサービス
0539nobodyさん2009/02/26(木) 22:27:45ID:???
>519
俺は逆にswitchの中には極力return以外を置かないようにしてる。
breakも不要になるからbreak忘れ防げるし、全てのcaseが即returnになってれば読みやすい。
0540nobodyさん2009/02/26(木) 23:09:38ID:???
「ある一定の期間(例えば24時間)ごとに、何かをするにはどうしたらいい?」

って英語で質問したら、いっぱい回答きて
収拾つかなくなったよ
たすけて
どうしたらいい?

http://stackoverflow.com/questions/590464/how-do-you-write-a-process-to-do-something-every-24-hours
0541nobodyさん2009/02/26(木) 23:13:27ID:???
>>540
>>1
0542nobodyさん2009/02/26(木) 23:46:35ID:lNT2RMd9
URLが
http://example/test/
と言う場合、このディレクトリを取得する方法ってないでしょうか?
0543nobodyさん2009/02/26(木) 23:48:20ID:???
>>542
$_SERVER
0544nobodyさん2009/02/26(木) 23:55:20ID:???
>>542
testディレクトリ内で
dirname($_SERVER['SCRIPT_NAME'])
0545nobodyさん2009/02/27(金) 00:44:14ID:???
はぁ?言いたいことがよく分からん。

そのURL叩いて何らかのPHPスクリプトが実行されるのなら、__FILE__でそのスクリプトへのパスが取得出来る。
そのパスから親ディレクトリ取ってくる。

これで回答になってる?
0546nobodyさん2009/02/27(金) 00:45:08ID:???
>>545は>>542への回答
0547nobodyさん2009/02/27(金) 01:05:50ID:JrfelggM
WindowsでAPC使おうと思って、pecl4win.php.netみたらサイトが死んでるんですが、
自分でビルドするしかないんでしょうか?

アプリを配布するにあたって、環境はなるべく本家(に近いところ)から落としてもらおうと思ってたんですけど。
0548nobodyさん2009/02/27(金) 02:00:01ID:GwQuSr9T
APCってシェルからPHPを呼び出した時には効かないんですか?
05495472009/02/27(金) 02:42:59ID:???
プロセス違うし、無理なんじゃない。
試しにスクリプトとして実行しても、ヒット数増えなかったし。(一応古いバージョンのなら手元にバイナリがある)

PHPのコンパイル、ワケがわからん。
試しにPHP本体も作ってみるかと思ったんだが、

http://jp.php.net/manual/ja/install.windows.building.php
≫ the Windows build tools をダウンロードし、それを C:\work に展開する

ってあるのも、いきなりリンク切れしてるし。
apcも、とりあえずVCでコンパイルしようとしたら、VCのヘッダファイルでサイズが0の配列ってエラーが出るし。

どこから手をつけたらいいものやら。
0550nobodyさん2009/02/27(金) 04:12:18ID:lL0tvrw7
http://asobi.me.land.to/uyu/1.php

このページなんだけど、
getにしたのに、リロードしたら
カウントアップしてしまうんだよ

なんで?POSTだったら、そうなるってわかるけど、
getだったら、ならないはずなのに?
0551nobodyさん2009/02/27(金) 04:15:05ID:???
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | ここでボケて!!  |
 |_________|
   ∧∧ ||
   ( ゚д゚)||
  /  づΦ
0552nobodyさん2009/02/27(金) 04:18:21ID:lL0tvrw7
>>551
慎重に選考を進めてまいりましたが、
残念ながらご希望に添えない結果と
なりましたのでご連絡申し上げます。

今後ますますのご健康とご活躍をお祈り申し上げます。
0553nobodyさん2009/02/27(金) 04:24:52ID:lL0tvrw7
フォームのアクションを別ファイルにして、1.php → 2.php へPOST
<form method=post action=2.php>

そこから元ファイルに飛ばせばフォームデータ消えるから、F5更新しても大丈夫
header("Location: http://example.com/1.php");

↑こんなめんどくさいこと
しないとだめなの?
0554nobodyさん2009/02/27(金) 04:37:23ID:???
別ファイルにしなくてもカウントアップしたらheaderで飛ばせばいいだろ
HTTPの仕様とブラウザの仕様をもう少し勉強したほうがいい
0555nobodyさん2009/02/27(金) 05:00:02ID:lL0tvrw7
ちょ、、、HP303とか押しすぎ
0556nobodyさん2009/02/27(金) 05:01:29ID:???
天才チンパンジーアイちゃんの今日のIDは lL0tvrw7 か
0557nobodyさん2009/02/27(金) 05:17:49ID:???
>>556
通報しました
0558nobodyさん2009/02/27(金) 07:02:13ID:fK1SPmyA
計算量が多く重いバッチ処理があったので、
pcntl_forkを使いフォークして複数プロセスにタスクを分配させました。
memcacheを共有メモリに使った簡易的なmap-reduceです。
プロセスを増やすほど速くなると思ったのですが、
個々のタスクの速度が落ちるだけで、
合計時間が縮まりません。
フォークを高速化目的に使うのは間違っているのでしょうか?
0559nobodyさん2009/02/27(金) 08:55:05ID:YTPFMmJE
pdoだとローを$row[0]["TEST"]みたいにして取り出せるのに
mysql_fetch_arrayでやると$row[0]["TEST"]でデータが出てこないというか
[1]["TEST"]なら1、[2]["TEST"]なら2、・・・な値が出てくるんだけどそういうもんなの?・・
0560nobodyさん2009/02/27(金) 09:17:59ID:???
>>559
var_dumpすれ
0561nobodyさん2009/02/27(金) 09:25:13ID:???
>558
本命はmemcache。memcacheは相当遅いからボトルネックになってもおかしくない。
文字列と数値以外はシリアライズされるからその分重くなる。
単純にタスクが小さすぎるか、多すぎる可能性もある。タスクが小さすぎると、タスク分割/統合のオーバーヘッドが、分割による高速化を超える。
デュアルコアなら2分割以上の分割は無駄。たとえ100分割しても、働く人間が2人なら2つずつしか捌けん。
googleが速いのは、物理的に大量のサーバーに処理を分割してるのと、オーバーヘッドになるタスクの分割/統合自体も分散処理してるから。

いっぺんボトルネックがどこか測定してみ。
xdebugかzend debuggerを使えば、どの処理が時間を食っているか見られる。
0562nobodyさん2009/02/27(金) 10:25:25ID:???
>>545
他の2名はわかってるから言いたいことがわからないのはおまえだけだよ
0563nobodyさん2009/02/27(金) 10:51:58ID:???
>>558 >>561
フォークを高速化目的に使うのは基本的には間違いじゃね?
map reduceが目的にしているのは、大量のリソースを使えるという利点。
リソースの余剰がない1サーバー内でフォークしても重くなるだけ。
むしろ、高速化したいならフォークしてしまう処理を減らしたほうがいい。
0564nobodyさん2009/02/27(金) 11:00:56ID:???
フォークして高速化できるのはウェブとかスパムとかクライアント側との通信にディレイが発生する
ときぐらいだろ
待ち状態(サーバ側負荷ほとんど無し)のあいだに別プロセスで並行して通信できる利点
0565nobodyさん2009/02/27(金) 13:02:18ID:vxQr4xVs
継承の質問なんですが継承で子、孫と作っていくと
class sql {
function getUser() {}
}
class subsql extends sql {
function getParam(){}
}
class sub2sql extends subsql{
function getAge(){}
}

sqlしか必要がないファイル、sql,subsqlが必要なファイル、全部必要なファイル
この3つからgetUserを呼び出す際
呼び出しを統一のクラスで管理したいのですがsql,subsql,sub2sqlとクラス名が違うためできません。
クラスを上書きみたいなことはできないのでしょうか?

subsqlではなくsqlの追加ファンクションとして別ファイルで定義したいのです

途中で送信してしまい変な分になってます。ごめんなさい
0566nobodyさん2009/02/27(金) 13:12:19ID:???
なんかよくわからんが、ポリモーフィズム使えばいいんじゃねーの?

$sql_obj = getSqlObj();// 必要に応じて sql,subsql,sub2sqlのインスタンスを返すメソッドね。
$sql_obj->getUser();
0567nobodyさん2009/02/27(金) 13:13:08ID:/gqrgIY6
あるクラスのメソッドの戻り値が配列の参照渡しなのですが、
値として受け取る方法ってありますか?
ソースはこんな感じです↓
class hoge{
private $hoge = array('h','o','g','e');
public function & refHoge(){ return $hoge }
}
$hogeCls = new hoge();
$rtn = $hogeCls->refHoge();
// $rtnをごにょごにょしたいが、$hogeは変えたくない

// 今は↓の処理をやってますが、もっと良いやりかたがあったら教えてほしいです
foreach($hogeCls->refHoge() as $key => $val){ $rtn[$key] = $val; }
0568nobodyさん2009/02/27(金) 13:14:25ID:laCA4GxD
utf8 + LFでfopenしたファイルに"(ダブルクウォテーション)を
fwriteすると、なぜか「\"」とバックスラッシュが入ってしまいます。
なぜでしょうか?
0569nobodyさん2009/02/27(金) 13:32:22ID:???
>>568
magic_quotes_runtimeの設定ははどうなっとるかのぉ
0570nobodyさん2009/02/27(金) 13:32:27ID:???
>>567
array_valuesとか?
0571nobodyさん2009/02/27(金) 13:42:08ID:???
>>569
原因magic_quotes_gpcでした。ありがとうございました。
0572nobodyさん2009/02/27(金) 13:42:09ID:???
>>567
php4か5で意味が変わるからバージョンぐらい記入しようぜ
0573nobodyさん2009/02/27(金) 14:16:10ID:???
>>567
array型を参照で受け取る時は、メソッドと代入する側両方が & をつけないとならない
逆に言えば何も修飾せずに代入するだけでコピーになる
$ref = &$hogeCls->refHoge(); // 参照
$copy = $hogeCls->refHoge(); // 値

http://www.php.net/manual/ja/language.references.php
0574nobodyさん2009/02/27(金) 15:39:39ID:/lC62y00
IPアドレスが割り当てられてる全てのホスト名を取得する方法ってありますか?

例えば「61.195.146.164」と入力した場合、
「jp.php.net」「pobox.packetbusiness.com」などが返ってくるイメージです。

gethostbyaddr('61.194.146.164')だと
「pobox.packetbusiness.com」しか返って来ませんでした。
0575nobodyさん2009/02/27(金) 15:47:10ID:???
日本語でおk
0576nobodyさん2009/02/27(金) 15:47:17ID:???
>>574
それ、できたらすごい便利だよね。
おれのhostsもあいつのhostsも全部解決できるわけだろ?
05775742009/02/27(金) 15:55:56ID:/lC62y00
>>575
すみません、言い直します。

IPアドレスからホスト名を取得する方法が
gethostbyaddr以外にありますでしょうか?
0578nobodyさん2009/02/27(金) 16:25:38ID:???
>>577
streamつかったり、systemを使えばできるだろうけど、結果は一緒だよ。
DNS理解してる?
0579nobodyさん2009/02/27(金) 16:37:25ID:???
>>553
WebはPOSTに弱いよな。PHPに限らず。
0580nobodyさん2009/02/27(金) 16:42:32ID:???
意味不明
05815742009/02/27(金) 16:57:55ID:???
>>578
逆引きが一意であることと、正引きが複数設定可能なことくらいです。

DNSサーバに「このIPアドレスに正引きされるホスト名を教えてくれ」っていう
問い合わせはできないってことでOKですか?
0582nobodyさん2009/02/27(金) 17:06:26ID:???
>>581
どのDNSサーバーに問い合わせるつもり?
0583nobodyさん2009/02/27(金) 17:18:56ID:???
gethostbyaddr('61.194.146.164')だと
「pobox.packetbusiness.com」しか返って来ませんでした。

あたりまえだろ
0584nobodyさん2009/02/27(金) 17:21:27ID:???
ああ、つまりそのIPで取得してるドメインを全て返したいってことじゃね?
0585nobodyさん2009/02/27(金) 17:25:52ID:???
>>581
おk
05865742009/02/27(金) 18:26:24ID:???
>>585
ありがとうございます、自分の間違えが分かりました。

>>584
はい、そのとおりです。
SPAMメールの処理周りでそのようなことが出来るかどうか
疑問に思ったので質問いたしました。

---
DNSの初歩レベルの質問になってしまい失礼しました。
ありがとうございました。
0587nobodyさん2009/02/27(金) 20:20:35ID:0buNRA0u
オブジェクトの参照を切るにはどうすればいいんだ?
$obj2=$obj1;
だと$obj1の参照になってしまうらしい。
$obj2=clone $obj1;
ってやっても、参照が渡されてしまった。助けて欲しい。
0588nobodyさん2009/02/27(金) 20:29:50ID:???
>>587
おまえ、それわざとだろ。
copy on writeは知ってるよな?
0589nobodyさん2009/02/27(金) 21:00:58ID:???
>>587
PHPのバージョンによるので答えられません
バージョンを書きましょう
0590nobodyさん2009/02/27(金) 21:56:28ID:kc9E5JKd
$txt=mb_convert_encoding('あいうえお','JIS','UTF-8');

$encoding[]=mb_detect_encoding($txt,'UTF-8,EUC-JP,SJIS,JIS');
$encoding[]=mb_detect_encoding($txt,'EUC-JP,SJIS,JIS');
$encoding[]=mb_detect_encoding($txt,'SJIS,JIS');
$encoding[]=mb_detect_encoding($txt,'JIS,UTF-8');


print("<pre>");var_dump($txt,$encoding,mb_convert_encoding($txt,'UTF-8','JIS'));die();


↓こうなる
array(3) {
[0]=>
string(5) "UTF-8"
[1]=>
string(6) "EUC-JP"
[2]=>
string(4) "SJIS"
[3]=>
string(3) "JIS"
}
0591nobodyさん2009/02/27(金) 21:58:31ID:???
ファイルはUTF-8(BOM付)で保存してます。

$txtをそおまま表示しようとすると$とか矢印みたいなのが混ざったような文字化けで表示され、
mb_convert_encoding($txt,'UTF-8','JIS')するときちんと元に戻ります。

4.4.9とXAMPPの5.2.8で確認。
これはどうすれば?
05925902009/02/27(金) 22:00:28ID:kc9E5JKd
場所間違った

あとvar_dumpの行間違えました。
var_dump($encoding)
です
0593nobodyさん2009/02/27(金) 22:09:50ID:DvviDUUZ
PHP5の普及率ってどのくらいですかね?
0594nobodyさん2009/02/27(金) 23:03:28ID:???
>>591
ID
0595nobodyさん2009/02/27(金) 23:43:16ID:???
4は既にメンテナンスすらされなくなって半年近い。新規案件なら0だろ。
レガシーシステムも2年以内にはほぼ絶滅すると思う。

ttp://labs.cybozu.co.jp/blog/akky/archives/2008/12/php5-usage-stats.html
人口比だと2008年末時点で10%を割ってる。
0596nobodyさん2009/02/28(土) 02:50:55ID:1Mc3y2O0
正規表現系の関数が糞重いことに気づきました。
正規表現ほど高度でない、
ある程度融通が利く文字列検索をしたいのですが(具体的には文字列から携帯絵文字を探す)
PHPで書くと、正規表現より遅かったり速かったりです。
Cで書かれていれば確実に正規表現より速くなるのではと思うのですが、
そういうextensionありますか?
0597nobodyさん2009/02/28(土) 02:54:37ID:???
str_replaceでもかければ?
0598nobodyさん2009/02/28(土) 08:05:42ID:???
正規表現使ったくらいで糞重くなるマシンならまずハード全取り替えだろ
0599nobodyさん2009/02/28(土) 09:48:19ID:4FEE2no0
文字列を流し込むとパスワードの安全性の目安を返してくれる
ライブラリかサンプルコードとかってありますか?
0600nobodyさん2009/02/28(土) 10:04:08ID:???
パスワードをググって結果が少なければOK
0601nobodyさん2009/02/28(土) 10:19:27ID:???
どのようなパスワードが安全かどのようなパスワードが危険かを考えればOK
パスワードは4文字以上10文字以内にしてくださいということにして

4文字→低
5〜7文字→単一種類の文字(数字or小文字or大文字)での構成は低
2種の文字しか混ざってない場合も低 3種の文字が混ざってる場合は中
8〜10文字→単一種類または2種類の文字での構成は中
3種の文字が混ざってる場合は高
例外として
記号などの特殊文字が混ざってる場合は5文字からでも高
全て同じ文字だと10文字でも低

とまぁこんな仕様を考えて実装すればいいんじゃないでしょうか
0602nobodyさん2009/02/28(土) 10:27:37ID:???
>>599
ttp://jp2.php.net/manual/ja/ref.crack.php
0603nobodyさん2009/02/28(土) 10:35:26ID:???
>>602
こんな関数あるのかーと思ったが辞書用意しないといかんのね
a
aa
aaa
aaaa
b
bb
bbb
bbbb
こんなん用意してたらキリがないよな
0604nobodyさん2009/02/28(土) 10:36:33ID:???
テキストファイルだけをアップロードできるphpのアップローダを設置しようと思い
フリーで配布されているこちらのアップローダを見つけました。
ttp://php.eweb-design.com/1502_up.html

遣ってみたところとてもシンプルで気に入ったのですがphpに関しては
素人で分からないことだらけです。
そこで質問なのですが、アップロードできるファイルを .txt だけに限定する方法
を教えていただけないでしょうか?
それと容量オーバーのときだけに表示されるコメントも付けていただければ幸いです。
現在は1Mまでの制限でそれを超えると「アップロード失敗」とだけ表示されるようです。
次レスにソース部分を明記します。よろしくお願いします。
0605nobodyさん2009/02/28(土) 10:39:19ID:???
$updir = "./up/";
?>
<?php htmlHeader(); ?>アップロード結果<BR><BR>
<TABLE border="0" width="350" cellspacing="1" cellpadding="3" bgcolor="#999999">
<TR><TD>ファイル名</TD><TD>サイズ</TD><TD>タイプ</TD></TR>
<?php
for($i=0;$i<sizeof($_FILES['fl']['name']);$i++) {
if($_FILES['fl']['name'][$i]=="") continue;
if(file_exists($updir.mb_convert_encoding($_FILES['fl']['name'][$i],"SJIS","EUC-JP"))==TRUE && $_POST['frb']=="true") {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">上書きできません</FONT></TD></TR>
<?php
} elseif(!is_uploaded_file($_FILES['fl']['tmp_name'][$i])) {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">アップロード失敗</FONT></TD></TR>
<?php
} else {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="right"><?php print($_FILES['fl']['size'][$i]); ?>Byte</TD>
<TD align="right"><?php print($_FILES['fl']['type'][$i]); ?></TD></TR>
<?php
move_uploaded_file($_FILES['fl']['tmp_name'][$i],$updir.mb_convert_encoding($_FILES['fl']['name'][$i],"SJIS","EUC-JP"));}
}
?>
</TABLE><BR>

<?php htmlFooter(); ?>

<?php function htmlHeader() { ?>
0606nobodyさん2009/02/28(土) 10:52:03ID:tCRdHOmU
>>604-605ですがIDを出し忘れていました。申し訳ありません。
0607nobodyさん2009/02/28(土) 10:52:36ID:4FEE2no0
>>601,602,603

自力で作ってみます
ありがとうございましたー!
0608nobodyさん2009/02/28(土) 10:54:20ID:???
>>605
} else {
の上に下記のように挿入

↓

} elseif( substr( $_FILES['fl']['tmp_name'][$i], strlen($_FILES['fl']['tmp_name'][$i])-4, 4 ) != ".txt" ) {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">拡張子が.txt以外はアップロードできません</FONT></TD></TR>
<?php
} else {
0609nobodyさん2009/02/28(土) 10:54:41ID:???
>>599
PHPじゃなくJavaScriptになるが
Extの拡張ライブラリにPasswordMeterってのがあってそれが便利だぞ
http://testcases.pagebakers.com/PasswordMeter/
0610nobodyさん2009/02/28(土) 11:00:43ID:???
拡張子が.txtってだけでテキストファイル扱いするのかよwwwwwwwwwww
0611nobodyさん2009/02/28(土) 11:11:33ID:tCRdHOmU
>>608
出来ました!ありがとうございます!

もうひとつだけよろしいでしょうか?
>>605のソースだと何バイトのファイルであったかアップロード後に表示されるのですが、
何行あるのかを表示させる場合はどのようにしたらよいのでしょうか?
つまり、アップロード後にファイル名、バイト数、行数を表示したいのです。
よろしくお願いします。
0612nobodyさん2009/02/28(土) 11:22:21ID:???
>>611
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="right"><?php print($_FILES['fl']['size'][$i]); ?>Byte</TD>
<TD align="right"><?php print($_FILES['fl']['type'][$i]); ?></TD></TR>
↓
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="right"><?php print($_FILES['fl']['size'][$i]); ?>Byte</TD>
<TD align="right"><?php print(count(file($_FILES['fl']['tmp_name'][$i]))); ?>行</TD>
<TD align="right"><?php print($_FILES['fl']['type'][$i]); ?></TD></TR>

未検証だけどたぶん動く
0613nobodyさん2009/02/28(土) 11:23:55ID:O2VO0P3W
画像ファイルpng、gif、jpg(jpeg)の3つだけアップロードを許可するようにしたいのですが
拡張子をチェックはします
それとバイナリを見て判断したいと思うのですが、これは完ぺきなチェックができないみたいで困ってます。
どのようなチェックを取り入れたらよろしいでしょうか?
0614nobodyさん2009/02/28(土) 11:41:35ID:???
>>613
>>385あたりから読んでいってみ
0615nobodyさん2009/02/28(土) 11:49:31ID:l4IqP0fM
pear::authとかって
まだ使われてるの?
0616nobodyさん2009/02/28(土) 12:11:52ID:tCRdHOmU
>>612
本当にありがとうございました。きちんとカウントされてました。


ところで、さきほどの>>608がアップできたと思ったら
テキストでもhtmlでもアップできないんです・・・。
} else { の上にそのまま貼り付けたのですが、、、

<TR bgcolor="#eeeeee">
<TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">アップロード失敗</FONT></TD>
</TR>
<?php
} elseif( substr( $_FILES['fl']['tmp_name'][$i], strlen($_FILES['fl']['tmp_name'][$i])-4, 4 ) != ".txt" ) {
?>
<TR bgcolor="#eeeeee"><TD><?php print($_FILES['fl']['name'][$i]); ?></TD>
<TD align="center" colspan="2"><FONT color="#ff0000">拡張子が.txt以外はアップロードできません</FONT></TD></TR>
<?php
} else {
?>
0617nobodyさん2009/02/28(土) 12:16:06ID:???
>>610
何が言いたいんだ?
バイナリデータじゃあるまいし
0618nobodyさん2009/02/28(土) 12:17:50ID:???
>>613
>>384
0619nobodyさん2009/02/28(土) 12:17:57ID:???
>>616
あれ、一時ファイルってファイル名変わっちゃうんだっけ?これでどう?

} elseif( substr( $_FILES['fl']['tmp_name'][$i], strlen($_FILES['fl']['tmp_name'][$i])-4, 4 ) != ".txt" ) {
↓
} elseif( substr( $_FILES['fl']['name'][$i], strlen($_FILES['fl']['name'][$i])-4, 4 ) != ".txt" ) {

.htmlがアップできないのはおまえさんの仕様だぞ
0620nobodyさん2009/02/28(土) 12:18:10ID:???
>>616
少しは自分で理解しようとしろよ
0621nobodyさん2009/02/28(土) 12:27:20ID:tCRdHOmU
>>619
ありがとうございました。バッチリでした!
0622nobodyさん2009/02/28(土) 13:06:03ID:B+Uhif0K
セキュリティに関してですが
利用者が入力するところはなし、強いて言えばリンクが○○.php?a=○&b=○の形なのでそこをいじることはできますが、
値は1桁の数字のみ通るようにしてかつそれを直接クエリに使うわけではなくswichでWHERE句用の値を選ぶようにしています。
検索もなし、セッションやクッキーは使いません。
DBはSQLiteなので.htaccessで見えないように。
エラー表示も.htaccessでphp_flag display_errors Offに。
こんな感じにしたとして、鯖自体がハッキングされたとかはのぞいてphp(html)やDBの改竄は行われる可能性はありますか?
0623nobodyさん2009/02/28(土) 13:25:32ID:iUikJcgx
教えてください。ソケットをあけて、いま届いているデータをすべて受信するにはどうすれば良いのでしょうか。
$buf=socket_read($out,2048);
で読むことはできるのですが、データが2048byteに足りていないとここで処理がブロックされてしまい、
データが2048byteの倍数でないと必ず最後でとまってしまいます。
長さを1にすれば数万回の無限ループみたいになって処理が遅いし、
長さはともかくいま届いているデータを全て読む、ブロックしない読み込み方法が見当たらなかったです。

socket_recvというメソッドもあるみたいですが、ドキュメントもまだないし
これがない時代も当然できていたはずのことなので、きっとreadで何とかする方法があるんだと思いますが…。
0624nobodyさん2009/02/28(土) 13:35:50ID:???
>622
悪魔の質問だな。
脆弱性の存在を示す事は可能だが、脆弱性が存在しない事を証明するのは至難の業。
セキュリティ対策の多くが「入力時点で全ての値を検証」「出力時点で全てエスケープ」のようにシステマチックなのはその辺に理由がある。

書かれている部分は安全に思える。ツボも押さえているし、他の部分で変な事をしない限り問題ないだろう。
強いて言うなら「入力する場所はなし」という言い方が若干不安かな。
hiddenだろうがなんだろうが全ての値は自由に改竄される、という前提でコーディングする必要がある。
0625nobodyさん2009/02/28(土) 13:47:32ID:Ho2Fi0s+
マジな質問なんですが自宅サーバーでPHP動かしてます。
今まではサーバーとルータだけでやっていたのですが今回ハブを使いPCをもう一台LAN内に追加しました。
そしたら自分のサイトの表示が極めて遅くなり
ページを切り替える毎に3秒位かかります。
LAN内だけかと思いネットカフェで試しましたがやっぱり遅かったのです。

ちなみにサーバーからLANケーブルを抜くと今まで通り高速で表示されます。
そのため初めはLANの設定の問題だと思ったのですが
同じサーバー内のPHPを使ったページでも速いページと遅いページがある事に気がつきました。
しかし遅いページがなぜこれ程遅いのかが色々いじってみたのですが分かりません。
おそらくPHPの使用関数なんかの問題だと思うのですが。
何で?知ってるやつ教えてや。
逆引きとかはしてないです。
0626nobodyさん2009/02/28(土) 14:06:43ID:???
PHP関係ねーし
0627nobodyさん2009/02/28(土) 14:09:33ID:B+Uhif0K
>>624
ありがとうございます。
>強いて言うなら「入力する場所はなし」という言い方が若干不安かな。
付け加えるとjavascriptも使わないのでプルダウンで選択とかもありません。
ほんとにリンクをクリックしていくぐらいです。
ただまあ思い当たるところは列挙しましたが洩れもあるかもしれませんし、
どちらにしろhtmlspecialchars他一応の処理はしています。
完全にとはいえないが大まかに改竄の入り口は認識できてるとみていいもんでしょうか。
0628nobodyさん2009/02/28(土) 14:27:23ID:???
>>622
数値1桁をチェックならまったく問題ない。エスケープ処理もいらない
0629nobodyさん2009/02/28(土) 14:46:51ID:AWhVh/M4
>>614,>>618
ありがとうございます
getimagesizeでは不十分と認識しておりますので他にチェックする方法をご存知でしたらご教示おねがいします
06306132009/02/28(土) 14:47:33ID:8fTqh/0P
書き込み毎にIDが変わってしまうのですいません
0631nobodyさん2009/02/28(土) 15:04:01ID:???
>>629
いや、getimagesizeでいいんだよ
それに加えて、画像の保存先ではスクリプトの実行ができないようにすればおk
0632nobodyさん2009/02/28(土) 15:29:50ID:???
>>623
無限ループしてるならsocket_read()の終了条件を間違えてないか疑うな
晒してみ
0633nobodyさん2009/02/28(土) 15:39:05ID:???
>>631
getimagesizeは信用できるものじゃない
無知お疲れ
0634nobodyさん2009/02/28(土) 16:05:48ID:???
>>627
哲学的な言い方をすると、
不安に思うようなら、脆弱性はあるかもしれないね。
他人に保証を求めるとしたら、それもまた脆弱性のひとつかもしれん。
セッションでもクッキーでも環境変数でも、それぞれがどんな形で渡ってくるか、
そして渡しているか、ブラウザの挙動はどうか、そういう理解度を深めていくしかないんじゃないか?
0635nobodyさん2009/02/28(土) 16:06:47ID:???
>>633
何が信用できないの?
0636nobodyさん2009/02/28(土) 16:08:12ID:???
>>633
ヘッダの一部しか見てない。jk
■ このスレッドは過去ログ倉庫に格納されています