【PHP】下らねぇ質問はID出して書き込みやがれ 81
1 :
nobodyさん :
2009/02/18(水) 21:09:16 ID: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を表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
2 :
nobodyさん :2009/02/18(水) 21:09:49 ID:xNLzAD7T
【その他諸注意】 ・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
3 :
nobodyさん :2009/02/18(水) 21:10:57 ID:xNLzAD7T
4 :
nobodyさん :2009/02/18(水) 21:11:25 ID:xNLzAD7T
5 :
nobodyさん :2009/02/18(水) 21:11:49 ID:xNLzAD7T
【簡易FAQ】
1.文字コードは何を使えばいいの?
→1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
→ Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
→ cronかタスクスケジューラを使え。
7.extractって危険なの?
→変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
→ .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
6 :
nobodyさん :2009/02/18(水) 21:12:14 ID:xNLzAD7T
10. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
→ よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 15. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
→ C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
→19.を参照
21. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
7 :
nobodyさん :2009/02/18(水) 21:12:52 ID:xNLzAD7T
とりあえず以上かな? 不備があれば追記してください
(。・ω・)もつかれ〜ふりふり
9 :
nobodyさん :2009/02/19(木) 01:04:54 ID:DyMy4w1i
まず僕をMIXIに入れて!話はそれからしましょ
すいません、ボクもmixiに入れてもらっていいですかね?
12 :
やまは ◆2ch.net/cU :2009/02/19(木) 07:17:48 ID:+vYGjReT
こんにちは。 ディレクトリの中身を全て表示するスクリプトを作っています。 もし、そのディレクトリの中にディレクトリがあればそれも表示するというスクリプトを書きたいのですがうまくいきません。 open.php /test/index.php log.dat test2/test.php 例えば、こうなっているとします。 現在はopen.phpにいて、test2のディレクトリのtest.phpを表示したいです。【続く】
13 :
やまは ◆2ch.net/cU :2009/02/19(木) 07:23:16 ID:+vYGjReT
【続き】 <?php $dir = "./"; $i=0; while($allfile = readdir($dir)){ if($allfile !== "." && $allfile !== ".."){ #これで、現在のディレクトリ表示 echo $allfile."<br>"; if(is_dir(($dir.$allfile)){ echo $allfile; } } } ?> これでは、現在のディレクトリにある、 『test』ディレクトリと『open.php』しか表示されません。 どうすればいいでしょうか? よろしくお願いします
指定ディレクトリ配下を一覧表示するのに わざわざ再帰とかありえない WINの場合はdirだったか?find部分をおきかえれ $path = dirname(__FILE__); echo str_replace($path,"",shell_exec("find ".$path));
指定ディレクトリ配下を一覧表示するのに わざわざシェルコマンドとかありえない
>>15 そんなのでわざわざコマンドを叩く方がありえない
ディレクトリ一覧表示と階乗計算は再帰処理が一般的
指定ディレクトリ配下を一覧表示するのに わざわざ再帰とかありえない
再帰使ってリンク数見て判断するのはプログラマーとしては定番だから覚えておいて 損はない
21 :
nobodyさん :2009/02/19(木) 11:08:49 ID:vF1JGCVl
まぁ、コマンドもどうかと思うけど、再帰もありえんわ。
>>21 その辺のフリーツールなんて使わないよ。
スケールできないじゃん。
>>22 プロの俺が再帰でいいというんだから間違いない
>>21 Gigazineはともかく下のTechCrunchはヘッダに書いてあるじゃん
generator WordPress 2.7って
>>23 TechCrunch の方はコメント欄空でポストしたら WordPress のエラーメッセージが出た。
いろいろ改造してるのかも。
>>25 なんだ、ヘッダに書いてたか
じゃあGIGAZINEにはプログラマーがいるってことですか?
そりゃ聞いてみないとわからないだろw その辺のCMS使ってるかもしれないしな
4gamerはCMSですか?
>>29 それはぜひ知りたい。
こういう企業向けのシステムとかあるのだろうか?
31 :
nobodyさん :2009/02/19(木) 11:55:59 ID:PiBlHerA
MVCの基礎を学びたいのですがおすすめのサイトが御座いましたら教えてください
32 :
nobodyさん :2009/02/19(木) 11:59:37 ID:2O78I8s0
linuxでローカルサーバ構築してPHPのテストしてる方に質問です 私はVirtualPCでvineを使って開発しているのですが OpenSSLをアンインストールできなく、自分の入れたいバージョンが扱えないので不満です 同じようにlinuxを使用している方はどのディストリビューションをご使用されていらっしゃいますか?
CentOS使ってるな でもOpenSSLアンインストールできないってどういう事? いくらでも消せると思うんだが・・・
>>31 オブジェクト指向は理解してますか?
理解していて最初から学びたいのなら、本を買った方が早いかも。
サイトはいっぱいあるので適当に2〜3個見てみて具体的に分からないところを質問した方が良い。
>>32 PHPの質問?
MVCとオブジェクト指向って被ってる領域もあるけど直接は関係ないだろ?
オブジェクト指向のサンプル入り解説サイトはよく見かけるようになったが MVCのサンプル入り解説サイトは見たことがないね 本でも一冊しか知らない
オブジェクト指向は $this-> こんな感じですね
>>37 それと使う時にnewするって知っておけば、あとは何も勉強しなくていいよな。
ぶっちゃけここのスレの住民にMVC分かるやつはいない
いや、普通に使ってますがw
おれが昔から自作してたものがMVCと似通ってることに最近気付いた
***ここは初心者が初心者にハッタリで自慢するインターネットです***
43 :
nobodyさん :2009/02/19(木) 13:22:32 ID:DiCiMFeX
サーバの状態を監視するツールって何使ってますか? できればWebで確認できるやつがあればいいんですが
ある
初心者なオレがMVCをエスパーした。 MVCとは、初心者でもうm
つうか、きょうび当たり前すぎてMVCを口にするの恥ずかしいだろ その次のアーキテクチャについて話しようぜ
49 :
nobodyさん :2009/02/19(木) 14:49:45 ID:Y6HkRPoJ
Ubuntu上にPEARのライブラリをインストールしたのですが、 なぜか /usr/share/php にインストールされてしまいます。 これを /usr/share/php/PEAR にしたいのですが、どのように設定すればよいのでしょうか?
パス指定してやればいいじゃん
51 :
nobodyさん :2009/02/19(木) 14:59:40 ID:4v4/gEqf
$str = '1' * 8; print $str; とした場合、 8 になってしまいますが、 '11111111' のように出力させるにはどうすればよいでしょうか?
>>40 $str = '1' * 8
これで
'11111111'
が出力されるだろうという発想が凄い。俺には無いわ。
54 :
51 :2009/02/19(木) 15:14:06 ID:???
>>53 rubyだと動いちゃうんですよ、それで。
こういうゴミみたいな関数が役立つんだよな Javaでやろうと思ったらめんどくさくてしょうがない
>>55 マジでか!
世の中何があるかわからねーな。
>>56 すまん、勉強不足だ。
C/Java/PHPしかわからないんだ、許してくれ。
perlだと $str = '1' x 8; うう〜ん直感的にわかりやすい
PHPの場合は''や""で囲ってあっても 計算式であればintになるし、連結であればstringになるからなぁ
>>58 vb/c/c++/java/cobol/python/ruby/perl/php/basic
これぐらい勉強してからでなおしてこい
>>59 Perlもそれで
'11111111'
になるのか?
67 :
49 :2009/02/19(木) 15:58:00 ID:Y6HkRPoJ
>>50 毎回指定するということでしょうか?
どこかに設定ファイルがあるのでしょうか?
>>67 いや、インストールする場所を指定しろってことだよ
何がしたいの?
/usr/share/php/PEARにインストールしたいんじゃないの?
>>69 待てよ。
VBつっても.netだよな?6じゃねーよな?
>>65 は既存アプリのこと言ってるんだろ。既存言い出したらなんでもあるわな
73 :
nobodyさん :2009/02/19(木) 18:53:18 ID:wRj5eNSW
ファイルの文字コードを調べたいのですが 何かそのような関数はありませんでしょうか?
>>73 マニュアルのmb_〜からはじまる関数を読み漁れば見つかりますよね
75 :
73 :2009/02/19(木) 19:12:43 ID:wRj5eNSW
>>74 先ほどから見てますが検討がつきません
一度文字列に格納してから調べろということなのでしょうか?
77 :
73 :2009/02/19(木) 19:21:27 ID:wRj5eNSW
>>76 ファイルをPHPの内部エンコードにあわせるのが目的です
mb_convert_encodingの第三引数にautoを渡したところ
うまく動作しなかったので
取得したものを第三引数にセットしようと思った次第です
>>77 用意したファイルを内部エンコードにしておけばいいんじゃね?
79 :
73 :2009/02/19(木) 19:23:17 ID:wRj5eNSW
>>78 外部から第三者ガアップロードするものなので不可能なんです
>>73 ファイルを読み込む前にチェックするっていうのは現実的じゃない。
それはわかるよな?
判定コードを書くのが面倒だったら nkfに通すとか。
autoは設定されてないと使えないから "SJIS,EUC-JP,UTF-8,JIS"みたいに書いてみそ
82 :
emi :2009/02/19(木) 19:46:09 ID:62n5Tebm
スレ違いだったらすみません。質問です。
PHPとjavascriptを連携させるにはどうしたらいいのでしょうか。
<?php
$fp = fopen('
http://自分のHP/GPS/20090109.txt ', 'r');
$count = 0;
$remove_row_list = array(1, 2, 3, 4);
while ($data = fgetcsv($fp, 10000)) {
if (!in_array($count % 5, $remove_row_list)) {
echo $data[1] ."<br>\n";
echo $data[2] ."<br>\n";
echo $data[4] ."<br><br>\n";
}
{
$count++;
}
}
fclose($fp);
?>
>>82 そのソースのどこにJavaScriptが出てきてるんだ?
84 :
82 :2009/02/19(木) 19:53:50 ID:/38upbVh
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script src="
http://maps.google.com/maps?file=api&v=2&key=[APIkey] " type="text/javascript"></script>
<script src="c.php" type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
//表したい場所の地図の表示
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(○,△), 16);
//○=PHPのデータ $data[2]、△=PHPのデータ $data[4] を出したい
//特定の箇所にピンを立てる
var marker = new GMarker(new GLatLng(○,△));
map.addOverlay(marker);
}
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 500px"></div>
</body>
</html>
これらをまとめてHTMLで表したい場合どのようにすればよいのでしょうか。
>>82 連携してJavaScriptに何やらせたいのか書かないとわからん
サーバでPHP処理→ブラウザでJavaScript実行の順番はわかってるのか?
var data2=<?=$data[2]?>; var data4=<?=$data[4]?>; //表したい場所の地図の表示 var map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(data2,data4), 16); //○=PHPのデータ $data[2]、△=PHPのデータ $data[4] を出したい //特定の箇所にピンを立てる var marker = new GMarker(new GLatLng(data2,data4)); map.addOverlay(marker); でOK
87 :
73 :2009/02/19(木) 19:56:55 ID:???
>>80 レスどうもありがとうございます
kccコマンドが使えるのですができればコマンドラインは回避したいです
>>81 どうもありがとうございます
JISだとだめみたいだったのでISO-2022-JP,SJIS,EUC-JP,UTF-8
とやったところ4種類に対応することができました
全てに対応させるのは限界がありそうなので妥協してこの方法にしたいと思います
皆さんどうもありがとうございました
>>82 その手の質問はよくあるけど、結論「無理」
できても、PHPでJavaScriptを書き出すくらい(変化に応じて書き出せる)
PHPから動的に読み込むにはAjaxを使えばできる
ちなみにその辺使うなら、ある程度JavaScriptは勉強しておいたほうがいい
関係ないが、無駄にAjax使いすぎるやつがいてうぜぇ・・・
しかも、JavaScriptをPHPのechoで吐き出してるから修正すらダルい
その修正、手でやんのか? まるっとキャプチャしちまえばいいじゃねぇか
90 :
nobodyさん :2009/02/19(木) 20:05:07 ID:nJvgqLn9
sjsやeucで作られたスクリプト中に echo "あ"; echo 'あ'; というを"と ' を使ったら書き方をするとクロスサイトスクリプティングが発生するみたいなのですが これはなぜでしょうか?
91 :
82 :2009/02/19(木) 20:06:16 ID:/38upbVh
>>85 PHPのほうのテキストデータはサーバから読み込んだものなので
ブラウザからPHPで処理できるのかと…
>>88 やはり無理なのでしょうか?
すみません初心者なものなので知識はないのですが↓
でしたらPHPで出力したデータをjavascriptで扱うにはどうすべきなのでしょう?
ダメ文字でググれ
>>91 PHPでJavaScriptを書き出せばいいんじゃね?一番簡単な方法なら
function javascript() {
<?php
for($i = 0 ; $i < 5 ; $i++) {
echo "var test[$i] = '{$array[$i]}'\n";
}
?>
}
>>90 >というを"と ' を使ったら書き方をすると
この辺日本語で頼むわ
95 :
90 :2009/02/19(木) 21:13:27 ID:???
すいません書き直します echoを使うとき「"」で文字列を囲むのと、「'」で文字列を囲む記述がありますが この"と'を統一せず、入り組んで使うとsjisとeucではクロスサイトスクリプティングになるのですがなぜなんでしょうか? 例 echo "テスト"; echo "こんにちは"; echo 'はじめまして'; echo "ありがとう";
>>95 その質問は間違っている。
その例に出てきたもので、XSSが起きるわけじゃない。
しかし、君にそのクイズを出した人が言わんとしていることには二つ以上の可能性がある。
一つは、htmlspecialcharsのENT_QUOTESとENT_COMPATの動作の問題
もう一つはSJISの5Cの問題。
他になんか意図があるかもしれんが、仮定が間違ってるので、何を言っても意味がないだろう。
あぁ、ちなみにHTML要素内の5CでXSSは起きない。
98 :
90 :2009/02/19(木) 21:24:50 ID:???
99 :
nobodyさん :2009/02/19(木) 21:25:53 ID:SUg9mjPG
csv、tsv、xml、jsonなどのデータフォーマット以外にphpで扱えるデータフォーマットを教えてください
すいませんIDがJPG
>>98 そのURLのソース試してみたか?
問題ないぞ。
>>99 何だって良いんじゃない?
<>sv なんてのも可だし
つうか、htmlspecialcharsの第2引数と第3引数をちゃんと指定していれば問題なし。 シングルクォートとダブルクォートをミックスすると表示は崩れるがXSSはできない。
>>82 echo htmlspecialchars($data[1])
echo htmlspecialchars($data[2])
105 :
nobodyさん :2009/02/19(木) 22:25:13 ID:NhJwmPwv
DWでPHP書いてますがeclipseで開発するメリットを教えてください
ない
DWの方が絶対良い データベースとか楽に構築できるしね
>>105 スレチと思ったが開発環境スレが落ちてるな
Eclipseのいいところは、
クラスや関数のアウトライン参照、コンテキストに沿ったコード補完、リファクタリング(まだまだ貧弱だが)、
ブレークポイントやステップ実行、その際の変数参照、
プラグインを導入すればバージョン管理システムやDBMSともIDE上から作業できる
これらに興味がなければ無理して乗り換える必要もないかな
DWでもCVSやSVNと接続できるけどな。 PDT使ったら、DWには戻れない。 まぁ、でも、サイトにすぐアップできるとか、いいよね。 でも、コードカラーリング崩れない? > DW
DWはIDEじゃないから比較するものじゃないでしょ 使ったことないから知らないけどデバッガとかついてないでしょ?
111 :
82 :2009/02/20(金) 01:21:04 ID:w405pQbs
>>86 >>104 ありがとうございます。
あと、たとえば$data[2]はたとえば3645.5218のような数字なのですが
桁を変えて36.455218にしたうえで10進から60進にしたいんです。
度 = int(36.455218) = 36
分 = int(0.455218 * 60) = int(27.31308) = 27
秒 = int(0.31308 * 60 *1000) / 1000 = 18.7848
= 36°27′18.7848″といったような感じにしたいんです。
112 :
nobodyさん :2009/02/20(金) 01:37:44 ID:r16tK4jF
Smartyの質問なのですが、、PHPと関連するので質問させていただきます。 テンプレートを表示する時 $smarty->display("index.html"); で表示できますが、display()の中を変数にする事って出来ないでしょうか? それが出来たら、DBに保存しているHTMLをSmartyに反映させることが 出来るのですが、$smarty->display($html);とする方法では無理でした。
demiru
114 :
nobodyさん :2009/02/20(金) 05:22:05 ID:nLAMcH0P
PHPのメモリって勝手に開放されるのですか? デストラクタでunsetとかしないでも大丈夫ですか?
自動的に開放する。 無闇にunsetすると非効率になることが多いらしい が、処理時間の長いジョブとかの場合は開放した方がいい場合もある
はい? $template = 'index.html'; $smarty->display($template); で普通にできるのでは?
118 :
nobodyさん :2009/02/20(金) 10:16:20 ID:P+ZCl9Zr
昨日今日からの初心者です。 <html><body> <?php if(!適用条件) { echo "適用外"; exit;} // 適用条件内 ... ?> </body></html> と書くと適用条件外の場合"</body></html>"が出力しないようなのですが仕様なのでしょうか? その場合回避策としてタグの終りにジャンプとか抜けるみたなことは出来るのでしょうか? (適用条件内を1スコープにして括弧で括る、は出来ればしたくないので…)
>>118 exitじゃなくて、goto ラベル;にしたらいいよ
条件内処理をブロックに入れたくないって言ってるんだから、
>>120 は無理でしょ。
せめて、
{ echo "適用外</body></html> "; exit;}
だな。
低級者向け:関数化すれ 中級者向け:テンプレエンジン使え 上級者向け:フレームワーク使え
いや、なんでそこでexit使うか分からんな。
>>118 はexit使わなくても問題ないし。
124 :
nobodyさん :2009/02/20(金) 11:06:54 ID:/aL6hv6c
>>122 逆じゃない?PHPで自分で作れないからフレームワーク使うんだろ?
exitしないと、適用外のときでも、適用内の出力がまざっちまうじゃねぇか
まず、初心者がくくりたくないとかいうわがままを許していいのかってことじゃねぇか。
>>118 なぜ「出来ればしたくない」のか聞かせてくれ。
130 :
nobodyさん :2009/02/20(金) 11:23:24 ID:P+ZCl9Zr
回答・説明ありがとうございます。
取りあえず出来る書き方で書いて、天に祈りが届いたと思ってPHP5.3を待つ事にします。
>>128 Cで例外処理の場合はgoto文を使いたい(条件文が増えるとネストが深くなったりコードが重複したりするので)
みたいなものです、プログラム思想みたいなものなので余りこれ以上の突っ込みはご勘弁を…
gotoの方がよっぽど悪質だよww
try-catch
こんなところでtry-catchを持ち出そうとするからPHPerは糞だって言われるんだ
>>133 すまん
例外処理と聞いて反射的に貼り付けただけなんだ
gotoが許されるのはHSPだけです
finallyを実装しなかった罪は思い
設計が悪いのにプログラム思想がうんぬん言われてもな…w 困るんだわ…w
せっ・・・けい・・・?
PHPのデバッガで、gdbのようなものはありますか? 主にコマンドラインプログラムが対象です attachの機能(すでに起動しているものを乗っ取れる)が 必須なんですが
141 :
nobodyさん :2009/02/20(金) 16:27:31 ID:DGCUxhS+
組込Linux C/C++ なドライバ屋(PHP歴は5日w)が質問させていただきます。
// 赤の他人の尻拭い中
識者いらっしゃいましたら助けてください。
よろしくお願いします。
【OS名】Linuxカーネル 2.6.18-92 (RHEL5.3)
【PHPのバージョン】php5.1.6
【連携ソフトウェア】Akelos
【質問内容】
XHTML 1.0 / UTF-8 な日本語ページ(タイトルも日本語)を出力する view があります。
IEやFireFoxなどのブラウザ、docomo iモードでは期待する内容が表示されます。
が、ezwebで文字化けします。
UTF-8が問題かと思ったのですが、同ページをPCブラウザ上で表示させ、
ソースを xx.html として保存。
このxx.html をezwebで表示すると、文字化けせずに期待通りの表示になります。
ezweb のブラウザ側の問題の可能性もあるかもしれませんが、回避策など
ありましたら、教えてください。
--- xx.html の内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>たいとる</title>
// 以下略
どうしてもUTF8でやりたいのなら ezwebだけ出力するときだけsjisに変換したら?
144 :
141 :2009/02/20(金) 16:44:08 ID:???
>>142 ,143
返答ありがとうございます。
Shift-JISに変換して出力するようにします。
ですが、.html拡張子のUTF-8なページは文字化けしないのが疑問のままなのは
ちょっとモヤモヤが残ります。
識者いらっしゃいましたら、引き続きよろしくお願いします。
146 :
nobodyさん :2009/02/20(金) 18:58:54 ID:QkuM0xlT
PHPの中から、apache上で走っているのか バッチファイル的に使われているのか(シェル上で、php hoge.php)を 判断する方法を教えて下さい
>>146 phpinfo保存してdiffして好きなのを使うとか
>>147 ありがとうございます
それをヒントにして$_SERVERを比較したところ
SHELLというキーが、シェルから呼んだ場合には設定されていました
めちゃめちゃPHP覚えてきた 自分の才能がコワイお(´・ω・‘)
ほう,じゃ最近学んだこと何か語ってみてくれ
153 :
nobodyさん :2009/02/20(金) 21:34:19 ID:JGeRmwBm
URLのうち、ドメイン直下の最上位ディレクトリを抽出するにはどうしたらいいですか? str系の関数組み合わせて3個目の/が何文字目で4個目が何文字目で… ってやれば出来るでしょうが、非効率というかアホっぽいので、正規表現でバキっと出す方法を 教えてください よろしく御願いします
>>153 scandirが使えるバージョンならドメイン直下のディレクトリ名を取得すればおk
使えないならopendirとreaddirでググレカス
>>141 GWの文字コード変換対象はtext/〜から始まるコンテンツのみ。
SSLも変換噛まさないけ
>>152 文字コードがshift-jis、Euc-jpだとSQLインジェクションされる
かといってutf-8は安全?というとそうでもない。
php関係ねー 氏ねや
そ・・・そんなん 必死に覚えてきたお(´・ω・‘)
>>158 世の中にはいくらやっても報われないことが二つある
ひとつは賽の河原の石積み
もうひとつはお前のPHPの勉強だ
160 :
nobodyさん :2009/02/20(金) 23:27:51 ID:r16tK4jF
SQLインジェクション対策は、 基本的に外部入力値をhtmlspecialcharsしていれば良い って考えは間違い?
htmlspecialcharsで防げるだろ
>>161 はhtmlspecialcharsを使用しても抜けられる穴について説明よろ
>>160 htmlspecialchars(,ENT_QUOTES)で防げるのは「Script Injection」。
Javascript埋め込みとかそんなヤツ。
「SQLインジェクション」は別問題。
「PHPサイバーテロの技法」を買って読んどけ。
>>162 LIKEのとこに%とか*突っ込んでみるとか。
select * from table where name like '%' ;
>112 $str = '<font size="10">でっかい</font>'; $smarty->assign('tag', $str); $smarty->display('hoge.tpl'); ---hoge.tpl--- <body> {$tag} </body> とかいう意味だったら笑う。 >162 >164の変数名のところに「' OR 1=1」と入れるとレコードが全件変数に入り個人情報大暴露大会。 「'; DROP なんたらかんたら」と書くとテーブルがぶっ飛ぶ。レプリケーション先も全部死ぬからサービス復旧不能で店じまい、会社は倒産。 MySQLの設定が甘いと、管理テーブルを書き換えられてroot奪われるとかもあるな。
あーっと、ENT_QUOTESだったか。死んでくる。
mysql_escape_string
>>169 それも%とかをエスケープできないので間違い
mysql_real_escape_string
可能な場合常にプレースホルダを使う、でFAだろ クエリの9割以上はカバーできるはずだ
めんどいから ' と ; は削っちゃえ
mysql_escape_stringって%エスケープしないのか ありえねーな likeを使ってなかったらだいじょうぶ?
174 :
nobodyさん :2009/02/21(土) 02:35:53 ID:60WB0UqA
addslashesじゃだめなの? ある本にmysql_escape_stringより良いって書いてあったのに、早いって。。 純朴な素人をバカにしやがって
お前は何を言ってるんだ 本にWebに書いてあることを鵜呑みにすることが「勉強」じゃないぞ?
何ぬかしてる、mysql_real_escape_string() は非推奨の mysql_escape_string() と機能は同じ だいたいこの関数はSQLステートメントとして成立する文字列リテラルを作るためのものだ %を勝手に殺したりする用途に使うもんじゃない
%殺されちゃたまらないな。しかも%なんてSQLインジェクションには使えないだろ エスケープする必要ない
PDOで解決
179 :
176 :2009/02/21(土) 02:46:46 ID:???
180 :
nobodyさん :2009/02/21(土) 02:49:17 ID:RWcdEiGu
phpでhtmlのinputのtype="text"でreadonly='true'して printしているのですが、これってもしreadonlyに対応していない ブラウザとかだったら変更可能ですかね?ブラウザとか関係なく、 もし確実じゃなければ、それに代わる確実な方法を実現したいのですが 何か方法があれば教えてください。
>>180 変更されてはならないものはクライアントに持たせない
セッション変数なりストレージなりに保持しておく
>>118 phpにおけるexitは強制終了。
それに続くタグとかは、一切実行も表示もされない。
>180 そもそも、ブラウザなんぞ無くともデータは送受信可能だ。 HTTPなんて、テキストデータを送受信してるだけだからな。 クライアントに渡した全ての値は改竄され得るし、クライアントから送信される値は全て信用ならない。 input type="select"の中に、選択肢にない文字列が入ってくるなんてのはよくある事だ。
<select><option>だったか。まあいいや。
ちょっと気になったんだが、
>>165 が書いている方法も
SELECT * FROM test WHERE name='".htmlspecialchars($_POST["name"],ENTQUOTES)."'
としていれば大丈夫なんじゃないのか?
「%」の件もlike使わなければいいわけだし。
like使う用途って「検索」が多いだろうから、表示されても良いデータだろうし。
>>183 >選択肢にない文字列が入ってくる
てっきりvalueにテキストを挿入してるかと思ったwwww
>>185 そのセンス、感服するわ。
htmlspecialcharsで変換される文字君たちは検索にかからなくなるわけだが、
SQLにlikeを使わなきゃいいって制約を追加するわけだが、
なんでそこまでしてhtmlspecialcharsに拘るのかが理解できない。 mysqlなら何も考えずmysql_real_excape_stringが一番安全確実簡単だろ。 htmlspecialchars使うと、<や>、&のような文字が全部変換されてDBに入力されてしまう。 検索なら対象がうまくヒットしなくなるし、画面表示文字列だとエスケープ/アンエスケープのタイミングを考慮しないといけない。 DBからCSVに書き出したくなったらどう変換すればいいんだ?JavaScriptに渡す時は? mlsql_real以下略なら、入力データはそのままの形でDBに格納されるし、そのままの形で検索される。この上なく分かりやすい。
>>187 うん?クラスの処理とかすべて書けば良かったか?
単純かしたことに「こいつ馬鹿だwww」と感服したのかもしれないが。
そもそも、出力する時もフィールド指定するだろ。
だから、like使ってもパスワードが漏れないよな。
全件出力されるとか書いてたけど、普通limit指定するし。
>htmlspecialcharsで変換される文字君たちは検索にかからなくなるわけだが
かからなくていいんじゃないか?検索させない場合は、変換入れるだろうが。
未だにDBで何をエスケープしておけばいいかわからないやつ多いよな。 基本的には「'」と「\」だけでいいんだぜ
>>188 「そのままの形で格納されると困る」んだよ。
お前、WEBアプリケーション作ったことあるか?
または、会員制サイト作って誰かに利用させたことあるか?
その際、htmlspecialcharsで変換されない文字があるとどうなるかわかるだろ。
それに、htmlspecialcharsだけでも、CSV出力やJavascript(AJAX)の利用は出来る。
>>189 おいおい、
記事中から、bread&butterって検索したくてもできないじゃないか。
>>191 が作ったWebアプリケーションは穴だらけ、バグだらけだろうなぁ。
ご愁傷様
Zendワロタwwwwwwwww よく開発続けられるよなwwwww不人気なのにwwwwwww
htmlspecialcharsをDBアクセスで使用するバカ 後輩とかに指摘されて恥かくまでずっとやってろ
俺はforeachのことを「フォレーチ」って読んでた 先輩は「フォー・イーチ」って読んでた 別に恥ずかしくないんだからねっ!これからも「フォレーチ」って読むわ
>>191 なぁ、ちょっと確認していいか?
入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
おまえこの流れは理解してるってことでいいんだよな?
xamppに代わる開発環境になるかな?
>>199 ネーミングが悪かったかもしれない
XAMPPは初心者もなじみやすい名前だから、暫くはそっちが流行ると思うな
>191 会員制の課金の発生する、バックエンドでCSVとTSVでレポートを吐くwebアプリを仕事で書いてるが、 ・DBに渡す際にPDOのプレースホルダで渡す、あるいはmysql_real_escape_stringなどでクエリを構成する ・画面表示する際にはビューに渡す時点で原則全ての値をhtmlspecialcharsでエスケープ (タグを書き出さないといけない箇所や、HTML以外の箇所などの例外は慎重に検討したうえでエスケープせず渡す) ・DBには、例えばフォームからの入力なら入力値がそのままの形で格納される このルールが一番分かりやすいし、安全だし、汎用性がある。 出力部で「この文字列はDBから来た値だからhtmlspecialcharsは不要、こっちはクライアントからの入力値だから必須…」とかやってると、絶対変換ミスが発生する。 何も考えずルールにさえ従ってさえいれば脆弱性が発生しない事をシステムが担保してくれる形にするのが一番安全なんだよ。 俺はMySQLでの危険文字を全て列挙すら出来ない低能だし、職場には俺以下の屑が溢れているが、このルールに従う限り絶対安全だとシステム側で保障できるコードを組める。
>>198 してるわけないだろ。関数の使いどころすらわかってないんだから
>>201 それでOKなんだけど、
>>191 はフィルターやバリデーターとDB登録時のエスケープを混同してるらしいからw
俺が使ってるサービスで ↓を混同してるプログラマがコード書いてませんように・・・ ・DB入力時(SQLインジェクション) ・画面出力時(Scriptインジェクション)
>>198 ああ。実際に
>>201 が書いているようなことはしているよ。
例として
>>185 みたいな簡単な1行ソース出したから
「こいつ何も知らない馬鹿だなwww」と煽りたい気持ちも分かる。
だが、1から10までここに書けないだろ。
入力時、出力時にそれぞれ適切に変換するのは、初歩中の初歩だと思う。
201がああだこうだ書いてるが、俺は自作クラス作ってDB処理をしているから
変換ミスがどうのこうのはない。
ま、そういう自分の事はどうでも良くて、
>>185 の意見を出しただけなんだが
なぜか俺自身を煽りたい馬鹿がいるな。そんな事しても無駄だろ
>>185 みたいなコードが出てくる時点でお前が一番馬鹿だよ
>>207 >だが、1から10までここに書けないだろ。
ちゃんと読めよ・・・わかりやすいように簡単に書いたって言ってるだろ
それに、htmlspecialcharsで変換しないでそのまま格納したとする
その場合、phpMyAdminなどで管理する時。どうなるかわかるよな?
>>208 こんだけ書かれてまだわかんないのか。
そこでhtmlspecialcharsはおかしいってことだろ。
代わりに何を使うべきか考えてみろ
>>208 うん、あれはhtmlspecialcharsで変換されて出力されるね
ってかphpMyAdminなんか使ってるのかよ
>>209 わかる・わかんないの、俺に対しての批判はどうでも良いんだよ。
「なぜhtmlspecialcharsは駄目なんだ」って事だ
>>208 phpMyAdminをなめてんの?
別にスクリプトが混入したって何もおきないよ。
もし、そこでスクリプトインジェクションされんならIPA行きだお
>>213 > 「なぜhtmlspecialcharsは駄目なんだ」
既出
お前ら、自分の視野で物事考えすぎだよ。 「phpMyAdminなんて使ってるの?」って言葉がここで出てくると思わなかったぜw ここのスレの役割考えろや。どうせ個人叩きしかできないくせに。
>>208 全部わかったうえで一部分だけ簡単に書いてます、って言ってるやつの文章じゃないよそれ
結局DB格納時にhtmlspecialchars使ってるんじゃん
>>216 phpMyAdmin → 画面出力時のお話
SQLインジェクションからかけ離れてきました・・・
>>206 > 俺は自作クラス作ってDB処理をしているから変換ミスがどうのこうのはない。
変換とか言ってる段階で、その自作クラスが穴だらけに1000カノッサ
> それに、htmlspecialcharsで変換しないでそのまま格納したとする > その場合、phpMyAdminなどで管理する時。どうなるかわかるよな? phpMyAdminは出力時サニタイズをすっかり忘れてる、ってこと?
サニタイズってトイレにでも行く気?
>>185 ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
おまえらとどめは刺さないよなww
>>219 >>201 が「俺はMySQLでの危険文字を全て列挙すら出来ない低能」と
言ってる意味を理解できていない、に1000カノッサ上乗せ
%はあんまり伝わらなかったみたいだなー。 SQLとHTMLでは、特殊な扱いになる文字が違うよってことだけど。 htmlspecialchar()でも問題なく見えるのは、たまたま、だと思ったほうがいいよ。 偶然にも、置き換え対象になる文字がSQLでエスケープが必要な文字と同じだったってこと。 ついでに言えば、エスケープの仕方は実際はDB依存だから addslashes()じゃなく、DB専用の関数を使ったほうがいい。
>>160 からの流れ、断ち切っておくか・・・
・DBに渡す際にPDOのプレースホルダで渡す、または専用関数(mysql_real_escape_string)でクエリを構成。
・html出力時にhtmlspecialchars(,ENT_QUOTES)をする。
※DBに渡す際にhtmlspecialcharsするのは間違い。
→ 理由
>>188 → それでも分からない。
>>163 の本を読め。
>>226 GET / HTTP/1.1
Host: www.yahoo.xxco.jp
(略)
HTTP/1.x 302 Found
Date: Sat, 21 Feb 2009 06:15:31 GMT
Server: Apache/2.2.9 (Fedora)
X-Powered-By: PHP/5.2.6
Location:
http://www.google.co.jp/ Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
素人だけど、俺より酷いプロらしき人が入るのを見て安心したような不安になったような…
べ・・・別に! 僕レンタルサーバー使ってるからね! エスケープしなくても安全よっ!
234 :
nobodyさん :2009/02/21(土) 19:59:23 ID:230PJjNE
【OS名】MacOS X (MAMP) 【PHPのバージョン】php5.2.5 【連携ソフトウェア】mysql 【質問内容】 Webアプリケーションで、ウィンドウ毎に違う情報を引き継いで処理をしていく物を作っています。 uniqid()でセッションIDを割り振って、formのhiddenに入れると引き継げるのは分かりました。 しかしこれだと、link(aタグ)で機能を選択した場合に、セッションIDが引き継げないように 思います。ですよね??何か良い方法はありませんか? リンクのパラメータに追加するとなると、全部のリンクに書き足す必要があって大変だし、 POSTとGETの両方の評価が必要になると煩雑だし、そもそもurlにセッションIDを出すのが 微妙に避けたいので・・・。 お知恵を拝借したいです。よろしくお願いいたします。
235 :
教えて :2009/02/21(土) 20:15:36 ID:1h/i9qY8
これだと1回で20数全部でます。1回1数でかぶらずに20回出したです。 <?php $numbers = range(1, 20); shuffle($numbers); for($i = 0; $i < 20; $i++) { echo $numbers[$i]."<br>\n"; } ?>
ふつうセッションIDはCOOKIEで渡す ケータイの場合はGET渡ししかない
モバゲーで鳴らした俺はこの程度の日本語崩壊くらいなんて事は無い モバゲーではこの程度の言語障害者珍しくも無い マジ日本はどこへ向かうんだ $numbers = range(1, 20); shuffle($numbers); echo array_pop($number); // なんか処理 echo array_pop($number); // なんか処理 echo array_pop($number); … 1ページ内の処理ならこれでいける。 2枚以上の画面にわたって変数を持って行きたいならセッションを使うしかない。
239 :
234 :2009/02/21(土) 20:33:28 ID:230PJjNE
>>236 COOKIEですか・・・ちょっと調べてみます。ありがとうございます。
クライアントはパソコンなので、GETでもPOSTでも使えます。
COOKIEでもウィンドウ毎って可能なんですか?
>>239 パソコンならhiddenを使う必要ない。セッションはクッキーが勝手に確立してくれる
GETやらPOSTも意識する必要ない。セッションに少し慣れればすべて解決する
別ウインドウのことを言ってるのだとしても
リンクやフォームから作成された別ウインドウは同一セッションとなる
241 :
234 :2009/02/21(土) 20:51:05 ID:???
>>240 同一セッションでは困るんですが・・・ウィンドウ毎に分けたいので・・・
>>241 であればウインドウごとにID発行してそれをセッションで持ちまわす
243 :
242 :2009/02/21(土) 20:58:18 ID:???
ごめん、うそついた 同一セッションで別ID発行してもセッションが上書きされるだけだからダメか
入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示 で質問。 入力->フィルター->エスケープ->DB -> 取り出し-> ここまではわかるが。 その後なんでまたフィルタにかけるの? while文でたとえば <? while ( $item = mysql_fetch_array( $result ) ) { ?> <tr> <td><?= $item['item_id'] ?><?= $item['item_id2'] ?></td> <td><?= $item['item_name'] ?></td> <td><?= $item['author_name'] ?></td> <td><?= $item['publisher_name'] ?></td> <td><?= date( 'Y年m月d日', strtotime( $item['release_date'] ) ) ?></td> <td><?= $item['list_price'] ?></td> <td><?= $item['sale_price'] ?></td> <td><?= get_category_name( $link, $item['category_id'] ) ?></td> <td><?= $item['quantity'] ?></td> <td><?= $item['state'] ?></td> <td> <nobr>[<a href="admin_edit_item.php?item_id=<?= $item['item_id'] ?>">編集</a>]</nobr> <nobr>[<a href="admin_del_item1.php?item_id=<?= $item['item_id'] ?>" onClick="return confirm( '完全に削除されます。よろしいですか?' )">削除</a>]</nobr> </td> <? $n ++; } ?> でまわしてはいかんのかね?
>>244 俺も取り出しのあとのフィルターってのはよくわからん
DBには正しいものが入ってるはずだしな
でもhtml適合化は必要だろ。そのコードだとScript実行されるよ
246 :
234 :2009/02/21(土) 21:10:06 ID:???
>>243 そうなんです。>234の様にformかurlに入れれば、
とりあえずウィンドウ毎に別の情報を引き継げます。
だけど、formとurlの両立が難しい。
何か、簡単にウィンドウ毎を識別する方法があれば・・・
htmlspecialcharsか
>234 まったく同一のページを2ウィンドウ開くのならば、URLかPOST値にセッション情報を含めないとダメだな。 手を抜くならセッションキーGET渡しで ・Smarty使ってるならポストフィルタで全サイト内リンクにセッションキーを追加する ・JavaScript経由で全リンクをセッションキー付きに書き換える 辺りか。 リンクを書き換えないなら、複数ウィンドウシステムに入った時点で index.php/hogehoge/ index.php/fugafuga/ のような固有URLを割り振り、これをセッションキーにするのも手。 index.php/hogehoge/menu から <a href="./information">で index.php/hogehoge/information に遷移させられるから記述が多少楽になる。 ただし、セッション情報がリクエストヘッダでだだ漏れだし、外部リンクに気を払う必要も出てくる(REFERERで漏れる)。
>>244 >入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
どこにそんなことが書いてある?
入力 -> エスケープ -> DB -> 取り出し -> サニタイズ -> 表示
これでいい
>>249 サニタイズってのは、入力値に不正な値や壊れた文字列が入っていないかをチェックするもの。
やるなら、入力の直後だが、サニタイズって言うと、
>>249 みたいな誤解をするやつがいるから、
入力後にやるのが、バリデート+フィルター。
DBからの取り出し後にフィルターを書ける理由 DBってのはデータストア。 収録されたデータをすべて出力していいとは限らないし、 形式によってはフィルターをかける必要がある。jk
>>250 入力段階でチェックするのはvalidate
sanitizeは表示段階で、浄化、つまり悪意のあるスクリプトやタグを無効にするもの
フィルターって要するにバリデートだろ。 エスケープやサニタイズとは別の話題。
>>252 まぁ、そう思っててもいいけどな。
それは、htmlspecialcharsをサニタイズだと思っている子たちの誤解
悪意と善意を確実に識別できるのはどこかを考えれば正解はどっちかわかるはずだが、
困ったことに、サニタイズ≒出力フィルタだと書いちまってるサイトやら本があるからなぁ。
要するに、サニタイズなんて曖昧なメタファーでプログラムを語るなってことだ。
>>253 バリデートはフィルターに含まれる。
エスケープとは別。
で、何が言いたいの?
>>251 具体的にどういうデータだったらそのフィルターとやらをかけるの?放送禁止用語とか?
>>254 htmlspecialcharsもサニタイズの一種だろ。話を難しくしすぎ
258 :
234 :2009/02/21(土) 21:48:33 ID:???
>>248 そうですよね。ありがとうございます。
固有URLの実装方法は分かりませんし、
そもそもフレームワークにCakePHPを使うので、そういうURLなのです。
リンクじゃなくて、全てformのボタンにするのも手ですかねぇ・・・。
>>256 放禁みたいなNGフィルター、SNS用の権限フィルター
多端末対策で文字コード変換フィルター
スクリプト許可端末、スクリプト拒否端末用の変換フィルター
タグ許可・不許可
まぁ、なんでもいいでしょ
バリデート 検証。入力値などに問題が無いかをチェックする(チェックした後どうするかは知らない)。 フィルタ 入力値をチェックし、ヤバいものは除去する、ないし弾く(エラーにする、無視する)。 サニタイズ 消毒。転じて無害化。害の無いものにする。変換・置換など無害化の方法は多数あるが。。 エスケープ ある環境で特殊な意味を持つ値(HTMLならば<など)を、その環境のルールで規定された別の表現(<)に置き換える。 ダブルクォート中で"の前にバックスラッシュを置くのもエスケープ。 どれがベストかというと、どの表現も曖昧さが残るので使うべきではない。 DBへの入力の無害化処理と、HTML出力への無害化処理は違うし、無害化の方法も1通りではない。 設計初期などで抽象度を残した表現をしたい時くらいしか使わないな。 >259は文脈を意図的に曲解した例。
>>257 htmlspecialchars=html適合化っていう具体的かつ正確な言葉があるのに、
曖昧かつ誤解に満ちて見解が分かれるサニタイズなんて言葉にする必要はないだろ。
俺だせえ。 > 別の表現(<)に置き換える。 な。
>>260 > ダブルクォート中で"の前にバックスラッシュを置くのもエスケープ
PHPとかJSならエスケープだが、HTML中でこれができると思ってしまう奴もいるらしいからな。
HTML出力時にaddslashesするやつとか、
DBに入れる前にhtmlspecialcharsする奴とか、
入力時に両方処理する奴とか、
ほんと、ウンコだな
>>263 自分のこといってるんですね
わかります。
ほんと、ウンコだな
叩かれる理由のない
>>263 を叩いてるのは
昼にhtmlspecialcharsの件で叩かれてたやつだろ
>263 良く分からないけどやーいやーいうんこうんこー
うんこを馬鹿にしたやつ全員明日から便秘に悩む。
271 :
nobodyさん :2009/02/22(日) 00:31:09 ID:bY3v8MvV
>>270 のせいで、便秘ではないがうんこが止まらない。
この1時間で4回うんこにいっている
<?=str_repeat( 'うんこ', date('s') )?>
273 :
234 :2009/02/22(日) 00:46:35 ID:JUr+Er3M
リンクやPOSTで受け取るデータの他に、元のページから送られてくるデータって 何か無いかな・・・って考えてたら・・・$_SERVER['HTTP_REFERER']が使え ないかなぁ?って思ったのですが。どうでしょうか? 例えばheaderのmetaとかでreferer urlを変更して、セッションIDを追加したり とか出来ないでしょうか。 他にも、何か使えそうなデータって無いでしょうか?
>>273 refererは自由に変えられるし、飛ばさないブラウザもあるし信用ならないよ
まず別セッションにしたい理由がわからん
ユーザーに複数セッションを使わせたいという状況は想像できないし
自分が複数セッション使いたいならブラウザもうひとつ立ち上げればよいだけ
275 :
234 :2009/02/22(日) 01:27:54 ID:JUr+Er3M
>>274 refererが信用ならないのはおっしゃる通りです。ご指摘ありがとうございます。
リファラ出さないブラウザは対象外って事で良いのです。
複数セッションを使うために、別のブラウザを立ち上げれば済むのもご指摘通り。
自分だけで使うなら、その方が簡単なのですが。
例を挙げると、ウィンドウ1つに一人分の情報を表示/編集できる、マルチ・
ウィンドウの住所録ソフトみたいなものを想定しています。
ウィンドウ毎に別セッションにしないと無理じゃないかと思いました。
他に、定石があるようでしたら教えて下さい。
よろしくお願いいたします。
あなたがたは無職なのに なんで質問に回答するときはえらそうな 態度なの?
277 :
nobodyさん :2009/02/22(日) 03:06:25 ID:3nGhqmkB
SQLite3 + PDO で、 1つ目のプロセスがトランザクション張ってて、 2つ目のプロセスがトランザクション張ろうとして、 当然1が既にデーターベースをロックしてるから、 2はロックを取得できなくて、そんで SQLITE_BUSYが帰ってきて、 database is locked ってわかったとき、 しばらくsleepさせて、リトライ って処理、どうやって書けばいいの? どっかにサンプルコードある?
>>277 そこまで分かってるならforなりでいくらでも書けそうだけど・・
具体的にどこが分からないのよ
例えばtp://test.jp/とういうサイトで、 ユーザ登録(ユーザ名をuserで登録)して、ページを開設する ↓ tp://test.jp/user/ みたいに自分のページができる ↓ このページを誰もがある程度操作できる(お絵かき掲示板とか、ブログのコメ投稿とか) mixiなどのようにログインページがいらないので次回からこのページは tp://test.jp/user/が存在する限り、だれもがこのurlから訪問することができる。 みたいなサイトみて思ったのですが、 1./user/の部分は実際にサイトの鯖でuser専用のディレクトリやそこに.phpなどを作っているのでしょうか? 2.それとも、apacheだったらhttpd.confなんかで、 tp://test.jp/mypage.php?userid=user → tp://test.jp/user/ みたいな変換をしているのでしょうか? しかし2.の方法だと、userというページがあるかどうかをどうやって判断しているんでしょう・・ 適当に、userid=tekitouとかしてみたときに、tp://test.jp/tekitou/となってしまい、そのページが あるかないかの判断はいろんな方法でできると思うのですが、ユーザ登録が増えれば増えるほど その判断する速度は落ちるような気がしてしまうのです・・ そもそも2の時点で他の方法でユーザを管理しているかもしれません、 上のようなサイトの、ユーザ管理とその引き出しはどう管理しているのか、 大体でもいいので教えていただけないでしょうか よろしくお願いします
280 :
278 :2009/02/22(日) 18:01:32 ID:euIhPE01
id
282 :
nobodyさん :2009/02/22(日) 18:09:47 ID:euIhPE01
すいません
>>280 の名前は279でした
>>281 なるほど、DBを使ってユーザーのページに誰かが訪れるその度に
検索呼び出ししているということでしょうか。
なんかすっきりしましたありがとうございました
>>282 ちなみに毎回DBから同じ情報ひっぱってくるのは負荷かかるから
キャッシュを使ってるのが多いと思う
(ここはまたSmartyとか覚えたときにやってみるといい)
284 :
nobodyさん :2009/02/22(日) 18:16:29 ID:euIhPE01
>>283 Smartyですか、参考に調べてみます
ありがとうございました!
285 :
nobodyさん :2009/02/22(日) 21:21:50 ID:3nGhqmkB
>>278 while で書いたけど、
deadlockになるのです
具体的にどう書いたか見せたほうが答えてもらいやすいと思うが・・ 恥ずかしがらないで
287 :
nobodyさん :2009/02/22(日) 21:50:36 ID:3nGhqmkB
>>286 1.php と 2.php と2つのファイルを用意して、
以下のテストを行いました。
「テスト1」
1.phpを単独で実行する -> OK
「テスト2」
2.phpを単独で実行する -> OK
「テスト3」
1.php -> 2.php という順番で実行する -> deadlock発生
こういう状況です。
288 :
nobodyさん :2009/02/22(日) 21:52:30 ID:3nGhqmkB
1.phpは、トランザクション中に sleep(10); をかませて、ゆっくり実行するようにしてあります。 このゆっくりタイムに、いそいで2.phpを実行する、という テストです。
289 :
nobodyさん :2009/02/22(日) 21:53:36 ID:3nGhqmkB
環境は、PHP5 + PDO + SQLite3 です。 データーベース構造は、 id | name| value 1 | bond | 5 database name = test1 table name= tb1 です。
290 :
nobodyさん :2009/02/22(日) 21:54:35 ID:3nGhqmkB
1.php のソースは以下の通りです <?php try { $oDbCxn = new PDO('sqlite:test1'); $oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Error connecting to DB"); } $bUpdatePending = true; while ($bUpdatePending) { try { $oDbCxn->beginTransaction(); $oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); sleep(10); $oDbCxn->commit(); $bUpdatePending = false; // Exit the loop now the update has been done } catch (PDOException $e) { // Update failed. Wait a while before trying again in the next loop } } ?>
291 :
nobodyさん :2009/02/22(日) 21:55:09 ID:3nGhqmkB
2.phpは、以下の通りです <?php try { $oDbCxn = new PDO('sqlite:test1'); $oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Error connecting to DB"); } $bUpdatePending = true; while ($bUpdatePending) { try { $oDbCxn->beginTransaction(); $oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); $oDbCxn->commit(); $bUpdatePending = false; // Exit the loop now the update has been done } catch (PDOException $e) { // Update failed. Wait a while before trying again in the next loop sleep(15); } } ?>
292 :
nobodyさん :2009/02/22(日) 21:57:20 ID:3nGhqmkB
1.phpと2.phpの違いは、sleep(10)があるか、ないかというだけです。 それ以外は全部同じです。 SQLiteはトランザクション中に、別のトランザクションを発生させようとすると 1秒も待たずに「database is locked」になるので、 ウエイト->リトライ、という処理を自分で書かないといけません。 これがイマイチ普及しない最大のポイントだと思いますが、 その処理の書き方についての質問です。 なぜかデッドロックになってしまうのです
え?ループ内にトランザクション?
294 :
nobodyさん :2009/02/22(日) 21:57:55 ID:3nGhqmkB
>>293 だってリトライしないといけないわけだから。
なんか間違ってる?
例外が発生するポイントは、beginかexecか調べた?
296 :
nobodyさん :2009/02/22(日) 22:03:13 ID:3nGhqmkB
>>295 例外は発生しないにょ
ずーーーっと実行中のままになって、
最後にはタイムアウトになるんだにょ
PHPのデフォルトタイムアウトが60秒だから
60秒でタイムアウトになるにょ
>>296 おいおい、
例外にならなかったら、falseが設定されるでしょうが。
例外をcatchして捨ててるだけでしょうが。
beginTransactionでオートコミットモードがオフになる。 execに失敗する。 もう一度、beginTransactionをかけるが、既にbeginされてるので例外発生 で、またループ。 beginをループの外に出すかcatchしたときにロールバックしてみたらどうかね
EC-CUBEのカスタマイズで1000万て安い? ちなみに1年、5人担当
300 :
nobodyさん :2009/02/22(日) 22:15:02 ID:3nGhqmkB
>>297 そしたら、catchの中で、
例外をprintするように改造して
もう一回試してみるよ
301 :
nobodyさん :2009/02/22(日) 22:15:38 ID:3nGhqmkB
>>299 一人当たり200万円しかもらえないじゃん
302 :
nobodyさん :2009/02/22(日) 22:17:17 ID:3nGhqmkB
例外を補足するようにコードを改造してみました。 一番下のところに catch (PDOException $e) { print( $e->getMessage()); } って入れただけですけど。 そしたら、以下のようになりました。
303 :
nobodyさん :2009/02/22(日) 22:19:02 ID:3nGhqmkB
1.php Fatal error: Maximum execution time of 60 seconds exceeded in C:\1.php on line 21 (さっきと同じ結果) -------------------------------------------------------- 2.php SQLSTATE[HY000]: General error: 5 database is locked There is already an active transaction There is already an active transaction There is already an active transaction Fatal error: Maximum execution time of 60 seconds exceeded in C:\2.php on line 28 -------------------------------------------------------- 2.phpについて、いままで出ていなかった 例外がレポートされるようになりました。
304 :
nobodyさん :2009/02/22(日) 22:22:34 ID:3nGhqmkB
>>298 exec ってオートコミットモードがONでないと使えないのですか?
もしかして、
$sql="UPDATE tb1 SET value = value + 1 WHERE id = '1'";
$sth = $dbh->prepare($sql);//プリペアードステートメント
$sth->execute();//エクスキュート
とかってやればOK?
そうじゃなくて、begin済みなのにbeginするなってこと。 1.phpで例外が出ないで無限ループするのはおかしいからチェックしてみ
306 :
nobodyさん :2009/02/22(日) 22:29:18 ID:3nGhqmkB
>>305 biginをループの外に出したら意味ないのでは?
だってリトライできなくなるし。
308 :
nobodyさん :2009/02/22(日) 22:34:36 ID:3nGhqmkB
とりあえずわけわかんなくなってきたので、 改造済みのコードを改めてはります。
309 :
nobodyさん :2009/02/22(日) 22:35:58 ID:3nGhqmkB
1.php <?php try { $oDbCxn = new PDO('sqlite:test1'); $oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Error connecting to DB"); } $bUpdatePending = true; while ($bUpdatePending) { try { $oDbCxn->beginTransaction(); $oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); sleep(10); $oDbCxn->commit(); $bUpdatePending = false; // Exit the loop now the update has been done sleep(1); } catch (PDOException $e) { print( $e->getMessage()); $oDbCxn->rollback(); } } ?>
1.php側はループさせると、テストにならんから、 実行中のsleepだけでいいことにして、ループ外した方がよさげ。 それから、ロック以外の例外の時も無限ループしちゃうわけで・・・ まぁ、テストだからいいけど。
例外分かってないのでは?
トランザクションも怪しいw
313 :
nobodyさん :2009/02/22(日) 23:08:50 ID:3nGhqmkB
314 :
nobodyさん :2009/02/22(日) 23:17:01 ID:3nGhqmkB
よく考えたら、ロールバックしろ、とかいうアドバイスは無意味だな だってdatabase is lockedっていうエラーが出ているわけだから、 トランザクションをゲットできていないわけだから、 そもそもロールバックなんかしないわけで。
315 :
nobodyさん :2009/02/22(日) 23:19:21 ID:3nGhqmkB
ソースコードを改変したので、 3.phpと4.phpということにしました。 3.php <?php try { $oDbCxn = new PDO('sqlite:test1'); $oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Error connecting to DB"); } $bUpdatePending = true; try { $oDbCxn->beginTransaction(); $oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); sleep(10); $oDbCxn->commit(); $bUpdatePending = false; // Exit the loop now the update has been done sleep(1); } catch (PDOException $e) { print( $e->getMessage()); $oDbCxn->rollback(); } ?>
317 :
nobodyさん :2009/02/22(日) 23:20:13 ID:3nGhqmkB
4.php <?php try { $oDbCxn = new PDO('sqlite:test1'); $oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Error connecting to DB"); } $bUpdatePending = true; while ($bUpdatePending) { try { $oDbCxn->beginTransaction(); $oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); $oDbCxn->commit(); $bUpdatePending = false; // Exit the loop now the update has been done } catch (PDOException $e) { // Update failed. Wait a while before trying again in the next loop print( $e->getMessage()); $oDbCxn->rollback(); } } ?>
318 :
nobodyさん :2009/02/22(日) 23:22:14 ID:3nGhqmkB
3.php −> 4.php という順番で実行する流れです 3.php −>10秒待つ 4.php −>待たないですぐに実行
319 :
nobodyさん :2009/02/22(日) 23:22:53 ID:3nGhqmkB
実験結果 3.php エラー無し カウントアップは成功している 4.php SQLSTATE[HY000]: General error: 5 database is locked カウントアップは成功している
320 :
nobodyさん :2009/02/22(日) 23:36:10 ID:3nGhqmkB
あれ? もしかして、完成? 成功している??
322 :
nobodyさん :2009/02/23(月) 00:01:27 ID:DYtiHKsN
これでうまくいった 7.php −> 8.php 7.php wait 10seconds 8.php wait 0 7.php <?php try { $oDbCxn = new PDO('sqlite:test1'); $oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Error connecting to DB"); } $bUpdatePending = true; while ($bUpdatePending) { try { $oDbCxn->beginTransaction(); $oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); sleep(10); $oDbCxn->commit(); $bUpdatePending = false; // Exit the loop now the update has been done } catch (PDOException $e) { sleep(3); $oDbCxn->rollback(); } } ?>
323 :
nobodyさん :2009/02/23(月) 00:02:02 ID:DYtiHKsN
8.php <?php try { $oDbCxn = new PDO('sqlite:test1'); $oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Error connecting to DB"); } $bUpdatePending = true; while ($bUpdatePending) { try { $oDbCxn->beginTransaction(); $oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); $oDbCxn->commit(); $bUpdatePending = false; // Exit the loop now the update has been done } catch (PDOException $e) { sleep(3); $oDbCxn->rollback(); } } ?>
324 :
nobodyさん :2009/02/23(月) 00:03:11 ID:DYtiHKsN
でも、8.phpの最後のほうの、 sleep(3); $oDbCxn->rollback(); これなんだけど、せっかくsleepを入れたのに、 sleepしているようすが見られない。 7.phpの実行が終わると、即座に 間髪いれずに、8.phpの実行も終了している。 なんでだ? 3秒待ってからロールバックしてるんじゃないのか?
325 :
nobodyさん :2009/02/23(月) 00:03:49 ID:DYtiHKsN
あと、トランザクションをゲットしていないのに、 ロールバックするという意味がわからん。 いったいどこに戻っているというのだ?
database is lockedはトランザクション自体ではなく、 その中のUPDATE文に対してのエラーである。 なので、トランザクション自体は開始されているので、 一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。
>一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。 一旦ろーるばっくでトランザクションを閉じて、改めてトランザクションを開始している。
328 :
nobodyさん :2009/02/23(月) 00:19:44 ID:DYtiHKsN
329 :
nobodyさん :2009/02/23(月) 00:22:06 ID:DYtiHKsN
やっぱあれだな。 SQLiteの4つのロックのうち、 すぐにロックを獲得できるのを、 明示的に書かないとだめだな。 $oDbCxn->beginTransaction(); ↑これがダメってこと。 なぜなら、↑だと、デフォルトのロックが選択される。 SQLiteにおける、デフォルトのロックとは、defferd lockである。 これだと遅延するから、4つの処理をトランザクションではさみたい、 などという場合には不向き。
busy_timeoutの設定をするんじゃだめなのか?
331 :
nobodyさん :2009/02/23(月) 00:45:25 ID:DYtiHKsN
332 :
nobodyさん :2009/02/23(月) 00:58:26 ID:DYtiHKsN
もう一つの懸念。 SQLiteはNFSというファイルシステムを使っているマシンで実行すると ぶっこわれるらしい。 NFSとはおもにUNIXで使われるファイルシステムらしい。 特にfreeBSDでよく使われるらしい。 自分が借りているレンタルサーバーはfreeBSDなので、 ひょっとしてSQLiteは使えないんじゃないか?
NFS使ってるレンタルサーバなんてないから安心しろw
335 :
nobodyさん :2009/02/23(月) 01:02:48 ID:DYtiHKsN
SQLiteには、 deferred, immediate, exclusive という3つの種類のロックがあるが、 どれを使うべきか?というのは、考えなくていいの? $dbh->beginTransaction(); これを使うと、自動的に、デフォルトの、ロックが 選択される。SQLiteにおけるデフォルトのロックとは deferred ロックである。 もし銀行口座などの実装をしたい場合、 exclusiveにしないとダメなのではないか? また、immediateって、なんのためにあるんだ? いつ使うんだ?
336 :
nobodyさん :2009/02/23(月) 01:03:21 ID:DYtiHKsN
ロックとトランザクションの違いを勉強してきたほうがいいんじゃないかな?
俺もそう思うw
こいつ前いたキティだろ 通報しましたとかsqlite関連で腐るほど書き込んでた
WikiとCMSってどう違うの
>>340 WikiもCMSの一種だよ
Wikiが他のCMSと違うのは、不特定多数によるサイト構築を主体とした構成になっている
つかPHP関係ないじゃん
343 :
nobodyさん :2009/02/23(月) 02:23:27 ID:DYtiHKsN
もしかしてwhileいらないんじゃないか? sleepしてrollbackだけでいいんじゃないか?
派遣先の歓迎会などで、趣味を聞かれることがあります。 私の趣味は豊富で下記のとおりです。 ・アニメ、エロゲ、同人誌、アニソン ・風俗、ストリップ鑑賞 ・声優、秋葉系アイドルイベント参加 しかし、これを言うと、おそらくひかれてしまいます。。。 なんて言えばよいのでしょうか? 休みの日は何をしてる?と聞かれても、声優ライブの最前線で サイリウムをもって、跳んでいるなんて言えません。
346 :
nobodyさん :2009/02/23(月) 04:39:47 ID:cBNbBaFX
$a = "aaa" if(preg_match("/^[0-9]+$/",$a) == true){ echo "ok"; }else{ echo "dame"; } でdameになってくれるのに(if(preg_match("/^[0-9]+$/",$a)でもいけた)、 if(preg_match("/^[0-9]+$/",$a) !== false){ echo "ok"; }else{ echo "dame"; } だと$aを何にしても全部okになる・・ なんで><
347 :
nobodyさん :2009/02/23(月) 04:40:33 ID:cBNbBaFX
→$a = "aaa";
349 :
nobodyさん :2009/02/23(月) 05:29:48 ID:DYtiHKsN
<?php try { $oDbCxn = new PDO('sqlite:test1'); $oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Error connecting to DB"); } $bUpdatePending = true; while ($bUpdatePending) { try { $oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION"); // $oDbCxn->beginTransaction(); $oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); $oDbCxn->commit(); $bUpdatePending = false; // Exit the loop now the update has been done } catch (PDOException $e) { print $e->getMessage(); $oDbCxn->rollback(); } } ?>
350 :
nobodyさん :2009/02/23(月) 05:30:39 ID:DYtiHKsN
>>349 実行すると、なんでエラーになるの?
PHP5 + PDO + SQLite3
----------------------------------
database structure
id | name| value
1 | value| 5
-------------------------------
database name = test1
table name= tb1
351 :
nobodyさん :2009/02/23(月) 05:33:14 ID:DYtiHKsN
トランザクションをスタートするのに、 $oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION"); はダメで、 $oDbCxn->beginTransaction(); なら良い、というのはおかしい。 なぜエラーになるの?
352 :
nobodyさん :2009/02/23(月) 06:48:25 ID:c878IibK
教えて下さい。 test.txt というutf-8のファイルがあって中に文とかphpの変数とかが書いてあります。 これをsjisのtest.phpで読み込み表示させたいのですがincudeだと文字化けします。 どうすれば表示できますか?
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" /> を吐いてやる
>>353 その知識で回答しようと思えるなんて素直に感心するよ
355 :
nobodyさん :2009/02/23(月) 07:20:40 ID:cBNbBaFX
>>348 自分なりに調べてみました><
mb_eregでは !== false でいけたので、それも一緒に比べてみたら
返り値のとこが、
mb_ereg
>正規表現に一致しないか、 エラーを発生した場合に FALSE を返します。
preg_match
>preg_match() は、エラーが発生した場合にFALSEを返します。
でした。
preg_matchは正規表現に一致しないときはfalseを返してくれないので、
!== falseがスルーされたということでよいのでしょうか?><
今まで全部!== falseでできると思っててそれでやってたので変更が大変ですが
preg_matchのときは==とか何もつけないバージョンでやっておきます><
ありがとうございました
>>352 逆だUTF-8の方
両方使いたいなら変換かけるべし
OS linux PHP ver 5.2.5 連携 とくになし <? //------------------------------------------------ //ペット可否 //------------------------------------------------ function GetPet_F($int) { $res = ""; if($int=="0") $res = "不可"; else $res = "可能"; return $res; } print GetPet_F(0); ?> 以上ソースコードでsyntax error, unexpected $end出るんですが何が原因なんでしょうか・・・
358 :
357 :2009/02/23(月) 16:02:51 ID:yJ3BEx4Z
ID出すの忘れ
あれ、流出してる?
>>352 eval(mb_convert_encoding(file_get_contents('test.txt'), 'Shift-JIS', 'UTF-8'));
>>357 構文に間違いはないから
スクリプトのエンコーディングが mbstring.script_encoding と合ってないんでしょう
361 :
nobodyさん :2009/02/23(月) 16:37:17 ID:yJ3BEx4Z
可能の能抜いたらエラー出なかったです・・・ なんなのだろう
>>357 原因は、Shift Jisの5C問題だね。
能のShift Jisのコードが94 5C
5Cはバックスラッシュ(Shift Jisだと¥)なので、
PHPのパーサが、終わりのダブルクォーテーションを文字列と認識してしまう。
結果、文字列が閉じられていないと判断されて、エラーになる。
今時SJISでスクリプト書くやつなんていんの? 話は変わるが echo '<table 〜'. '〜〜〜〜〜〜〜〜〜'. '〜〜〜〜〜〜〜〜〜'. '〜〜〜〜〜〜〜〜〜'. '〜〜〜〜〜〜〜〜〜'; 引継ぎでプログラムのソースコード見たらこうなってた まじ簡便してくれ・・・orz あと、同じ要領でechoでJavaScriptとか吐き出してるのもやめてくれ クエリはまだ許せる 仕事でプログラムするときはほかの人にわかりやすいコードにしてください これまじでお願い
--enable-zend-multibyte付けてmbstring.script_encodingを設定すりゃ Shift-JISだろうが何で書こうがそいつの自由だ 雑談スレに行けクズ
365 :
nobodyさん :2009/02/23(月) 21:03:10 ID:cBNbBaFX
また質問させていただきます $aa = "AA"; $bb = "bb"; $sql = "SELECT * FROM v001upfile WHERE :AA = :BB"; $result = executeQuery($sql); $result->bindParam(":AA",$aa,PDO::PARAM_STR); $result->bindParam(":BB",$bb,PDO::PARAM_STR); $result->execute(); $row = $result->fetchAll(); $rows = count($row); のようにすると、whereに該当するデータがなく、$rowsも0になってしまいます。いろいろしていると、 $sql = "SELECT * FROM v001upfile WHERE AA = :BB"; とするとデータが得られました。 どうやらwhere :AAのbindのパラメータ、PDO::PARAM_STR で、'AA'とされてしまっているから?、だめのような気がするのですが、 解決策ありましたらよろしくおねがいします
>>365 それ駄目だ、俺も悩んだ
WHERE $AA = ?か、 ? = ?にしたよ
SELECTでbindValueとbindParamは使わない方がいいって
グーグル先生が言ってた
PDO::PARAM_STMT
カラム名にPARAM_STR使うなよ アホかw
369 :
nobodyさん :2009/02/23(月) 22:03:46 ID:ikSisMyc
【OS名】CentOS 5.0 【PHPのバージョン】php5.2 【連携ソフトウェア】JavaScript Smarty 【質問内容】 ユーザがログインに成功したときにセッションに値をセットして 次にページにアクセスしてきた時にSmartyで値があるか確認して初期化処理 例: {{if $smarty.session.foo == 'bar'}} init(); //これはJScriptの関数 {{/if}} をしたいんですけど、ブラウザを終了するとセッションまで破棄されてしまいます。 ご教授お願いいたします。
370 :
nobodyさん :2009/02/23(月) 22:06:30 ID:cBNbBaFX
>>366 sql文に直接変数入れる方法でしました。できました。
ありがとうございました
>>367 ,368
やってみたのですが、反応としては356とほぼ同じでした
マニュアルのパラメータ一覧のものをいろいろ代えてやってみたのですが
どうもうまくいきませんでした。
>>369 セッションはブラウザを終了すると破棄されるものです
継続したいならクッキーを使うといいよ
>>370 そのいろいろかえてやってみた、の中に正解が入ってないわけだな。
ビット和はとったのか。まぁ、いいや。メンドクセ
373 :
nobodyさん :2009/02/23(月) 22:55:40 ID:DYtiHKsN
なぜEXCLUSIVEはトランザクション開始直後に ジャーナルファイルを作成しないのか?
アホか
375 :
369 :2009/02/23(月) 23:03:42 ID:???
>>371 PHPSESSIDをクッキーに格納する仕様と勘違いしてました。
ありがとうございました。
376 :
nobodyさん :2009/02/24(火) 00:24:39 ID:r/vu3Jnx
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <ココまでアホばかり 彡、 |∪| / / __ ヽノ / (___) /
pdoで急にinsertできなくなった・・ エラーなしで何事もなく終わってるのに肝心のinsertだけできていない・・
俺なんてPHPMYADMIN全データ文字化けしちゃった。 何もいじってないのに意味不明
379 :
377 :2009/02/24(火) 07:41:12 ID:???
おお!すっかりphpmyadminの存在忘れてて そっちでやったらカラムの数と値の数が合ってないよってエラーが出てきた! 凡ミスだった。dクス
380 :
nobodyさん :2009/02/24(火) 10:11:31 ID:MqsJKVm4
画像のアップロード処理を作っているのですが、 $_['FILE']に入っているtypeはブラウザが送信するもので、 信用できないと聞きました。 そこで、アップロードされたファイルがJPEG、BMP、PNGであることを確認する方法を教えてください。 自分なりに考えてみたのは、 imagecreatefrom〜で、作成できるか確認するというものなのですが、これでもいいのでしょうか?
exif_imagetype
私の目標 Powered by 俺 って書けたらいいな><
getimagesizeで取得できるmimeじゃだめかな?
385 :
380 :2009/02/24(火) 11:16:50 ID:MqsJKVm4
レスありがとうございます。
>>381 恥ずかしながら、私には難しすぎて理解できません;
MIMEタイプについて学ぶ必要がありそうですね;;
>>382 >>384 なるほど、画像ファイルの場合はこういう専用の関数を使うといいのですね。
はじめの質問からちょっとずれてしまうのですが、画像以外の場合ではどんな方法があるのでしょうか?
たとえば、MP3ファイルの場合など。
PECLのFileinfo関数なんかは使えるのでしょうか?
後学のために教えてください。
そこまで分かってるなら、試すなりぐぐるなりすればいいと思うがw
家泊まってもいいって言われたのはフラグたったのかな?
>>385 $str = file_get_contents("example.mp3");
if (substr($str, 0, 3) == "ID3") { ... }
地味にこれが便利。 $mimetype = `file -bi $file`;
390 :
380 :2009/02/24(火) 14:25:53 ID:MqsJKVm4
>>386 それはそうなのですが、
たとえば、finfo_file()で得られる値は信用してよいのか、などがわからなくて;
>>388 なるほど、MP3の場合は、先頭にID3 タグの情報があるかどうかで判断できるわけですね。
しかし、MP3以外にも対応できる、もっと汎用的な方法はないのでしょうか?
>>389 linuxコマンドで取得するということでしょうか?
こんな方法もあるんですね!勉強になります。
続けて質問になってしまうのですが、ファイルサイズやファイル名などに関しても、
$_FILEの値は信用してはいけないのでしょうか?
その場合、安全な方法を教えてください。
>>390 画像だけならfreadして、どんな文字列から始まるかで判別する方法でいいんじゃないかな
JPG→\xff\xd8
PNG→\x89PNG\x0d
GIF→GIF87a or GIF89a
ビットマップは…しらねぇ('A`)
拡張子でいいじゃん。拡張子がjpgで中身がBMPとかだったら使う側の問題だろ
393 :
nobodyさん :2009/02/24(火) 18:57:41 ID:TovVFkKx
クレジット番号と、有効期限などをユーザーに入力させて、 照合(決済できるクレジットカードかどうか)するというASPってありますか? 普通にZEROとかの決済会社とかでは、決済せずに照合のみってできるんでしょうか?
395 :
nobodyさん :2009/02/24(火) 19:03:02 ID:TovVFkKx
>>394 早速ありがとうございます
調べてみます
配列の各データをimplodeでくっつけたいんだけど 各データをくっつけるときについでに ' ' でくくりたい。 foreach( $data1 as $d )$data2[]="'$d'"; $str = implode( ',', $data2 ); とかやってるんだけど、これダサくね? 字の数も多いし。 もっとかっこよくやりたい。
array_mapじゃね?
>>
>>396 > 配列の各データをimplodeでくっつけたいんだけど
> 各データをくっつけるときについでに ' ' でくくりたい。
>
> foreach( $data1 as $d )$data2[]="'$d'";
> $str = implode( ',', $data2 );
> とかやってるんだけど、これダサくね? 字の数も多いし。
> もっとかっこよくやりたい。
>>396 $str = "'".implode("','", $data2 )."'";
>>397 コールバック関数書くのめんどくさくね?字の数増えるし。
401 :
nobodyさん :2009/02/24(火) 20:56:11 ID:9Iv6lmqO
file_get_contentsとfile関数についてですが これらはPHP5ではバイナリセーフの関数ということであってますか? 色々調べたのですがバイナリセーフではないという記事が多くて困惑してます マニュアルにはfileはPHP4.3でバイナリセーフになり file_get_contentsはバイナリセーフとは書いてませんが バイナリデータに対応してると書いてます(バイナリデータ対応=バイナリセーフ?) 実際にテストもしてみましたがヌル文字もちゃんと表示されているようでした バイナリセーフではないというのは過去のこと(記事が古い)ということでしょうか?
>>401 PHP5.xxまでならバイナリに対応してる
PHP6以降、バイナリを突っ込めなくなるモードに設定できるようになる
403 :
nobodyさん :2009/02/24(火) 22:33:58 ID:gE9pwkM6
imagecopymergeで背景画像(jpg)にユーザがアップロードした画像(jpg/gif/png)を合成したいのですが、 pngの場合に透過部分が透過されずに塗りつぶしになってしまいます。 png-8でもpng-24でも透過できるようにしたいのですがどうすればいいのでしょう? 環境はphp5です。できればImageMagickは使わずにやりたいのですが… 現在のソースはこんな感じです。 $size = getimagesize('./front.png'); $back = imagecreatefromjpeg('../back.jpg'); $front = imagecreatefrompng('./front.png'); //fromjpgだったりgifだったり imagetruecolortopalette($front, false, 256); imagecopymerge($back, $front, 0, 0, 0, 0, $size[0], $size[1], 100); header('Content-Type: image/png'); imagepng($back);
404 :
nobodyさん :2009/02/25(水) 01:09:50 ID:Ndqi56nA
sample.phpってのがあって、なんでか
http://../sample/ みたいに.php無いのにそのページ開いてしまいます
sample.phpの場合だけ開くようにしたいのですがよろしくおねがいします
405 :
nobodyさん :2009/02/25(水) 01:23:53 ID:Ndqi56nA
やっぱり、/sample/でも開いてくれたほうが便利な気がしてきたのでやっぱこのままにしときます
406 :
nobodyさん :2009/02/25(水) 01:43:31 ID:aIiX70rd
flockで、3つのファイルを、排他ロックしたときに、 その3つのロックを開放するときの順番で、ロックをした順番ですか? それともロックをした順番の逆順にロック開放するべきですか?
407 :
>>406 :2009/02/25(水) 01:44:45 ID:aIiX70rd
すいません、誤字があったので書き直しますorz flockで、3つのファイルを、排他ロックしたときに、 その3つのロックを開放するべき順番は、ロックをした順番ですか? それともロックをした順番の逆順にロック開放するべきですか? 以上です
408 :
nobodyさん :2009/02/25(水) 03:48:51 ID:lXxF9gdp
private $a, $b, $c; という書き方と、 private $a; private $b; private $c; という書き方、どっちが適切ですか?
適切の基準とは?
>>406 順番は関係ない
>>408 目的もなしに手段だけ見せて適切か不適切かなんて下せる訳ない
あえて言えばコーディングスタイルの問題
宗教論争になるから好きにしろ
何でも基準とかいう奴なんなの? 答えられないんじゃないの^^;
412 :
nobodyさん :2009/02/25(水) 12:54:52 ID:Bh8pwxYs
ショッピングカートの作り方について質問です 商品名をクリックするとクッキーに商品名と金額を記録するようにしたのですが クッキーに配列で記録することはできるのでしょうか? $_COOKIE['sinamono']にカートの中身が全部入ってるとして解説1のような構造で取れるようにしたいですが 現在方法が分からず解説2のようにやってます 解説1のようにクッキーに記録するにはどのようにしたらよろしいかアドバイスお願いしまsう 「解説1」 $_COOKIE['sinamono'][0]['name'] これは商品Aの名前 $_COOKIE['sinamono'][0]{'okane'] これは商品Aの金額 $_COOKIE['sinamono'][1]['name'] これは商品Bの名前 $_COOKIE['sinamono'][1]{'okane'] これは商品Bの金額 以下続く・・・ 「解説2」 $_COOKIE['sinamono_0_name'] これは商品Aの名前 $_COOKIE['sinamon_0_okane'] これは商品Aの金額 $_COOKIE['sinamon_1_name'] これは商品Bの名前 $_COOKIE['sinamono_1_okane'] これは商品Bの金額
>>412 商品データベースは持っていないのかな?
データベースがあるなら、記録するのは商品コードだけでよいと思う。
記録方法は、COOKIEにそのままなら配列は無理だから、CSV形式とかにする。
だが、一番手っ取り早くて、効率的なのはセッションを使うことだと思う。
$_COOKIE['sinamono_0_name']を$GOODS['sinamono'][0]['name']に変換する関数書けばいいやん
COOKIE→[abcdefg] データベース(テーブル1) abcdefg 商品ID abcdefg 商品ID abcdefg 商品ID abcdefg 商品ID データベース(テーブル2) 商品ID 商品名 値段 更新日 商品ID 商品名 値段 更新日 商品ID 商品名 値段 更新日 商品ID 商品名 値段 更新日
>アドバイスお願いしまsう おまえかわいいなw
418 :
nobodyさん :2009/02/25(水) 14:11:49 ID:ZVMHOF39
data.txtファイルのマウスでつまみ、pppp.phpファイルに落とすと、 pppp.phpファイルが実行され、pppp.phpファイルに書かれた仕様でdata.txtの内容をIEに表示させる。 という、pppp.phpファイルを書く事は可能でしょうか? 可能だとすれば、どんな関数を使えばいいのか教えて下さい。
つajax
420 :
418 :2009/02/25(水) 14:38:39 ID:ZVMHOF39
>>418 Windowsでいいんだよな?
できるけど、いろいろと設定が必要なはず。
ごめん、何がしたいのか理解できない PHPはサーバーサイドってことを理解したうえでの質問と見ておk?
テキストファイルをドラッグ&ドロップしてphpファイルを起動させて引数情報を得て 処理するわけだから関数以前にやることありありだな
ブラウザー上でのD&Dとは限らない。CLIでのことだろ? デスクトップにPHPファイルを置いておいて、ドラッグ&ドロップでデータを受け入れて処理して、ブラウザを起動する。
425 :
418 :2009/02/25(水) 14:55:02 ID:ZVMHOF39
>>421 > Windowsでいいんだよな?
はい。
>>422 > ごめん、何がしたいのか理解できない
2ちゃんのスレッド情報の"mail""name""time""id""res"の情報がdata.txtにcvs形式で書かれています。
それを、pppp.phpファイルを使い、自分の好みの表示方法でIEに表示させたいのです。
426 :
418 :2009/02/25(水) 14:56:48 ID:ZVMHOF39
>>423 >テキストファイルをドラッグ&ドロップしてphpファイルを起動させて引数情報を得て処理する
そうです。 これがやりたいのです。
>>426 できなくもないが
色々しないといけない
基本的にPHPはサーバーサイド向けに作られてるから
そういうのしたいならCなりJavaなり使おうな
>>427 はぁ?
デスクトップ環境でPHPが動かないとでも?
レンサバユースしてないアフィリエーターらしい考え方だな。
できなくもないってなら、できる方法を教えてやれよ。知ってるならだが。
429 :
418 :2009/02/25(水) 15:05:11 ID:ZVMHOF39
pppp.batファイルを用意して php pppp.php %1 とか書いておけばいいんじゃないの?
432 :
418 :2009/02/25(水) 15:28:03 ID:ZVMHOF39
ajaxを覚えればできるからさっさと勉強してこい
435 :
418 :2009/02/25(水) 15:42:27 ID:ZVMHOF39
>>433 こういう風に、data.txtの選択&読み込みが出来たら嬉しいんだけど、htmlにはそういう機能はないのでしょうか?
>>435 いや、それブラウザでやってるじゃん
真似してみたらいいじゃん
失敗例はキャッチブロックにロールバックが無くて、 成功例はロールバックって書いてあるところかな?
いやどっちも書いてるやん
phpの中でjavascriptを連携させるときに、中に入るクオーテーションの種類が3つになってしまって使えん・・ オンクリックの中にさらにクオーテーション入ったときとか、functionしても、引数使うから 結局''で囲うからどうにもならね
日本語でおk。
443 :
nobodyさん :2009/02/25(水) 23:28:33 ID:+kmtnISz
PHPは実行されるまで未定義の関数(若しくは関数名TYPO)が存在するか否か分かりませんが、 ツールなどで未定義の関数や引数の間違いを静的に検出する方法はないですか?
php_check_syntaxじゃだめか?
<?php function hoge(){ echo 'hoge'; } hage(); ?> とかあったときに、実行前に関数hageが無い事を検出したいって事だろ。 静的解析とかダセェ事せずに自動テスト使おうぜ。
446 :
nobodyさん :2009/02/25(水) 23:41:51 ID:LSqAU6YZ
SQL文を発行するのに、 $dbh->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'"); 以外の書き方って、ある? ------------------------ 【環境】 PHP5 + PDO + SQLite3 ようはexec以外のやり方で、って意味。
>>442 クオーテーションがネストしてしまうときに、
どう対処したらいいですか、って意味だろ?
行間読もうぜ
さもないと、30才でホームレスだにょ
>>446 一発で終わりならexec、ループさせるならprepareで良いんじゃない?
>>448 ああ、prepareがあったか。
ありがと。
450 :
nobodyさん :2009/02/26(木) 00:27:28 ID:tryMdVBh
mysqlのPDOを使ってみたいのですが php.iniのphp_mysql.dllをコメントをはずせばつかえるのでしょうか?
使える。
>>450 自宅でのテスト環境だったら、たぶんそれでいける。
確認はphp.infoを見る。
無料のレンタルサーバーではほとんど
ドライバが入っていない(ので無理)
>>441 スクリプト中でechoとかprint()使ってるのかなぁ。。
なら、heredocにすれば少しは気を使う部分が減るかもしれない。
$text = 'ちんこ' ;
echo <<<__E_O_T__
<button name="tinko" onclick="alert( '{$text}' ) ;" />
__E_O_T__
HTMLとかJavaScriptは完全に別ファイルにして
<button name="tinko" onclick="alert( '<php echo $text ?> ' ) ;" />
のほうがいいと思うけど。
454 :
nobodyさん :2009/02/26(木) 02:05:21 ID:91pUGaxV
おそらく、PHP4とPHP5での違いだと思うのですが、 <input type="text" name="test" value="">←に、test'sと入力して送信すると、 PHP4だと、 $_GET["test"]の値は、test'sとなりますが、 PHP5だと、 $_GET["test"]の値は、test\'sとなります。 送信された時点でエスケープされているのですが、これはphp.iniで変更可能でしょうか?
うん マジックなんちゃらやね
magic_quotes_なんちゃら SQLインジェクションの対策で そういう変なオプションがある。 自動的に'とかを勝手にエスケープしてくれるっていう。
457 :
nobodyさん :2009/02/26(木) 03:45:51 ID:91pUGaxV
さんくす!
458 :
418 :2009/02/26(木) 04:00:48 ID:GtV/r+in
昨日は有り難うございました。
http://www.stackasterisk.jp/tech/php/php02_06.jsp 【form.html】
<html><body>
<form action="display.php3" method="POST">
<input type="text" name="fName" size="30"><br>
<input type="submit" value="submit">
</form>
</body></html>
【display.php3】
<html><body>
<?
print $fName;
?>
</body></html>
今日はこれにチャレンジしてみたのですが、うまく動きません。
どこが悪いのかご指摘下さい。
$_POST['fName'] そこの情報古すぎるから違うとこのほういいよ
>>458 ほんとにPHP3が動いているのか?
とかいうオチじゃないの。
461 :
nobodyさん :2009/02/26(木) 04:08:51 ID:7qsKyuky
ファイルに100って数字を入れておいて、 5分ごとに1減らす、ってどう書けばいいの? cronとかじゃなくて。
462 :
418 :2009/02/26(木) 04:08:56 ID:GtV/r+in
>>459 有り難うございます。
> $_POST['fName']
をドコと入れ替えるのでしょうか?
463 :
418 :2009/02/26(木) 04:10:48 ID:GtV/r+in
>>460 あ、なるほど。.php3ってそういう意味なんだ。
私の環境はPHP Version 5.2.6でしたw
464 :
nobodyさん :2009/02/26(木) 04:10:55 ID:7qsKyuky
そのPHPファイルにアクセスするたびに 計算してるようなんだけど。 だから、例えばページが過疎ってて、 3日間アクセスがなかったら、その間は 計算しない感じ。 そんで3日ぶりにアクセスがあったら、 「えーーっと、、、、前回のアクセスから 3日だから、3(日)X24(時間)X12(5分の単位) 減らせばいっかな、、、」 とかって計算しているようなんだけど??
465 :
418 :2009/02/26(木) 04:17:39 ID:GtV/r+in
じゃあ、PHP Version 5.2.6の環境で動く、
>>458 を誰か書いて下さい。 お願いしますっ。
【form.html】 <html><body> <form action="display.php3" method="POST"> <input type="text" name="fName" size="30"><br> <input type="submit" value="submit"> </form> </body></html> 【display.php3】 <html><body> <? print $_POST['fName']; ?> </body></html>
ちょっと間違えた。 【form.html】 <html><body> <form action="display.php" method="POST"> <input type="text" name="fName" size="30"><br> <input type="submit" value="submit"> </form> </body></html> 【display.php】 <html><body> <? print $_POST['fName']; ?> </body></html>
>>467 だからどこを変更したらいいのか
わからないから聞いてるんだろ?
自閉症もたいがいにしろや
470 :
418 :2009/02/26(木) 04:42:12 ID:GtV/r+in
>>468 有り難うございます。
form.htmlこれで入力枠が表示されます。
で、aaaaaとか入力して、ボタンを押すと、真っ白の画面に変わり何も表示されません。
どうしたらいいでしょうか?
<form action="display.php" この行はあってる? それと、 display.php ファイル名これに変更したから。
472 :
418 :2009/02/26(木) 04:47:29 ID:GtV/r+in
474 :
418 :2009/02/26(木) 04:56:26 ID:GtV/r+in
>真っ白の画面に変わり何も表示されません。 つーか、この状態でソースを表示させると、 <html><body> <? print $_POST['fName']; ?> </body></html> これがマンマ表示されます。 だから、変数の中に何も代入されてなくて、print関数でnullを表示してるのではないでしょうか?
475 :
418 :2009/02/26(木) 04:57:41 ID:GtV/r+in
476 :
418 :2009/02/26(木) 05:01:07 ID:GtV/r+in
477 :
418 :2009/02/26(木) 05:24:06 ID:GtV/r+in
解決しました。 <? を <?php としました。 有り難うございました。
478 :
418 :2009/02/26(木) 06:41:16 ID:GtV/r+in
おかしいな、色々いじってたら、form.htmlに入力してクリックすると、 display.phpが表示されなくて、ファイルのダウンロードってのが表示されるようになったw
479 :
nobodyさん :2009/02/26(木) 06:56:40 ID:zwlsZYIS
pcntl_forkでフォークした時、 外部とのIOはどうなりますか? たとえば、オープンしてあるファイルとか、 DBとの接続とか。 複数プロセスからファイルがオープンされているような状態になるのはまずいんじゃないかと 思うのですが・・
480 :
418 :2009/02/26(木) 06:57:27 ID:GtV/r+in
ワラタ
482 :
nobodyさん :2009/02/26(木) 08:12:14 ID:WDGjNsPd
DB使えないレンタル鯖で、情報をインサートする手段を考えていて、 txt、cgiや、datファイルなどなどに書き込めることがわかったのですが、 ふと、.phpにもインサートできるのかな?と疑問におもいました。 phpに書き込んで、それぞれ変数に格納していって、参照〜 みたいなのを1000件くらいしたときtxt cgi dat などと比べて速度は変わらないでしょうか?
君は何をいってるんだい? 拡張子が変わったところでプレーンテキストのデータということには変わりないんだろ?
>>482 DBが使えないといっても、txtが使えるならSQLiteぐらい使えるんじゃない?
まぁ、それが無理として、更新が重ならないという条件が付くなら、phpファイルに
var_export($hoge, true);の結果を書きこむ手はある。
速いよ。
しかし、一気に読み込むからメモリは食うけどな。メモリ割り当て次第。
>>484 なんでvar_export?
取り出すときevalすんの?しかも遅いじゃん
serializeの方が安全で高速
たかだか1000件 マイクロ秒単位の誤差などどうでもいい 好きにしろ
parse error syntax $endうんたらわけわかんね
凡ミスするやつはIDE使え
aptanastudioとPDT2がうめえwwww
僕の大好きなあぷてぃーなちゃんがこんなに進化するとは思わなかったw dw8から乗り換えるわwwwwwwwww
PHPEclipse使ってるけどAptanaって使いやすいのか?
492 :
nobodyさん :2009/02/26(木) 12:54:45 ID:hOiLi7h5
先生方! 文字列を1byteじゃなく1bitを取得することってできますか?
できる
aptanaは単品よりaptanastudioのほうがいいよ
>>485 はぁ?
試したのかよ。$data = 付けて保存したら、includeするだけだぜ。
unserializeの方が遅いよ。
496 :
nobodyさん :2009/02/26(木) 14:12:33 ID:YD+Z+nCM
サーバー全体で404エラー画面をhtaccessで設定しています。 しかしPHP内で header("Not Found", true, 404); と書くと、設定している404エラー画面ではなくブラウザの404エラー画面が出ます。 設定しているエラー画面を表示させるにはどう書けばいいでしょうか?
location
locationとかMETAタグだと、ブラウザに表示されるアドレスが 404エラーのファイルになりませんか?
>>498 それならinclude(error.html);exit();で良いじゃないか
>>496 そのheaderを出した後、自前のエラー画面をreadして出力。
ブラウザは404ヘッダーと404用のソースを受け取る
>>496 その問題に関係あるか分からないけど
IEだと512バイト?以下のエラーファイルは無視して
自前のエラーファイル使うらしい。
インターネットオプションの詳細設定から変えられるけど。
>>499-
>>501 まとめて失礼します。
たくさん教えてくださってありがとうございます。
無事できるようになりました。
>>501 それは知りませんでした。デザイン頑張ります。
503 :
nobodyさん :2009/02/26(木) 15:32:12 ID:6qh6YAhf
2人以上のn人を3人グループと2人グループに分け、それぞれのグループ数を出すにはどうしたら良いですか? なるべく3人グループができるようにします 関数にて処理したいと思います よろしくおねがいします function get_group (n) { /* 計算するところ */ return array('3' => ? ,'2' => ?); } n=2の場合 array('3' => 0 ,'2' => 1); n=7の場合 array('3' => 1 ,'2' => 2); n=9の場合 array('3' => 3 ,'2' => 0); n=11の場合 array('3' => 3 ,'2' => 1);
>>503 $a = 10 % 3;
10を3で割った余りが$aに入る($a → 1)
これ使え
nを3で割って余りが1か2で判断すればいいじゃん
switch mod
余りが1だったらどうすればいいの?
>>507 1組減らしたら何人余るか計算してみろよ
509 :
nobodyさん :2009/02/26(木) 16:03:26 ID:6qh6YAhf
すっきりしたコードではないですが、一応できましたのでのせときます ありがとうございました function get_group ($n) { if((int)$n < 2) return false; $total = (int)$n; $sannin = 0; $futari = 0; $amari = $total % 3; if($amari === 1) { $sannin = floor(($total / 3)) - 1; } else { $sannin = floor($total / 3); } $futari = ($total - ($sannin * 3)) / 2; return array('3' => $sannin ,'2' => $futari); }
なにそのきめえコードwwww
いま書いてやるから待ってろ
なるべく三人グループにしたいってのになんで n=7のときは2人グループが二つできるの?
一人ぼっちになった奴の気持ちになってみろ
function group($n) { switch ($n) { case 1 : return false; case 2 : return array(0, 1); case 3 : return array(1, 0); case 4 : return array(0, 2); case 5 : return array(1, 1); case 6 : return array(2, 0); case 7 : return array(2, 1); ・・・略 } }
if (is_numeric($n = $_SERVER['QUERY_STRING'])) getGroup($n); print_r(getGroup($n)); function getGroup($n) {$a=floor($n/3);$b=fmod($n,3);switch ($b) {case 0:return array('3'=>$a,'2'=>0);break;case 1:return array('3'=>$a-1,'2'=>2);break;case 2:return array('3'=>$a,'2'=>1);break;}}
GMP関数使えばもうちょっと行数減らせるけど鯖によるから今回は使わなかった
break;はreturnで返してるから書かなくてもいいけどね あとは好きにしろ
>>515 横からだけど、fmodなんて関数あったのか
しらんかったわw
今思い出したけど、switch構文の中にreturnってなんか気持ち悪いと思うのは俺だけなんだろうか ループ処理内にreturnもなんか違和感を感じる
>>519 俺もなんか気持ち悪い。
でも、やってる人も多いんだよね。
まぁ、好き嫌いのレベルなのんだよね。たぶん。
プログラミングっつうのはなシンプルでメンテナンスしやすいように見やすく書くことを頭に置いておくんだ
プログラムを複雑怪奇にしてオレしかメンテできないようにすれば、なかなかクビにならない。
>>523 そういって辞めたやつがいるんだがまじでしばきたい
あひゃひゃ。 もしかして、まじでオレだったりしてな。
>>524 それは、そういう奴をさっさと見抜いてクビにできなかった上司の責任。
ふつうに考えればよいコードを書く方がクビになりにくいのは自明だから、
それができなくて辞めた奴を憎んでもしょうがないべ
逆に、良いコード書いても評価されないならとっとと辞めたほうがよさげ
良いコード書くだけで評価される職場なんて終わってる
貴様らこの長くてコピペくさいコードを改良できるかな? $fp=fopen($filename1,"a"); flock($fp,LOCK_EX); fwrite($fp,$str) fclose($fp); $fp=fopen($filename2,"w"); flock($fp,LOCK_EX); fwrite($fp,$str) fclose($fp);
>>528 既にそれの簡易版コードあるじゃん・・・
コードゴルフしたい奴もコーディングスタイルについて語りたい奴もスレチだ 雑談でネタ振りしてろカス
>>528 function ahoaho( $filename, $filemode, $str ){
$fp=fopen($filename, $filemode); flock($fp,LOCK_EX); fwrite($fp,$str) fclose($fp);
}
ahoaho( $filename1, "a", $str1 );
ahoaho( $filename2, "w", $str2 );
継承の質問なんですが
継承の質問なんですが継承で子、孫と作っていくと class sql { function getUser() {} } class subsql extends sql { function getParam(){} } class sub2sql extends subsql
sqlしか必要がないファイル、sql,subsqlが必要なファイル、全部必要なファイル この3つからgetUserを呼び出す際 呼び出しを統一のクラスで管理したいのですがsql,subsql,sub2sqlとクラス名が違うためできません。 クラスを上書きみたいなことはできないのでしょうか? subsqlではなくsqlの追加ファンクションとして別ファイルで定義したいのです 途中で送信してしまい変な分になってます。ごめんなさい
>>533-535 おまえさん、スレタイが読めないように、クラスのこともわからないんだろうなぁ。
自分が何を聞きたいのかもう一度整理して、ID出してやりなおしてみたらどうよ
>519 俺は逆にswitchの中には極力return以外を置かないようにしてる。 breakも不要になるからbreak忘れ防げるし、全てのcaseが即returnになってれば読みやすい。
542 :
nobodyさん :2009/02/26(木) 23:46:35 ID:lNT2RMd9
>>542 testディレクトリ内で
dirname($_SERVER['SCRIPT_NAME'])
はぁ?言いたいことがよく分からん。 そのURL叩いて何らかのPHPスクリプトが実行されるのなら、__FILE__でそのスクリプトへのパスが取得出来る。 そのパスから親ディレクトリ取ってくる。 これで回答になってる?
547 :
nobodyさん :2009/02/27(金) 01:05:50 ID:JrfelggM
WindowsでAPC使おうと思って、pecl4win.php.netみたらサイトが死んでるんですが、 自分でビルドするしかないんでしょうか? アプリを配布するにあたって、環境はなるべく本家(に近いところ)から落としてもらおうと思ってたんですけど。
548 :
nobodyさん :2009/02/27(金) 02:00:01 ID:GwQuSr9T
APCってシェルからPHPを呼び出した時には効かないんですか?
549 :
547 :2009/02/27(金) 02:42:59 ID:???
プロセス違うし、無理なんじゃない。
試しにスクリプトとして実行しても、ヒット数増えなかったし。(一応古いバージョンのなら手元にバイナリがある)
PHPのコンパイル、ワケがわからん。
試しにPHP本体も作ってみるかと思ったんだが、
http://jp.php.net/manual/ja/install.windows.building.php ≫ the Windows build tools をダウンロードし、それを C:\work に展開する
ってあるのも、いきなりリンク切れしてるし。
apcも、とりあえずVCでコンパイルしようとしたら、VCのヘッダファイルでサイズが0の配列ってエラーが出るし。
どこから手をつけたらいいものやら。
550 :
nobodyさん :2009/02/27(金) 04:12:18 ID:lL0tvrw7
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | ここでボケて!! | |_________| ∧∧ || ( ゚д゚)|| / づΦ
552 :
nobodyさん :2009/02/27(金) 04:18:21 ID:lL0tvrw7
>>551 慎重に選考を進めてまいりましたが、
残念ながらご希望に添えない結果と
なりましたのでご連絡申し上げます。
今後ますますのご健康とご活躍をお祈り申し上げます。
553 :
nobodyさん :2009/02/27(金) 04:24:52 ID:lL0tvrw7
フォームのアクションを別ファイルにして、1.php → 2.php へPOST
<form method=post action=2.php>
そこから元ファイルに飛ばせばフォームデータ消えるから、F5更新しても大丈夫
header("Location:
http://example.com/1.php ");
↑こんなめんどくさいこと
しないとだめなの?
別ファイルにしなくてもカウントアップしたらheaderで飛ばせばいいだろ HTTPの仕様とブラウザの仕様をもう少し勉強したほうがいい
555 :
nobodyさん :2009/02/27(金) 05:00:02 ID:lL0tvrw7
ちょ、、、HP303とか押しすぎ
天才チンパンジーアイちゃんの今日のIDは lL0tvrw7 か
558 :
nobodyさん :2009/02/27(金) 07:02:13 ID:fK1SPmyA
計算量が多く重いバッチ処理があったので、 pcntl_forkを使いフォークして複数プロセスにタスクを分配させました。 memcacheを共有メモリに使った簡易的なmap-reduceです。 プロセスを増やすほど速くなると思ったのですが、 個々のタスクの速度が落ちるだけで、 合計時間が縮まりません。 フォークを高速化目的に使うのは間違っているのでしょうか?
559 :
nobodyさん :2009/02/27(金) 08:55:05 ID:YTPFMmJE
pdoだとローを$row[0]["TEST"]みたいにして取り出せるのに mysql_fetch_arrayでやると$row[0]["TEST"]でデータが出てこないというか [1]["TEST"]なら1、[2]["TEST"]なら2、・・・な値が出てくるんだけどそういうもんなの?・・
>558 本命はmemcache。memcacheは相当遅いからボトルネックになってもおかしくない。 文字列と数値以外はシリアライズされるからその分重くなる。 単純にタスクが小さすぎるか、多すぎる可能性もある。タスクが小さすぎると、タスク分割/統合のオーバーヘッドが、分割による高速化を超える。 デュアルコアなら2分割以上の分割は無駄。たとえ100分割しても、働く人間が2人なら2つずつしか捌けん。 googleが速いのは、物理的に大量のサーバーに処理を分割してるのと、オーバーヘッドになるタスクの分割/統合自体も分散処理してるから。 いっぺんボトルネックがどこか測定してみ。 xdebugかzend debuggerを使えば、どの処理が時間を食っているか見られる。
>>545 他の2名はわかってるから言いたいことがわからないのはおまえだけだよ
>>558 >>561 フォークを高速化目的に使うのは基本的には間違いじゃね?
map reduceが目的にしているのは、大量のリソースを使えるという利点。
リソースの余剰がない1サーバー内でフォークしても重くなるだけ。
むしろ、高速化したいならフォークしてしまう処理を減らしたほうがいい。
フォークして高速化できるのはウェブとかスパムとかクライアント側との通信にディレイが発生する ときぐらいだろ 待ち状態(サーバ側負荷ほとんど無し)のあいだに別プロセスで並行して通信できる利点
565 :
nobodyさん :2009/02/27(金) 13:02:18 ID: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の追加ファンクションとして別ファイルで定義したいのです 途中で送信してしまい変な分になってます。ごめんなさい
なんかよくわからんが、ポリモーフィズム使えばいいんじゃねーの? $sql_obj = getSqlObj();// 必要に応じて sql,subsql,sub2sqlのインスタンスを返すメソッドね。 $sql_obj->getUser();
567 :
nobodyさん :2009/02/27(金) 13:13:08 ID:/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; }
568 :
nobodyさん :2009/02/27(金) 13:14:25 ID:laCA4GxD
utf8 + LFでfopenしたファイルに"(ダブルクウォテーション)を fwriteすると、なぜか「\"」とバックスラッシュが入ってしまいます。 なぜでしょうか?
>>568 magic_quotes_runtimeの設定ははどうなっとるかのぉ
>>569 原因magic_quotes_gpcでした。ありがとうございました。
>>567 php4か5で意味が変わるからバージョンぐらい記入しようぜ
574 :
nobodyさん :2009/02/27(金) 15:39:39 ID:/lC62y00
IPアドレスが割り当てられてる全てのホスト名を取得する方法ってありますか? 例えば「61.195.146.164」と入力した場合、 「jp.php.net」「pobox.packetbusiness.com」などが返ってくるイメージです。 gethostbyaddr('61.194.146.164')だと 「pobox.packetbusiness.com」しか返って来ませんでした。
日本語でおk
>>574 それ、できたらすごい便利だよね。
おれのhostsもあいつのhostsも全部解決できるわけだろ?
577 :
574 :2009/02/27(金) 15:55:56 ID:/lC62y00
>>575 すみません、言い直します。
IPアドレスからホスト名を取得する方法が
gethostbyaddr以外にありますでしょうか?
>>577 streamつかったり、systemを使えばできるだろうけど、結果は一緒だよ。
DNS理解してる?
>>553 WebはPOSTに弱いよな。PHPに限らず。
意味不明
581 :
574 :2009/02/27(金) 16:57:55 ID:???
>>578 逆引きが一意であることと、正引きが複数設定可能なことくらいです。
DNSサーバに「このIPアドレスに正引きされるホスト名を教えてくれ」っていう
問い合わせはできないってことでOKですか?
>>581 どのDNSサーバーに問い合わせるつもり?
gethostbyaddr('61.194.146.164')だと 「pobox.packetbusiness.com」しか返って来ませんでした。 あたりまえだろ
ああ、つまりそのIPで取得してるドメインを全て返したいってことじゃね?
586 :
574 :2009/02/27(金) 18:26:24 ID:???
>>585 ありがとうございます、自分の間違えが分かりました。
>>584 はい、そのとおりです。
SPAMメールの処理周りでそのようなことが出来るかどうか
疑問に思ったので質問いたしました。
---
DNSの初歩レベルの質問になってしまい失礼しました。
ありがとうございました。
587 :
nobodyさん :2009/02/27(金) 20:20:35 ID:0buNRA0u
オブジェクトの参照を切るにはどうすればいいんだ? $obj2=$obj1; だと$obj1の参照になってしまうらしい。 $obj2=clone $obj1; ってやっても、参照が渡されてしまった。助けて欲しい。
>>587 おまえ、それわざとだろ。
copy on writeは知ってるよな?
>>587 PHPのバージョンによるので答えられません
バージョンを書きましょう
590 :
nobodyさん :2009/02/27(金) 21:56:28 ID: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" }
ファイルはUTF-8(BOM付)で保存してます。 $txtをそおまま表示しようとすると$とか矢印みたいなのが混ざったような文字化けで表示され、 mb_convert_encoding($txt,'UTF-8','JIS')するときちんと元に戻ります。 4.4.9とXAMPPの5.2.8で確認。 これはどうすれば?
592 :
590 :2009/02/27(金) 22:00:28 ID:kc9E5JKd
場所間違った あとvar_dumpの行間違えました。 var_dump($encoding) です
593 :
nobodyさん :2009/02/27(金) 22:09:50 ID:DvviDUUZ
PHP5の普及率ってどのくらいですかね?
596 :
nobodyさん :2009/02/28(土) 02:50:55 ID:1Mc3y2O0
正規表現系の関数が糞重いことに気づきました。 正規表現ほど高度でない、 ある程度融通が利く文字列検索をしたいのですが(具体的には文字列から携帯絵文字を探す) PHPで書くと、正規表現より遅かったり速かったりです。 Cで書かれていれば確実に正規表現より速くなるのではと思うのですが、 そういうextensionありますか?
str_replaceでもかければ?
正規表現使ったくらいで糞重くなるマシンならまずハード全取り替えだろ
599 :
nobodyさん :2009/02/28(土) 09:48:19 ID:4FEE2no0
文字列を流し込むとパスワードの安全性の目安を返してくれる ライブラリかサンプルコードとかってありますか?
パスワードをググって結果が少なければOK
どのようなパスワードが安全かどのようなパスワードが危険かを考えればOK パスワードは4文字以上10文字以内にしてくださいということにして 4文字→低 5〜7文字→単一種類の文字(数字or小文字or大文字)での構成は低 2種の文字しか混ざってない場合も低 3種の文字が混ざってる場合は中 8〜10文字→単一種類または2種類の文字での構成は中 3種の文字が混ざってる場合は高 例外として 記号などの特殊文字が混ざってる場合は5文字からでも高 全て同じ文字だと10文字でも低 とまぁこんな仕様を考えて実装すればいいんじゃないでしょうか
>>602 こんな関数あるのかーと思ったが辞書用意しないといかんのね
a
aa
aaa
aaaa
b
bb
bbb
bbbb
こんなん用意してたらキリがないよな
テキストファイルだけをアップロードできるphpのアップローダを設置しようと思い
フリーで配布されているこちらのアップローダを見つけました。
ttp://php.eweb-design.com/1502_up.html 遣ってみたところとてもシンプルで気に入ったのですがphpに関しては
素人で分からないことだらけです。
そこで質問なのですが、アップロードできるファイルを .txt だけに限定する方法
を教えていただけないでしょうか?
それと容量オーバーのときだけに表示されるコメントも付けていただければ幸いです。
現在は1Mまでの制限でそれを超えると「アップロード失敗」とだけ表示されるようです。
次レスにソース部分を明記します。よろしくお願いします。
$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() { ?>
606 :
nobodyさん :2009/02/28(土) 10:52:03 ID:tCRdHOmU
607 :
nobodyさん :2009/02/28(土) 10:52:36 ID:4FEE2no0
>>601 ,602,603
自力で作ってみます
ありがとうございましたー!
>>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 {
拡張子が.txtってだけでテキストファイル扱いするのかよwwwwwwwwwww
611 :
nobodyさん :2009/02/28(土) 11:11:33 ID:tCRdHOmU
>>608 出来ました!ありがとうございます!
もうひとつだけよろしいでしょうか?
>>605 のソースだと何バイトのファイルであったかアップロード後に表示されるのですが、
何行あるのかを表示させる場合はどのようにしたらよいのでしょうか?
つまり、アップロード後にファイル名、バイト数、行数を表示したいのです。
よろしくお願いします。
>>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>
未検証だけどたぶん動く
613 :
nobodyさん :2009/02/28(土) 11:23:55 ID:O2VO0P3W
画像ファイルpng、gif、jpg(jpeg)の3つだけアップロードを許可するようにしたいのですが 拡張子をチェックはします それとバイナリを見て判断したいと思うのですが、これは完ぺきなチェックができないみたいで困ってます。 どのようなチェックを取り入れたらよろしいでしょうか?
615 :
nobodyさん :2009/02/28(土) 11:49:31 ID:l4IqP0fM
pear::authとかって まだ使われてるの?
616 :
nobodyさん :2009/02/28(土) 12:11:52 ID: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 {
?>
>>610 何が言いたいんだ?
バイナリデータじゃあるまいし
>>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がアップできないのはおまえさんの仕様だぞ
621 :
nobodyさん :2009/02/28(土) 12:27:20 ID:tCRdHOmU
>>619 ありがとうございました。バッチリでした!
622 :
nobodyさん :2009/02/28(土) 13:06:03 ID:B+Uhif0K
セキュリティに関してですが 利用者が入力するところはなし、強いて言えばリンクが○○.php?a=○&b=○の形なのでそこをいじることはできますが、 値は1桁の数字のみ通るようにしてかつそれを直接クエリに使うわけではなくswichでWHERE句用の値を選ぶようにしています。 検索もなし、セッションやクッキーは使いません。 DBはSQLiteなので.htaccessで見えないように。 エラー表示も.htaccessでphp_flag display_errors Offに。 こんな感じにしたとして、鯖自体がハッキングされたとかはのぞいてphp(html)やDBの改竄は行われる可能性はありますか?
623 :
nobodyさん :2009/02/28(土) 13:25:32 ID:iUikJcgx
教えてください。ソケットをあけて、いま届いているデータをすべて受信するにはどうすれば良いのでしょうか。 $buf=socket_read($out,2048); で読むことはできるのですが、データが2048byteに足りていないとここで処理がブロックされてしまい、 データが2048byteの倍数でないと必ず最後でとまってしまいます。 長さを1にすれば数万回の無限ループみたいになって処理が遅いし、 長さはともかくいま届いているデータを全て読む、ブロックしない読み込み方法が見当たらなかったです。 socket_recvというメソッドもあるみたいですが、ドキュメントもまだないし これがない時代も当然できていたはずのことなので、きっとreadで何とかする方法があるんだと思いますが…。
>622 悪魔の質問だな。 脆弱性の存在を示す事は可能だが、脆弱性が存在しない事を証明するのは至難の業。 セキュリティ対策の多くが「入力時点で全ての値を検証」「出力時点で全てエスケープ」のようにシステマチックなのはその辺に理由がある。 書かれている部分は安全に思える。ツボも押さえているし、他の部分で変な事をしない限り問題ないだろう。 強いて言うなら「入力する場所はなし」という言い方が若干不安かな。 hiddenだろうがなんだろうが全ての値は自由に改竄される、という前提でコーディングする必要がある。
625 :
nobodyさん :2009/02/28(土) 13:47:32 ID:Ho2Fi0s+
マジな質問なんですが自宅サーバーでPHP動かしてます。 今まではサーバーとルータだけでやっていたのですが今回ハブを使いPCをもう一台LAN内に追加しました。 そしたら自分のサイトの表示が極めて遅くなり ページを切り替える毎に3秒位かかります。 LAN内だけかと思いネットカフェで試しましたがやっぱり遅かったのです。 ちなみにサーバーからLANケーブルを抜くと今まで通り高速で表示されます。 そのため初めはLANの設定の問題だと思ったのですが 同じサーバー内のPHPを使ったページでも速いページと遅いページがある事に気がつきました。 しかし遅いページがなぜこれ程遅いのかが色々いじってみたのですが分かりません。 おそらくPHPの使用関数なんかの問題だと思うのですが。 何で?知ってるやつ教えてや。 逆引きとかはしてないです。
PHP関係ねーし
627 :
nobodyさん :2009/02/28(土) 14:09:33 ID:B+Uhif0K
>>624 ありがとうございます。
>強いて言うなら「入力する場所はなし」という言い方が若干不安かな。
付け加えるとjavascriptも使わないのでプルダウンで選択とかもありません。
ほんとにリンクをクリックしていくぐらいです。
ただまあ思い当たるところは列挙しましたが洩れもあるかもしれませんし、
どちらにしろhtmlspecialchars他一応の処理はしています。
完全にとはいえないが大まかに改竄の入り口は認識できてるとみていいもんでしょうか。
>>622 数値1桁をチェックならまったく問題ない。エスケープ処理もいらない
629 :
nobodyさん :2009/02/28(土) 14:46:51 ID:AWhVh/M4
>>614 ,
>>618 ありがとうございます
getimagesizeでは不十分と認識しておりますので他にチェックする方法をご存知でしたらご教示おねがいします
630 :
613 :2009/02/28(土) 14:47:33 ID:8fTqh/0P
書き込み毎にIDが変わってしまうのですいません
>>629 いや、getimagesizeでいいんだよ
それに加えて、画像の保存先ではスクリプトの実行ができないようにすればおk
>>623 無限ループしてるならsocket_read()の終了条件を間違えてないか疑うな
晒してみ
>>631 getimagesizeは信用できるものじゃない
無知お疲れ
>>627 哲学的な言い方をすると、
不安に思うようなら、脆弱性はあるかもしれないね。
他人に保証を求めるとしたら、それもまた脆弱性のひとつかもしれん。
セッションでもクッキーでも環境変数でも、それぞれがどんな形で渡ってくるか、
そして渡しているか、ブラウザの挙動はどうか、そういう理解度を深めていくしかないんじゃないか?
まあ、実行権限を剥奪しておけば、考えられる最大の被害は「画像が表示されない」程度なわけだし、getimagesizeで問題ないだろ。
>>637 きょうび、CMSのコミッターですらその程度の認識をしてたりするから困るよな。
実行権限をはく奪って、もともとPHPは読み込み権限で動くわけだし。
画像ファイルにスクリプトインジェクションされるってのをケアしないんだろうし。
639 :
625 :2009/02/28(土) 17:18:45 ID:Ho2Fi0s+
>>626 いや、最初はそう思ったのですがどうやらPHPの関数により速度が遅くなってるようなんです。
というのもPHPの関数が少ないページは高速に表示するからです。
ただ、何の関数が遅い原因なのかが割り出せません。
何なのか分かる奴よろしく。
>639 つ xdebug.profiler_enable = 1 あと、Windows機があるならWinCacheGrid
Grindだった
643 :
nobodyさん :2009/02/28(土) 19:42:43 ID:Lzy3hD4E
imagecreate使って画像生成したんだけれど 画像のファイルサイズが0kb になって 保存できない・・・orz ファイル名指定 header("Content-Disposition: attachement; filename=foo.jpg"); をつけても0kb・・・ どうしたらいいんだぁ・・・
ゴガギーン
ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい
>>635-636 「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
>>644 どうみても、636は正しいと思うんだが
ヘッダの一部しか見てないって、それ以外にヘッダで判別できるところあんの? 拡張子は別にして
ヘッダーの一部しか見てないのは事実だ。 そこから、 > それ以外にヘッダで判別できるところあんの? っていう展開が意味不明
>>647 つまり、「ヘッダの、一部しか見てない」なのか「ヘッダの一部しか、見てない」なのかってことね
何をいってるんだw
ごめん
>>638 は分かりにくかったわ
ヘッダの一部しか見てない って、他にも判別できる部分があるようにとれない?
ヘッダの(他にも判別するところはあるけど)一部しか見てない なのか
ヘッダの一部(で)しか見てない なのかってことね
とりあえずgetimagesizeは完ぺきじゃないってこと
>>640 をよく読め
>このような攻撃は、アップロードするファイルのファイル名をそのまま(この例では、.php)にしているサイトでのみ有効となるのだが、そのようなサイトは実際多く存在する。 これで回避できるとも読めるわけだが、どうなんだろう。
635と636は自分でバイナリエディタでも開いて画像にスクリプト埋め込んでこい
>>655 ここの連中じゃ画像に埋め込むこともできなそうだなw
そもそもファイルを区別する必要性がわからねえ 最終的にブラウザで表示できるんだから何でもいいだろ
画像に埋め込んだスクリプトが反応するような糞ブラウザはIEぐらいだろ
660 :
nobodyさん :2009/03/01(日) 02:35:03 ID:eUPI6W90
mb_splitで正規表現にデミリタいらないのってバグですか?
661 :
nobodyさん :2009/03/01(日) 03:05:47 ID:ircjQ+OX
パーミッションの問題なんだけど、 txtファイルや、htmlファイルは、 ユーザーにrを渡さないと ブラウザで閲覧したときに見れないんだけど、 .phpファイルは、なぜか ユーザーに渡す権限が0でも ブラウザでアクセスしたときに、 動作してしまうんだけど、これってなんで?
>>661 module版かcgi版かで若干答えが変わるかなぁ。。
ユーザって誰のこと??
663 :
nobodyさん :2009/03/01(日) 03:47:49 ID:ircjQ+OX
>>662 オーナー | グループ | 末端ユーザー
こういう概念です
664 :
nobodyさん :2009/03/01(日) 03:50:25 ID:ircjQ+OX
>>662 「CGIに関しては純粋にSuExecでの動作」
「CGI版をラッパーを使用し所有者の権限にて動作させる」
と書いてあります。
>>664 答えが書いてあるよ〜。
Webサーバの一番基本的な動きは分かってるかな?
ブラウザが「このファイルくれ!」ってWebサーバにいうと
Webサーバは自分の中から探して、読みこんで、「処理して」、結果をブラウザに返す。
このときWebサーバもユーザとして動いてる。
こんだけ。
666 :
nobodyさん :2009/03/01(日) 06:55:07 ID:ircjQ+OX
667 :
nobodyさん :2009/03/01(日) 06:59:03 ID:ircjQ+OX
それから認証の実装で pear::authを使うことの是非についても 意見を述べてもらえますか? pearのページ見たら、認証のカテゴリだけで7つも モジュールあるじゃないですか。
どうやら 質問 の人な気がするぜ
そんなの見りゃわかるよ
------------ここまで自演でした
672 :
nobodyさん :2009/03/01(日) 14:46:48 ID:lFCp+aHu
PHPの書き方で<?=$msg?>のような書き方が可能/不可能に設定できる項目教えてください (ググろうにも「<?=?>」のようなワードでは検索できなくて・・・)
673 :
nobodyさん :2009/03/01(日) 14:50:54 ID:lFCp+aHu
short_open_tagでした、事故解決しました
674 :
nobodyさん :2009/03/01(日) 17:35:53 ID:Jolk/1HK
phpを使いテキストの各行にある文字列(例えばここでは"hogehoge") が含まれているかどうかを調べるにはどのようにするのがよいのでしょうか?
file foreach preg_match
hogehogeがあるかどうかだけならpreg_matchはおおげさだな strstrあたりでいいと思う
preg_matchがあればわざわざfileとforeachを組み合さなくてもできます
678 :
nobodyさん :2009/03/01(日) 17:46:03 ID:Jolk/1HK
どっちなんだろう・・・
>>678 史ね
少しは与えられた材料で自分で考えろ
文字列探索といったら正規表現しか知らない奴って何なの?バカなの?
681 :
nobodyさん :2009/03/01(日) 18:02:38 ID:qwqgUI7e
>>677 の言ってることはパターン修飾子か?
$list = file("hoge.txt");
for ($i = 0; $i < count($list); $i++) {
if (strpos($list[$i]), "hogehoge") {
echo $i . "行目にhogehogeが見つかりました<br>\n";
}
}
これと同じことをできるのなら俺もぜひ教えてもらいたい
682 :
681 :2009/03/01(日) 18:04:25 ID:???
あ、ごめん $i行目じゃなくて$i+1か
if (strpos($list[$i]), "hogehoge") { なんじゃこりゃ?
>>681 おれが言ってるpreg_matchがでてこないんだがアンカーミスかね
685 :
681 :2009/03/01(日) 18:38:49 ID:???
$list = file("hoge.txt"); for ($i = 0; $i < count($list); $i++) { if (preg_match("/hogehoge/", $list[$i])) { echo $i+1 . "行目にhogehogeが見つかりました<br>\n"; } } それじゃこれで
>>685 動作には問題ないけど
for内にcount($list)を入れると、ループ毎にcountが実行されるので、
$cnt = count($list);
$i < $cnt
みたいにするといいよー
>>685 preg_matchじゃだめだった
無駄にfileとforeachしなくてもpreg_match_all使えば一行で住む
何行目に現れるかもわかる?
わかる
690 :
nobodyさん :2009/03/01(日) 22:47:16 ID:Jolk/1HK
perlあがりでどうもphpはよく分からんのだが datファイル(数字10桁)かどうかを調べるにはどうすりゃいいの? これだとダメポ。 $datfile = 1234567890.dat; $number = str_replace(".dat", "", $datfile); if ($number != \d{10}){ print "2chのdatじゃない"; } else { print "おk"; }
preg_match
>>690 $datfile = "1234567890.dat";
if (preg_match("/^\d{10}\.dat$/", $datfile)) echo "おk";
else "2chのdatじゃない";
693 :
nobodyさん :2009/03/01(日) 22:59:06 ID:Jolk/1HK
print Thx
正規表現(笑)
695 :
nobodyさん :2009/03/01(日) 23:16:30 ID:A3j42u8W
まとめてファイルをアップロードする仕組みを作りたいのですが、 PHPにZIPを解凍する関数ってあるのでしょうか? やっぱり、フォームのfile要素をいくつも用意して 1つずつ選択して送信する方法しかないのでしょうか?
peclとかpearとか探せば色々あるよ zipだけでもArchiveTarとかArchiveZipとかpecl zipとか色々
標準クラスであるだろうが
ArchiveTarは違ったわ
>>697 それってzip関数のことでしょ?
それはpecl
標準であるじゃん 暗号化ZIPには対応してないようだけど
そうだっけ?すまん
ID:Jolk/1HK 回答もらったらお礼ぐらい書けよksg
705 :
703 :2009/03/02(月) 00:14:22 ID:???
>>704 いんや、
>>692 なんだけどね
別にお礼を期待して回答しているわけではないから、そんなのはどうだっていいよ
どうだっていいなら何で書くの?
アマゾンの文章を取ってきて、 一部の文を変更するプロキシみたいなの 作りたいんだけど、できる? 「この商品を買った人はこんな商品も買っています」 ↓これを 「この商品を買ってしまったかわいそうな人はこんな商品も買っています」 みたいに変更して表示したいんだけど。 チラ見だと気がつかないって言う。 よーく見ると違いがわかるっていう。
709 :
nobodyさん :2009/03/02(月) 06:36:54 ID:xA87Qrbu
指定したディレクトリ内から、 指定したMD5(またはSHA-1)の値を持つファイルを取得したいのですが、 なにかよい方法はないでしょうか? やはり、一度全部取得して、 ひとつひとつ確認する必要があるのでしょうか? よろしくお願いします。
710 :
nobodyさん :2009/03/02(月) 08:01:04 ID:Kxwrby6q
$files = scandir("./doc"); $i = 2; while($files[$i] != null ): $files_end = $i; $i++; endwhile; と、docフォルダに入っているファイル数をしらべるスクリプトですが、 while($files[$i] != null ): の行で Notice: Undefined offset: 5 と、Noticeが出て来ます。 この、Noticeを消すにはどうしたらいいでしょうか?
classの使いどころがさっぱりわからん 使えたらかっこいいんだろうなと思って 使いたい使いたいと思ってるけど結局使わないまま終わってしまう
>>712 すごい、カンタンなところからはじめれば?
>>712 変数名をclassにすればいいよ。
$class1 $class2 $class3
>>710 OUT => while($files[$i] != null ):
IN => while( isset($files[$i]) ):
>>712 無理して使わなくていいよ
所詮プログラミング手法の1つに過ぎない
世の中には全てオブジェクトにしないと扱うことができない
言語も存在するがPHPはそうではない
使いどころを意識してるうちは概念も理解できないはずだ
オブジェクト指向が何かとかは考えないで
まずはオブジェクトにしないとプログラムが動かないと思ってはじめてみるといい
クラスを使う利点を教えてください
人数が多い場合クラス分けしないと学年がばらばらごちゃごちゃになるじゃん
719 :
nobodyさん :2009/03/02(月) 13:33:46 ID:qotKuiB9
php5で動作するクラスを勉強で作ってます class hello { function asa(){$word="おはよう";return $word;} function hiru(){$word="こんにちは";return $word;} function yoru(){$word="こんばんは";return $word;} } これを呼び出して挨拶を表示するときにこのように書きました $obj=new hello; echo $obj->asa; クラスの使い方としてこのような用途で使用するのは正しいでしょうか?
720 :
nobodyさん :2009/03/02(月) 13:47:22 ID:yL43OBtl
MVCでアプリケーションを組もうとしています。 やはり、どうしてもクラス数が膨大になり、1ファイル1クラスにするので、 読み込むファイル数も膨大になってくるのですが、余程のことがない限り速度は気にするほど変わらないと考えても構いませんか?
おk
ウェブの場合クラス分けしてもそんなに膨大にはならんと思うけどな
723 :
nobodyさん :2009/03/02(月) 14:02:29 ID:Kxwrby6q
>>715 おお、ありがとうございます。 noticeが消えました!!
>>719 class hello {
function greeting(){ return $this->word; }
}
class asa extends hello {
var $word = "おはよう";
}
class hiru extends hello {
var $word = "こんにちは";
}
$obj = new asa(); echo $obj->greeting();
$obj = new hiru(); echo $obj->greeting();
こういうほうがより現実的。挙動を変えたければgreetingだけをいじればよいので。
$objを何度も作るのってアリなの?
726 :
nobodyさん :2009/03/02(月) 14:29:02 ID:Be8+CZVl
PDOでbindParamするときに、どうしても PDO::PARAM_STRとPDO::PARAM_INTを同じbindで使いたくて PDO::PARAM_STR|PDO::PARAM_INTてやってみたのですが、 こちらでエスケープしたエラーになってしまいます。 int、str片方づつならデータが取得できるのですが・・ どのような手段でできますでしょうか よろしくお願いします
727 :
nobodyさん :2009/03/02(月) 14:53:55 ID:yL43OBtl
>>721-722 勉強がてらのものなので、クラス分けなどが、まだうまくできてないのかもしれません。
ありがとうございました
728 :
nobodyさん :2009/03/02(月) 14:55:08 ID:v7Ja9zye
フォーム内のラジオボタンがあります
<form>
<input type="radio" name="s" value="0" />ページ1
<input type="radio" name="s" value="1" />ページ2
<input type="radio" name="s" value="2" />ページ3
</form>
http://www.example/?s=1でアクセスしてきたとき 、ページ2のラジオボタンを選択済みにさせたいのですが
どのように書けばよろしいのでしょうか?
if(sが1だったら){ echo 選択済み }
<input type="radio" name="s" value="0" <?if($_REQUEST["s"]=="0"){ echo "checked"; }?> />ページ1 <input type="radio" name="s" value="1" <?if($_REQUEST["s"]=="1"){ echo "checked"; }?> />ページ2 <input type="radio" name="s" value="2" <?if($_REQUEST["s"]=="2"){ echo "checked"; }?> />ページ3
731 :
nobodyさん :2009/03/02(月) 15:02:03 ID:v7Ja9zye
やっぱりそれしかないですよね、わかりました ありがとうございます
732 :
nobodyさん :2009/03/02(月) 15:13:43 ID:Hva8cjMK
mb_convert_encodingでUTF-8の文字をSJISに変換した時、 SJISに対応する文字がない時はU+XXXXという文字列に変換されますが、 このXXXXはどういう法則に従って算出されているのでしょうか?
734 :
nobodyさん :2009/03/02(月) 16:54:20 ID:v7Ja9zye
フレームワークで使われるキャッシュファイルについて質問です キャッシュの作り方は以下のやり方でよろしいでしょうか? キャッシュファイルがなかったら→キャッシュファイル作成→出力 キャッシュファイルがあったら→キャッシュファイル読み込み・出力
>>726 PDO::PARAM_STR|PDO::PARAM_INTなんて指定が仮に出来たとして
どんなSQL文になるのが望みなんだ
>>734 ok
後はキャッシュの有効期限やキャッシュの保存手段を設定できるようにしたりと
使いやすいようご自由に
736 :
nobodyさん :2009/03/03(火) 00:38:28 ID:ttnGHap+
KJ、田中ナルミ両氏による『〜スーパーサンプル 活用編 第2版』を見て、ADODBを使ってみました。 サンプルを真似しながら、何とか自分なりに扱えるようにはなったのですが、 見たことの無い記述法に戸惑ってます。 $DB = NewADOConnection($sql_type); $DB->PConnect($server, $user, $password, $dbname); $result = $DB->Execute('SELECT * FROM blog_articles'); echo "<pre>"; print_r($result->GetArray()); echo "</pre>"; ↑このコードの中の、 $result->GetArray(); の部分です。 メソッド(変数); とかだったら普通に見慣れた形なのですが、 変数->メソッド(); となっているようで、よくわかりません。 これはどういう記述なのでしょうか?
クラスメソッドの呼び出し その本に書いてないの?
$DB->PConnectや$DB->Executeには疑問抱かないのか?
$DB = NewADOConnection($sql_type); $DB->PConnect($server, $user, $password, $dbname); も一緒じゃんw var_dump($result);してみ $resultが何なのか分かるから
740 :
736 :2009/03/03(火) 02:10:24 ID:ttnGHap+
$DBもそうですね…。
自分の知っているパターンと勘違いしていたようです。
クラススメソッドの呼び出しというと、例えば
// インスタンスの作成
$obj = new MyDBClass();
// メソッドの呼び出し
$obj->ConnectDB();
// プロパティの呼び出し
var_dump($obj->tables);
みたいなのはわかります。
ですが、ADODBのサンプルコード(
>>736 のような)を見ても、
newを使ってのインスタンスの作成をしているようには見えません。
それにも関わらずアロー演算子を使うのは、どのような場合なのでしょうか?
741 :
736 :2009/03/03(火) 02:15:34 ID:ttnGHap+
$DBをprint_rしてみると ADODB_mysql Object ( [databaseType] => mysql [dataProvider] => mysql // 中略 ) というようになってました。 普通の配列だと Array ( [0] => 20081231 [1] => 20090101 ) のようになると思うんですが、変数の型自体が違うようです。
>>740 NewADOConnection() は関数
関数内でオブジェクトを生成して返していると読んでくれ
>>740-741 配列は関係ない
class Ichiro{
function getResult(){ return "5タコ"; }
}
class Samurai{
function getCaptain(){ return new Ichiro(); }
}
$obj = new Samurai();
$obj2 = $obj->getCaptain();
echo $obj2->getResult(); ←これ
↑こんなんと同じ。つまり
$result = $DB->Execute('SELECT * FROM blog_articles');
でインスタンス(newされたクラス)が返ってきてるんだよ
744 :
736 :2009/03/03(火) 02:46:22 ID:ttnGHap+
>>742 ,743
ありがとうございます!
自分の理解力の無さから、まだ飲み込めてはいませんが、
何となく道筋は見えた気がします。
ゆっくり理解していきたいと思います。
いやこれくらいさっさと理解して次のステップ行けよ
今気づいたんだけどPHPってセミコロンだけ書いてもパースエラーにならないんだね
rubyもpythonも;なんていらないのに phpは旧世代の遺物だよな
それ1行で終わるときだけじゃん
インデントがなくなったらエラーになる言語なんか使わねーよ
751 :
nobodyさん :2009/03/03(火) 11:38:44 ID:e2rK5fJ7
752 :
nobodyさん :2009/03/03(火) 11:41:40 ID:EqwXxIO6
>>751 パーミッションの問題かと思われ
どこの鯖かわからんが、スクリプトに実行権限与えてる?
話変わるけど、PHPのswitchって数値以外にも文字列で判別できるけど皆使ってる?
Javaで数値での判別に慣れてしまったせいか、PHPのswitchって何か違和感あるなぁ
Javaは文字列で判別できないと?
754 :
nobodyさん :2009/03/03(火) 11:46:36 ID:EqwXxIO6
>>753 今ググったらできるのか、知らなかった
Javaの改造してたとき、switchで必ず数値ばかりだったからそういう仕様なのかと思ってた
755 :
751 :2009/03/03(火) 11:47:00 ID:e2rK5fJ7
>>752 パーミッションも正しいと思うんですが、いろいろ変えてみてもエラーのままです。
switchの第二引数に厳格に判断するモード(===)の設定があればよかった
>>756 switch ($hoge) {
case "1":
break;
}
?
switch (true) {
case ($hoge === "1"):
break;
}
758 :
751 :2009/03/03(火) 12:04:16 ID:???
事故解決しました
759 :
709 :2009/03/03(火) 12:17:13 ID:sEyF02be
>>709 なのですが
どなたかお願いできないでしょうか?
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
何かいいアイデアはないでしょうか?
方法1:指定したディレクトリ内のファイルを読み込んで値があるかチェック 方法2:値の入ったファイルを作成した時に、リストに書き込む 以上 あとはない
761 :
709 :2009/03/03(火) 12:26:35 ID:sEyF02be
やはり、MD5などをキーにして検索することはできないようですね。 ファイル名とMD5の値をデータベースに格納(方法2?)して 管理することにします。 ありがとうございました。
ファイル名をmd5にすりゃ簡単じゃん
まあ方法3もあるけど拡張しないといけないから書くのやめとく
>>762 ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
ファイル名をMD5(SHA-1)にしてしまう、という方法以外で、
md5とMD5だから違うな
766 :
nobodyさん :2009/03/03(火) 14:43:30 ID:qqtWuzTo
リファラ
リファラだけか?
770 :
766 :2009/03/03(火) 15:19:28 ID:???
>>769 Irvineでリファラ使ってダウンしてみたが返信ページはダウンできないよ。
スクリプト荒らし乙
772 :
766 :2009/03/03(火) 15:33:49 ID:???
スクリプト荒らしを防ぐためなんだろこれは? だからそれを真似たいんだよ。
773 :
709 :2009/03/03(火) 15:46:24 ID:sEyF02be
連続して質問失礼します。 MySQLのカラムにPHPでserializeした配列を入れてあるとき、 たとえば、 array( 'id' => 1, 'username' => 'hogehoge', 'password' => 'fugafuga' ); というような配列をシリアライズしたものがuserテーブルのdataカラムに入ってるとして、 dataのなかのusernameがxxxのものを取り出すといったことはできますでしょうか? 正規化しろ!というのはなしでお願いします。 スレ違いでしょうかね;; よろしくお願いします。
775 :
nobodyさん :2009/03/03(火) 16:17:45 ID:tFVuo7P+
>>775 可能ですよ
●対応も普通になんとかなる
>>773 なんでそんなことをしようとするのか分からん
>>775 User-Agentにmonazillaが含まれないと駄目じゃなかったけ?
>>770 ブラウザじゃないから別の理由ではじかれたんじゃない?
http、ttp という文字列が混在しているところで 「ttp」だけを「http」に置換させたいのですが、単純に行うと httpが「hhttp」と置換されてしまいます。 何かいい方法はないでしょうか?
str_replace( "hhttp", "http", str_replace( "ttp", "http", $str ) )
別にhttp;//はつけなくてもページは見れるよ 2ch.net←これブラウザに貼り付けて来いよ
strtr($s, array('http'=>'http', 'ttp'=>'http'));
>>770 それは単にリファラが空になってるだけじゃね?
リファラをルートURLに書き換えてみ
786 :
nobodyさん :2009/03/03(火) 19:38:44 ID:P96ap3nl
php5でクラスの質問です 100円の商品がありまして、、この商品の消費税込みの料金を計算します 書き方は以下のような形でよろしいでしょうか? ここはこうしたほうがいいなどありましたらご教示お願いします class keisan { $tax=1.05; function shouhizei($okane) { return $kekka = $okane * $tax; } } $obj = new keisan; echo $obj->shouhizei(100);
var $tax=1.05;
return $okane * $tax;
789 :
766 :2009/03/03(火) 19:50:41 ID:???
$thisは使わんのか〜い
>>786 書き方うんぬん以前に、まずきちんと動くものを書けるようになるべっきー
>>773 配列をserialize()した結果は文字列だから
'username' => 'hogehoe'
のとこがどう表現されてるかがわかれば
その文字列使って like すれば列は取れるのでわ?
>>730 やや変態ちっくかも知れないけど
$a[ $_REQUEST['s'] ] = 'checked="checked"' ;
<input type="radio" name="s" value="0" <?php echo $a[0] ?> />ページ1
<input type="radio" name="s" value="1" <?php echo $a[1] ?> />ページ2
<input type="radio" name="s" value="2" <?php echo $a[2] ?> />ページ3
なんてしてみたり。
'checked="checked なんじゃこりゃ
なんでそんな無駄な記述なのwww
>>794 うん?
xHTMLで書いてあったから従ったんだけどなんかヘン?
↓
< input .... />
796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:??? なんでそんな無駄な記述なのwww 796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:??? なんでそんな無駄な記述なのwww 796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:??? なんでそんな無駄な記述なのwww 796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:??? なんでそんな無駄な記述なのwww 796 名前:nobodyさん[sage] 投稿日:2009/03/03(火) 22:56:53 ID:??? なんでそんな無駄な記述なのwww
じゃなぜchecked="1"でも"on"でも"yes"でも"true"でもなくてchecked="checked"なのか説明してみろよ
「何故」なのかの説明は無理だな。 どういう経緯でそうなったのかは資料を漁れば可能だろうが。
>>786 それ$tax取れるんか?
class keisan
{
var $tax=1.05;
function shouhizei($okane) {
return $okane * $this->tax;
}
}
にするべき
>>800 なにか勘違いしてる気がするなぁ。。
例えば,optionタグなら
<option selected="selected">
だよ。
>>800 HTML なら checked だけでいいんだけど、XHTML はそういう仕様になってるだけのこと
「なんじゃこりゃ」って単に知らなかっただけでしょ
そんで記述に無駄があると後付けしてくるなんてかっこ悪いよ^^;;;;
>786 動かすだけなら、3行目を>787、5行目はreturn $okane * $this->tax; 勉強中のようなので少しだけ高めのボールで返す。俺ならこういうクラスにする。 class Item{ private $tax_rate = 1.05; private $price; private $name; function __construct($name, $price){ $this->name = $name; $this->price = $price; } function taxedPrice(){ return $this->price * $this->tax_rate; } } $i_phone = new Item('IPhone', 30000); $x_box = new Item('XBOX', 40000); echo $i_phone->taxedPrice(); // 31500 echo $x_box->taxedPrice(); // 42000
checked="on"じゃダメなの?
808 :
786 :2009/03/03(火) 23:42:14 ID:???
たくさん回答いただき助かりました どれも勉強になります ありがとうございます
そろそろ通報されそうだなww
いまクラスについてわかりやすく教えてるサイトがあんまりないから 今ならアフィリエイトつけても許すから誰か講座サイトやってください
811 :
nobodyさん :2009/03/04(水) 00:52:53 ID:TJHoC0pm
リダイレクトのヘッダー吐いて別のサイト(URLも当然別)に飛ばしたいのですが 自分のサーバーからだと別のページに飛んでくれます。 しかし外部のPCからそのページにアクセスすると、別のサイトには飛ばずにうちのサーバーのルートに飛びます。 何でですか?
813 :
nobodyさん :2009/03/04(水) 03:50:16 ID:pWv0VEvt
phpで画面を初期化するにはどうしたらいいですか?
初期化って?
815 :
813 :2009/03/04(水) 03:54:02 ID:pWv0VEvt
BASICと間違えているのでは?
displays_error = offにしてfatal errorを出す
818 :
813 :2009/03/04(水) 04:24:16 ID:pWv0VEvt
エラーを消したいのではなく、printやechoで画面に表示させたものを消したいのです。
ob_*系の出力バッファリングを使う
送った後なら、JSで処理だろうな
821 :
813 :2009/03/04(水) 04:39:39 ID:pWv0VEvt
断る
>>821 具体的にどうしたいのか分からんから答えようがない
<?php /* $hoge = "hoge"; ・・・ ・・・ ・・・ */ ?>
【豆知識】 <?php $a=get_defined_constants(); foreach($a as $a=>$b){ print "[$a] => [$b]"; print "<br>"; } ?> を実行すると大変なことになる
826 :
nobodyさん :2009/03/04(水) 11:21:01 ID:fYg53wem
出力はSJIS、DBはUTF8で運用しています SJIS-winをUTF8に変換した時に W932+とかBAD+とかJIS+とかで始まる文字列になる場合がありますが、 そういう時どう処理していますか?
UTF−8は使わないようにしてる
SJISを使うな
SJIS(笑)
PC版しか開発しないやつらはラクでいいな
携帯(笑)
というか、今時携帯でも見れないサイト開発するとか終わってるな
くだらない煽り合いはどうでもいいです 経験者のみ回答して下さい
encoding_translation
encodeing_mobile
間違えて書き込んだの消すのってどうやってやるか教えてください
┌──-┐ |Back | |space| └──-┘
838 :
nobodyさん :2009/03/04(水) 19:20:19 ID:F5lJueso
php5.2.8使ってます phpはc:\php5にインストールしてます このディレクトリの中にphp.exeがあります コンソールでphpを使って「こんにちは」と表示させたいのですがパースエラーになってしまいます c:\php5>php.exe -r echo "こんにちは"; どのように書き直したらよろしいでしょうか?
c:\php5>php.exe -r "echo \"こんにちは\";"
840 :
838 :2009/03/04(水) 19:35:43 ID:???
できました、ありがとうございます コード自体を囲まないといけないのですね勉強になりました
>>826 UnicodeのPrivate Use Areaと相互変換したり
mbstring.substitute_character = none にしてばっさり切り落としてしまうなり
要求次第
842 :
nobodyさん :2009/03/04(水) 20:55:52 ID:P0bBQCst
phpとajaxの組み合わせのとき、データファイルはJSONが一番簡単ですか?
まあ、JSONでいいんじゃないか?バランス取れてるし。 送出するデータによるし、どっちが得意かにもよる。 例えばJavaScriptの比重を極限まで減らしたいなら、PHPでHTMLまで生成して送りつけたほうが当然JSでやる事が減る。 それと、変更が入った場合の修正の手間だな。 JSONだと、データが追加になったらJSとPHP両方修正が必要になる。 PHPでHTMLを書き出すと、画面表示の変更の際にPHPに手を入れないといけなくなる。
844 :
nobodyさん :2009/03/05(木) 09:51:15 ID:HLFGjq1S
ifから抜ける方法についての質問です。 ifの中で、デバッグ時、意図的に以降のコードを残したいとき等にifから抜けさせる方法はどうしたらいいでしょうか? 具体的には(実際にはbreakが通りませんが)下記のようなコードを書きたいです。 コメントアウトだとながーいif文の時に困りそうなので他の手段を考えています。 if(true){ echo "if no naka fuck ass\n"; break; echo "mada naka my godness\n"; } echo "detayo holy shit\n";
ネタ乙ww 後藤に聞け
>>844 これでいいやん・・・
echo "if no naka fuck ass\n";
if(false){
echo "mada naka my godness\n";
}
echo "detayo holy shit\n";
847 :
844 :2009/03/05(木) 10:17:06 ID:HLFGjq1S
>>846 すみません、コメントアウトだとって書きましたが、ifで囲うのも同様に辛いです><
処理させないのではなくて抜けさせるコードが無いかなぁ、と思ったんです。
条件制御をコメント代わりにすんなや
え?もしかしてただコメントアウトしたいだけとか・・・? /* * コメントアウト */ // コメントアウト # コメントアウト これでいいの?それとも別の何か?
<?php for ($i=1;$i<10;$i++){ print microtime(); print "<br>"; } ?> このコードを実行すると、 0.97075300 1236217379 0.97083700 1236217379 0.97084800 1236217379 0.97085700 1236217379 0.97086500 1236217379 0.97087300 1236217379 0.97088200 1236217379 0.97089000 1236217379 0.97089800 1236217379 ってなるんだけど、結局、1個のループ処理をするのに、 何マイクロ秒かかってるの?
852 :
nobodyさん :2009/03/05(木) 10:50:37 ID:u8y4hmKR
>>851 リファレンス読んだら分かるけど
0.97089800 1236217379
↑秒 ↑現在のPCの時間
半角スペースの前後で意味が違う
質問とは関係はないけど マイクロ秒とミリ秒って世間的に同じ意味なの? 10^-6と10^-3だと思っていたが 原語マニュアル見たりぐぐったりしてみるとどうも混同して扱われてる気がする
<?php $a=0.97075300; $b=0.97083700; $c=$b-$a; $d=sprintf("%.f", $c); print $d; ?> これを実行すると、 0.000084 ってなるんだけど、 0.000084秒 かかった、って理解でいいの?
857 :
nobodyさん :2009/03/05(木) 11:48:05 ID:QryPG+0b
aaa.jpで取得したリファラをaccesslog.phpのGETにでもつけてやったら?
ああすまんaaa.jpのほうは静的htmlなのか どっかの既存スクリプトのソースでも見てみればいいんでないかね
861 :
857 :2009/03/05(木) 11:55:26 ID:???
>>860 WEBサービスなどの既存スクリプトを見ると
<script type="text/javascript" src="アクセス解析のURL">
となっているだけ、それでどうやって取得しているのか予測できないんです。。
いやだからその中身です
>>861 "アクセス解析のURL"をアドレスバーにぶっこめばソース見れるでしょ
解析対象のページに直接貼り付ければおk
865 :
857 :2009/03/05(木) 12:37:02 ID:???
見れました。Javascriptのソースが出ます。 処理を予測すると、 Javascriptでアクセス情報を取得→PHPで受け取って→DBなどに保存 だと思います。 Javascriptでアクセス情報を取得する方法はわかりますが、 PHPに渡す方法がわかりません。AJAXで通信するというのは聞いたことありますが。。 かなり規模が大きくなりそうなので、別の方法を考えます。
なんでソース見れてるのに渡す方法がわからないの?jsが膨大なのか?
867 :
nobodyさん :2009/03/05(木) 12:44:57 ID:Ai8YQiii
http://www.example.com/index.php/test/100 上記でアクセスし$_SERVER['PATH_INFO']を使って以下のようにします
$path1 // testを代入
$path2 //100を代入
1.この値をhtmlに出力するときにhtmlspecialcharsをするべきでしょうか?
2.この値を<a href="get.html?mode=<?php echo $path1;?>"?>のようにソースに書くときもhtmlspecialcharsは必要でしょうか?
3.この値を利用して$file=file($path1.".log") or die("エラー");とするとき、$path1をhtmlspecialcharsをするべきでしょうか?
869 :
nobodyさん :2009/03/05(木) 13:13:08 ID:7kExiJxs
kokugo.logをfile関数で開くとき、以下のようにしました $file=file("kokugo.log"); もしファイルが存在しなかった場合ワーニングになるのですが file関数で開く前にkokugo.logが存在して読み込み可能かチェックしたほうがいいのでしょうか?
>>867 上2つは XSSになりえる。
html..でおk
残り1つは DirectoryTraserval になりえる。
これは html.. じゃ防げない。
パスに関する文字を消す処理を挟むべき。
871 :
870 :2009/03/05(木) 13:18:10 ID:???
すまん、スペルに自信がない。 日本語だと ディレクトリ遡り攻撃ね。
872 :
nobodyさん :2009/03/05(木) 13:39:41 ID:2sUk8Kdm
873 :
867 :2009/03/05(木) 13:40:24 ID:2sUk8Kdm
すいません電話回線なので再接続でID変わってしまいました すみません
最近になって思い始めた ヒアドキュメントはSQLを書くためにあるものじゃないのかと
PEAR::MDB2のexecuteで Call to a member function execute() on a non-object とエラーが出ます。 クエリミスや引数ミスでこのエラーが出るのですが、 実行前にデバッグしたいのですが、クエリを参照する方法がわかりません。 $sth->execute($data);の段階でエラーが出るのですが、 それ以前にダンプしてもクエリが作成されてなく、確認ができません。 何か方法はないでしょうか
ごめんなさい、ID忘れました
877 :
875 :2009/03/05(木) 14:18:27 ID:u8y4hmKR
また忘れました><。
878 :
nobodyさん :2009/03/05(木) 14:35:56 ID:UILw4QgF
定義した関数を$kansuに代入して、呼び出したいところで定義した関数を実行したいのですが $kansu = hello();の時点で実行されてしまいます どのようにしたらよろしいでしょうか? function hello() {return "こんにちは";} $kansu = hello(); 〜他の処理〜 echo $kansu;
>>878 $kansu = function {return "こんにちは";};
$kansu = create_function('', 'return "こんにちは";');
882 :
nobodyさん :2009/03/05(木) 16:47:02 ID:hzERq96A
if (substr($var, 0, 1) != '#') { ... } という、先輩が書いたコードがあるんですけど、これって if ($var[0] != '#') { ... } と等価でしょうか。 なにか違う点がありましたら教えてください。
上は1文字目を取り出してる 下は配列の一つ目を取り出してる 意味は全く違う
$varが数値だと違いは出るけど。 $var = 123; echo substr($var,0,1); #=> 1 echo $var[0]; #=> NULL
885 :
先輩 :2009/03/05(木) 16:57:35 ID:???
$varが文字列なら等価だと思いたいんだろうが、 $varが配列や、ダブルバイトなら使えん。 素人はこれだから困るという先輩の顔が目に浮かぶw
言語仕様がスカラーも配列も連想配列も見た目同じ$始まりだから違和感あるのは解かるよ
デターwwww
mb_substrでないから同じジャン
そろそろ闘技場でも行こうか
まぁ、
$var = array("#", "any");
で、
>>882 は終了してるけどな。
>>882 上記は文字列として比較
下記は配列として比較
893 :
nobodyさん :2009/03/05(木) 18:36:23 ID:0C8jTvwA
正規表現で僕の彼女を探したいのですがどのように書けばよろしいでしょうか? よろしくお願いします
preg_match("/僕の彼女/", $str)
センスねえな
まず、ちんこを出してだな。
898 :
882 :2009/03/05(木) 19:55:19 ID:???
>>883 ここでは$varは配列ではなく文字列です。
>>884 なるほど、$varが文字列以外の場合、substr() だと$varが自動的に文字列に変換されるわけですね。
参考になります。ありがとうございました。
>>885 おこるぐらいならもっとましなコード書いてください。
>>898 だったら、!is_string($var) ならexit()とか入れとけ。
ソースにないもんをエスパーできるかよw
にしたって、strposを使うケースだけどな。$var[0]とか狂ってる。
いや、そこはstrpbrkだろ
>>899 >>897 を理解してる上で使う分には間違っちゃいない
$a = array(); $a[] = 1; は許すのに $a = ''; $a[1] = 'a'; は許さないとか
シンタックスシュガーを利用するしないはコーディング規約で決めるものだ
それにstrpos()は最悪文字列全体を見るまで処理を打ち切らないし
882をバカにできる奴が選ぶ手段じゃない
substrは文字列にしか使えない。 $str[0]は配列にも使える。 従って文字列へのアクセスならば、substrのほうが分かりやすい。 スレが軽く荒れたところを見ても、角括弧が混乱を招きやすい表記だという事は分かるだろ。 ちょっとコードの見た目がスッキリするとか、何ナノ秒処理が早くなるだとか、そんなメリットと引き換えにしていいレベルじゃない。
マヌアルのどっかでstrposはメモリの使用量も小さくオヌヌメなんて書いてあったよな んなもん、strposが最適解だと思うだろjk オライリの詳説正規表現の効率云々みたいに解説本でも欲しいところだなw
>>905 何文字目とか分かってるなら、substrかstrncmpだろ
なんだかんだで、substrが正解ってことだよな。 先輩乙
908 :
nobodyさん :2009/03/05(木) 21:27:44 ID:Zs/6GWof
皆さんは運用環境にxdebug入れておきますか? それともあくまでデバッグのみに使用しますか?
別に入れといたっていいだろ。設定でOFFにするだけなんだし
910 :
nobodyさん :2009/03/05(木) 21:43:17 ID:l6IOt6/c
非常に下らない質問かもしれませんが、ご存知の方がいらっしゃったらお教えください。 配列についてなんですが、 $arr = $this -> fncName($aa); foreach($arr as $key => $val){ $appArr[$key] = $this -> fncName2($val); } return $appArr; で値を返し、ajaxでページに表示させると、何も表示されないのに、 $arr = $this -> fncName($aa); $appArr['配列名'] = ''; foreach($arr as $key => $val){ $appArr[$key] = $this -> fncName2($val); } return $appArr; と、$arr['配列名'] = '';のように初期化した値だけページに反映されるって状況の場合、 一体何が問題なのでしょうか? 当方PHP5.2.9をapache2.2.11を使用しております。 よろしくお願いいたします。
>>910 他人に非常に分かりにくい文章です
できればもう一度整理して質問し直して下さい
>>910 配列初期化してないってこと?
$appArr = array(); の方がいいとは思うけど。
915 :
nobodyさん :2009/03/05(木) 22:42:02 ID:l6IOt6/c
>>914 それしても、入力されません。
具体的に配列のkeyを直接入力しなければ入らないのです。
また、$arr['key']には、htmlの要素がいっぱい入っています
(<span>や<div><form>など)
それが入っていない場合は、普通に表示されます。
なぜなんでしょ?
$arr = $this -> fncName($aa); $appArr = array(); foreach($arr as $key => $val){ $appArr[$key] = $this -> fncName2($val); } return $appArr; ↑でダメならvar_dumpかprint_rしながら $appArrに求めてる値が入ってるか確認してみた方がいいかも。
>>910 $arrが空っぽ または $this->fncName2($val)が値を返さない
というか後者は $this->fncName2($key) じゃなくていいの?
おれさ、人と話してないんだよね このスレだけが俺の生きがいだからかそらないでくれたまえ
じゃあかなりPHPの実力ついてるんじゃないか? 解説サイトとかつくって人呼べばいいじゃん^^
そういやぁ、俺も人と話してないやw
phpの欠点を挙げてるサイトで、「文字列操作系の関数で、似たようなことをするのに引数の順番がバラバラ」みたいなことを書いてるサイトを探してるのですが、知りませんか? もしくは、どの関数のことを言ってるのか想像つきますか?
>>921 in_arrayとstrposとかかな
923 :
nobodyさん :2009/03/06(金) 02:32:04 ID:cF17z8wj
HTML側 <img src="img.php"> PHP側 header("Content-type: image/jpeg"); とだけしました。しかし、IE6で見ると×が表示されて 画像として読み込めていないようです。 これはどうしてでしょうか?
中身が何もないからでは?
925 :
nobodyさん :2009/03/06(金) 02:42:04 ID:cF17z8wj
中身は表示させたくなくて、PHPの処理がしたいので
>>923 のようにしているのですが、
やはりimgタグの方にwidth="1" height="1"と指定するか、
readfileで透明な1ピクセルのファイルを読み込む方法しかないのでしょうか?
Rubyの良さはJavaとPHPの欠点を挙げないと見えてこないからなw
そんな細かいことをあげつらうんだよなぁPHPディス者ってのは
JavaからRubyへって本読んだけど精神的にマイナス思考に追い込んで 自分たちの領域に引き込む宗教本みたいだったぜ どんだけJavaの生産性が低いかの説明ばっかり
>>922 ぐぐったらまさにそれっぽいんですが、関数の中身(文字列の結合、分解)とかにまで触れてた記事は無かったでしょうか?
>>929 宗教本っていうか、
rubyの作者自体がモルモン教徒だから。
(1)rubyをやらせる
↓
(2)モルモンに入信させる
↓
(3)ニュースキン、ニューウェイズをやらせる
こういうビジネスモデルだから。
豆知識 <?php echo exec('notepad.exe'); ?> これを実行するとメモ帳が起動する。
933 :
nobodyさん :2009/03/06(金) 05:40:42 ID:6cUsAerc
and とかでいつも悩むんですが 2ch かつ php かどうかを比較するにはこのようにしていいのでしょうか? if ( $a == '2ch' && $sub != ''php'){ print "2chだけどphpスレではない"; }
>>933 うん
あと、それだったら === を使った方がいいよ
>927 >929 釣れませんね
どう見ても釣れてるようにしか見えない というか事実だから釣りでも何でもないだろうけど
935みたいのがRuby信者か
C言語からPHP移ったら違和感を感じた
古来より適応力のない生物は絶滅する運命 それより、移るってどういうことよ。 おれはCだろうがPHPだろうが、適材適所で使い分けてるけど、 移ったらってことは、Cを捨てるのか、いや捨てられたのか。あ、そか。 きっとPHPも君を捨てるだろう。
ruby真理教必至だな
違和感ってどんなとこに?
C言語からRubyだと違和感どころじゃ済まないけどな
ちょっと前にある会社面接行ったら 面接官が言葉の端々で最近はRubyしか使わないを連呼してたので断ったわ RoRで作っても後に痛い目に遭うのは確実だし あんなメモリ食いまくる仕組みがなんで流行ってるのか理解に苦しむ
何を語るんだ
947 :
nobodyさん :2009/03/06(金) 15:22:09 ID:k96rJD9y
PHP5.2.8です class keisan { function tasizan($a,$b) {return $a+$b;} function hikizan($a,$b) {return $a-$b;} function kakezan($a,$b) {return $a*$b;} function warizan($a,$b) {return $a/$b;} } $obj=new keisan; $tasizan_kekka = $obj->tasizan(10+5); $obj->kakezan($tasizan_kekka,20); tasizan関数で足し算の結果をkakezan関数の$aに使いたいのですが このような書き方でよろしいでしょうか? もっと効率的・スマートな書き方がございましたらご教示お願いいたします。
echo keisan::kakezan(keisan::tasizan(10,5),20));
>>947 計算結果を内部に持っても良いのなら、以下のようなのはどう?
class keisan {
private $result;
function __construct($a) {
$result = $a;
}
function tasizan($b) {
$this->result += $b;
retun $this;
}
function hikizan($b) {
$this->result -= $b;
return $this;
}
function kakezan($b) {
$this->result *= $b;
return $this;
}
function warizan($a,$b) {
$this->result /= $b;
return $this;
}
function kekka {
retun $this->result;
}
}
$obj=new keisan;
$kekka = $obj->tasizan(5)->kakezan(20)->kekka();
>>949 ちょっと違ってた。
$obj=new keisan(10);
$kekka = $obj->tasizan(5)->kakezan(20)->kekka();
951 :
nobodyさん :2009/03/06(金) 16:21:58 ID:ox3YTIPG
モジュールで動作していてセーフモードで動いてるサーバではPHPでディレクトリを作成することができないので FTPでいつも手動でディレクトリを作成してます 一つのディレクトリの中に10000ファイルためる場合、処理が遅くなりますか?
質問もアレだが、答えもアレだな。 メソッドチェーン覚えました〜〜って香ばしい匂いが
>>951 1ディレクトリに10000ファイルも溜めたら、apacheだって重くなるよ。
955 :
nobodyさん :2009/03/06(金) 16:25:07 ID:ox3YTIPG
>>953 ありがとうございます
手動で定期的にファイルを移動させます
apacheだFTPだじゃなくてファイルシステムがどうかだな ext3とかなら確実にアウトだ
だよな いまどきlinuxでext3を教えてる教本があるから困る いまはFATだろが
まさか面白いと思って書いてないよね
>>944 まぁフレームワークに固執する時点で技術レベルわかるけどな
>>960 >>947 のような単純なものならそれがスマートなのは同意するが
質問の意図をとらえてない
>>949 $result = $a;
は
$this->result = a;
だな
一回しか取引が無いような相手に納品するとき 虎の子のライブラリとかどうしてる?暗号化する?
そんなご立派なライブラリをお持ちで?
ライセンスだけ自分にしておけば別に隠す必要ないだろ
以前ここで 「ライセンスで規制されてても二次利用は当たり前、パクって何が悪い?」 ってドキュソがいたなwww
その程度のスクリプトが虎の子扱いなのは、御社の技術力がだな、その
日本語でおk
御社と貴社の使い方も知らないと無知もいいところだな
そんな煽り方とは無知もいいところだな
は・ず・れ 残念でしたw
974 :
nobodyさん :2009/03/07(土) 21:49:03 ID:C+oqmm8h
アクセス解析で自分のサイトからのリファラは省くようにしたいので以下のように書きました
ifで真なら「自分サイト」、偽なら「外部サイト」と表示させたいのですが
結果が逆になってしまいます
どこを直したらよろしいのでしょうか?
$myurl = "
http://localhost ";
$referer = "
http://www.2ch.jp/ ";
#$referer = "
http://localhost/link.php ";
if (preg_match('{^https?://[^('.$myurl.'].*$}', $referer)) {
echo "自分サイト";
} else {
echo "外部サイト";
}
第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ? 975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ? 975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ? 975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ? 975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ? 975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ? 975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ? 975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ? 975 名前:nobodyさん[sage] 投稿日:2009/03/07(土) 21:55:17 ID:??? 第一ひきすうが{}で囲ってあるけどこんなのあったっけ?
>>977 ほー{}も対応してたのか
/でしか使ったことなかったから初めて知った、thx
/意外だと気持ち悪い #とか
strpos('example.co.jp', $_SERVER['HTTP_REFERER']) でいいんじゃないの?
>>974 $mydomein = 'exsample.com';
if(strpos($_SERVER['HTTP_REFERER'],$mydomein)){
echo "自分サイト";
} else {
echo "外部サイト";
}
別にアクセス解析で省くくらいの用途ならそれくらいでいいだろ
人生の初心者に言われたくないわ
To : アクセス元の皆様 Subject : リファラ送出停止のお願いについて お世話になっております。 私のサイトにアクセスする際は、当サイト内を相互移動する場合 リファラを送出しないようにお願い致します。
せっかくPHPなんだから parse_url($_SERVER['HTTP_REFERER']) とかしてからいろいろやった方がなにかと楽じゃない? ちゃんとPHP使ってる?
おれ22才なんだがとりあえずこのスレおれより年上いないみたいだな だから今から敬語使えや ここで上下関係はっきりさせようや
オッサンwww仕事しろ
995 :
nobodyさん :2009/03/08(日) 07:09:54 ID:3tsEMQzx
pearのバージョンを入れ替えたところ2→3(PHPは4.3.11で変動無し) AのDB切断が呼び出しもとのDBインスタンスにも反映されて Cでエラーがでるようになったのですが、 これってpear::db仕様なんでしょうか? 回避方法あれば教えてほしいです。 <?php require_once("DB.php"); // pear::db class postage { function postage() { $db1 = new DBC; $row = $db1->getRow("select * from session limit 1;"); print nl2br(print_r($row,1));// --------------@ print "@<br>\n"; $db1->disconnect(); // --------------A切断 } }
996 :
nobodyさん :2009/03/08(日) 07:11:47 ID:3tsEMQzx
class sess { function sess() { $db2 = new DBC; $row = $db2->getRow("select * from session limit 1;"); print nl2br(print_r($row,1)); // --------------B print "B<br>\n"; $postage = new postage; $row = $db2->getRow("select * from session limit 1;"); print nl2br(print_r($row,1)); // --------------C print "C<br>\n"; $db2->disconnect(); } } $c = new sess;
997 :
nobodyさん :2009/03/08(日) 07:13:48 ID:3tsEMQzx
class DBC { var $connection; function DBC(){ $this->connection = DB::connect("mysql://root:pass@localhost/shop"); } function getRow($sql){ return $this->connection->getRow($sql); } function disconnect(){ $this->connection->disconnect(); } } ?>
1000
参照でインスタンス返してんじゃないの?
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。