【PHP】下らねぇ質問はここに書き込みやがれ 71
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/07/17(木) 19:42:52ID:DVaNTncwPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 70
http://pc11.2ch.net/test/read.cgi/php/1214356448/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0627nobodyさん
2008/08/06(水) 14:32:18ID:???0629nobodyさん
2008/08/06(水) 15:51:10ID:???2.fwriteでtxtファイルに書き込みます(php)
3.@に戻ってテキストボックスに入力、txtファイルに書き込み
…と、したかったのですが、
上書きされてしまい、最後に入力したデータしかtxtファイルに保存されません
どう回避すればよろしいでしょうか?
0630nobodyさん
2008/08/06(水) 15:52:09ID:???追記したいなら追記モードでオープンとか。
0631nobodyさん
2008/08/06(水) 15:53:45ID:???0633nobodyさん
2008/08/06(水) 16:19:24ID:???fopen(書き込みたいファイル, 'a')
0634nobodyさん
2008/08/06(水) 16:21:17ID:???int file_put_contents ( string $filename , mixed $data [, int $flags [, resource $context ]] )
flagにFILE_APPENDやれば追記する
0636nobodyさん
2008/08/06(水) 19:39:32ID:???0637nobodyさん
2008/08/06(水) 19:43:19ID:???0638nobodyさん
2008/08/06(水) 21:27:26ID:???質問させて下さい。
前提として以下の様なフルパス指定のソースが大量にあります。
requiere "/export/home/hoge.php"
このソースを変更せず、windowsのeclipse pdt
で動かしたいと思っています。
windowsにはルートディレクトリがないため、
requiereでエラーとなりますが、これを回避する
方法はないでしょうか?
考えているのは、
1、SFU、Cygwinでなんとかならないか
2、requiereのソースを探してきて改造するか
以上、よろしくお願いします。
そのほかPHPクロスプラットホーム開発の
ノウハウがあるサイトがあれば教えてくださいませ。
0639nobodyさん
2008/08/06(水) 21:30:35ID:???0640nobodyさん
2008/08/06(水) 21:34:16ID:???0642nobodyさん
2008/08/06(水) 21:49:58ID:???ヒソヒソ( ゚o゚)ヤダァ(゚o゚ )ネェ、キイタ?( ゚o゚)オクサン(゚o゚ )アラヤダワァ
0643nobodyさん
2008/08/06(水) 21:51:54ID:???何のこっちゃ?
0644nobodyさん
2008/08/06(水) 21:53:45ID:???おっしゃるとおり、windowsにもルートディレクトリがありますね、
ごめんなさい。
「/」のルートディレクトリに訂正です。
0645nobodyさん
2008/08/06(水) 22:03:01ID:???フォルダツリーを作ってやったら出来るんじゃないの?
cドライブにインスコしてたら
c:\export\home
にファイル置くとか
0646nobodyさん
2008/08/06(水) 22:13:06ID:???ありがとうございます。
試しましたが、ダメでした。
が、ボケてただけかもしれないので
もう一度やり直してみます。
0647nobodyさん
2008/08/06(水) 22:17:41ID:???0648638
2008/08/06(水) 22:26:36ID:???>>645さんのおっしゃる通り、正常に動作しました。
失礼致しました。
環境の違いは以下ぐらいです。
正常動作する:PDT v1
動作しなかったと思われる:PDT V1.0.3
スレ汚しごめんなさい。
0649nobodyさん
2008/08/06(水) 23:00:47ID:???0650nobodyさん
2008/08/06(水) 23:03:06ID:???どのように使うのでしょうか?
LINUX、PHP5.2.6、ROOT有レン鯖です。
宜しくお願いします。
0652nobodyさん
2008/08/07(木) 03:54:19ID:???SQLインジェクションを防ぐために、SQL文を生成する際、「escape_string」を使用しています。
しかし、人為的なミスで「escape_string」を使用せずにSQL文を生成していまうことがあります。
そこで、mysqliクラスを完全にくるんだクラス(OrgDBクラス)を1つ作成して、DBに対する操作を
OrgDBクラスを介して行うようにしました。
0654nobodyさん
2008/08/07(木) 03:55:55ID:???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);
}
}
0655nobodyさん
2008/08/07(木) 03:57:31ID:???$oDb = new OrgDb();
$oDb->OrgDb_connnect();
$oDb->OrgDb_makeSql("select * from table where key = '<0>'");
$oDb->OrgDb_setSql(0, "クライアントから送信されたデータ(要サニタイジング文字列)");
$oRes = $oDb->OrgDb_execSql();
0656nobodyさん
2008/08/07(木) 03:58:37ID:???1.静的なSQL文を定義する。この際、動的に設定される部分を"<N>"と記述する。
2.動的に設定される部分を実際のデータで置換する。
3.生成されたSQL文を実行(発行)する。
と、いう流れです。
上記ソースの通り、発行されるSQL文はOrgDbクラス内に閉じ込めてあり、動的に設定される部分は、全て、
OrgDb_setSqlメソッドを介して設定されるので、必ず、サニタイジング(escape_string)されるようになっています。
※やり方はいろいろあると思うのですが、このやりかたしか思いつかなかったです...orz...
〜質問〜
「☆1」部分と「☆2」部分なのですが、クライアントから送信されないデータを
置換対象としたかったので、pack関数を使用して、バリナリデータ(制御コード)としましたが、
この方法で何か問題が発生することはあるでしょうか?
※ちなみに、置換対象の種類は10個と決めています。
長文、本当にすいません;;
0657nobodyさん
2008/08/07(木) 04:00:13ID:???早々のご意見ありがとうございます。
諸事情により、PDOは使えないです。
使えるのであれば、PDOでやりたかったです;;
0658nobodyさん
2008/08/07(木) 04:00:35ID:???0660nobodyさん
2008/08/07(木) 04:09:19ID:???0662nobodyさん
2008/08/07(木) 04:18:12ID:???ご指摘ありがとうございます。
実際のソースには記述しております。
ありがとうございました。
>>661
「PDOを使わずに…」という条件で作成するというのがテーマでして…。
ただ、それだけです;;
※サーバには、PDOもインストールされているので、使用可能です。
0663nobodyさん
2008/08/07(木) 13:17:46ID:???宿題ですか?
0665nobodyさん
2008/08/07(木) 13:28:55ID:???俺もプログラム能力向上にたまにやる
ただ人に聞いてるようじゃ本末転倒
0666652
2008/08/07(木) 14:58:02ID:???宿題ではないです^^;
>>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"というバイナリデータを作成します。
0667652
2008/08/07(木) 14:58:37ID:???今回、pack関数を使用して何をしたかったのかというと、
置換対処となる位置へ制御コードを設定する
です。
なぜ、置換対処となる位置へ制御コードを使用したのかというと、記憶の片隅で
制御コードと重なる文字(文字コード)はない
と、あったからです。
具体的にいうと、SJISでは、
あ:82 A0
い:82 A1
:
と、文字コードが定義されています。ここで、(XX部分は任意)
XX 01
もしくは、
01 XX
という文字コードは存在しない。
※SJISの文字コードは、「81 40」から始まるので問題ない。
0668652
2008/08/07(木) 14:59:42ID:???以上のことを踏まえて、
サニタイジング対象となる文字(クライアントからポストされるデータ)には、制御コードが含まれていることはない
という前提で、置換対処となる文字に制御コードを使用することにしました。
1.上記
「〜私が認識している「pack関数」の仕様〜」、「〜私が認識している文字コード(SJIS)について〜」
で、間違っている/誤って解釈している箇所はないでしょうか?
2.今回、置換対象部分に制御コードを使用しましたが、他の値を使用する場合(置換対象部分)どういった値が考えられるでしょうか?
以上、みなさんのお知恵を拝借できればありがたいです。
※説明するのが下手ですよね;;。すいません;;。
0669nobodyさん
2008/08/07(木) 15:14:08ID:???0670nobodyさん
2008/08/07(木) 15:24:17ID:czWOVMJR40分くらい掛かるのですが、これが普通でしょうか?
CPUは3GHzのものを使っているため、
理論的には一秒間に300億件処理できると思っていたのですが、
300億どころか400件ちょっとです。
その差がどこで出るのかちょっと分からないです。
0673nobodyさん
2008/08/07(木) 15:32:14ID:???0674nobodyさん
2008/08/07(木) 15:32:39ID:???すげー理論だなw
むしろその理論の根拠を知りたい
0676nobodyさん
2008/08/07(木) 15:36:55ID:czWOVMJR日経ソフトウェアという雑誌です。
日経が出しているということで信頼できると情報ソースだとは思うのですが。
処理内容についてですが、100万件の文の中に特定の文字列が含まれていないか
検査して、含まれていたら、文字をくっつけたり削除したりする処理です。
最新のCPUを買ってきたので、あまりにも遅すぎて絶句しました。
0682nobodyさん
2008/08/07(木) 15:40:57ID:z7k1C/ZXとりあえずGは10億だよ
細かく説明しても分からないだろうから大雑把に言うけど(大雑把だからある意味間違ってるけど)
一秒間に30億処理できるのは、
CPUに与える命令の処理を数段階に分けたうちの一段分の処理です。
SQLで処理させるときはいろいろな命令を組み合わせているので1クロックではすみません。
0683nobodyさん
2008/08/07(木) 15:45:59ID:???結果の入出力もあるんでしょ?
0684nobodyさん
2008/08/07(木) 15:52:30ID:czWOVMJR処理件数としては>>683さんがおっしゃられるように妥当な線なんでしょうね。
分かりました。お騒がせしました。
0685nobodyさん
2008/08/07(木) 15:59:50ID:???0686本質論
2008/08/07(木) 17:18:34ID:???証券取引の電算化で、場立ちの職員は失業した。
自動改札口の登場で、切符きりの職員も失業した。
ICチップの登場で、数年後にはレジのババも失業する。
そして、自動プログラミング機の登場で、お前等も失業する。
0687nobodyさん
2008/08/07(木) 17:18:47ID:???ガタッ
「はい。立ちました」
0688nobodyさん
2008/08/07(木) 17:27:25ID:???彼はここで質問して恥をかくことで、前に進んでいるわけだから
全然オーケーでしょう。
…そのシステムを明日納品というなら話は別ですが。
0689nobodyさん
2008/08/07(木) 17:47:39ID:???作業効率がぐんと上がる
でも、生きてる間にできるだろうか・・・
0690nobodyさん
2008/08/07(木) 18:10:53ID:jtfieMzI0691nobodyさん
2008/08/07(木) 18:12:17ID:???0692nobodyさん
2008/08/07(木) 18:17:54ID:???0693nobodyさん
2008/08/07(木) 18:26:41ID:???0694nobodyさん
2008/08/07(木) 18:30:28ID:???0695nobodyさん
2008/08/07(木) 18:57:01ID:???> 証券取引の電算化で、場立ちの職員は失業した。
> 自動改札口の登場で、切符きりの職員も失業した。
> ICチップの登場で、数年後にはレジのババも失業する。
> そして、自動プログラミング機の登場で、お前等も失業する。
うーん。失業するようなのは職業の内容によって決まると思うな。
仮に同じ能力を持った人がいたとして、
二人になれば、こなせる作業の量も二倍になるという
ような内容の仕事、つまり作業内容がほぼ同じで並列実行可能な
単純作業は自動化できるから失業するんだよ。
だからこれプログラミングには当てはまらないのね。
0697nobodyさん
2008/08/07(木) 19:02:53ID:???でも、IT化によって増える単純作業もある。
たとえば、有害サイトを監視する人たち。大量の人力を投入している。
結局、仕事の内容が変わるだけ。だから、路頭に迷うのはその変化について行けない人。
つまり適者生存。自助努力で生存はできるんだよ。だから、ワーキングプアなんていう人は単に努力が足りない怠け者。
0698nobodyさん
2008/08/07(木) 19:13:06ID:???0699nobodyさん
2008/08/07(木) 19:29:18ID:???半分の期間で一本つくるとかは無理だけどさ
0700nobodyさん
2008/08/07(木) 19:52:55ID:nCGT/HD5freadなどによる読み込み処理は基本的にアトミックでしょうか?非アトミックでしょうか?
fwriteに関してはマニュアルに書いてあるのですが、読み込み系の関数については書いてなく、またそれに触れた記述のあるサイトも見つからないので困っています。
どなたかわかるかたいたらよろしくお願いします。
0701nobodyさん
2008/08/07(木) 19:54:15ID:???0702nobodyさん
2008/08/07(木) 20:23:41ID:???ソフトってのは数をたくさん作るものじゃないからね。
一つのソフトを分業してつくる。
そしてなにより、同じものは作らないのよ。
0703nobodyさん
2008/08/07(木) 20:26:54ID:0HdcDnNYなに当たり前なこといってんの?w
0704nobodyさん
2008/08/07(木) 20:28:45ID:???\ ∧_∧ ∩ ./∧∧ つ<`∀´∧_∧∧_∧∧∧*`∀´>∧_∧
\ < `∀´>ノ______ /∧∧ |\ ∧ `∀´ >∧_∧∧_∧∧_∧∧∀´>
キム!∧ ∧.\ (入 ⌒\フ /| ./<`Д´>| \ _人_人_从_人ノヽ_人_人_ ∧∧_∧
<`∀´ >_\ ヾヽ /\⌒フ/ | /∧_∧) て`Д´>`∀´>
/ ̄ ̄∪ ∪ /| .\ || ⌒| ̄ ̄ ̄| / ∧∧´ >) キ・ム!! キ・ム!! ( ∧_∧
/∧_∧ホルホルホル \ ∧∧∧∧ ./ `Д´> ) (<`Д´# >
/ < `∀´>_/ \ < ま >∧_∧ ⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒.∧∧∧_∧
|| ̄( つ ||/ \< た >∧_∧∧_∧< `∀´ >∩∧_∧<`Д´.<`Д´∧_∧
|| <_○___> || < キ >∧ ∧ <`∀´*∧_∧∧_∧`∀´>O∧_∧∧∧.∧
――――――――――――――― .< ム >―――――――――――――――――――――
∧_∧キムを呼べ! < か > ∧_∧ ∧_∧
~~・━⊂<`∀´#>⊃-、 ∨∨∨ \ < `∀´> <`∀´ > ←キム
/// ノ:: //| ./ はい\ ( ↑キム)_( )
|:::|/< ̄ ヽノ:::::::|::::|/| / ∧_∧キ\∧_∧ ∧_∧  ̄ ̄ ̄/.//|
/ ̄<__> ̄ ̄ ./| | .| /γ(⌒) `∀´ >ム \`∀´> < `∀´> / ┃| |
/ ∧_∧ 三// |__|/ /(YYて)ノ ノ 君 \↑キム ↑\)_/ |__|/
キム→ < ;>はいニダ / \  ̄ ̄ ̄ ̄\ !! \ キム | | ┃. __
0706700
2008/08/07(木) 20:47:58ID:nCGT/HD5ありがとうございます
0707nobodyさん
2008/08/07(木) 20:49:27ID:0HdcDnNYお前のとこは一度に一本しか開発せんのか?
0708nobodyさん
2008/08/07(木) 21:17:08ID:???他のやったほうがいいのかな
0709nobodyさん
2008/08/07(木) 21:18:03ID:???0710700
2008/08/07(木) 22:27:04ID:nCGT/HD5すいません今試してみたら非アトミックみたいですね
ていうか最初から自分で試せばよかったですねすいません
0711nobodyさん
2008/08/07(木) 22:27:23ID:???0712nobodyさん
2008/08/07(木) 23:19:09ID:???0713nobodyさん
2008/08/07(木) 23:42:16ID:???0714nobodyさん
2008/08/08(金) 00:03:37ID:LL9yeWvg0716714
2008/08/08(金) 01:06:33ID:BmBMQdVohttp://creatr.cc/creatr/
先ほどは携帯からで情報量が少なくすみませんでした。
上記URLのようなスクリプトを作成するにはどのようにすればよいでしょうか?
GDやImageMagicというようなものを使えばできますか?
また、できるならば処理の流れや参考になるサイトなどを教えて下さい。
お願いします。
PHP
0717nobodyさん
2008/08/08(金) 01:45:54ID:???http://jp.php.net/gd
http://jp2.php.net/imagick
http://pecl.php.net/package/imagick
0718nobodyさん
2008/08/08(金) 01:46:15ID:???処理の流れとしてはsubmitしたときにセッションIDを割り付けてユニークなURLをつくり
JavaScriptのXMLHttpRequestでセッションIDを投げる。
受けるほうはXMLHttpRequestでlistenしなくてもimgタグのsrcを変更すればすむな。
0720nobodyさん
2008/08/08(金) 15:00:01ID:???0721nobodyさん
2008/08/08(金) 15:56:19ID:???拡張子を含んだ文字列であり、空白や<br>が来るまでを抽出したいのですが
その拡張子が不定なため、
"files_[A-Za-z]+\..+ "など試しています。
しかしこの場合は空白も持っていかれてしまい結果がくるってしまいます。
空白や<br>特定の文字を抽出し、しかし空白や<br>はパターンにハマらないようにするには
どのようにしたらよいでしょうか。
0722nobodyさん
2008/08/08(金) 15:57:09ID:5aObnylFIDをだし忘れました>721です
0723nobodyさん
2008/08/08(金) 16:26:17ID:EUK3hcbO拡張子という事を考えると締めの部分を
\.[0-9A-Za-z]+
とすればでうまく出来そうですね
失礼しました
0724nobodyさん
2008/08/08(金) 21:06:31ID:vetvuCDPのようにパラメータもたせて
<?php
$saba = $_GET[saba];
if($saba == ""){
$saba = 1;
}
switch ($saba){
case 1; $file = "PHP"; break;
case 2; $file = "RERL"; break;
}
html部分
include("$file.php");
<img scr="$file.gif">
html部分
?>
のようにテンプレ表示させるものを組みました。
脆弱性があったらしくサーバを不正利用されてしまいました。
自分で考えてみて
・switchにdefaultをいれなかった
・一部にパーミッションの設定を忘れた(これは直しました)
・.htaccessでindexなしはエラーになるようにしてるのでindex.htmlを作らなかった
など思いついたのですが、自分で気づいていないだけで悪い部分があるのでしょうか?
0725nobodyさん
2008/08/08(金) 21:40:42ID:???詳しく
0726nobodyさん
2008/08/08(金) 21:44:20ID:vetvuCDPいつの間にやら変なファイルがアップされてました。(自分のファイルではありません)
ちなみにファイルアップロード機能はつけてません。
■ このスレッドは過去ログ倉庫に格納されています