私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ【PHP】下らねぇ質問はここに書き込みやがれ 71
php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>649
なにがおすすめですか?
なにがおすすめですか?
最初に…、長文になってしまってすいません。
SQLインジェクションを防ぐために、SQL文を生成する際、「escape_string」を使用しています。
しかし、人為的なミスで「escape_string」を使用せずにSQL文を生成していまうことがあります。
そこで、mysqliクラスを完全にくるんだクラス(OrgDBクラス)を1つ作成して、DBに対する操作を
OrgDBクラスを介して行うようにしました。
SQLインジェクションを防ぐために、SQL文を生成する際、「escape_string」を使用しています。
しかし、人為的なミスで「escape_string」を使用せずにSQL文を生成していまうことがあります。
そこで、mysqliクラスを完全にくるんだクラス(OrgDBクラス)を1つ作成して、DBに対する操作を
OrgDBクラスを介して行うようにしました。
~OrgDBクラス(抜粋)~
class OrgDb {
private $p_oConnect;
private $p_sSql;
public function OrgDb_connnect() {
$this->p_oConnect = new mysqli(…);
if ($this->p_oConnect->connect_errno !== 0) {
return false;
}
return true;
}
public function OrgDb_makeSql($sSql) {
for ($nCnt = 0; $nCnt < 10; $nCnt++) {
$sSql = str_replace("<" . $nCnt . ">", pack("C", $nCnt), $sSql);//☆1ココ
}
$this->p_sSql = $sSql;
}
public function OrgDb_setSql($nIndex, $sData) {
$this->p_sSql = str_replace(pack("C", $nIndex), $this->p_oConnect->escape_string($sData), $this->p_sSql);
}
public function OrgDb_execSql() {
for ($nCnt = 0; $nCnt < 10; $nCnt++) {
if (mb_strpos($this->p_sSql, pack("C", $nCnt)) !== false) {//☆2ココ
return false;
}
}
return $this->p_oConnect->query($this->p_sSql);
}
}
class OrgDb {
private $p_oConnect;
private $p_sSql;
public function OrgDb_connnect() {
$this->p_oConnect = new mysqli(…);
if ($this->p_oConnect->connect_errno !== 0) {
return false;
}
return true;
}
public function OrgDb_makeSql($sSql) {
for ($nCnt = 0; $nCnt < 10; $nCnt++) {
$sSql = str_replace("<" . $nCnt . ">", pack("C", $nCnt), $sSql);//☆1ココ
}
$this->p_sSql = $sSql;
}
public function OrgDb_setSql($nIndex, $sData) {
$this->p_sSql = str_replace(pack("C", $nIndex), $this->p_oConnect->escape_string($sData), $this->p_sSql);
}
public function OrgDb_execSql() {
for ($nCnt = 0; $nCnt < 10; $nCnt++) {
if (mb_strpos($this->p_sSql, pack("C", $nCnt)) !== false) {//☆2ココ
return false;
}
}
return $this->p_oConnect->query($this->p_sSql);
}
}
~OrgDBクラスを使用する~
$oDb = new OrgDb();
$oDb->OrgDb_connnect();
$oDb->OrgDb_makeSql("select * from table where key = '<0>'");
$oDb->OrgDb_setSql(0, "クライアントから送信されたデータ(要サニタイジング文字列)");
$oRes = $oDb->OrgDb_execSql();
$oDb = new OrgDb();
$oDb->OrgDb_connnect();
$oDb->OrgDb_makeSql("select * from table where key = '<0>'");
$oDb->OrgDb_setSql(0, "クライアントから送信されたデータ(要サニタイジング文字列)");
$oRes = $oDb->OrgDb_execSql();
やっていることは、SQL文を生成する際、
1.静的なSQL文を定義する。この際、動的に設定される部分を"<N>"と記述する。
2.動的に設定される部分を実際のデータで置換する。
3.生成されたSQL文を実行(発行)する。
と、いう流れです。
上記ソースの通り、発行されるSQL文はOrgDbクラス内に閉じ込めてあり、動的に設定される部分は、全て、
OrgDb_setSqlメソッドを介して設定されるので、必ず、サニタイジング(escape_string)されるようになっています。
※やり方はいろいろあると思うのですが、このやりかたしか思いつかなかったです...orz...
~質問~
「☆1」部分と「☆2」部分なのですが、クライアントから送信されないデータを
置換対象としたかったので、pack関数を使用して、バリナリデータ(制御コード)としましたが、
この方法で何か問題が発生することはあるでしょうか?
※ちなみに、置換対象の種類は10個と決めています。
長文、本当にすいません;;
1.静的なSQL文を定義する。この際、動的に設定される部分を"<N>"と記述する。
2.動的に設定される部分を実際のデータで置換する。
3.生成されたSQL文を実行(発行)する。
と、いう流れです。
上記ソースの通り、発行されるSQL文はOrgDbクラス内に閉じ込めてあり、動的に設定される部分は、全て、
OrgDb_setSqlメソッドを介して設定されるので、必ず、サニタイジング(escape_string)されるようになっています。
※やり方はいろいろあると思うのですが、このやりかたしか思いつかなかったです...orz...
~質問~
「☆1」部分と「☆2」部分なのですが、クライアントから送信されないデータを
置換対象としたかったので、pack関数を使用して、バリナリデータ(制御コード)としましたが、
この方法で何か問題が発生することはあるでしょうか?
※ちなみに、置換対象の種類は10個と決めています。
長文、本当にすいません;;
>>659
だからそれを聞いてる
だからそれを聞いてる
自分に課したテーマだろ
俺もプログラム能力向上にたまにやる
ただ人に聞いてるようじゃ本末転倒
俺もプログラム能力向上にたまにやる
ただ人に聞いてるようじゃ本末転倒
>>663,664
宿題ではないです^^;
>>665
ソノ通りです。自分で決めただけです。
おっしゃるとおり、自分で解決しないとダメですよね。
一通り、動作することは確認したのですが、pack部分がどうしても自信がなくて…
そもそもなのですが、今回の問題(質問)は、mysqliやPDOといったことではなくて、pack関数や文字コードについてなのです。
※ここから、憶測と過去の記憶で話をしますので、間違いが大量にあるかと思います。
~私が認識している「pack関数」の仕様~
pack関数を使用して、アスキーコードの制御コード部分をバイナリ文字列で作成しています。
<今回のソースでは以下の部分で使用しています>
$sSql = str_replace("<" . $nCnt . ">", pack("C", $nCnt), $sSql);//☆1ココ
$this->p_sSql = str_replace(pack("C", $nIndex), $this->p_oConnect->escape_string($sData), $this->p_sSql);
if (mb_strpos($this->p_sSql, pack("C", $nCnt)) !== false) {//☆2ココ
例えば、pack("C", 1)とした場合、pack関数は、SOH(ヘッディング開始)の制御コードをバイナリ文字列で作成します。
もっと、簡単に言ってしまえば、"01"というバイナリデータを作成します。
宿題ではないです^^;
>>665
ソノ通りです。自分で決めただけです。
おっしゃるとおり、自分で解決しないとダメですよね。
一通り、動作することは確認したのですが、pack部分がどうしても自信がなくて…
そもそもなのですが、今回の問題(質問)は、mysqliやPDOといったことではなくて、pack関数や文字コードについてなのです。
※ここから、憶測と過去の記憶で話をしますので、間違いが大量にあるかと思います。
~私が認識している「pack関数」の仕様~
pack関数を使用して、アスキーコードの制御コード部分をバイナリ文字列で作成しています。
<今回のソースでは以下の部分で使用しています>
$sSql = str_replace("<" . $nCnt . ">", pack("C", $nCnt), $sSql);//☆1ココ
$this->p_sSql = str_replace(pack("C", $nIndex), $this->p_oConnect->escape_string($sData), $this->p_sSql);
if (mb_strpos($this->p_sSql, pack("C", $nCnt)) !== false) {//☆2ココ
例えば、pack("C", 1)とした場合、pack関数は、SOH(ヘッディング開始)の制御コードをバイナリ文字列で作成します。
もっと、簡単に言ってしまえば、"01"というバイナリデータを作成します。
~私が認識している文字コード(SJIS)について~
今回、pack関数を使用して何をしたかったのかというと、
置換対処となる位置へ制御コードを設定する
です。
なぜ、置換対処となる位置へ制御コードを使用したのかというと、記憶の片隅で
制御コードと重なる文字(文字コード)はない
と、あったからです。
具体的にいうと、SJISでは、
あ:82 A0
い:82 A1
:
と、文字コードが定義されています。ここで、(XX部分は任意)
XX 01
もしくは、
01 XX
という文字コードは存在しない。
※SJISの文字コードは、「81 40」から始まるので問題ない。
今回、pack関数を使用して何をしたかったのかというと、
置換対処となる位置へ制御コードを設定する
です。
なぜ、置換対処となる位置へ制御コードを使用したのかというと、記憶の片隅で
制御コードと重なる文字(文字コード)はない
と、あったからです。
具体的にいうと、SJISでは、
あ:82 A0
い:82 A1
:
と、文字コードが定義されています。ここで、(XX部分は任意)
XX 01
もしくは、
01 XX
という文字コードは存在しない。
※SJISの文字コードは、「81 40」から始まるので問題ない。
~再度、質問~
以上のことを踏まえて、
サニタイジング対象となる文字(クライアントからポストされるデータ)には、制御コードが含まれていることはない
という前提で、置換対処となる文字に制御コードを使用することにしました。
1.上記
「~私が認識している「pack関数」の仕様~」、「~私が認識している文字コード(SJIS)について~」
で、間違っている/誤って解釈している箇所はないでしょうか?
2.今回、置換対象部分に制御コードを使用しましたが、他の値を使用する場合(置換対象部分)どういった値が考えられるでしょうか?
以上、みなさんのお知恵を拝借できればありがたいです。
※説明するのが下手ですよね;;。すいません;;。
以上のことを踏まえて、
サニタイジング対象となる文字(クライアントからポストされるデータ)には、制御コードが含まれていることはない
という前提で、置換対処となる文字に制御コードを使用することにしました。
1.上記
「~私が認識している「pack関数」の仕様~」、「~私が認識している文字コード(SJIS)について~」
で、間違っている/誤って解釈している箇所はないでしょうか?
2.今回、置換対象部分に制御コードを使用しましたが、他の値を使用する場合(置換対象部分)どういった値が考えられるでしょうか?
以上、みなさんのお知恵を拝借できればありがたいです。
※説明するのが下手ですよね;;。すいません;;。
100万件の文字情報を処理するのに、
40分くらい掛かるのですが、これが普通でしょうか?
CPUは3GHzのものを使っているため、
理論的には一秒間に300億件処理できると思っていたのですが、
300億どころか400件ちょっとです。
その差がどこで出るのかちょっと分からないです。
40分くらい掛かるのですが、これが普通でしょうか?
CPUは3GHzのものを使っているため、
理論的には一秒間に300億件処理できると思っていたのですが、
300億どころか400件ちょっとです。
その差がどこで出るのかちょっと分からないです。
>>670
いくら何でもひどすぎる
いくら何でもひどすぎる
> 理論的には一秒間に300億件処理できる
すげー理論だなw
むしろその理論の根拠を知りたい
すげー理論だなw
むしろその理論の根拠を知りたい
>>670の使ってる鯖は全くロスのない画期的なシステムを積んでいるw
一秒間に300億件処理できると書いてあったのは、
日経ソフトウェアという雑誌です。
日経が出しているということで信頼できると情報ソースだとは思うのですが。
処理内容についてですが、100万件の文の中に特定の文字列が含まれていないか
検査して、含まれていたら、文字をくっつけたり削除したりする処理です。
最新のCPUを買ってきたので、あまりにも遅すぎて絶句しました。
日経ソフトウェアという雑誌です。
日経が出しているということで信頼できると情報ソースだとは思うのですが。
処理内容についてですが、100万件の文の中に特定の文字列が含まれていないか
検査して、含まれていたら、文字をくっつけたり削除したりする処理です。
最新のCPUを買ってきたので、あまりにも遅すぎて絶句しました。
>>676
お前の言う1処理と、CPUの単位で使う1処理がまったく違うんだよ。
お前の言う1処理と、CPUの単位で使う1処理がまったく違うんだよ。
>>676
日経は正しいけどCPUがパチモン掴まされたんだよ。
日経は正しいけどCPUがパチモン掴まされたんだよ。
>>676
とりあえずGは10億だよ
細かく説明しても分からないだろうから大雑把に言うけど(大雑把だからある意味間違ってるけど)
一秒間に30億処理できるのは、
CPUに与える命令の処理を数段階に分けたうちの一段分の処理です。
SQLで処理させるときはいろいろな命令を組み合わせているので1クロックではすみません。
とりあえずGは10億だよ
細かく説明しても分からないだろうから大雑把に言うけど(大雑把だからある意味間違ってるけど)
一秒間に30億処理できるのは、
CPUに与える命令の処理を数段階に分けたうちの一段分の処理です。
SQLで処理させるときはいろいろな命令を組み合わせているので1クロックではすみません。
まあそのくらいの処理で400件/秒は普通じゃね?
結果の入出力もあるんでしょ?
結果の入出力もあるんでしょ?
お前たち、昼間からそんな余裕ぶっていると職失うぞw
証券取引の電算化で、場立ちの職員は失業した。
自動改札口の登場で、切符きりの職員も失業した。
ICチップの登場で、数年後にはレジのババも失業する。
そして、自動プログラミング機の登場で、お前等も失業する。
証券取引の電算化で、場立ちの職員は失業した。
自動改札口の登場で、切符きりの職員も失業した。
ICチップの登場で、数年後にはレジのババも失業する。
そして、自動プログラミング機の登場で、お前等も失業する。
まぁまぁ。誰でも最初は無知でしょ。
彼はここで質問して恥をかくことで、前に進んでいるわけだから
全然オーケーでしょう。
…そのシステムを明日納品というなら話は別ですが。
彼はここで質問して恥をかくことで、前に進んでいるわけだから
全然オーケーでしょう。
…そのシステムを明日納品というなら話は別ですが。
自動プログラミングとかマジ最高じゃん
作業効率がぐんと上がる
でも、生きてる間にできるだろうか・・・
作業効率がぐんと上がる
でも、生きてる間にできるだろうか・・・
自動プログラミング機があったところで、やっぱり理論的に仕様を構築しなきゃいかんのだろ?
>>686
> 証券取引の電算化で、場立ちの職員は失業した。
> 自動改札口の登場で、切符きりの職員も失業した。
> ICチップの登場で、数年後にはレジのババも失業する。
> そして、自動プログラミング機の登場で、お前等も失業する。
うーん。失業するようなのは職業の内容によって決まると思うな。
仮に同じ能力を持った人がいたとして、
二人になれば、こなせる作業の量も二倍になるという
ような内容の仕事、つまり作業内容がほぼ同じで並列実行可能な
単純作業は自動化できるから失業するんだよ。
だからこれプログラミングには当てはまらないのね。
> 証券取引の電算化で、場立ちの職員は失業した。
> 自動改札口の登場で、切符きりの職員も失業した。
> ICチップの登場で、数年後にはレジのババも失業する。
> そして、自動プログラミング機の登場で、お前等も失業する。
うーん。失業するようなのは職業の内容によって決まると思うな。
仮に同じ能力を持った人がいたとして、
二人になれば、こなせる作業の量も二倍になるという
ような内容の仕事、つまり作業内容がほぼ同じで並列実行可能な
単純作業は自動化できるから失業するんだよ。
だからこれプログラミングには当てはまらないのね。
基本的に、IT化によって単純作業は減るだろ。
でも、IT化によって増える単純作業もある。
たとえば、有害サイトを監視する人たち。大量の人力を投入している。
結局、仕事の内容が変わるだけ。だから、路頭に迷うのはその変化について行けない人。
つまり適者生存。自助努力で生存はできるんだよ。だから、ワーキングプアなんていう人は単に努力が足りない怠け者。
でも、IT化によって増える単純作業もある。
たとえば、有害サイトを監視する人たち。大量の人力を投入している。
結局、仕事の内容が変わるだけ。だから、路頭に迷うのはその変化について行けない人。
つまり適者生存。自助努力で生存はできるんだよ。だから、ワーキングプアなんていう人は単に努力が足りない怠け者。
プログラミングだって同じ能力の開発メンバーが二つあったら同じ期間で二倍のソフト作れるだろwwwwww
半分の期間で一本つくるとかは無理だけどさ
半分の期間で一本つくるとかは無理だけどさ
ファイルからの読み込みに関して質問があります。
freadなどによる読み込み処理は基本的にアトミックでしょうか?非アトミックでしょうか?
fwriteに関してはマニュアルに書いてあるのですが、読み込み系の関数については書いてなく、またそれに触れた記述のあるサイトも見つからないので困っています。
どなたかわかるかたいたらよろしくお願いします。
freadなどによる読み込み処理は基本的にアトミックでしょうか?非アトミックでしょうか?
fwriteに関してはマニュアルに書いてあるのですが、読み込み系の関数については書いてなく、またそれに触れた記述のあるサイトも見つからないので困っています。
どなたかわかるかたいたらよろしくお願いします。
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- 【PHP】下らねぇ質問はここに書き込みやがれ 72 (1001) - [98%] - 2008/9/3 7:18
- 【PHP】下らねぇ質問はここに書き込みやがれ 73 (1001) - [98%] - 2008/9/20 2:31 ○
- 【PHP】下らねぇ質問はここに書き込みやがれ 70 (1001) - [98%] - 2008/7/19 3:52 ○
- 【PHP】下らねぇ質問はここに書き込みやがれ 68 (990) - [96%] - 2008/5/27 2:33
- 【PHP】下らねぇ質問はここに書き込みやがれ 69 (1001) - [96%] - 2008/6/25 23:33 ○
- 【PHP】下らねぇ質問はID出さずに書き込みやがれ 1 (985) - [87%] - 2011/7/13 20:33
- 【PHP】下らねぇ質問はID出して書き込みやがれ 74 (1001) - [87%] - 2008/10/16 6:05
- 【PHP】下らねぇ質問はID出して書き込みやがれ 75 (1001) - [87%] - 2008/11/13 21:31 ○
- 【PHP】下らねぇ質問はID出して書き込みやがれ 76 (1001) - [87%] - 2008/12/6 22:36 ○
- 【PHP】下らねぇ質問はID出して書き込みやがれ 77 (1001) - [87%] - 2008/12/23 7:06 ○
- 【PHP】下らねぇ質問はID出して書き込みやがれ 78 (1001) - [87%] - 2009/1/13 21:32 ○
- 【PHP】下らねぇ質問はID出して書き込みやがれ 79 (1001) - [87%] - 2009/2/1 0:33 ○
- 【PHP】下らねぇ質問はID出して書き込みやがれ 91 (1001) - [87%] - 2010/1/9 4:06 ○
- 【PHP】下らねぇ質問はID出して書き込みやがれ 81 (1001) - [87%] - 2009/3/7 14:17 ○
- 【PHP】下らねぇ質問はID出して書き込みやがれ 111 (1001) - [86%] - 2011/10/30 20:31
トップメニューへ / →のくす牧場書庫について