【PHP】下らねぇ質問はここに書き込みやがれpart18
1 :
nobodyさん :
2006/03/15(水) 19:18:21 ID:yiOrS10N
2 :
nobodyさん :2006/03/15(水) 19:19:19 ID:yiOrS10N
3 :
nobodyさん :2006/03/15(水) 19:19:50 ID:yiOrS10N
4 :
nobodyさん :2006/03/15(水) 19:20:36 ID:yiOrS10N
・part17よりテンプレ化 extractは極力使わないほうがいいと思います。 例えば、 hoge.php?_SESSION[user_pw]=hogehoge って形で送られてきたとします。これを extract($_GET) しちゃうと、$_SESSION['user_pw']の値が、 "hogehoge"に変更されてしまいます。 もし事前にユーザのパスワードを、$_SESSION['user_pw']に 保持してたとしたら、勝手に書き換えられてしまうことになります。 それを避けるために extract($_GET, EXTR_SKIP) ってやって上書きを避けたとしても、 このままでは変数の初期化を忘れる危険性があります。 extract($_GET, EXTR_PREFIX_ALL, "get") と、接頭辞をつけるのが一番安全な気はしますが、 それなら最初から $hoge = $_GET['hoge']; ってやるのと手間が変わらないと思いますし、可読性も増します。 確かにextractするのは楽だと思いますけど。
5 :
nobodyさん :2006/03/15(水) 19:33:25 ID:bA7xDyGS
前スレ
>>1000 やってみましたが21行目(書き換えたところ)がエラーで、うまくいきまsん。
前スレからヲタがどうのこうの言ってるやつがいるが、 プログラミングなんかしてるやつぁ全員ヲタだろう。 一般人の持ってない知識をたくさん持ってるんだから。
イメージでいってるんだろ。 彡川川川三三三ミ〜 プウゥ〜ン 川|川/ \|〜 ポワ〜ン ________ ‖|‖ ◎---◎|〜 / 川川‖ 3 ヽ〜 < 川川 ∴)д(∴)〜 \________ 川川 〜 /〜 カタカタカタ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \○○命_ | | |__| | \ |つ |__|__/ / / ドキュソ氏ね | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 こんなの。 まぁ厨全開だったし、正しい言葉を知らない春厨ってことでいいんじゃまいか?
>>6 前1000じゃないけど
<?php
if ($_POST['mail'] != "") {
echo $_POST['name'];
} else {
echo "<A href=\"mailto:{$_POST['mail']}\">{$_POST['name']}</a>";
}
?>
エラーが出てそれを質問するなら該当行とエラー内容を書けよ
エスパーを召還しようとしてる人がいるのはこのスレですか?
>>11 それじゃ、アドレスがあったら名前だけで表示、になる
条件が逆でまいか?
PHP4と5では基本的には相違ありませんか? 書籍を買うのですが、4と5両方あって迷っています。 個人的には4の方がベーシックなイメージなんですが…
17 :
nobodyさん :2006/03/15(水) 22:21:07 ID:+i4CweKd
クロスサイト・スクリプティングについて質問があります。 1. これは実際どんなことが危険なのでしょうか? PHPを実行されてしまうのでしょうか。 2. POSTデータじゃなくても危険ですか(例えばクエリ情報でも)?
前スレ990はスルーかよw
19 :
15 :2006/03/15(水) 22:32:11 ID:???
>>16 4と5ではどちらが良いでしょうか?
4でも5でもサーバーは対応しいています。
>>19 好み。
…と言いたいところだが、そんなの質問するレベルなら
おとなしく4使っとけ、って感じだ。
>>17 >1. これは実際どんなことが危険なのでしょうか?
そのリクエスト(本来なら正当な操作のため)を実施する権限のある人に、
悪意のあるリクエストを本人に気づかないようにさせてしまうこと。
>2. POSTデータじゃなくても危険ですか(例えばクエリ情報でも)?
POSTデータとクエリ情報を並べる意味が不明。
XSSでぐぐる。ついでにCSRFも調べる。
1.記入画面でファイルを選択、各種入力をしてPOST 入力チェックをしてダメなら1に差し戻す。OKなら確認画面 2.確認画面、実際にここではファイルはまだアップしたくない。 ここでPOSTしてはじめて、入力内容をファイルorDBに書き込み。ファイルを保存 こんな処理をしたいんだけど、$_FILEって、POSTしちゃったらそれまでで値を保持出来ないんですね。 このあたり、どんな風に処理するのが普通なんでしょうか?
ミリ秒単位で計測したければ1000回以上の繰り返しでベンチすればいいじゃん。 php使ってる香具師ってスキル低いな。 $_FILEから値を取り出しておいて、$_FILE以外の変数で受け取れ(格納すれ)ばいいじゃん。 巨大ファイル除けと、ファイル名の文字コード処理も忘れずに。
>>24 別に何回アップさせても良いとはは思うけど、
なんだったら、
3(確認OK後)でアップさせれば良いんじゃねェの?
>>24 アップロード用HTML → PHPファイル(ここでアップされたファイルの内容をSESSIONにぶち込む&値のチェック) → 入力チェックエラーならunset。
これじゃ駄目?
検索すると分かるけど、type="file"フォームはJavaScriptやHTML内でファイルの指定ができないようになってる。 だから確認画面を表示させると、もう一度入力させなくちゃいけない。 自動で入力できると、system内の重要なファイルを勝手に盗まれる可能性を与えてしまうからね。
そういや type="file" に value属性しても無意味だな
>>24 2でアップして、キャンセルならunlink
でいいんじゃないかな。
32 :
nobodyさん :2006/03/16(木) 11:07:50 ID:3GvLsZCl
PHP5でリファラーの日本語検索ワード解析に最適なものって なにがあるかなー。 検索語にあわせたコンテンツを表示したいんだよね。 なるべく多くの検索エンジンに対応+追加もラクラクなやつがいいなー。
33 :
軟式PHP :2006/03/16(木) 11:08:33 ID:???
俺はtmpとfileディレクトリ作って、確認時はtmpにアップしてOKしたらfileにコピーしてるよ。 tmpの方はファイルアップ時間見てGCしてる。確認OKまでアップしたくないなら26が一番用途に適してると思うが。
定義済みのnull($var = null;)と未定義のnullを見分ける方法はありますか? 未定義のほうは、そのまま使おうとすると、noticeが出るんですけど。
>>34 if(isset($foo) and is_null($foo)){
null である場合の処理;
} else {
未定義である場合の処理;
}
36 :
35 :2006/03/16(木) 12:07:37 ID:???
書いてからこれじゃダメじゃんと気付いた
>>34 未定義の変数にNoticeが出るのはPHPの仕様だから
で何がしたい
エラー消したいならNotice表示しないように設定するか定義しとけばいいやん
トレンドマイクロのサポートメールで気付いたけど、 fileのあるフォームでJavaScriptで確認小窓をだして、それでOKを押したら小窓を閉じてPOST、てのもありだな。
>>37 エラーは関係なくて、純粋にこの違いを見分ける方法を知りたいんです。
>>39 get_define_vars()したのに、あるか否かとか。
>>38 確認小窓というのが、もしポップアップのことなら、ブラウザで無効にされてるかもよ
>>40 get_defined_vars() ですね。なるほど・・
はじめまして、php歴1日の者です。 test.php?mode=2 というURLにあるフォームで書き込んだとき ログファイルには 「2,書き込んだ内容」 というように、modeの数字を頭に付けたいと思っています。 <?php extract($_POST); $cmtfile = "testcmt.txt"; if ($_SERVER["REQUEST_METHOD"] == "POST") { $mode = $_POST["mode"]; } elseif ($_SERVER["REQUEST_METHOD"] == "GET") { $mode = $_GET["mode"]; }
44 :
43 :2006/03/16(木) 13:57:35 ID:???
?> <form method="post" action="<? echo $PHP_SELF; ?>"> <input name="cmt" type="text"> <input type="submit" value="submit"> </form> <?php if($cmt){ $cmt = htmlspecialchars ($cmt); if(get_magic_quotes_gpc()){ $cmt = stripslashes($cmt); } $thisnum = $mode; $dat = "$thisnum,$cmt\n"; $fp = fopen($cmtfile, "a"); fputs($fp,$dat);
45 :
43 :2006/03/16(木) 13:58:53 ID:???
fclose ($fp); } ?> これだと、testcmt.txtには 「,書き込んだ内容」 と、modeの数字が反映されません。 サンプルプログラムの貼り合せでお見苦しい点も多々ですが; OSはWinXP,PHPVersionは5.1.2,AN HTTPD DAEMONです。 できるだけ小直しで解決できたらいいな><; よろしくお願いします。
>>45 レッツの古いスクリプトに影響された悪い見本そのものだな...
まずはextract()使わないで書き直してみ。あとGET/POSTメソッドを
それぞれの場合で流れを追って。
extract()使うなら使うでも構わないけど、それが何をやってるか理解した上で
駄目なところを直す。やってることが理解できれば、駄目なところも判るよ。
extractは絶対に禁止。バグとクラックの元。 $_REQUESTを使うと吉。 マジッククオートの\除去はスクリプトの先頭で。 "$thisnum,$cmt\n"は"${thisnum},${cmt}\n"とした方が見やすいしバグ防止になる。 fputsはLFを書き込むから、上の\nを消すかfwriteを使う。 $cmtが0だと書き込まれない。empty()を使う。 あと、error_reporting(E_ALL)
というか、 PHPにも問題はあるが、とりあえずhiddenでmodeを渡してやれば終わりだろ。
>>45 あと、$_POST["mode"]の値はどっから渡されるんだ?
51 :
43 :2006/03/16(木) 14:49:37 ID:???
>>46 キタ―――――(゜∀゜)―――――!!!
ありがとう
53 :
43 :2006/03/16(木) 14:53:28 ID:???
>>47-50 リロってなかった…ごめんなさい
もっと勉強して、皆様の仰ったことを理解できるようになります
ありがとう
>>41 完全にスレ違いなんだけど、便乗。
あれって、ポップアップ成功したか失敗したかの判定ってできるんだろうか?
tmpにうpさせてるのはtmpからのダウソを試みたり、勝手にtmpに送り込めば攻撃可能。 あとファイル名をチェックせずに、ファイル操作してると、/etc/passwdを含むファイル名でうpすればパスワード流失しないか?
最近のUNIXは/etc/passwdがないと聞いたのだが……
58 :
nobodyさん :2006/03/16(木) 21:07:45 ID:5JEd8fcS
index.php?id=0123 → ページAを表示 index.php?id=0123&hoge=xxxx → ページBを表示 こんな感じでクエリ情報で違うページを出力しているのはどうやっているのだろう。 というか、何の意味があるんだろうか…(もう一つファイル作ればいいし、ナンセンスじゃないの?) if (isset($_GET[?id?]) and $_GET[?id?] == "0123") { 条件式がTRUEの場合の処理 } else { ・・・・・・・・・ } この場合、include()しているのかな。 それとも単にprint()…? 何の意味があるのでしょうかねぇ。
echo implode (file ("ページA"), "");
60 :
軟式PHP :2006/03/16(木) 21:49:08 ID:???
>>56 俺へのレスかな?tmpは/tmpではないよ。
>>58 もし、一つのファイルに:
if(条件式){
print <<<END
…………………
END;
}
って大量にかいてあったら処理とか重くなるんじゃ…
PHPでジャギーがでないよう画像を綺麗に縮小し、かつjpgなりgifなりで出力するにはどうしたら良いでしょうか。 普通にやると汚くなりますよね。
>>62 綺麗にできるかどうかはPHP関係なくてGDやImageMagickの問題だろ?
そっち方面で綺麗に変換するためのコツでも聞いてくるか、
それ以外の画像変換ライブラリやツールを漁ってくればいいんじゃね?
なるほど
65 :
24 :2006/03/17(金) 01:29:23 ID:???
>>24 です。思いのほかたくさんのレスを頂き参考になりました。
今の自分のちからでは無理に確認画面を作るより、完了idをgetで渡すとかしてすぐに編集に戻れるようにしたほうが使い勝手がよさそうなので、ひとまずそういう形にしておきますた。
ところで、
ファイル選択&POSTで次の画面が出たところで
$_FILE配列にpostしたファイルの情報が入り、鯖のテンポラリに変なファイル名で一時的に選択した元ファイルがアップ(コピー)されるという解釈でよろしいでしょうか?
疑問なのはこのテンポラリのファイルがいつまで残ってるかという点です。
マニュアルには
>移動または名前の変更が行われていない場合、リクエストの終了時にその ファイルはテンポラリディレクトリから削除されます。
とありますから、この画面からリンクをクリックしたり、ほかのURLを叩いたり、POSTやGETで移動したりした時点で消えるということですか?
だとしたら、
>>27 さんの方式で$_FILESをセッションで持ち歩いても意味ないってことになっちゃいますよね?
また
>>26 さんの方法でも、やはり次の画面に逝ったところでテンポラリは消えてしまう訳で・・
やはりpostした次の画面でとにかく、ファイルの名前付けて移動するとこまでやっちゃわないとだめですね。
さらにここで確認OKでは無かった場合、この移動済みのファイルを消す処理、さらに痛いのは、入力に戻ったところで他の文字等の入力値はセッションで保たれますがファイルは再選択の必要があるってこと。
ファイル名にDBのレコードID番号(自動連番)と関連づけたファイル名にしたい場合はさらにめんどくさい処理にorz
ファイルが絡むとこんなにめんどくさいなんて思ってもみなかったす。
>>65 お前さん、フォームでファイルアップロードしてるんだよね?
そのアップロードされたファイルを何のファイルで参照したり使ったりするんだ?PHPファイルだろ?
>>27 はスクリプトが終わる前にテンプファイルの中身を全部テキストと同じ扱いでセッションにぶち込む、
>>26 は、入力チェックでOKの場合にファイルを選択させるって事じゃないのか?
67 :
nobodyさん :2006/03/17(金) 09:56:23 ID:fjaH3SIM
function hoge($a){ } で、hoge($b); として、この $b の変数名('b')を、 hoge() 内で取得する方法はありますか?
ファイルにキャッシュを保存する時、 生PHPで保存するのと、シリアライズして保存するのでは、 速度差はどれくらいあるもんでしょうか?
phpどころかプログラムとかまったく知らないんですが、 phpの解説サイトのレッツphpっていいんですか? グーグルでphpというキーワードで日本語のサイトを検索すると上位に来るんですが、 ソースとか参考になりますか? ソースの書き方の体裁は参考になるけど内容はだめ、 とかそういうのがあれば教えてください。 ほかに、サンプルが豊富なためになる解説サイトがあればおしえてください。 phpってhtmlで言うところの不思議マークアップのようなものがあったりするんでしょうか?
PHPマニュアルが最強です。 PHPマニュアルを見ましょう。
>>69 公式マニュアルで必要十分。
>不思議マークアップ
何それ?
>>69 レッツphpのソースは参考にならない。時が止まったままだ。
読んでやってる処理をみるのは構わないけど、あれを基にしたり
同じようなコードを書くのは自分に悪い癖を付けるだけ。
(ちょっと宜しくないかなというレベルではない)
>不思議マークアップ
俺も判らん。正確で無い変な用語を使うのは、仲間内にとどめとけ。
マニュアルは当然見るとして、 マニュアル以外で参考になるサイトがないってこと?
後悔したくないなら素直にマニュアルを熟読
PHPからプログラムを始めるのはお勧めしない。 PHPしか扱えなくて、プログラムできます、なんて言ったら大恥。 C言語やJavaをお勧めする。入門書1冊やるだけでいいから。
76 :
69 :2006/03/17(金) 13:24:51 ID:???
>>70-75 レスどうもです。まったくの無知なのでマニュアルを見ても、
マニュアルにちょこっと載ってるサンプルらしきものをみてもよくわからないので
htmlのときのように他人のサンプルを触りながらのほうが理解できるかな、と思いまして。
やはりマニュアルの熟読から始めたほうがいいのでしょうか。
あとphpからプログラムをはじめるのはダメなんでしょうか。
phpはかんたんだと聞いたので。
かんたんというか、ある程度適当に作っても動くって意味なんでしょうか。
だからちゃんとした文法が身につきにくい・・・とか?
phpしか使えなくて恥をかく、とかは別に気にしません。
>>71-72 不思議マークアップってのは、見た目のみ最優先にして本来の仕様とは異なる目的で
使われているHTMLの書き方のこと。対義語はstrict。CSSが無かった時代の悪癖。
「悪い見本」[過去の遺物]って点でKENTやレッツPHPもそれに近いものであると言えるかもしれないな。
でもぐぐっても800件そこそこしか出てこないマイナーな単語なので、そういう単語で
物事を表現してる時点で
>>69 はすでに同レベルの人間に成り下がってるとオモ。
で
>>69 質問の、PHPで参考にできるサイトは唯一、本家マニュアルサイトのみです。
書籍だとマンモス本って言われている「PHP4 徹底攻略」とそのシリーズくらい。
それ以外ではまともに参考にできるものは大変少ないです。
大抵、ちゃんと全体を網羅できていない上に内容が間違ってる。
PHPは初心者を狙ったいいかげんな本やサイトが大量に氾濫してる上に、
ものすごく早いペースで機能拡張・仕様変更が行われているので、
これをちゃんとフォローできてるのは公式的なものしか無いと思っていいでしょう。
>>76 PHPは過保護なママタイプ
大抵の機能はファンクションとして揃ってるから、
レゴブロック感覚でもとりあえず動くものが作れる。
それが良い事なのか悪い事なのかはケースバイケースなので一概には言い切れないけど、
まずはプログラミングの世界に触れてみる第一歩としては間違っていないと思う。
大事なのは2歩目以降。
本一冊買うだけでもだいぶ使えるようには成るよ。 サイトは基本的に書きたい事しか書かれてないし、必要な事が書かれてるとは限らない。 明らかに図示した方が理解しやすくても、面倒だからという理由で省いてるサイトは多い。 サンプルベースの方が理解しやすければ、 1) 超入門的な本を読んでまず全体像を掴む。詳細は覚えなくてもいい。 2) チュートリアルとか用例付きの実践的な本を読んで手を付けながら覚えていく。 分からない所は、ぐぐったり、1の本を見て復習しながら進む。 という学習がいいかも。 プログラムの習得の目標をどこに置くかだと思う。一生phpでよければphpで始めて問題ない。 日本語しか話さないなら、日本語だけ知ってればいいのと同じ。 他の言語も覚えたければ、英語とかフランス語習った方が理解が進むように、いろいろ学んでいけばいい。 ちゃんとした文法を身につけたければ、堅苦しい言語を選べばいいよ。 とはいえ、最近の言語は省略形を使えるようにして利便性を上げてる傾向が有るので、どれも汚く書ける(=その代わり速度は速い)から有る程度癖がつくのはしょうがないと思う。 あんまりどっぷり嵌らないうちにいろいろな言語を弄って自分の好みの言語や記述スタイルを確立していけばいいと思う。 Cとかだとあまりにも個人差が有りすぎて、保守性悪いので、書式統一にINDENT(1)を義務づけるとかやるよ。 phpの書式整形手段はエロイ人に任せる。
>>76 PHPは簡単だけど、目的から行くと「他の言語で基本を知ってる人が
Web目的で楽をするための言語」だと俺は思ってるので、
同種の文法を持ってるCやJavaの基礎を先にやった方がいい。
PHPの便利なところは「ものすごく大量のWeb専用機能を内蔵してる」とこなので、
PHPの解説サイトや解説本はそこを重点的に説明してて基礎解説は全然しないし。
そういった便利関数を調べるのに追われて基礎を学ぶ暇が無くなるのはナンセンス。
で、その便利関数は頻繁に増えていってるので、これを全て網羅できるのは
公式サイトのオンラインマニュアルだけ。その辺のリファレンス本では無理。
結論として、他言語で基礎を知ってから、公式サイトをリファレンスにして
PHPを使い込む、って順番でやるのが最も効率的で間違いが少ない。
81 :
69 :2006/03/17(金) 14:16:47 ID:???
>>77-80 たくさんのレスありがとうございます。
最初にCやJAVAで文法の基礎を学んでからPHPの利便性を享受するか、
敷居の低いPHPから入って他のプログラム言語へと幅を広げるか、
ということでしょうか。
CとかJAVAって難しそうなので、
上の場合は忍耐力、下の場合は向上心がいるっぽいですね。
どうもありがとうございました。
いろいろと触れてみたいと思います。
>>81 CやJavaで躓くようなら、PHPをやってても他人に迷惑かけるだけ。
趣味ならその理由でやめちゃえばいいけど、 授業だったらそうも行かないかもねー。
他の言語すっ飛ばして最初にPHPやらせるなんてアホな授業する学校があんのか… BASICやらせるよりタチわりぃ
VBから入って今はPHP、ってプログラマ(モドキ)も現場にはかなり多いよな。 レベル的にはPHPしかやったことないのとどっこいなくらいに微妙な連中なんだが、 それでもPHPしかやってないやつよりは綺麗なコードが書けるのがちょっと多い感じ。 なんでああ、PHPしかやってないやつってコードめちゃくちゃなのが多いんだろう? HTMLにコード埋め込みorコードの中でHTMLをecho、が最初にあるせいなのか?
PHPで結果出力したページをHTMLとして保存する事は出来るのでしょうか? ブラウザの「名前を付けて保存」ではなく、submitボタンなどを押して そのphpページをダウンロードするような。
>>87 できるよ。PHPには出力制御関数ってのがあって、ブラウザに表示する内容を
丸ごと変数に格納したりできる。それ使えば丸ごとファイルに保存→DLも楽々。
>>67 本筋とは関係ないレスで流れたけどこれってどうやるんだろ?
投稿者ではないが気になるな
>>89 最初から名前そのものを引数として渡すんならともかく、それは無理でしょ。
あれば「変わった使い方」ができそうだけど、変わった使い方すぎて
どこで何が起きてるか不明な状態になる=グローバル変数病のもっとタチの悪いものになる
だけなので、意義は感じないな。
関数の結合度って言葉を知ってるか。低ければ低いほどいい
>>89
function hoge($a){ // 何かの処理 }
引数で渡した変数の値を関数の名前として使いたいって事か。
95 :
89 :2006/03/17(金) 21:12:46 ID:???
96 :
nobodyさん :2006/03/17(金) 22:26:44 ID:qt9OXvzz
foreach (file($hoge) as $line) { 〜 } とした場合、ループ中に毎回ファイル読み込んでるわけではないですよね? 毎回読んでたらループしませんもんね? いや、一応確認したかったので。
>>96 それよりも、$fl = file($hoge);と一度やった方が綺麗な気がする。
echoがprintf代わりなのかなあ(w
レッツって評判悪いのか?
>>102 レスサンクス
あまりスクリプト覗いてなかったもんで知らなかった
104 :
nobodyさん :2006/03/17(金) 22:57:47 ID:WHiStkGK
質問です phpで書いたフォームで、入力された内容に 全部まとめてhtmlspecialcharsとかmb_convert_kanaを かけたいんですけど、どうやったらいいですか? いままでは $hoge = mb_convert_kana($hoge, "KV", "SJIS"); $hoge2 = mb_convert_kana($hoge2, "KV", "SJIS"); $hoge3 = mb_convert_kana($hoge3, "KV", "SJIS"); と、項目の数だけ同じ行を増やしていました。
>>96 でも書かれてるけど、
動作への不安が頭をよぎる。
foreach (file($hoge) as $line) { 〜 }
毎回は読み込まないよなぁ?…って
>>104 ホントに全部にかけちゃっていいなら
$_REQUEST = array_map("htmlspecialchars", $_REQUEST);
とかそんな感じ
>>105 いやそれはどうかと。別に全然綺麗じゃないし。
綺麗云々じゃなく素直に「中身が想像できないから見て分かる確実な書き方しかできません」って言いなされ。
>>107 動作への不安が頭をよぎるって読めないのか?
Eclipseおめぇー
Windowsの手動インストール版5.1を使っているんですが、 マニュアルに「php.iniの場所は環境変数PHPRCにディレクトリパスを書くことで 指定できる」と書いてあるのに、IISのISAPIだとWindowsディレクトリ下しか 見てくれません。PHPRCによる場所指定はコマンドライン起動などでしか 使えないんでしょうか…。
112 :
nobodyさん :2006/03/18(土) 01:27:17 ID:PidsL1Fk
ID<>なまえ<>内容<>アクセス数 ID<>なまえ<>内容<>アクセス数 ID<>なまえ<>内容<>アクセス数 ・・・ ・・ ・ のようなログファイルをすべて読み込んでアクセス数順にソートして 再度ログファイルに書き込むようなスクリプトを書いているのですが、 似たようなプログラムだとかってありますでしょうか? ランキングスクリプトを作りたいと考えてます どなたか書ける方いらっしゃいませんでしょうか・・・・ 挫折してしまいました・・・・
>>112 スレ違い。
依頼スレじゃない。
これだけじゃ分からん。
phpを読み込んだ時にアクセス数が増えるのか、
それとも元からあるファイルを見やすいように順番を入れ替えるのかにもよる。
前者なら、更新部分だけ順番を入れ替えれる(もしくは0.5とか姑息な数字にしてソートする)などが考えられる。
後者なら、総当り方式で順番をつけてくのが吉。
114 :
104 :2006/03/18(土) 01:36:12 ID:Lr7F21tP
>106 レスありがとうございます。 厳密に言うと、全部じゃなくて殆どの項目といった感じです。 任意の項目にまとめてかける方法はありますか? いままで僕が書いていたように項目の数だけ行を増やすのは あまりいいやり方ではないですよね?
>>114 あんまり何でも手際の良いスタイルを目指さなくてもいい時もある。
増やしたい部分だけやるのがいいと、俺は思うよ。
もっと良いコード書く人いるから。
その人がそういうの書いてくれると嬉しいよな。
>>114 $input_name = array(
);
間違った;;
>>114 $input_name = array(
"name1",
"name2",
"name3",
"name4",
"name5",
);
foreach($input_name as $k) {
$_REQUEST[$k] = htmlspecialchars($_REQUEST[$k]);
}
俺ならこんな感じ。
ある程度パターン化された一覧表みたいなPOSTを受け付けるときは
こんな風に一括処理をかけちゃうかな。
で、これは変換対象を列挙する方式だけど、これがめちゃめちゃ多くて
逆に除外側を列挙した方がずっとシンプルになる場合は
$ext_name = array(
"ext1",
"ext2",
"ext3",
);
foreach(array_keys($_REQUEST) as $k) {
if(in_array($k, $ext_name)) continue;
$_REQUEST[$k] = htmlspecialchars($_REQUEST[$k]);
}
みたいな手もあると思う。
スーパーグローバル変数を上書きって…
119 :
nobodyさん :2006/03/18(土) 02:21:40 ID:tuV8tpcr
フリーメールアドレスを発行できるCGIってどこかにありませんか。
>>98 こういうワーク的な変数を大量生産するのはむしろ汚く見えるなー。
ワーク変数って名称に意味を持たせにくいから適当な名前になりがちだし、
それでうっかり被って変数破壊したり、変数名打ち間違ってバグったりって
凡ミスするやつを現場で何人も見たことがある。
しかも、そういうワーク変数を増やしたがるやつって大抵はエレガントなロジックを書けないんだよね。
やたら回りくどい手法を使いたがって、ますます凡ミスの可能性を増やしてんの。
で、挙句の決め台詞が「PHPは変数初期化ミスをちゃんと警告できないのがダメだよね」ときたもんだ。
おまえがヘタレなだけだっつ〜の!
ブラクラURLやその他危険なURLとかを まとめたリストってどっかにないかな?? 掲示板とかでそういうのが投稿されたら ブロックするようにしたいんだけど。
その目欄には心当たりがある
どうでもいいが、 foreach (file($fname) as $line) { } こう書くときはエラー処理しなくていい場合な。 綺麗とか汚いの問題じゃないぞ。
UTF-8でPHP設定したいんですが、EUC-JPやSJISでOnOFFする output_bufferingってどっちに設定すればいいでしょうか?
output_bufferingがなんか関係あるの?
mb_output_handlerを使う時はOn、普通はOff
131 :
128 :2006/03/18(土) 08:06:16 ID:???
132 :
128 :2006/03/18(土) 08:08:18 ID:???
あぁレスみのがしてたorz
>>130 さんありがとぉ
133 :
nobodyさん :2006/03/18(土) 11:49:16 ID:p8xxneVQ
なあ、PHPでWEBサービス作るのと それにDHTMLでアクセスする ってあたりの事が書いてるスレかサイトって無い?
ajaxのことかい?それならあった気が。
$inputstr = "uwaaaaa!"; から uwaaaaa! という出力を得たいとする。 ============================ function aaa($str){ //実際はもっとめんどくさいごにょごにょがここに echo $str; } function bbb($str){ //実際はもっとめんどくさいごにょごにょがここに return $str; } ============================ その場合 aaa($inputstr); とするのと echo bbb($inputstr); または $output = bbb($inputstr); echo $output; とするのどっちがいいんでしょう?
>>135 ・表示するためのデータを作成する部分
・用意したデータを表示する部分
ってな感じに分割していると後々変更する時に楽なので、
$output = bbb($inputstr) がいいんジャマイカ?
aaa()がechoを行なうことが前提である関数なら上。たとえば、Smartyのdisplay()。 値をごにょごにょするだけの関数なら、見やすさに応じて真ん中か下。たとえば、substr。
>>135 printf()とsprintf()のどっちがいいですかって聞いてるようなもんだな
>>136-137 なるほど。
関数名の付け方とかで区別すればいいことに今気がついた。
呼ぶだけでechoするのは
print_nantara()とかecho_nantara()
ごにょごにょして返すのは、return_nantara()とか。
いままでそういう名前の付け方してなかった
>>118 ちなみに漏れもよくやります。上書き以降で元の値が必要ないとか、整形が必要なら、その都度ごにょごにょしないで、上書きしちゃえばいいと思ってます。
そんなに悪い事なのかな?
というか、echoするような関数は作らないな・・・。 全部ごにょごにょしたものだけを返すようにしてる。 大抵、関数とメインロジックって別ファイルで別場所の事が多いから、 両方弄って、アップ(なりコミットなり)する手間を考えてしまう。 関数の中身を弄らないといけないなら仕方ないんだけど、 単純にそのechoを消したい場合とかで、なおかつ関数内のごにょごにょをしたい場合なんかは、 関数内でechoされると困る。 というわけで、関数名はほとんどget_*()が多いな。
おまいらPEARの命名規約は無視なのな。
142 :
96 :2006/03/18(土) 13:24:57 ID:???
非常に亀レスですが、でかいファイルで、内容を変数として保持したくなかったので
>>96 を思いついた次第です。
>>142 foreachが終わったら変数をunsetするといいよ。
だが>120が言ってるように、
適当な変数名を使って余計分かりづらくなる事は否めない。
144 :
nobodyさん :2006/03/18(土) 13:51:47 ID:v34qlBqH
質問です。 現在、エラー表示を作ろうとしているのですが、エラーには宣言のような事をしなければいけないのでしょうか? たとえば、$nameに名前が入っていなければ、登録処理をせずに「名前が入力されていません」と表示させるにはどのような方法がいいのでしょうか。 現在、 if ($name = "") { echo "名前が入力されていません。"; } とやっているのですが、それでは$nameに名前が入力されていません。が代入されてしまうだけなのですが…。 良い方法があれば教えてください。
>>144 if($nameに名前が入ってないことを調べるための条件式){
エラー表示の内容を全て出力
}else{
登録処理及び登録完了の内容を全て出力
}
>>144 echo "名前が入ってません。";
exit ();
148 :
144 :2006/03/18(土) 14:07:52 ID:???
if ($name == "")でした。
>>142 非常にでかいファイルだと、file()でいっぺんに呼び出すこと自体がまずくないか?
変数に格納しなくても内部的には巨大なワークメモリを確保するだろう…
変数を自動で破棄してくれるのっていいよな。
Dだと
>>96 みたいなのはどうやって書くんだろうな。
やっぱ一度変数いれんのかな?
もちろん言語が違えばスマートな書き方も違うけど。
吸血鬼ハンター
mysql_query()で、 CREATE DB test; USE test; CREATE TABLE testtable (num int(10)); のような複数行の命令を一度に実行したいのですが、どうしてもエラー になってしまいます。 複数行の命令を一度に実行することは、できるでしょうか。
153 :
152 :2006/03/18(土) 18:21:05 ID:???
すみません。間違えました。 2行目 誤)CREATE DB test; 正)CREATE DATABASE test;
$query = " create table test( title varchar(255) not null, comment text not null, index(title)) "; mysql_query( $query); で普通にできる
155 :
152 :2006/03/18(土) 18:26:40 ID:???
>>154 早速のご回答、ありがとうございます。
せっかく答えていただいて申し訳ないのですが、私がやりたいのは
複数の「;」を持つ命令を一度のmysql_query();で実行することなん
です。
質問が不適切でした。すみません。
>>152 どんなエラーかも書いてくれよバカ
それはPHPのエラーか?それともMySQL自体のエラーか?
157 :
152 :2006/03/18(土) 23:24:52 ID:???
>>156 すみません。バカでした。
mysql_error()関数でエラーメッセージを取得できるので、
PHPのエラーではなくMySQLのエラーのようです。
$t = mysql_connect('localhost', 'root', 'root');
mysql_query('CREATE DATABASE test; USE test', $t);
print mysql_error();
You have an error in your SQL syntax near '; USE test' at line 1
>>155 「複数の「;」を持つ命令を一度のmysql_query();で実行すること」
は仕様上無理。
>>155 INSERT命令とUPDATE命令で確認したんだけど、
どうやら最後のセミコロン以降のみ有効になるっぽいな。
SQL文を配列に突っ込んでfor文とかでぶん回せば良いんじゃないの?
みんなああああああああああああああああ 頑張ろうぜええええええええええええええええええええええええええええ
適当に改行してくれるPHPの定義済み定数ってなんだっけ?
USEコマンドは専用の関数が…
164 :
161 :2006/03/19(日) 10:54:22 ID:???
>>163 mysql_select_db()を使ってもよかったのですが、ひとつのファイルに
まとめて記述したほうが説明がしやすかったので、そうしました。
>>162 nl2br?
でもこれは定数ではなく関数…
167 :
nobodyさん :2006/03/19(日) 12:10:47 ID:iOnFUS0L
>>161 これなんでforeachじゃなくて
array_maximum_key()で回数とって回してるんですか?
教えてエロいひと(><)
>>167 まずはお前さんが、リンクしたスクリプトのソースを提示するか
挙動から推察した仕様を提示。
つか"2ちゃんねる・ブログ板の「デザイン(構造も)がかっこいいblog」スレ"
のまとめサイトらしいから、そっちで作者に尋ねるのが先では?
<?php echo "$ENV{'QUERY_STRING'}" ?> 何を間違えているのでしょうか
>>170 「〜という出力を期待したのだが、〜という結果に終わった。」
さらに言うと、何故そうなったのかという自分なりの考察が欲しい所だ。
てか、原因を考えてみて色々試行錯誤している筈だから、
その辺の話が出てこない筈は無いんだが。
php -l test.php >No syntax errors detected in test.php 特に間違いはないけど。
>>175 検索キーワードを考えてみた。
「header mime session php」
phpのマニュアルのheader()のページのUser Contributed Notesに解決策が載ってた。
ftpでダウンロードしてきて、それをそのまま ブラウザにダウンロードログを出して、ダウンロードさせたいのですが、 どうすればいいでしょうか? ftp_get()で一旦ローカルにおいて、それを ダウンロードさせる方法なら簡単に実現できたのですが、 対象ファイルが大きいため、ローカルに置かずに直接 ダウンロードさせたいと考えています。
178 :
161 :2006/03/19(日) 15:07:55 ID:???
>>168 私がお答えしませう。
foreachは配列に追加された順番で展開されるので、より正確に数値配列
のキーの順番で展開されるように、わざわざめんどくさいことをやってみ
ました。
特定テキストファイルの最後の10行だけ表示させるには どうすればよかとですか?
>>179 もう少し頭を使ったほうが良いんじゃないでしょうか
>>177 FTP-HTTPブリッジか。PHPの範疇じゃないね。
それはもちっと低レベル(層)でやること。
>>179 `tail -10 filename`
>>177 ftp_fgetでSTDOUTに出力すればいいんじゃないの?
184 :
nobodyさん :2006/03/19(日) 16:36:29 ID:owkIMffO
質問です。現在ゲストブックを作り始めたところなのですが、エラーが起きてしまいます。 <?php print <<<EOM <html><body> <form action="test.php" method="POST"> <FONT size="-1">N:<input type="text" name="n" size="20"> C:<input type="text" name="c" size="20"> <input type="submit" value="書き込み"></FONT> </form></body></html> EOM; ?> なんですが、Parse error: syntax error, unexpected $end in D:省略test.php on line 10 というエラーが出てしまいます。どうすればいいのでしょうか。
>>184 まるまるコピーして実行したけどエラーはでなかった。
もしかすると、文字コードの設定に問題ありかも。開発環境の
文字コードとphp.iniの文字コード設定をチェック。
print を echo に変えてみよう。
>>185 ありがとうございます。
php.iniの設定いじってみます。
>>186 echoで<<<EOMのようにする場合はどのように書けばよろしいのでしょうか?
188 :
185 :2006/03/19(日) 16:49:34 ID:???
スマソ。なげやりだった。 php.iniの設定 mbstring.internal_encoding = SJIS <- Windowsのメモ帳で開発中なら mbstring.http_input = auto mbstring.http_output = SJIS <- Windowsのメモ帳で開発中なら
そもそもこの場合、 echo ' <html><body> <form action="test.php" method="POST"> <FONT size="-1">N:<input type="text" name="n" size="20"> C:<input type="text" name="c" size="20"> <input type="submit" value="書き込み"></FONT> </form></body></html> '; と最初と最後を置き換えても問題ないわけで
>>188 いえいえ、ありがとうございます。
mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
mbstring.http_output = UTF-8
になっていました。
しかし、直してみたのですがいぜんエラーのままです。
もう少し調べてみます。
連続すいません。 多分反映されてないだけだと思います; 再起動して反映させてみます。
再起動させても変わりないのでちょっと調べてみます。
ありがとうございました。
ちなみに
>>190 さんのやり方だと表示されました。
>>184 EOM;の後ろに半角スペースが入ってるとか
195 :
185 :2006/03/19(日) 17:41:52 ID:???
>>194 確かにEOM;のあとに半角スペース入れたらエラーになった。
これは新しい発見。
<?php print <<<EOM <font>こんにちは。</font> EOM; ?> これでもエラー Parse error: syntax error, unexpected $end in D:省略public_html\test.php on line 5 が出てしまいました。 php.iniの文字コードの部分はいじってみたのですが変化はありませんでした。 ぐぐってみたのですがよくわかりません。 何がおかしいのでしょうか…。
面白シス。 これ攻撃に使えるな(w まず全部読み込んで、行数数えて、シークして読み直す。 あるいは1行何文字と固定長にして保存しといて、計算してシークして読む。 DB使った方がパフォーマンスは騰がる。 直接ダウンロードは無謀だな。 FTPが速くて、HTTPが遅かったら、メモリ食いつぶすよ。 ソース有るんだからmysql_query2()とか自分で作って、複数行の命令を一度に実行できるようにすればいいんじゃね? 複数エラー出た時に大変だろうけどね。
199 :
nobodyさん :2006/03/19(日) 21:58:07 ID:owkIMffO
>>198 はい。
EOM;の後ろには何もムダなものは入っていませんでした。
その他のところも問題ないと思います。
201 :
185 :2006/03/19(日) 22:12:45 ID:???
<?php ?> みたいに、終わりの?>のあとにスペースが入ってて、 2時間を費やしてそのミスに気がついたことがありましたが、そ のへんはいかがでしょうか?
>>201 問題ありませんでした。
>>200 , 203
なるほど。改行コードの種類でエラーが起きてしまう事があるのですね。
今私が使ってるEditerでは(EmEditer)改行の種類を変更することができるのかどうかよくわからないので
少し調べてみます。
皆様 <?php print <<<EOM <font>こんにちは。</font> EOM; ?> のインデントを削除して見たところ正常に動作しました。 Editerが自動でインデントをやってくれるのでこれでいいものかと思っていたのがいけなかったみたいです。 皆様本当に申し訳ありませんでした。そして、ありがとうございました。
207 :
185 :2006/03/19(日) 22:25:34 ID:???
たびたび FTPで転送してる場合テキストファイルの改行コードを変換してくれる場合もありますので そこらへんも注意したほうがよかろうと思われますです。ではでは幸運を祈りまつ
209 :
nobodyさん :2006/03/19(日) 22:33:13 ID:lnWnX+zl
if (isset ($_GET["hoge"]) and $_GET["hoge"] == "foo") { print ("fooおk"); } elseif (isset ($_GET["hoge"]) and $_GET[["hoge"] == "bar") { print ("barおk"); } else { print ("エラーちゃん"); } みたいにして、次のような予期せぬ要求があった場合「エラーちゃん」と出力 するにはどうすればよいでしょうか? script.php?hoge=foo&hoge=bar
>>209 よく分からんけど、try catchというのがあったかな。
>>209 同じ名前があった場合最後の奴で上書きされるんじゃないの?
その例ならbarしか抽出出来なくないか?
script.php?hoge=foo&hoge=bar で$_GETを見てみた?barしか得られない そのスクリプトだと hoge=foo&hoge=abc なら、エラーちゃんにはなるな $_SERVER["QUERY_STRING"]は hoge=foo&hoge=bar になるのでコレを使ってなんとかせい
213 :
209 :2006/03/19(日) 22:48:31 ID:lnWnX+zl
>>211 あ、上書きされてますた。
PHP(・∀・)イイ!
214 :
nobodyさん :2006/03/19(日) 23:30:27 ID:QpTKRnhc
今まで気になってたんですが、 \n ってどういう意味ですか。
>>214 ラインフィード、キャリッジリターン、でそれぞれ検索してみ。
色々分かると思う。
PHP で日本語検索できるプログラムってどこかにありますか? かなり探したんですけれども見つかりませんでした・・orz よろしくお願いします
mb系でなかったか?
>>216 日本語で正規表現によるマッチとかって意味なら出来るけど
具体的に何がしたいのかこの説明じゃわがんね
>>216 単に検索するだけならmb_ereg()でいいんじゃ。
何をどう検索するんだ。
言っとくが、既存の完成されたプログラムを探して欲しいって話ならスレ違いっすよ。
あれだよね春進行っぽいねこのスレも
すいません、本当に下らない質問で恐縮なのですが、 メモ帳でPHP使って書いて保存するときに、 xxxxx.phpとしてもただのtxtファイルになってしまうんですが、 phpファイルってどのように作るんでしょうか?
>>221 PHPファイルってのは.phpという拡張子が付いてるだけのただのテキストファイルだがそういう意味ではなくて?
ただのtxtファイルってのはどういう意味で言ってる?
223 :
軟式PHP :2006/03/20(月) 11:50:46 ID:???
多分、凄く凄く初期レベルのお話だと思われ…。
多分じゃなく思いっきり凄く初期レベルの質問だろww まぁいいんじゃね?たまにはこんな質問も。
拡張子非表示で実際はxxx.php.txtになってたりしてな。
>>225 これが正解だろう。
XP使ってるときは、フォルダオプションの表示の、
登録されている拡張子は表示しないをオフにする。
これでxxxx.php.txtになってるから、.txtを削ればphpの出来上がり。
もしくはFTPクライアントで名前の変更すればよし。
自分で下らない質問だと解っているからいいんじゃないの?
>>221 自分でpoor.php.txtをpoor.phpにリネームする。
もしくは保存時にファイルネームを
"poor.php"
のように""でくくる。すると.txtを勝手に付けるというおせっかいを防げる。
もっと良い解決策は、メモ帳で*.phpファイルを書かないことだ。
最新のメモ帳はUTF-8くらいサポートしてるのかな?
>>227 自分とこで試すと、別に"で括らなくても勝手に.txtの拡張子なんて付いたりしないんだが、
XP搭載のメモ帳ってその辺の仕様が変わってるんだっけ?
>>228 対応してる。
>>229 メモ帳は基本的にどんな事であれ、拡張子に.txtをつける
全てのファイルで保存
233 :
nobodyさん :2006/03/20(月) 14:26:33 ID:CAF8GnmO
数字と/以外が変数に入っていたらエラーを出すにはどうしたらいいのでしょうか?
>>233 if (! preg_match('/^[0-9\/]+$/', $val)) {
print 'エラーっす';
}
235 :
nobodyさん :2006/03/20(月) 14:32:52 ID:CAF8GnmO
preg_match('|^[0-9/]+$|', $val) でもよか?
237 :
65 :2006/03/20(月) 14:35:22 ID:???
>>233 if (! preg_match('/^[0-9\/]+$/', $val)) {
print 'エラーっす';
}
239 :
238 :2006/03/20(月) 14:38:13 ID:???
>>238 さらに間違えました。文字クラスのなかも/はエスケープです。
240 :
239 :2006/03/20(月) 14:42:51 ID:???
>>239 あせりすぎました。デリミタが|なので/はエスケープ不要です。
今日だけで、何回間違えたのだろうか…?
if (preg_match('/[^\/0-9]+/', $val)) { print 'エラーっす'; } のほうが早くは無いか
激しく外出かもしれませんが教えてください。 一般的に、パラメータがn桁以下の数値かどうかを判断するのに、 正規表現で /^\d{1, n}$/ とするのと、 strlen + is_numeric を使うのと、どちらがパフォーマンスよいでしょうか? 桁数は、極端に大きな桁数はなく、せいぜい6桁〜10桁程度です。
数値(整数)であるなら if ($var < pow(10 , $n)) { print 'ちいせーよ'; } でいいのでは
ああ、数値かどうか分からないのか。すまん
246 :
nobodyさん :2006/03/20(月) 15:42:59 ID:CAF8GnmO
2005/12/12 の感じで日付が変数に格納されているのですが、これを年、月、日とarrayに格納するにはどうすればいいのでしょうか? よろしくお願いします。
>>246 list($y, $m, $d) = explode("/", $date);
248 :
nobodyさん :2006/03/20(月) 15:59:07 ID:CAF8GnmO
phpを使った他人のサイトでphpのソースを取得することはできますか?
くだらない質問ですが sql select結果を取得して、結果があれば処理をする場合 if(mysql_num_rows($result)>0) { $hoge=mysql_result($result,0,0); } とするのと if($list=mysql_fetch_array($result)) { $hoge=$list[0]; } とするのとどちらがよいと思われますか?
>>251 カラム1個しか使わないならresultかな
mailでヘッダを指定せずに mail ( $to, $subject, $message) でメールを送信した際に表示されるFromはどこで設定されているのでしょうか?
$htm = '<a><p><b>test</b></a></p>'; $htm = strip_tags($html, '<script><style><a><p>'); print htmlspecialchars($htm); ってやるとまともに動かないのは仕様? strip_tagsは使うなって言われてるしねよく
>>256 > strip_tagsは使うなって言われてるしねよく
どこでこんなこと言われてるの?
>>257 言われているかは定かではないけど、Manualの警告を見る限り
あまり使わないほうが無難かもしれない。
259 :
256 :2006/03/20(月) 19:42:03 ID:???
2chの質問スレでよく言われてる くだ質じゃなかったかな・・、どっちも見てるんで混乱してるかも
260 :
242 :2006/03/20(月) 19:55:54 ID:???
>>245 やはり正規表現処理はそれなりにリソースを食うのですね。
マニュアルにもstrip_tagsに関しては
警告
現在、strip_tags()はHTMLの検証を行わないため、
不完全または壊れたタグにより予想以上に
多くのテキスト/データが削除される 可能性があります。
警告
この関数は、allowable_tagsで許可した全てのタグ の属性を修整しません。
これには、style お よび onmouseover属性が含まれており、
悪意のあ るユーザが他のユーザに見せるようなテキストを
投稿する際に危険な行 為を行う可能性があります。
と書かれてるからね。
>>250 そこを参考にするのは微妙。
262 :
261 :2006/03/20(月) 19:59:57 ID:???
>>258 がマニュアルのことについて既に書いてた(ノ∀`)
エスパーさん、出番ですよ
>>263 こういうこと?
echo preg_replace("/[\\d\\w\\.\\-_]+@[\\d\\w\\-_\\.]+?\\.[\\w]{2,3}(\\.[\\w]{2,3})?/i","<a href=\"mailto:$0\">$0</a>",
"
[email protected] ご教授じゃなくてご教示");
mailto:[A-Za-z0-9_.]+@[A-Za-z0-9_.]+ これじゃダメかな
質問です もし文中にAと言う単語を含むならC、Bと言う単語を含むならD、と言った風に条件分岐させるにはどうすればいいのでしょうか function test($var) { if($var == a) { return c; }else{
return d; } } こんな感じにしてみたいんですが、if($var == a)この部分をどう表現すれば良いのかわかりません
見ただけでウイルスに感染してしまうサイトを携帯で見てしまった場合、どうやってウイルス駆除するんでしょうか?
270 :
nobodyさん :2006/03/21(火) 04:11:16 ID:0DB4pSWb
2005/3/4 や 2006/11/23 のように日付が変数に格納されているのですが、これを 20050304 や 20061124 のように数値化するにはどうすればいいのでしょうか? よろしくお願いします。
>>267 $q = preg_quote($A);
if (preg_match("/^$q\$|^$q\\W|\\W$q\$|\\W$q\\W/i", $var))
// もっといいやり方あるかも・・・
>>270 (int) date('Ymd', strtotime($str));
>>267 よし、正規表現を勉強してきなさい。
難しくないからさ。簡単にで良いから。
ちなみにそのif分では、$varの中身がaかどうか、になってしまうよ。
>>269 よし!スレタイを百回読み直して来い!
>>270 俺ならsplitして文字列結合しちゃう。
274 :
nobodyさん :2006/03/21(火) 08:37:01 ID:FCNG8e7g
MySQLを使えるようになろうと思っているのですが レンタルサーバーでの利用のため、少し利用に制限があります ID名でデータベース名が与えられているのですが、実際にこの中に数値云々をいれて それを閲覧するにはどのようにすればいいんでしょうか? また、テーブルって複数の独立したものをいくつも作れるんでしょうか? いったん作ったものって消えないんですか?どうやって確認すれば? 疑問がいっぱいです。webで調べてもあまり納得のいく説明がなかったもので・・・・
君はまずDBスレあたりで勉強しなさい ここはPHPスレです
276 :
nobodyさん :2006/03/21(火) 08:53:09 ID:FCNG8e7g
phpでユーザーリスト管理しようとおもってたのですが・・・・残念です
>>276 見てないとは思うけど
275はphp以前の問題だと言いたいんだと
まず、MySQLやSQLを知ってからphpをやれと。一度になんでもかんでも理解できるのか?
まわり道のようで一直線。
phpじゃなくてDBで管理すべき。 何でもエクセルで処理しようとしてるようなもの。適材適所で使い分けるべき。
>>278 は流れが分かって無いような気がする・・
>>274 >疑問がいっぱいです。webで調べてもあまり納得のいく説明がなかったもので・・・・
PHPとMySQLって単語の両方が書名に入ってる本を数冊本屋で買って来い。
数冊も買わすのかw
$aにAが含まれていたらの場合のif分はどうなるのでしょうか。 if ($a == "A") { echo "Aが含まれています。"; } 条件の設定方法がよくわかりません。 教えてください。
284 :
nobodyさん :2006/03/21(火) 13:53:46 ID:FDfwTN3i
>>283 それは、$aが"A"に一致する場合の条件式。
やりたい事は「文字列の中に含まれているかどうか」なので、
マニュアルの関数の分類で、文字列に対するものを探してみる。
ttp://www.php.net/manual/ja/ そのまんま、「Strings(文字列関数)」って分類がある。
それをクリックすると文字列に関係する関数の一覧表が表示される。
で、説明文を読みながら使えそうなものが無いか探していくわけだ。
・strcmp -- バイナリでも使える文字列比較 、ってのが使えそうだなと思ったら、
さらにクリックして詳しい内容を見ていく。
するってーと、$a == "A"と同じように一致するかどうかを調べる関数だと分かる。使エネ。
・stripos -- 大文字小文字を区別せずに文字列が最初に現れる位置を探す
今度はこいつが目に付く。読んでみると、falseじゃなきゃ指定した文字が含まれると判断してよさそうだ。
更に他の関数にも使えそうなものはあるが、大体こういう感じで探していくことになる。
>>284 ありがとうございます。できました。
>>285 なるほど。マニュアルの使い方も大事ですね…。
一つの関数で二つの値を返す場合って、 function A { return a; return b; } で良いのでしょうか? これでやってみたんですが出来なくて……
>>287 マニュアルのreturnのページを見ると、
> 関数内で呼び出されると、return()文は即座にその関数の実行を停止し、引数を関数の値として返します
とある。読んだ通りだな。
で、複数の値を返す場合はどうすりゃいいのかってーと、
・配列を返す
・リファレンスを返す
つーやり方がある。
>>288 やっぱり無理なんですか……
文中のURIとメアドを抜き出して自動リンクする関数を作りたかったのですが、
個々を作ることが出来てもそれを一つに纏めることが出来なくて困っているんです
function autolink($A) {
return preg_replace(URIの自動リンク);
return preg_replace(メアドの自動リンク);
}
みたいに出来ないかなーと思っていたのですが、
もしこうする場合はどうすれば良いのでしょうか?
$DATA[1]のなかのALT="aあ"をpreg_replaceで空白に変換しようとしたら変換できません。 preg_replace("/ALT=\"([^^]*)\"/","",$DATA[1]); これでやっても無理だったんですがどこが間違っているでしょうか!?
([^^]*)
何その顔、ふざけてるの?
自分で分かりやすく^以外をヒットにしようと思いまして。
'/ALT=\"[^^]*?\"/',' ' ALT="aあ"なのかALT="任意の文字"なのかわからんがな。
>>290 preg_replaceは配列で正規表現を使える
マニュアル参照しる
>>296 アルファベットと漢字が混じってるんです。
漢字が入るとpreg_replaceで置換できないとかはあるのでしょうか!?
PHPで配布しているRSSを表示させる事は出来るのでしょうか? 出来たらやり方を教えて欲しいです。(検索語句など)
日本語でおk
>>297 配列出来たんですか、知りませんでした
おかげで何とかやりたいことが出来るようになりました
ありがとうございました
>>299 ごめん。日本語として解釈できません。
PHPで配布しているRSSってなんだ?
>302 特定(じゃないかもしれないが)のサイトで配信している RSSを読み込んで出力するものを作りたいって事じゃないか?
305 :
nobodyさん :2006/03/22(水) 00:35:33 ID:E+eV7vwA
306 :
nobodyさん :2006/03/22(水) 00:47:21 ID:w0U7WoXt
MySQLを利用する際にPHPからテーブルを作成することってできるんですか?
>306 全ての SQL は mysql_query で出来る
>>306 ==
>>274 と粘着してみる
やっと具体的な質問が出来たなGJ
PHPからMySQLのテーブルを作成できるし、操作出来る。
とても↓のような感じのシンプルな掲示板を作ろうと思っています。 --- 21.名前:管理人 こちらこそよろしくお願いします 20.名前:ななし はじめまして。よろしくお願いします --- DBでなくテキスト管理の場合において、記事の投稿・表示に関してもっとも効率が良い と思われる処理の流れ(ごく一般的なものでも構いません)はどのようなものでしょうか? ソースである必要はないので、処理の流れを書いていただけませんか? 日本語が下手なのでうまく伝わらないかもしれませんが、よろしくお願いしたします。m(_ _)m
すいません、
>>290 で質問した者で、
>>297 のおかげで解決したんですが、
何故かまた出来なくなってしまいました。
>>301 の時点では確かに出来ていて確認したのですが、
今になってもう一度確認してみるとなんか変なことになってしまっているんです。
function autolink($url){
return preg_replace(
array(
"/((https?|ftp|news):\/\/|www\.)([\w\.\~\-\/\?\&\+\=\;\@\%\:\#\%]+)/e",
"/[\\d\\w\\.\\-_]+@[\\d\\w\\-_\\.]+?\\.[\\w]{2,3}(\\.[\\w]{2,3})?/i"
),
array(
"'<a href=\"'.('$1' === 'www.' ? '
http:// ' : '').'$1$3\" title=\"$1$3\">$1$3</a>'",
"<a href=\"mailto:$0\" title=\"send a mail to $0\">$0</a>"
),
"$url"
);
}
作ってみたのはこんなのなんですが、何故だか$1$3'", "$0" ), "$url" ); } ?>と表示されて、$0の部分にアンカー張られちゃってます。
何かを弄った覚えは全く無いのですが、何か問題があるのでしょうか?
ちなみにこの後にもいくつか試しに書いてみたんですが、全て何も処理されません……。
>>310 なんていうか凄い正規表現ですね・・・。
312 :
nobodyさん :2006/03/22(水) 05:48:00 ID:uySCvhL9
>>310 $1$3'", "$0" ), "$url" ); } ?>と表示されて、$0の部分にアンカー張られちゃってます。
ってスクリプトの一部が表示されているということ?
$0の部分にアンカー張られちゃってます。というのがよくわからん
一部分だけを説明すると人に伝わらない場合が多い。てか俺にはわからんです。
>>312 そうです、スクリプトの一部がそのまま表示されてしまっているんです。
$0の部分は<a href="mailto:$0" title="send a mail to $0">$0</a>となっています。
で、それはどういう文字列を渡した時にそんな風になったの?
>>316 いや、その何が問題なのかが解らなくて。
>>301 でやったときには正常に何も問題はなかったのですが、
>>310 のときにもう一度開いてみたらスクリプトがそのまま表示されていたとしか。
いやだからさ 310の関数の上にdieをコピペしてるわけだよ。 でCLIだけど走らせたらという結果なわけ。 316の結果ならいいわけでしょ? 一度単純化して自分でやってみれ。↑のように 多分本番用のスクリプトは他に色々書いてあるだろうけど、とりあえず 何が問題かを「切り分ける」ために単純化して確認するのは定石だと思うけどな。
いや、書いてあるスクリプトは
>>310 と
>>315 だけです。単なる練習用としてなので。
配列をなくしてシンプルにURLの自動リンクだけでやってみたりもしたんですが無理でした。
とりあえずさ、だめとか無理とか言う前に以下コピペ、なんかファイル作って
$php hoge.php
やってみれ。
<?php
die(autolink("
http://www.google.comあああああああああ[email protected] "));
function autolink($url){
return preg_replace(
array(
"/((https?|ftp|news):\/\/|www\.)([\w\.\~\-\/\?\&\+\=\;\@\%\:\#\%]+)/e",
"/[\\d\\w\\.\\-_]+@[\\d\\w\\-_\\.]+?\\.[\\w]{2,3}(\\.[\\w]{2,3})?/i"
),
array(
"'<a href=\"'.('$1' === 'www.' ? '
http:// ' : '').'$1$3\" title=\"$1$3\">$1$3</a>'",
"<a href=\"mailto:$0\" title=\"send a mail to $0\">$0</a>"
),
"$url"
);
}
?>
俺はこれで316の結果が出てるが?
デバッグの方法というかアイデアも考えてバグを無くすということを含めて「プログラムを作る」ってことだぞ
>>320 新しいファイル作ってコピペしてみましたが、
結果:
$1$3'", "$0" ), "$url" ); } ?>
>>310 と全く同じです……。
まさか結果は「ブラウザの表示」じゃねえだろうな? まぁ俺は優しいから怒らないが、ブラウザの表示をコピーしてるなら ブラウザでソースを見てみろ。
ソースを見てみましたが、スクリプトがそのまま表示されてました。
LinuxでPHPとpostfixインストールしました。 PHP.iniの設定で、sendmailのパスは記入しました。 気になったのですが ; For Win32 only. SMTP = localhost ← smtp_port = 25 ← の2行はコメントアウトしておけばよいのでしょうか?
>>324 添付の基になるiniファイルでは最初からコメントアウトされてない?
Windows以外では意味がない値なので、別にそのままでも良いけど
不要なものはコメントアウトしとくのが正しい。
326 :
324 :2006/03/22(水) 08:43:13 ID:???
>>325 sendmail_from =
[email protected] の方はコメントアウトしてあったのですが
先の2行については何故かコメントアウトされてませんでした。
どうもありがとうございました、すっきりしました。
>>321 あああ とかの2byteを止めて AAA とかで試してみ
いいいいいいぃ
最後に ?> がくっ付いているのを見た時点で気付くべきだったか
phpが動いてないって・・
おまいらエスパーだな。 漏れにはさっぱりだよ。
336 :
334 :2006/03/22(水) 15:46:11 ID:???
>>336 =334
お前、男前だな。ほれそうになった
じぶんで書けばいいじゃん
339 :
nobodyさん :2006/03/22(水) 16:03:32 ID:w0U7WoXt
>>339 =306
まさか君が作ってお金貰おうとしてる訳?
341 :
334 :2006/03/22(水) 16:18:18 ID:???
>>337 ケツは勘弁してくれ
>>338 ああ、そうするよ('A`)
>>339 なんでいきなり見積もりの話になってんだよ。
自分で書くっつってんだろ。
何にせよ現状のID:w0U7WoXtが作ったもんは売り物にならんだろうなw
343 :
nobodyさん :2006/03/22(水) 16:24:35 ID:w0U7WoXt
MySQL使わなきゃできると思います・・・・
344 :
nobodyさん :2006/03/22(水) 16:25:56 ID:w0U7WoXt
データベース使わなきゃ ってことです お金くれなんていいませんけど、自分も少しほしいなって思ったもので
おもしれー。DB使わないでどのくらいまともに動くんだろw
別にDBなくても作れるだろうけど効率悪くなるな
348 :
nobodyさん :2006/03/22(水) 16:59:28 ID:w0U7WoXt
ちょっと力試しだと思ってやってみますね これからバイトなので帰ってきてからになりますが
349 :
334 :2006/03/22(水) 17:02:54 ID:???
「バイトだから帰ってからやるよ」 そういい残して ID:w0U7WoXt はいずこかへ消えてしまった。 その後、彼の姿を見た者はいない。
350 :
339 ◆DzhKJ9tfAw :2006/03/22(水) 17:07:58 ID:w0U7WoXt
('A`)
ID:w0U7WoXt の人気に嫉妬
検索条件がいっぱいあるからDB使った方が100倍楽そうだな
ソートとか特に面倒くさそうだな。がんばってね。^^
◆DzhKJ9tfAw --> #ぬこ
おれもおれも
じゃあ俺がPHP5+SQLiteで作ろう
でも評価対象の詳細がわからないとテーブル作れないな
>>334 自分で作れ
そもそも
>>334 はスレ違いだろ。
スクリプト探してます系のスレは別スレにあるはず。
>>359 おまいさん、クラスのみんなが盛り上がってるときに、生徒手帳に書いてある規則を言い出すタイプだろ。
361 :
339 ◆HcpLxCrZaE :2006/03/22(水) 21:50:01 ID:w0U7WoXt
帰ってきたんですけど 必要ですか?
うるせー作りたきゃ作って勝手に投下しやがれボケナス
363 :
334 :2006/03/22(水) 22:00:07 ID:???
ID:w0U7WoXt は逃げずに帰ってきた。 「作った方がいい?」 彼はそう言い残すと静かにスレを去っていった。 これでいい。これで作らなくて済む。 ID:w0U7WoXt には確信があった。 334「必要です。」
じゃあ俺も「必要です」 ただし実装方式やコーディングに関して、議論の叩き台にされることは覚悟してください
365 :
nobodyさん :2006/03/23(木) 04:13:07 ID:Q/J9+7Id
<INPUT name="dawn" type="file" size="60"> <SELECT name="group[]"> <OPTION value="adult">アダルト</OPTION> <OPTION value="guro">グロ</OPTION> <OPTION value="idle">アイドル</OPTION> <OPTION value="other" selected>その他</OPTION> group[]を受け取るためにはどうすればよいでしょうか。 $group = $_POST[group];だとArrayとでてしまいます。 よろしくお願いし舞う
[]を外したら出来ました・・・すいませんでした・・
正規表現で Border="数字" をマッチさせたいのですが "Border=\"([0-9])\"" とかやってみたけどマッチしません Border="数字" はどうすればマッチしますか?
>>376 正規表現についてしらべたことはあるの?
ちゃんとマニュアルよんだの?
>>367 質問がどういう意味かわからない。ネタとかじゃなくマジで
>>367 なんか名前がムカつくんで教えてあげない
>>367 俺もよくわからんけど、「マッチしません」ならそのスクリプトを書いてみたらどうだ
372 :
367 :2006/03/23(木) 05:20:35 ID:???
>>368 調べました でも分かりませんでした・・・
程度の低い質問でごめんなさい・・・
>>369 「Border="数字"」を検索して置き換えをしたいんですが
Border="数字"が一致しないんです
なのでBorder="数字"の一致のさせ方(マッチパターン?)を教えていただきたいのです・・
低学歴なので上手い文章書けませんごめんなさい
373 :
367 :2006/03/23(木) 05:25:05 ID:???
>>370 生きててごめんなさい
>>371 $boda_a = eregi_replace("Border=\"([0-9])\"", "Border=\"$boda\"", $_POST['t']);
こんなんです
空気読めないのはどこにでも居るな。
昨日から正規表現質問してるのは同じ香具師だろ。 グループ参照は$xだぞ
PHPでソケット通信をしたくsocket_create()関数を読んでみたのですが
Fatal error: Call to undefined function: socket_create() in c:\program files\apache group\apache\htdocs\index.php on line 3
というエラーが発生してしまいます。
http://y-kit.jp/saba/xp/phpsetup.htmを参考に WindowsにApacheとPHPをインストールしました。
ソケットを使える環境になっていないためと思うのですが
ソケットを使える環境にするには何が足りないのでしょうか?
377 :
376 :2006/03/23(木) 08:58:21 ID:???
php.iniいじったらできました。すまそ。
>>376 つ[ソケットの項のインストール手順]
問題が発生してるなら最低限マニュアルの
そのものの項は読んでおこうな
あと「Windows用PHP拡張モジュール」ってところも読んどけ。
正規表現を使って、文字列中にカタカナ(濁音、半濁音、小文字含む)とー(のばす音)以外の文字が検出されたら エラーを返す、というようにしたいのですが、どのようなマッチパターンにすればよいのでしょうか?
380 :
nobodyさん :2006/03/23(木) 14:56:00 ID:mrcbeLF5
>>379 その文章のまんまのマッチパターンにすれば良いです。
foreach($array as $key => $value){ $value++; } で$valueを変更しても実際の$arrayの中のデータは変わらないのですが 変えるには$array[$key]としてやるしかないですか? 他に良い方法はありませんでしょうか?
382 :
381 :2006/03/23(木) 15:27:47 ID:???
あぁ・・PHP5からは参照渡しできるのか・・
正規表現スレ逝けよとは思う。
384 :
nobodyさん :2006/03/23(木) 18:37:18 ID:rQFifY4a
質問です。 〜/login.php で ID/password を入力し、 ID/passwaord が正しければ入力されたIDに従って、 IDごとのページにジャンプ(123456というIDなら 〜/123456.html にジャンプ) というプログラムを導入したいと思っています。 検索したところ、BASIC認証等、ID/passwordが正しい時に「単一の"ある"ページ」にジャンプするというプログラムが見つかるばかりで、 上記のようなプログラムはどのようにしたらいいでしょうか?
>>384 $ID = $_POST["pass"];
// パスワが正しいかどうか判断
.......
//
header("Location: ./".$ID.".html");
とか
>>384 何が分からないの?
login.php(入力) → なんか.php(確認) で header()ロケーション → IDごとのページ
387 :
385 :2006/03/23(木) 18:42:55 ID:???
スマ $ID = $_POST["id"]; だよな
388 :
nobodyさん :2006/03/23(木) 18:44:03 ID:lymxilGb
PHPからTeXを生成して最終的にPDFで出力したいのですが、 参考になる書籍・HP等ありましたら教えてください。 TeXも初めてなのでぐぐってみたところTeXにもいろいろあるようで、 PHPと組み合わせることが出来るのはどれなのか見当つきません。 書籍も「TEX+PHP+データベースによるPDF自動生成サーバの構築/運用」 というのが見つかりましたがAmazonの評価はあまりよくないようなので、 他に参考になるものがありましたらよろしくお願いします。
>>385 Locationは絶対URL指定とRFCで。
>>388 まず聞くが、間にTEXを挟む必要性はある?
つか
>>367 のケースはpreg_replaceを使ったほうが(色々と)早い
392 :
>>388 :2006/03/23(木) 21:49:51 ID:lymxilGb
>>390 数学の塾講師をやっているので以前からTeXに興味があったというのと、
FPDFは日本語の参考資料が少なそうだったというのが理由です。
文字数が変化した際の対応はPDFよりはTeXの方がラクとどこかで見かけました。
何かお勧めはありますでしょうか?
今ならXMLTeXやMathMLの時代。
395 :
367 :2006/03/24(金) 04:14:05 ID:???
>>389 ググッたしそのページも何度も読み直したけど私の脳じゃ
"Border=\"[0-9]\""
"Border=\"([0-9])\""
とかしか思いつかないんですよ
教えて下さいorz
>>395 思いつきはいらない。正規表現を正しく理解しろ。
>>395 print ereg_replace("[0-9]",'5',"Border=8");
自分で要領悪いと思ってるんなら努力しろ
単なるいいわけならウザイだけ
正規表現が分からないなら使わない方法も考えたら?
_/>o
399 :
384 :2006/03/24(金) 06:58:37 ID:???
>>385 >>386 ありがとうございます。今アドバイス頂いた事を試行錯誤しています。
また何か解らなくなったら質問しに来させてください。
>>397 つうか数字が一桁という保証があるかも疑問だが。
ソースあるんだから、必要と思うなら実装してパッチを公開してくれ。 今まで実装されてないのは、ニーズが無いからだと思う。 少なくとも漏れには不要。
>>400 所詮デバッグ用途だから俺はE_STRICTと、変数/定数の集計機能
(IDEにも付いてるものは多いと思う)で充分なんだが、それ以上に欲しいのはどんなもの?
すみません、正規表現教えてほしいのですが 例えば hogeの前の文字が なにもない か , が入っている場合true にしたい場合はどうすればよろしいのでしょうか?
/^,?hoge/
407 :
405 :2006/03/24(金) 14:10:04 ID:???
それもアリだが>406のが綺麗だな
die(405)
411 :
408 :2006/03/24(金) 14:59:36 ID:???
>>409 "hage,hoge"
という文字列にもマッチさせたいのかなと思ったのさ
412 :
406 :2006/03/24(金) 15:23:48 ID:???
うん、解釈が違うよな
ある文字列の各文字数の後に_を含んだ形(1文字・先頭、末尾は無し)を 出したい場合、どんな方法があるでしょうか? 例えば、 文字列 hogehoge の場合、 h_ogehoge、ho_gehoge、hog_ehoge、hoge_hoge、 hogeh_oge、hogeho_ge、hogehog_e を出したいと考えています。 文字数を数えてwhlieあたりかなぁとは感じるのですが。
for つかえよw
>>414 for は一切使ったことないですね、
できるだけ知識は少なく同じ知識を流用するタイプで、
whileを先に覚えてしまったので。
ちょっと調べてみます。
むしろwhileの方がいっさい使わない。
>>416 余計なお世話だけど、
> できるだけ知識は少なく同じ知識を流用するタイプで、
そんなことでは、進歩しないと思うぞ。
つーかforの限定用途版がwhileだろ。どうみても。
関数系ならともかく、for、whileは知識の量がどうとかじゃないけどな ↓次の質問どうぞ
whileでforの代用は出来るがforにwhileの代わりは出来ない
423 :
軟式PHP :2006/03/24(金) 18:04:20 ID:???
え、出来ない?どんな時?
想像力が働かないとき。
>>401 エスパーじゃないんでそんな事知らんがな
while(式A) {} は for(式A ; ; 式A) {} と同等。 whileにできてforにできないことなんかあるはずがない。 forにできてwhileに困難なことは多々あるけどな。
for (式A; 式A; ) {} だったorz
面倒くさがらずにforくらい覚えておけよw
for (式A; 式B; 式C) { ・・・ } と 式A; while (式B) { ・・・ 式C; } は常にお互い交換可能(少なくともブロックが変数のスコープを分断しないPHPでは)。 読みやすさ・書きやすさの違いでしかない罠。
>>422 for (;式;) {〜}とwhile(式) {〜}は同等
ん、do {〜} while(式)に代替手段は無いか。 doなんて全く出てきてないが。
いちおう 〜 while (式) {〜} で代替できる。 面倒なだけだけど。
くだらん まさにスレタイに沿った内容
434 :
nobodyさん :2006/03/24(金) 22:42:31 ID:/XKVgQRo
>>434 $_SERVER['QUERY_STRING']
437 :
さぅ :2006/03/24(金) 23:17:20 ID:T4BLrkxS
PHP初心者なのですが、いろいろしらべながら Flashゲームと連携した得点ランキングを作ったんですが… 得点を送信すると、得点順にランキングされるまでは出来たんですが ページを更新するたびに書き込まれてしまいます… だれかお教えください!
エスパーさん、お呼びですよー。
説明分かりにくいと思うけどよろしこです。 条件(a,b,c,d,e・・・・が全て0)が満たされる場合にAを実行したいのですが、 a,b,c,d,eの数が動的に変わる場合にどう処理すれば よいか分かりません。 下の例で言うと、$a==0 && $b==0 の部分を動的に 変更したいのですが(a,b,c・・・の数を動的に変えたい) どんな記述をすればいいでしょうか? if($a==0 && $b==0){ A; }
そもそもロジックが悪い気がする。 まず見える範囲だと、a,b,c…としているのが悪い。 可変なら配列を利用したほうが楽。
>>436 >先頭何バイト以上は捨てる
↑なぜそんな話になる?
>>434 の例で言えば、「?」以降の引数が6文字かどうかチェックすれば
それで済む話だろう。
442 :
nobodyさん :2006/03/25(土) 00:48:34 ID:rAfNosPl
てか、なんでPHPを使うの? どこに魅力があるわけ?
>>441 お前たぶん脆弱性ありまくりんぐなスクリプト組んでるな。
>>442 軽いから。関数が沢山容易されてて楽だから。
441=444
お前ら元気ですねw
つか、外部からの変数チェックしないでどう使うんだよ
日本語でおk
451 :
441 :2006/03/25(土) 03:03:44 ID:???
452 :
443 :2006/03/25(土) 03:09:52 ID:???
>>451 他人を煽る事でしか精神の安定を計れないんですか?
自分こそ憶測でモノを言っている事に気づいてないのだろうか・・。
何にせよ
>>434 の例で6文字かどうかチェックするって手段が妥当だと思うんだけど。
まぁ俺ならそうするし、自分のやり方が否定されただけでどうしてそこまで感情的に
なれるんだ?
まぁ、ほんとどうでもいいけどw
453 :
443 :2006/03/25(土) 03:11:10 ID:???
ぎゃー間違えた。
>何にせよ
>>434 の例で6文字かどうかチェックするって手段が妥当だと思うんだけど。
>まぁ俺ならそうするし、
何にせよ
>>434 の例で6文字かどうかチェックするって手段は妥当でないと思うんだけど。
まぁ俺ならそうしないし、
はぁ・・・2日寝てない事を言い訳にさせてください。
こんな時間にどんなレスがついてると思ったら馬鹿同士で馴れ合ってるだけかよ。
スレ違い甚だしいから2人共失せろ。wwwwwww
#客観的に言わせてもらうと
>>441 が必死に見えて仕方ないんだけど、そんな事言うと
物事を自分に都合良く捕らえちゃう
>>441 が
>>443 だと思いこんじゃうんだろうなぁ(笑)
455 :
441 :2006/03/25(土) 03:19:57 ID:???
はいはい春春
素敵な喧嘩の最中すいません。
ひよこの俺に教えてほしいのだが結局
>>434 の件はどうするのがいいのだ?
俺的にはチェクして6文字の他は何も使わなければよいと思うのですけど・・
いいよ。
461 :
457 :2006/03/25(土) 10:12:28 ID:???
だめなのか? チェクというより6文字しか取り込まなければ後ろは関係ないんじゃないの?
そうだね。
少なくともApacheはやたら長いURIは414を返すから問題ない。
これにて一件落着
引数が6文字かどうかチェックするって、数えたら負けだぞ(w とにかく頭から6文字だけ読んで後は捨てるにしないと、攻撃受けまくりだ。
>>465 ハイハイ 判った判った
次の質問ドゾーー
↓
>>465 お前は「strlen」を100回復習しろ。
470 :
nobodyさん :2006/03/25(土) 13:51:25 ID:LOrdJSk8
URLを入れると<title></title>にはさまれた文字を取得するにはどうしたらいいだろうか
471 :
nobodyさん :2006/03/25(土) 13:53:13 ID:LOrdJSk8
自己解決
>>470 じゃないけど
$fp = fsockopen("www.yahoo.co.jp", 80, $errno, $errstr, 30);
$out = "GET / HTTP/1.1\r\nHost: www.yahoo.com\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$str.=fgets($fp);
}
fclose($fp);
$str=substr($str,strpos($str,'<title>')+7);
$str=substr($str,0,strpos($str,'</title>'));
echo $str;
な感じでどうですか?
汚くてすまそ
HTMLパーサーは?
476 :
473 :2006/03/25(土) 17:03:45 ID:???
みなさんならどのように書くのでしょうか? 俺もこれくらいのLvなので知りたいです。
おれはこんな感じ
$response = file_get_contents("
http:// 〜");
preg_match( '/<title>(.*)<\/title>/', $response, $matches );
>>477 全部読みこむ意味無いと思うけど、どうなんだろう?
でかいサイトだと遅そう。
>>478 それは言えてる。
実際に使ったのは、ページ内の大半を取得するためだったから。
軽いページだったから問題にならなかったかも。
>>473 ちなみにfsockopenのかわりにfopenでもいけるよん
俺はこんな感じ。ってかほぼ477と同じだなw
$source = @file_get_contents("
http://hoge.com ");
preg_match( "/<title>.+<\/title>/", $source, $matches);
print_r($matches);
484 :
473 :2006/03/25(土) 19:18:30 ID:HTJ11qQm
なるほど、勉強になりますねこれは。 ソケット開く必要なかったかぁ・・preg_matchもあんま知らなかった・・。 さんくすです。
>>484 allow_url_fopen = Off
にしてる環境もそこそこあるから、自分以外が使う事も
あり得るなら、ソケット使うのも充分ありだよ。
>>585 その設定ならソケット使ったって開けないだろ。
488 :
nobodyさん :2006/03/25(土) 21:00:12 ID:bV9riW42
xreaで画像upできるように使用と思ったんだけど失敗してしまいます。 xreaではphpで画像upはできないのでしょうか?
最適化コンパイラってロハで手に入らないの?
>>488 ああああそうだ!何かつくろう作ろうと思ってたのをおもいだsたい
>>488 くだらないっていうかおまえの頭が悪すぎる
493 :
488 :2006/03/25(土) 22:21:15 ID:bV9riW42
>>490-491 へ?なんかおかしいこと言ってますか?
xeraで作っている画像掲示板はあったので出来ると思うんですが・・
どうしてもupできない
XREAで"使ってる"じゃないの?
495 :
487 :2006/03/25(土) 22:30:22 ID:???
>>492 おー初めて知った。
でもそれだとallow_url_fopenって意味なくね?
xreaってスクリプト生成機能まであるのか すげー
>>495 お前の「意味なくね」をレン鯖とかでの話だと仮定すれば、
allow_url_fopenを切ってる所はsocketも切ってるよ。
でも、その鯖から外部に出られる構成の鯖なら、
何かしら抜け道はあるから、完全に出来なくするのは無理だと思うけどな。
>>493 モジュール版でなくCGI版使え >XREAのPHP
あら庭で 鳩が鳴いてる ポッポッポ
>>477 ,482
ちょっとしたおせっかいだけど正規表現のパターンの中にHTMLやXMLが含まれる場合は
'|<title>(.*)</title>|'
みたいにスラッシュ以外の記号ではさむと便利っす
きめぇ
>>495 allow_url_fopenのINI_ALL→INI_SYSTEMに変更したあたりの
対応のしかたをみてると「何も考えてない」と思えるよ。
504 :
488 :2006/03/26(日) 16:37:34 ID:???
なんかもう一度やり直したら出来ました・・ 設定をミスってたようです。 板汚し失礼しました。
505 :
nobodyさん :2006/03/26(日) 22:04:20 ID:v7phkhEU
URLをクリックすると、ファイルがダウンロードできる仕組みを作っているのですが、2MB以上のデータダウンロードすると、ファイル容量が2MBで途切れてしまいます。 php.iniなどを見ましたが、それらしい設定はありませんでした。 header("Content-Type: application/x-download"); header("Content-Disposition: attachment; filename=\"".basename($file_path)."\""); header("Content-Length: ".$content_length); readfile($file_path)・・・・ みたいな感じです。 ちなみに、APACHでもIISでも同じ現象が起こります。
>>505 つmemory_limit
> php.iniなどを見ましたが、それらしい設定はありませんでした。
何を思って「それらしい」って言っているんだろう・・・
>>506 それは一応見たけど自分の思うところとしては見つける事ができなかった、
と要約してあると思うな。
いわゆる自分はただの質問厨とは違いますよって事。
>>507 506じゃないが。
その書き方は逆にただの質問厨に見えると思うってことだと思うぞ・・・。
きちんとするんであれば、
「iniの各設定されている値が“2M”のものを探しましたが見つかりませんでした」
とか、具体的にどういう風に探したのかを併記すべきだろ。
曖昧な表現で逃げてるだけ。
>>508 なるほど、確かにそのとおりだな。
自分でどういうの探したかっての言った方がいいよな。
ってか言わないと探した振りな奴が蔓延しそうだし。
510 :
nobodyさん :2006/03/27(月) 00:00:19 ID:w5DDkcYH
SQLite使おうと思ってるんですが 1つのDBにテーブルを50個作るなら 50個のDBを作って、1個のテーブルにした方が良いんですか? 何となくSQLiteの仕組み見ると、そう感じるんですが・・・ 巨大なファイルを読み込む事になるわけですし・・・。
それはおかしい
複数DBだとファイルの数が増えるだけだとおもわれるが。 接続もわけワカメになりそうな悪寒。 つか50ものテーブル扱うならサーバ型のDB使った方が良いんじゃないかな。
>>512 OSのファイルを読み込むIOが、1つの巨大なファイルより、小さなファイルサイズのを複数読み込む方が楽かな?と思ったんで・・・
ちなみに、データを1つ書き込むと、DBとの接続はいちいち切断するようなシステムなんで、ファイルオープンによるネックはどちらの方法でも同じになると思います。
数に関しては、とりあえず内部できちんと管理してるんで、複雑になっても大丈夫とは思います。
サーバ型ですか・・・
数は多いものの、高速性をそこまで要求しないので・・・
でもその中でも出来るだけ効率よくしたい
>>513 読み込み時にバッファに全体を突っ込むわけじゃないから
巨大なファイルでも、使用メモリもシーク時間もあまり変わらない希ガス
もちろん差はあるにはあると思うが・・・。
自称見たけど問題ないって情報ほどあてにならない情報は無いね。 うむ。dbの話で全くphp関係ないしね。 php的には1つのdbのほうが速くてメモリ使わないと思う。
いくつか変数があって、 その全ての変数に対して色々チェックを行いたいのですが、 どんな方法でやれば良いですか?
>>517 もう色々駄目。
具体的に何のチェックがしたいのかを書かないとアドバイスのしようもないよ。
while(全ての変数){ 色々チェック(); }
釣り・・だよね?
521 :
517 :2006/03/27(月) 02:09:38 ID:???
>>519 出来ました!!!!1
ありがとうございました!!!!!11
try catchを使うとかw とりあえず使ってみる! とw
実際、ループやサブルーチンを作らなくてもスクリプトは書ける えらく効率が悪くて疲れるだけだが
ダメだ俺には関数の再帰も無しにディレクトリ内の全ファイル全ディレクトリをなめるなんて無理だ
527 :
nobodyさん :2006/03/27(月) 07:04:40 ID:nzS1LlMV
505ですが、memory_limitは適当(20MB程度)にしてあり、再起動もしてもうまくいかなかったので質問しました。 php.iniにアップロードに関する容量の設定はあるのですが、見当がつきません。 引き続きお願いします。
マニュアル嫁よー
>>527 php.ini の中を upload で検索してごらん
すいません functionの中にfunctionて入れれないんでしょうか? エラーでてしまうのですが・・
>>530 入れられるけど、内側のfunctionは
・その部分が実行されて初めて定義される
・それでいて結局はグローバルスコープに定義される
ってことに注意。
スコープ(名前空間)をわけるのには使えないよ。
クラスについて教えてください。 二つのクラス(hage, hoge)があって、以下のようにhogeで作ったhageから、 hogeの$fooを参照したいのですが、かっちょいいやり方をPHP4.1を前提にして教えてくれ。 // hogeのコンストラクタで Class hage { function sage(){ // 自分を作ったhogeの$fooを参照したい。 } } Class hoge { var $foo ; var $hage ; function hoge(){ $hage = new hage ; //hageを作る } }
class hage { var $creator function hage(&$creator) { $this->creator = &$creator; } function &sage() { return $this->creator; } } class hoge { var $foo; var $hage; function hoge() { $hage = new hage($this); } }
>>534 ありがとうございます。実は自分もその方法を取っているのですが、
なんとなくクラスの概念として正しいのか躊躇していたので、質問させていただいたのでした。
536 :
nobodyさん :2006/03/27(月) 19:28:25 ID:nzS1LlMV
527です。 >php.ini の中を upload で検索してごらん アップロードでなく、ダウンロードなのですが、関係あるのでしょうか。 >マニュアル嫁よー 一通り見たのですが、よく分からなかったので質問しています。 どなたか分かる方がいましたらお願いします。
>>536 鯖から見ればうp、クライアントからみればどwn
538 :
nobodyさん :2006/03/27(月) 19:47:28 ID:nzS1LlMV
言葉足らずで申し分けないです。 「サーバへのアップロードでなく、サーバからのダウンロードなのですが、関係あるのでしょうか。」 が正しいです。サーバへのアップロード制限は”upload_max_filesize ”や”post_max_size”があると思うのですが、サーバからのダウンロードについては、”memory_limit”くらいしか思いつきません。
質問です。 関数の中で使われたローカル変数は 関数を抜けて別の関数に処理が移ると、その場で解放されるのでしょうか? unsetするのと同様に、そのままメモリ領域が増えるのでしょうか?
>>539 そう。どこからも参照されなくなった時点で解放の処理が入る。
こんばんは。phpとはちょっと畑違いな質問かもしれませんが、 テーブルタグで半角の連続した文字列によるレイアウト崩壊を防ぐ方法ってありましたっけ? 例えば <TD width="10">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</TD> とやると明らかに10ピクセルを超えてもセルは折り返されませんよね。 これを折り返す様な方法ご存知の方いらっしゃいましたらご伝授下さいませ。 逆に折り返さない方法なら nowrap とかあるのにその逆は長年HTMLやってますがありませんよね
IEのみ有効なのはあるけどね。 長さ計算して改行を挿入したりするしかないかも。
<wbr>
>>542 IEはそういうタグがあるんですね(´・ω・`)
>>543 それも独自仕様のタグです(´Д⊂グスン
ブラウザの種類が増える弊害に直面した気がしましたorz
>>544 げ。<wbr>って使えないブラウザあるんだっけ…。
>>541 それはプログラミングじゃないんだよ明智君
>>545 少なくともFireFoxはムリみたいです
>>546 うん。流石にHTML書けたくらいでプログラミングできるとは思ってません;
ただ、スクリプト書いてるときにそれ対策をどうしようかと悩んで質問させて頂きました。
掲示板なのですが上に書いた手法で荒されたときとかを想定した対策です。
>>547 毎回細かい属性で減点喰らいまくってます(´Д⊂グスン
(でも書かなくても特別崩れない属性て書かない方がソースが軽くなる気がします
>>548 wbrは少なくともFireFoxとIEでは有効。
で、wbrつけて採点したら
> <WBR> は Mozilla または MSIE 用のタグです。
って言われますた・・・
Web制作板逝け
アッー! 素で忘れてましたorz そっちへ行ってきます。 板汚しスミマセンでした・・・ 結果が出たら一応報告だけしに来ます ノシ
それじゃPHPでWBR入れるコードでも書くか echo preg_replace_callback("/[A-Za-z\\-_]{21,}/", create_function('$m', 'return wordwrap($m[0], 20, "<wbr />", true);'), 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); でもFirefoxとIEだけかよ・・・
アッー!の使いどころが間違ってる気がしてならない。
そもそもそんな時にテーブル使うなて言われました(´Д⊂グスン
それで自分で分割するコード書いて戻ってきてみれば
>>552 に素敵なコードが投稿されてるしorz
ちなみに自分で書いたらこうなりますた。
$txt = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
echo wordwrap($txt, n, "<br>\n", 1);
「アッー!」ってどう発音したらいいんだろう? 「アーッ!」なら出来るんだが・・・
アッー!の元ネタぐらいは知ってるよな?
htmlの質問に答えるのは勘弁して欲しい・・
>>538 サーバで何か制限してあるんじゃないの
俺の環境では問題ない
content-lengthが取れてないとかじゃないよね
560 :
530 :2006/03/28(火) 08:14:27 ID:???
>>536 つーか単純にタイムアウトしてんじゃねーの?
ファイルの末尾にエラーメッセージかかれてたりしないか?
>>538 タイムアウトだろ30秒とかに設定してて、しょりしきれてねんじゃね?
でもタイムアウトだとエラーメッセージ表示されるくない? php.iniの設定によるけど。
ファイルにリダイレクトしてるならファイル内にでるだろうけどな。
とりあえず鯖の設定を疑うなら先にそのファイルを普通にHTMLにリンク張って試せばよくない? それで落ちればphpが悪いし落ちなければ諦めなさいてことだし。
567 :
nobodyさん :2006/03/28(火) 13:33:17 ID:NE/9pEIZ
preg_splitで文字列を半角スペースで切り分けたいのですが、""で囲まれた部分はその中で切ってほしくないのです。 いい方法ありませんか? 例: $src="powapowa \"hoge fuga\" foo bar" ↓ $dst = array( [0]="powapowa", [1]="\"hoge fuga\"", [2]="foo", [3]="bar" )
半角スペースをセパレーターにするのはやめれw ただ、やりかたはCSVのクォートの除き処理真似ればいいよ。がんがって検索しれ
>>568 実はapacheのaccesslogを処理したいのです。
さっそく検索してみます。
ありがとうございました。
>>569 logの出力の方を自分が利用しやすいように
最初からカスタムしてしまう手もある。
>>567 えーと、前に正規表現スレで教えてもらったんだけど…今、手元にソースないや(笑
572 :
567 :2006/03/28(火) 14:28:48 ID:???
>>569 それならファイルから読み込んで
<?php
$log_file = "C:/Program Files/Apache Group/Apache2/logs/access.log";
$fp = fopen($log_file, "r");
$log = fgetcsv($fp, 1024, " ", '"');
print_r($log);
fclose($fp);
?>
574 :
569 :2006/03/28(火) 14:42:18 ID:???
fgetcsv初耳とです・・・ まだまだ知らないことがいっぱいあるなあ( ∀ ) ・ ・
まApacheログなら問題ないだろうが、この手の関数は日本語処理で 詰まることあるから頭の隅にいれとけ
文字列と改行コードについての質問です。 textareaから受け取ったデータを変換するために $str = str_replace("\r\n", "\n", $_POST['test']); をしています。 ですが、 $str = "hoge\r\nhoge"; という文字列を $str = "hoge\nhoge"; へ変換できなくて困っています。 またこの問題に付随して for($i=0; $i<count($str); $i++){ printf("%s %X\n", $str[$i], $str[$i]); } これの%Xが0ばかり出てきます。 誰か助けて!
str_replace()はわからないけど、 count()は配列の要素数を表すものであり 文字数を数えるものではないので 1度しかループしないように思うのですが・・・ もしそうであればcount()をstrlen()に変えればOK で、%Xは数値→16進数の変換なので非数値は当然0になる。 文字をアスキーコードに変換したいのならord()を使いましょう。
>>576 $str = str_replace("\r\n", "\n", $_POST['test']);
じゃなくて
$str = str_replace("\r\n", "\n", $str);
だろ
$strは文字列だからcount($str)は1だし
何がやりたいのかさっぱりわかりません
どうもありがとうございました
>>577 ,
>>578 ごめんstrlenでやったんだった。
> $str = str_replace("\r\n", "\n", $_POST['test']);
> じゃなくて
> $str = str_replace("\r\n", "\n", $str);
に関しては、$_POST['test']に前ページのデータがくるの。
$_POST['test'] = "hoge\r\nhoge";
から
$str = "hoge\nhoge";
です。
素直にこぴぺすればよかったのに。
>>579 プロスラムは作った通りにしか動作しない
<?php
$_POST['test'] = "hoge\r\nhoge";
$str = str_replace("\r\n", "\n", $_POST['test']);
$n = strlen($str);
for ($i=0; $i<$n; $i++){
printf("%s 0x%02X\n", $str{$i}, ord($str{$i}));
}
?>
普通に表示される
プロスラムってなんだよ orz
582 :
576 :2006/03/28(火) 17:00:13 ID:???
e-to,よくわからんけどstr_replace()がうまく通りました。 また文字についてもord()で見れました。 でも改行コードのアスキーが出てこなかったので残念でした。 0A NL 0D CR この辺出てくるかと思ったんだけどなぁ・・・、なぁ・・・・('A`)
583 :
576 :2006/03/28(火) 17:02:45 ID:???
>>582 元々の文字列に改行が含まれてないとかじゃなく?
こっちでやったら0x0Aってちゃんと出たぞ。
>>584 "%s", 0x0A でNLとか表示されると思っていたようだぞ
586 :
384 :2006/03/28(火) 19:06:57 ID:???
おかげさまでログインphpが完成しました。ありがとうございました。 また質問なのですが、phpにデータベースの内容を読み込みたいのですが、 test.dat(DB)に aaa,123,xxx,xxx bbb,234,xxx,xxx ccc,345,xxx,xxx … と複数行にデータがある場合で「234」だけを表示するために、 「printする行と列を指定する」にはどうすればいいですか? もしくは、IDが「bbb」と入力されていた場合は「$idがbbbならその次のデータ(234)を表示」とするのでしょうか?
現在複数行書き込める掲示板を作っているのですが、一行で表示されてしまいます。 str_replace を使うところまではわかったのですが $comment = str_replace();なかんじで()内はどのように書けばいいのでしょうか?
588 :
584 :2006/03/28(火) 19:25:56 ID:???
すいません。大きく勘違いしていました。 簡単にできました。 すいませんでした。
>>587 その質問にはどのようなかんじで回答すればいいのでしょうか?
>>587 なんとなく言いたいことはわかるが、よくわからずに答えても混乱させるだけなので
もっと詳しく状況説明汁
>>589 ,
>>590 申し訳ありません。説明不足でした。
現在複数書き込める掲示板をPHPで作成しています。
保存方法はテキストを利用して
$write_data = $name."<>".$title."<>".$color."<>".$comment."<>".$pass."<>".date("Y/m/d H:i:s")."\r\n";
こんな感じで書き込みをしています。しかし、複数行書き込めるTEXTAREAに複数行(エンターで改行)で書き込むと
スレッドがいくつも作成されて、$passデータが題名のところにでてしまったり変になってしまいます。
そこで、対応策にstr_replaceというものを使うと言う事まではわかったのですが、
str_replaceの使い方がよくわかりません。どのように使えば複数行で表示することができるのでしょうか?
ファイル書き込みは一行ずつで。
593 :
nobodyさん :2006/03/28(火) 20:01:20 ID:y7+D/qxU
>>558 THANKSです。ビンゴでした。
当方の5.0.3を使っており、readfileを使うとダウンロードが途切れてしまっていたようです。
freadに置き換えて、正常に動くようになりました。
どうもありがとうございました。
本当に困って質問したのに、「マニュアルよめ」とか、「質問厨」とか言われて
ちょっと悲しかったです・・。
それに懲りたならもう2chで質問なんてするのはやめることだ。
>>592 データを保存する前にnl2brしましょう。
>>593 まじめに質問するなら本スレへ。
ここは下らねぇ質問で雑談するところ。
自分の意にそぐわない回答をもらったからといっていちいちヘコまない。
雑談するところでは無いんだが。
なんでそんな部分につっかかるの?
>>592 うまくできました。
ありがとうございました。
>>593 httpdもApacheとIISとで試してるぐらいなんだから
PHPもバージョン変えて色々と試してみれば良かったのに...
ん、nl2brだけで良かったのかな? >stringに含まれるすべての改行文字の 前に '<br />' を挿入して返します。 「挿入」なので改行は残ってしまうと思ったんだが・・・。
改行なんて残ったっていいじゃないか
602 :
nobodyさん :2006/03/28(火) 21:09:03 ID:QKqhyHFD
>>600 $comment = str_replace("\r\n", "\r", $comment);
$comment = str_replace("\r", "\n", $comment);
$comment = str_replace("\n", "<br>", $comment);
と
$write_data = $name."<>".$title."<>".$color."<>".nl2br($comment)."<>".$pass."<>".date("Y/m/d H:i:s")."<>".$no."\r\n";
を入れてみました。
EclipseでPHPを組もうと思ってます。 プラグインなんですが、PHP ECLIPSEとTrustStudioIDEとでは、どちらがお勧めですか? Trustの方だと、ApacheとPHP入って無くても、Eclipse標準のデバッグ実行で、実行出来ますよね。 ただ、Smartyのライブラリ使ってるのですが、これのインクルードパスを追加する使い方が分からないのがネックです。 可能なんでしょうか?
>>602 $comment = str_replace("\r\n", "<br>", $comment);
$comment = str_replace("\r", "<br>", $comment);
$comment = str_replace("\n", "<br>", $comment);
じゃダメなのか?
>>602 それだと冗長すぎ
nl2brは不要だし
606 :
nobodyさん :2006/03/28(火) 21:54:19 ID:iO8KuNQe
array("\r\n", "\r", "\n")
金払ってPHPの相談に乗ってくれる会社って無いの? 無料のにちゃんで、馬鹿丁寧な対応は無い。
自分が作った結構大規模なPHP検索システムがあるのですが、 個人でやるには限界に思ってきたので、希望とする会社にソースや販売権を 含めてすべて譲与したいと思っています。 個人で切り売りしていた時は、割と問い合わせや購入希望もあったので、 需要もあるかと思います。要はサポートをするには辛いという事で・・。 そういう価値を見てシステムごと買い取ってくれる会社ってあるのでしょうか? もしくは販売サイトなどご存じないでしょうか?
>>609 >個人で切り売りしていた時は、割と問い合わせや購入希望もあったので、
だったら、まずはそこに売り込めば?
後々のサポート含めて、もう全部会社に売っちゃう 後のことはもう無関係だからね! 会社にどうして欲しいとかサポート求められてもしらねぇ って事でしょ。
612 :
609 :2006/03/29(水) 01:10:52 ID:???
夢見がちなニートがいるスレはここですか?
夢見がちなニートしかいません。
>>609 > そういう価値を見てシステムごと買い取ってくれる会社ってあるのでしょうか?
世間に山ほどある会社に頑張って足を運んで価値を力説して売り込む。
営業ってのはそういうもんだ。
> もしくは販売サイトなどご存じないでしょうか?
無サポートで、ってことだと、オープンソースで公開して、無料で
使いたいやつは使っていーよーってばら撒くくらい?
616 :
nobodyさん :2006/03/29(水) 07:21:45 ID:ARuclu74
てかスレ違い。
このスレにスレ違いはない
PHPに関係なければさすがにスレ違いだけど…
ちょっと教えてください $hoge=0; if($hoge=='あ'){echo " 工エ(´д`)ェェエ";} ↑のように0を入れた変数を適当な文字列と==すると全部trueになるのですが これはどうしてなのでしょうか?
>>619 文字列が数値変換されて0として扱われるから。
こういう場合は===を使うべきって事か。
623 :
619 :2006/03/29(水) 13:30:57 ID:???
>>620 へーそうなんですか。どうもありがとうございました。
>>619 文字列の比較は、
===
!==
を使おうな。
もしくは if("$hoge" == 'あ') とする手もある。
626 :
619 :2006/03/29(水) 13:37:48 ID:???
>>619 の人気に便乗して俺も人気になってもいいですか?
オープンソースビジネスだもんなあ。 PHP使ってようがスレ違い。
631 :
nobodyさん :2006/03/30(木) 06:21:53 ID:Jn5NDcrv
リソースイメージを<IMG SRC="">でブラウザに表示させる方法って無いでしょうか? imagejpeg()だと文字列だとかと一緒に表示できず画像が化けた文字列で出てきてしまいます
リソースイメージをHTMLコンテンツと一緒には表示できないよ。 一度鯖のディレクトリーに落としてそれを正規(?)のイメージとしてしか <IMG SRC="">では表示できないと思うよ。
>>633 別にわざわざファイル保存する必要はないぞ?
635 :
nobodyさん :2006/03/30(木) 12:48:33 ID:X8Czu4HD
header("Location:
http:// " . $_SERVER["SERVER_NAME"] . "/hoge/");
今こういう感じで別ページへ飛ばしてるのですが、
これだと、https でのアクセスでも http へ飛ばしてしまうので
http → http
https → https
これをする方法(環境変数)はありますでしょうか?
>>635 _$SERVER 変数の解説見れば分かる。
>>635 試してないけど
(($_SERVER['HTTPS'] == 'on')? 'https': 'http')
でいけるらしい
>>636 俺もhttps取得できるかなぁって思ってマニュアルの_SERVER見てたんだけど、見あたらないんだよね。
何入れたら取得できるん?
>>635 httpsで環境変数見たことないけど
SERVER_PROTOCOL
SERVER_PORT
はどうかな
httpsかどうか判定して条件分岐すりゃいいだろ
>>639 SERVER_PROTOCOLはhttpでもhttpsでもどっちでもHTTP/*.*が返る
SERVER_PORTはhttpの標準が80または8080というだけで固定ではないため基準がない
>>638 $_SERVER['HTTPS']の説明は本家php.netのマニュアルには記載されているが、
それ以外の日本語翻訳版ではことごとく抜け落ちているらしい。
$request_type = (getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';
>>643 getenv()は使える場面が限られる
'on'が (o'n')みたいな感じに見えて萌えてしまった
すいません、正規表現教えてください。 $hogeの値が 空白 or "hello"という文字を含む 場合っていうのは どうすればよいのでしょうか?
647 :
646 :2006/03/30(木) 15:37:35 ID:???
自己レスです。 preg_match("/(^$|hello)/i",$hoge) でいけました多分。失礼しました。
だから正規表現スレいけよ
空白(スペース)じゃなくて null かよ!!
いまごろ気づいたんだけど、WebProgの正規表現道場ってなくなっちゃったの?
651 :
646 :2006/03/30(木) 16:06:17 ID:???
正規表現スレってあるんですか? すいません知りませんでした。 もいっこ質問でてきたのですが調べてそっちへ逝ってきます。
(1). mysql_query (2). mysql_db_query この2つの関数では(1)のほうが推奨になったと思いますが、 明確な理由はありますでしょうか? 予めデータベース指定してサーバにクエリを送信することで、実行速度面がいいとか? 3年ほど前のソース群を修正しようかどうか迷ってます。 まあ mysql_select_db 加えて mysql_db_query を mysql_query に置換する単純作業ですが ファイル数が多いので、便利なフリーの置換(grep)ソフトなどありましたら宜しくおながいします
>>652 それこそphpでディレクトリさらって全て置換させろよw
>>652 > ファイル数が多いので、便利なフリーの置換(grep)ソフトなどありましたら宜しくおながいします
sed
>明確な理由はありますでしょうか? 文字数が少ない
>>652 >この2つの関数では(1)のほうが推奨になったと思いますが、
特にそういうこともなかったと思うけど?
mysql_db*がmysql_db_*になったのは名称統一性のため。
>予めデータベース指定してサーバにクエリを送信することで、実行速度面がいいとか
やってることは、データベースを切り替え(共通)た後、クエリーを送信(共通)してるだけなので
他の単体機能の関数を組みせた場合と速度面で劇的な違いはない。
>ソフトなどありましたら
自分の開発環境(OS等)に合った別板スレにて。
658 :
nobodyさん :2006/03/30(木) 19:07:12 ID:hmhd9dG6
助けて〜 アパッチ入れたのはいいけどポートの設定ができません。80ではな8080にしたいのですけど教えてください。
>>658 httpd.conf => [Listen] & [ServerName]
判ったら、スレ違いだからカエレ!
661 :
nobodyさん :2006/03/30(木) 19:30:10 ID:hmhd9dG6
PHPの組み込まれた標準関数には is_alpha()やis_digit()のような文字・文字列の英数かどうかをシェックスる関数はないのでしょうか?
>>662 ctype_alpha ctype_digit
$str=" str";//全角スペースだけど半角ね。 $len1=strlen($str); $str=trim($str); $len2=strlen($str); ってすると、$len1と$len2の長さが同じになってしまいます。 単純に確保されたバイトサイズを返してるのかと思い。 $str2=trim($str); unset($str); $str=$str2; unset($str2); $len2=strlen($str); ってやって、領域を確保しなおしても同じ結果です。 どうにかして空白スペース文きちんと減るようにしたいのですが・・・。
$str=" str"; $len1=strlen($str); print "<br>$len1"; $str=trim($str); $len2=strlen($str); print "<br>$len2"; 何の問題も無く 4 3 って出るんだけど? 実は提示してるコードだけじゃない?
666 :
664 :2006/03/31(金) 06:01:26 ID:???
すみません・・・。勘違いでした・・・。 その上の部分のコードが悪さしてました。 スレ汚しスマソ・・・
そうか、素直だから許してやる
668 :
nobodyさん :2006/03/31(金) 07:11:01 ID:??? BE:675646278-
ファイルのアップロードについてなんですが、 register_globalsをオフにしたら「$_FILES〜」に値が代入されなくなりました。 register_globalsがオンなら動作するんですが、オフのままではアップロードは不可能なんでしょうか? PHPのバージョンは4.23です。
>>657 マニュアル読め
mysql_db_query
この関数は廃止予定です。使用しないでください。かわりに mysql_select_db() あるいは mysql_query() を使用してください。
>>668 そんな話は聞いたことがない
お前のスクリプトのバグ
>>671 hogehoge.html.phpに出力されるhtmlタグが
<img src="hogeimage.php">
になってればokでは
ややこしいんですけど $array=array("a","b","c");等の配列があり この配列の前2つの値が"a"と"b"ならtrueを返すにはどうしたらよいでしょうか? array("a","c","e")は偽 array("a","b","d")は真
reset($a); return list($k,$v) = each($a) && $v='a' && list($k,$v) = $each($b) && $v='b';
677 :
nobodyさん :2006/03/31(金) 13:37:51 ID:3Hv4iuAG
質問です。 PHPで、サーバ上にあるファイルを操作するプログラムを書いているのですが、 その際ファイルそれぞれにユニークなIDを取得したく考えています。 例えば「test.jpg」というファイルがあれば、"test.jpg101250byte2005/03/04"あたりでMD5を取るという手もありますが、 更新日やファイル名が変更されても同じファイルからは同じIDを取りたいのですが、 何かいい方法はないでしょうか? 環境はLinux上のPHP4.4.1です。よろしくお願いします。
>>677 md5_file("./test.jpg")
おまいら join() と implode() どっち派? 俺は昔 Perl やってたんで join() なんだが
explodeもよく使うからそれに対応してimplodeの方 joinだとsplitだよね joinの方がタイプ数は少ないんだけどね
>>683 分かってて言ってるんだと思うけど、 split() と explode() は同じようで違うじゃん。
正規表現を使用しないなら explode() のほうが高速
そういやsplitとpreg_splitで単純な正規表現を使った場合ではどっちが速いんだろ。 $arr = split(" *, *", $str); 程度でもpreg_splitの方が速かったりするのか?
(" *. *")<ぅぅぅ
いいだしっぺの法則
きめぇwww
すごい初歩的な質問ですが SQLインジェクションというのを気にして mysql_real_escape_stringで入力値をエスケープしようと mojaviのfilterで単純に foreach($param as $key => $val) { $param[$key] = htmlspecialchars($param[$key]); $param[$key] = mysql_real_escape_string($param[$key]); } という処理を入力値全部が通るようにして安心してたのですが 改行のあるデータ(掲示板記事など)では改行コードが \r\nという文字列になってしまいます。 だからエスケープなんだといわれればそれまでなんですが 上の処理に改行コードだけは通すように書けますか? よろしくお願いします。
書けますか?と問われれば、 書けますよ、と答える。 そもそもhtmlspecialcharsを通しておきながら、\r\nを残す意味は?
>>689 あらかじめ改行を自分で決めたマジックキャラに置換しておくか、
表示する時に戻せばいいだけじゃね?
>>690 すいません、どういうふうに書きますか?
教えてください。
>そもそもhtmlspecialcharsを通しておきながら、\r\nを残す意味は?
htmlspecialcharsはhtmlタグをエスケープするだけじゃないですか?
mysql_real_escape_stringを通して\r\nを残す意味は
mysqlに収めるデータは他のシステムでも使えるように(web以外)
素の状態で収めておきたいからです。
>>691 表示はsmartyでやっています。
表示部はテンプレートで{$data.ddetail|nl2br}というように
nl2br修飾子を使って表示しています。
できれば表示部はこのままで行いたいと考えていますので
データベース入力前に素の形で突っ込めるような方向で考えてるわけです。
要は今までSQLインジェクションを気にしてなかったものに
mysql_real_escape_stringを採用した改造を行っていて
なるべく労力を減らそうとしています。
693 :
689 :2006/03/31(金) 23:06:56 ID:???
試しに $param[$key] = ereg_replace("\\r\\n", "\r\n", $param[$key]); とか書いて戻そうとしましたが何の反応もありませんでした。
3/32
どうやっても新年度に突入したくないみたいだなw
エイプリルフールは中止ですか
FFTを行いたいのですが、ライブラリか何かありませんか?
あ、なるほど、エイプリルフールだから わざと「3/32」にしてるのね。 2chのバグかと思った。
>>698 こういうバグはわざとじゃなきゃ出せないと思う
つか、わざわざ口に出して確認しないと、 この程度のネタの確証もてないレベルのヤツは2chくんなよ。
エイプリルフールだから
>>701 みたいな発言も納得出来るな
スレ違いしねよ
704 :
nobodyさん :2006/03/32(土) 15:20:28 ID:yVRxItMU
ファイルの行数を取得する方法は何かありますでしょうか?
$linenum = count(file($FILENAME));
706 :
689 :2006/03/32(土) 15:32:38 ID:???
ereg_replaceじゃなくstr_replaceなら思うようにいけました。 アドバイスいただいた方ありがとうございました。 $param[$key] = ereg_replace("\\r\\n", "\r\n", $param[$key]); ↓ $param[$key] = str_replace("\\r\\n", "\r\n", $param[$key]);
Win限定スクリプト? 誰も突っ込まないね。
ファイルの指定する文字が含まれた行を取得する方法はありますかね…。
ファイルのは抜きですすいません。
関係ないけど、PHPのロゴが犬になってて一瞬不正アクセスされた思ってめちゃ焦ったよ
掲示板作って、ログはファイルに書き込んでたんだけど、 最新の書き込み以外全部消えちまった。 ファイルロックもちゃんとしてたつもりなんだけど、 できてなかったって子とかな?それか他に考えられる原因ってある? wで開いてたんだけど。 下らん質問でゴメン。
>>712 読み込み、書き込み、ファイルロック関係のソースを全部晒してみろ。
DBを使えば解決
715 :
712 :2006/04/02(日) 00:07:25 ID:???
//書き込み
flock($fp,2);
foreach($lis as $li) fputs($fp, $li);
flock($fp,LOCK_UN);
fclose($fp);
読み込みはfile()使って二次元配列に入れて
ページ処理入れつつfor文で繰り返し表示してます。
>>714 実は今までDBでしかやったことなくて今回ファイルで初めて作ってみました。
DBでもちゃんとしないと壊れちゃうことあるんじゃないの?
>>712 >>715 wで開いたってことは、それまでの書き込み+新規書き込みの両方を
まとめてファイルにwriteしてたんだろ?
それで最新以外は消えちゃった、って言うんなら書き込みじゃなく
元ファイルの読み込みに失敗してるんだよ。
717 :
712 :2006/04/02(日) 00:27:44 ID:???
>>716 >wで開いたってことは、それまでの書き込み+新規書き込みの両方を
>まとめてファイルにwriteしてたんだろ?
そうです。説明不足でスミマセン。
なるほど。その線で調べてみます。
でも何度テストしてみても再現できないんだよなぁ・・・。
ありがとう。
>>715 $fp2ってどっから出てきたんだ。しかも第二引数なしのflockって…???
とりあえず、読み込みと書き込みの部分をfopenのとこから全部見せなきゃ
これで原因分かるやつは神がかってると思うぞ
DBでは普通に作れば壊れないが、下手な作り方すれば壊れるものが作れるかもな。
719 :
712 :2006/04/02(日) 00:40:55 ID:???
>>718 $fp2じゃなくって$fp,2だよ。コンマ入ってる。
2はLOCK_EXと同意。
今ログもう一度確認したら最終書き込みの人の
$_SERVER["REMOTE_ADDR"]で取得したはずのIPアドレスがない・・・。
何か関係あるんでしょうか。
そんな断片情報で分かってたまるか
単に処理の途中で変数消しちゃってるだけじゃないのか
まぁ、DB使ってて「ちゃんとやらないと」データ壊すような人だし。
phpとmysqlでちょっとしたシステムを頼まれたんだけど、最悪DBの中身が漏れて困る様なものではない&外からの悪意のある操作でDBが消えても困らない、ってもんだったら、入力値のチェックって不要? 表からは数百件程度の商品を検索とソート。 裏側からは画像とデータ登録の管理画面(登録、削除、修正、一覧)って構成なんだけど。 仕事ではないんで勉強をかねてやってみるんだけど、自分の技術じゃそこまで手に負えない。 お金をもらってその対策までするなら、最初からなんかあっても困らない作りにしておくのも悪くないかなとおもって。 もし入力値に対しての対策をするとしたら$_POSTと$_GETでのありえる(許せる)値をスクリプトの頭でチェックしてNGならエラーにしちゃうって処理でOK?
入力データをSQLに入れるときに全部mysql_escape_string()しとくだけで最低限は十分。
>>723 最低限、SQLインジェクション、クロスサイトスクリプティングの
対策はしたほうがいいような。
test.txtに バナナ りんご みかん が入っていたとして、これを$fruit[]に代入していきたいのですが、 どのようにすればいいのでしょうか?fopenでtest.txtを開いても 一行ずつ配列にいれる方法がわかりません。。
PHPのリファレンス本読めばサンプルコードが沢山書いてあるのに
>>727 あのね、これで一撃なんですよ。
$fruit = file(〜);
$a=123456789123456789123456789; echo $a*$a; みたいな事をすると 1.52415787807E+052などと省略(?)されて困っています とりあえずphp.iniのそれっぽい値(precision = 12)を変更してみたのですが 17桁目辺りから00000000000000000000となってしまい、正しい値が得られません へるぷみー
>>730 整数の扱える範囲(たいていのプラットフォームでは32ビット)を超えたものは浮動小数点数として扱われる。
そんな馬鹿でかい整数で演算する必要があるなら多倍長整数演算をサポートするライブラリ(bcmathやpearのMath_Integer)を使う。
>>723 そういう最低限のところは癖にしとかんと、他で墓穴ほるぞ
どこまでが最低限なんだか…
回答者が最低限だと思ったらじゃないかな。
$sql = "INSERT INTO TABLENAME (NUM, NAME) "; $sql .= "VALUES ($rec['num'], '$rec['name']')"; の'$rec['name']'(文字列)をどのように書けばいいでしょうか。 上記だと通らないし、'{$rec['name']}'だと'が引っかかります。 '{$rec[name]}'もparse errorです。 DBはFirebirdで文字列は'でくくる固定のようです。
>>736 '$rec[name]'
または
'{$rec['name']}'
何でわざわざ都合の悪い組み合わせでだけ試そうとするのかその神経が理解できない。
$rec[num], $rec[name] じゃ、ダメなんか っていうかSQLがおかしいんじゃね、それ firebird触ったことないから分からんけど DBエラーならエラーを全部張ってみそ とにかくエラーが出てるんならエラーを張ってみては
nameがvarcharなんでそ
>>738 firebirdに限らず、文字列をクオートしないで渡せるDBなんてあるのかよ。
741 :
738 :2006/04/02(日) 18:59:59 ID:???
やべ、かぶった しかもSQL文は大丈夫か postgreばっかなんで方言が身についてた
>>736 それ、name側じゃなくnum側がエラーになってるだろう。
743 :
723 :2006/04/02(日) 19:04:30 ID:???
たとえば、ソートひとつするんでも $_GET['orderby'] って変数を使ったりします。 こんな感じで一つ一つに対してチェックをしなくちゃならんのですよね? $_GET $_POST をまとめてチェックとか出来たらいいのに。 ところで、小さなサイトでつついたところで面白いものが出て来そうもないところに対して、実際に、sqlインジェクションをするために$_GETや$_POSTで変な値を入れるってよくあることなんでしょうか?
745 :
723 :2006/04/02(日) 19:09:21 ID:???
>>744 なるほど、$_REQUESTに対して、最悪入っていてはまずい文字列が入っていたらクエリ実行せずにたたき落とすって感じ?
case文のdefaultに飛ばすとか。
>>743 foreachで回すかarray_mapとかで配列を一括チェックしちゃえば?
しかし最初に全部のクエリにその手の処理をしちゃうと、 変なところでバグが出たりする(してはならないクエリも処理しちゃったり) かと言って必要な場所で毎回必要な処理をするのも、 万一忘れたら話にならんし・・・難しいね
748 :
723 :2006/04/02(日) 19:42:09 ID:???
>>746 まずい値をスクリプトの側で補正したり、値に対して個別のエラーメッセージを出したりしようとしなければそんなに大変じゃない気がして来た。
よく考えたら、そんなイタズラをする相手に対してそんな丁寧なインターフェイスを用意する必要なんてないもんな。
ループでまわして、問題があれば$errflag++して、ループがおわったところで$errflag>0だったらcaseのdefaultに飛ばす。
って感じでいいのかな。
この辺の入力値をまとめた配列に対してまとめて処理するってあたりは、ネットでさがしてもあんまり情報ない希ガス。どういうわけか。
一概にこうすればいい、って書きにくいものなのかもしれないけど。
749 :
723 :2006/04/02(日) 19:46:16 ID:???
>>747 >>748 を書いてる間にレスがあったみたいですね。
たしかにそうですね。
それぞれの変数について、sqlに突っ込む直前にっていうのが正しいのかもしれないけど、自分のようなスパゲッティソース書く奴にはとても手に負えないことになってしまいそうです。
やっぱり無理そうな気がして来たorz
750 :
nobodyさん :2006/04/02(日) 19:47:14 ID:dnNED4Rv
php4での質問です。 ボタンを押した後、画面に文字を表示させ、1秒待った後に該当のURLを表示する という処理をしたいのですが、ボタンを押したあとのfunction内で echo '<html><head>'; echo '<META HTTP-EQUIV="refresh\" content="1;URL=指定のアドレス">'; echo '</head><body>処理中です。</body></html>'; のようにすれば簡単に実現できます。 しかしこの場合、FireFoxなどのブラウザではRefererが取得できません。 header ("Location:指定のURL"); を用いればRefererを取得できるのですが今度は文字を表示できません。 具体的には次のようにしていますが文字が表示されません。 echo '<html><head>'; echo '</head><body>処理中です。</body></html>'; header ("Location:指定のURL",microtime(1000)); 何か良い方法はないでしょうか?
sleep
752 :
750 :2006/04/02(日) 20:20:21 ID:???
>>751 echo '<html><head>';
echo '</head><body>処理中です。</body></html>';
sleep(1);
header ("Location:指定のURL");
で試してみましたが文字は表示されないようです。
(1秒待ってリダイレクトされます)
>>749 スパゲッティソースはどんな場面でも効率よく開発なんてできないんだから諦めれ
755 :
750 :2006/04/02(日) 20:27:30 ID:???
>>753 javascriptにすると今度はIEでRefererが取得できなくなるようです。
>>750 >echo '<META HTTP-EQUIV="refresh\" content="1;URL=指定のアドレス">';
ここで指定したアドレス にリファラ情報を含ませて受け取り側で処理する。
厳密な意味でのリファラを出す出さないは、クライアント次第なので
別のサイト間では"リファラ"がないことを当たり前として作るもの。
クッキーもしくはセッションにReferer文字列を保存しといて METAのRefreshかJavaScriptのSetTimeout+locarion.hrefでジャンプが楽。 クッキーとかを使いたくないのであればRefresh他の飛び先にパラメータで Referer文字列を渡してしまう。 基本的に画面遷移を従った状態で前のページのRefererを保持させるのは ブラウザ依存になってしまうので無理と考え、何らかの形でデータ記録する 方法を検討しないとダメと考えるべき。
あと |echo '<html><head>'; |echo '</head><body>処理中です。</body></html>'; |header ("Location:指定のURL",microtime(1000)); こいうのは、試してみるまでもなく駄目だって気づこうぜ。 # HTTPのレスポンスを調べて理解
>>750 > しかしこの場合、FireFoxなどのブラウザではRefererが取得できません。
適当なこと言わないで下さい。
FirefoxはデフォルトでReferarをちゃんと送信します。
(IEと同じく設定の書き換えで無効にできますが。)
むしろ、IEはバグで他のサイトのReferarを送信したり正しく送信されなかったりすることがあるようです。
特にIE5.5はReferar関係にバグありまくりです。
>>759 Refreshでページ遷移するとRefresh元のページがREFERERとして
渡されてきてしまう、って話だろ?ごく普通の動きだと思われるが。
読解力ないやつだな。
762 :
759 :2006/04/02(日) 22:11:08 ID:???
>>760 > Refresh元のページがREFERERとして渡されてきてしまう
それがRFC通りの正しい Refererの実装なわけですが。
「しかしこの場合、FireFoxなどのブラウザではRefererが取得できません。」と書かれているよね。
想定外のReferarが渡される、って表現ならわかるけど、取得できないってことは一切送信されてないってことだ。
正確でない表現をすると回答者を混乱させるだけ。
>>761 独自っつーか、パラメータに渡す文字列は必ずurlencodeするのがお約束だと思うんだが。
>>762 くだらない質問スレで正確な言葉を使った説明なんて期待する方がバカじゃん
765 :
750 :2006/04/02(日) 22:28:48 ID:???
ちょっと説明不足だったようで申し訳ない。
.htaccessを使用して同じドメイン内でしか移動できない(直リンできない)設定をしています。
このため、どこかにRefererを格納しておくというような手段は使えないように思います。
FireFoxで
<META HTTP-EQUIV="refresh\" content="1;URL=指定のアドレス">
でもRefererを吐き出すようにできるプラグインか設定(はなかったはず)があればいいのですが
判明しているのは
header ("Location:指定のURL");
ではRefererを吐き出せる(ページ内のリンク先に正常に飛べる)ということだけです。
>>759 <META HTTP-EQUIV="refresh\" content="1;URL=指定のアドレス">
を使用した場合、残念ながらFireFoxではRefererを吐き出しません。
ttp://www.teria.com/~koseki/memo/referrer/ で実際に確認できますよ。
>>765 > このため、どこかにRefererを格納しておくというような手段は使えないように思います。
意味不明。クッキーやセッションやパラメータ使ってのデータ保持くらい普通にできるだろ。
> を使用した場合、残念ながらFireFoxではRefererを吐き出しません。
それがブラウザの正しい仕様じゃないの?
767 :
750 :2006/04/02(日) 22:58:47 ID:???
>>766 それはリファラを利用したアクセス制限は一般的ではないということでしょうか?
>>クッキーやセッションやパラメータ使ってのデータ保持くらい普通にできるだろ。
データ保持は可能ですが、これをブラウザ(または環境変数)にセットするということですか?
.htaccessで指定したものの実行順序はよくわかりませんがブラウザでアクセスした際に
アクセス元のブラウザの環境変数(リファラ)を参照して制限しているのではないのですか。
それだと保持したデータを渡すのはどのタイミングになるのでしょうか。
いまどき、REFERER使ったアクセス制限なんて普通やらないだろ。 REFERERを返さない設定のブラウザまたはセキュリティソフト多すぎ。
>>765 そういう用途なら普通にCookieに許可符を持たせればいいんでないの。
Cookieが駄目ならURLに付加してもいい。
誰かも言ってたけど、セッションでやるっつうこと。
>>767 アクセス制限だけが目的ならRefresh前のページで弾かれてるだろうから
Refresh後にはREFERERが取得できなくても問題ないんじゃないか?
REFERERが取得できないブラウザを全部弾いてるんだと弾きすぎだろうし。
REFERERチェックしないとセッションハイジャックができちゃうよ。
( ゜A ゜)
( ゜д゜)
脆弱性対策はアホでもできるがアホにはできないといういい例かね
>>771
IEとfirefoxで違う方法で成功してるんなら、ブラウザによって違う処理すればいいんじゃね 他のブラウザも含みたいんなら知らんけど
776 :
750 :2006/04/03(月) 00:22:26 ID:???
>>775 FireFoxとそれ以外で処理を分けるようにします。
アドバイスありがとうございました。
test.csvの一行目のファイルが
"1","あああ"
だとします。読み込みは
>>729 を参考にしたらできたのですが、
このうち「あああ」の方だけを取り出すのはどうしたらいいのでしょうか?
fputsの反対?
>>777 fgetcsv()
ただ、日本語データを含む場合はこける可能性が高いのであまりお勧めしない。
真面目にやると複雑な正規表現を使うか複雑な文字列編集が必要になるので結構面倒。
というか君、ひょっとしてマニュアルの類を全然読んでないの?
リファラーもクッキーも偽造可能なんだけどね。 限界がある事は知っておいた方がいいよ。
エラーの拾い方について質問です。 $fp = fopen($logpath, "a"); flock($fp, LOCK_EX); fputs ($fp, "$hoge2<>$hoge1\r\n"); flock($fp, LOCK_UN); fclose ($fp); このようにファイルに文字列を書き込む際、何らかのエラーが出て書き込めなく なる場合が出てくると思います。その際、 if (エラーがでたとき) { print("エラーがでたので書き込めませんでした"); } else { print("書き込めました"); } という風にしたいのですが、どのようにエラーを拾えば良いでしょうか。
ああああis_readableとかマニュアルに書いてありますね。 これでエラーを拾えるのか。ありがとうございました。
>>780 $err = 1;
if($fp = fopen($logpath, "a")) {
$err = 0;
flock($fp, LOCK_EX);
if(fputs ($fp, "$hoge2<>$hoge1\r\n") === FALSE) {
$err = 1;
}
flock($fp, LOCK_UN);
fclose ($fp);
}
if($err) {
print("エラーがでたので書き込めませんでした");
} else {
print("書き込めました");
}
とかでいいんじゃないの。迷うようなもの?
drupalでログイン状態が保たれている仕組みをお教え下さい drupla等の会員登録が必要なサイトで一度ログインすると、一度ブラウザを閉じてもサイド訪問するとログインした状態が保たれます。 これはどのような仕組みを使っているのでしょうか。 cookieを見るとセッションIDは使用しているようですが、セッションIDでは一度ブラウザを閉じると情報は保持されないですよね・・
>>783 セッションIDとともにデータベースにセッション情報を保存しとけば
いいのでは?
785 :
783 :2006/04/03(月) 09:25:21 ID:omuaP2sq
>>784 おへんじありがとうございます
セッション情報は/tmpに格納されているものだと考えていますが。
保存先をDBに変える方法があるのでしょうか、それとも/tmpから情報を読み取りDBに放り込むのでしょうか。
786 :
783 :2006/04/03(月) 09:33:47 ID:omuaP2sq
頂いた情報を調べたところ session_pgsql というものもあるみたいですね、一般的には皆さんどうやってるんでしょうか
787 :
783 :2006/04/03(月) 09:36:36 ID:???
すいません連続で書いてしまって・・ session_encode でDBに格納するのかな・・
788 :
783 :2006/04/03(月) 09:51:40 ID:omuaP2sq
>>784 分かりました、セッションidをクッキーに保存しておき、そのセッションidが入ったクッキーを持っているユーザがアクセスしたら、クッキーからユーザを特定してログインさせるって事ですね。
無駄に連続書きこしてすいません・・
omu
789 :
nobodyさん :2006/04/03(月) 11:41:02 ID:OZZpUwYy
実行ユーザーの取得はできないでしょうか? get_current_user がソレかと思いきや、これはスクリプトの所有者のようです。 そうではなく、実行しているユーザーが取得したいです。 getenv('USER') を試したのですが、これは場合によってはうまく取得できません。
>>789 posix_getuid()はだめ?名前の通りposix関数だから、winな環境だとどう動くか知らんけど。
GDライブラリを使って 動的にテキストのjpg画像データを吐き出して遊んでいるのですが、 フォントがttfしか使えないようです。 どうにかしてOpenTypeFontを使用することはできませんでしょうか。
system('who am i');
二次元配列 一部分だけソートして表示したかったので 以下のようなものを作りました $data_array = array(array(2,3,4,5),array(1,4,6,4),array(3,5,2,6); $sort = 3; //こっから $n=count($data_array); for($i=0;$i<$n;$i++){ $temp[$i] = $data_array[$i][$sort]; } asort($temp); $key = array_keys($temp); //ここまで for($i=0;$i<$n;$i++){ echo $data_array[$key[$i]][0]; } が、もっと簡単に上記と同じような事ができる関数は無いでしょうか?
>>793 こういうこと?
$data_array = array(array(2,3,4,5),array(1,4,6,4),array(3,5,2,6));
$sort = 3;
usort($data_array, create_function('$a,$b', 'return $a[$GLOBALS["sort"]] - $b[$GLOBALS["sort"]];'));
foreach($data_array as $d) {
echo $d[0];
}
>>794 専用の関数のようなものがあって
それを通せばいいというわけには行かなさそうですね
でも私の作成したものよりすっきりしてるの
793さんの物を使用したいと思います
ありがとうございます
>>795 該当の関数もあるにはある。
$data_array = array(array(2,3,4,5),array(1,4,6,4),array(3,5,2,6));
$sort = 3;
foreach($data_array as $d) $s[] = $d[$sort];
array_multisort($s, SORT_ASC, SORT_NUMERIC, $data_array);
foreach($data_array as $d) {
echo $d[0];
}
797 :
nobodyさん :2006/04/03(月) 22:19:59 ID:8XacjkZy
$_POST["変数名"]で受け取る変数名にdata$iなどの変数まじりの変数名を を受け渡すにはどのように記述すればよいのでしょうか?
ちとワロタ
800 :
797 :2006/04/03(月) 22:33:16 ID:???
ハウッ! ありがとうございましたTT
$_POST['data$i'] こう書いて詰まっていたと予想するがどうか?
802 :
789 :2006/04/03(月) 22:45:00 ID:???
>>790 そんなのがあるんですね。ユーザIDはちゃんと取れてるような気がします。
posix_getpwuid と組み合わせていい感じな気がします。
ありがとうございます。
>>792 最後の手段として、その手は考えていました。
でもなんとかなりそうでよかったです。
803 :
797 :2006/04/03(月) 22:45:47 ID:???
for($i=0;$i==15;$i++) {$newdata .= "," . $_POST["data$i"];} print $newdata; とCSVファイル作りたかったんですが、何故か$newdataが空で・・^^; 原因が$_POSTにあるのかと思った次第です^^; まだ原因わかってません・・・orz
$i==15?
805 :
nobodyさん :2006/04/03(月) 22:51:11 ID:irtGsMB0
よくあるテクニックですが、起こったエラーに応じて変数に数字を代入し、 ビット演算で起こったエラーを調べるスクリプトを作っています。 $errには起こったエラーに応じて、1,2,4,8 のいずれかを組み合わた和が代入されています。 以下のコードでどのエラーが起こったか分かるのですが、これですと無駄が多いような気がします。 if($err&1) echo err1; if($err&2) echo err2; if($err&4) echo err4; if($err&8) echo err8; switchで簡略化できないかと思ったのですが、switchでは if($err==1)と同じ動作はできますが、(switch($err){case 1:}) if($err&1)のように、"=="以外の演算子では処理できませんよね? とにかくもっと簡略化したいのです。代替案でも構いませんので、どなたか御指南下さい。 また、説明が分かり難ければその旨をお伝え下さい。 宜しくお願いいたします。
806 :
797 :2006/04/03(月) 22:54:15 ID:???
アリガトウございました。 深く反省しております 。・゚・(ノД`)・゚・。
>>805 そもそも、1、2、4、8の和が入ってる=複数のエラーメッセージを出す必要がある、んだから
switchじゃ代替になってないじゃん。
foreach(array(1,2,4,8) as $b) if($err & $b) echo $err[$b];
辺りじゃない?
くだらねえ質問なんだが ereg("[0-9a-zA-Z]{32}", $str) これは$strが大文字小文字のアルファベットと数字のみで構成され、32文字ぴったりの時のみTRUEを期待してるんだが、 どうも32文字「以上」でもTRUEになってしまう。 書き方違うのか!?教えてくれ!
自己解決した! 32文字ぴったりで一致する文字列が「$str に含まれていると」TRUEなのか! 畜生!
810 :
805 :2006/04/04(火) 00:02:00 ID:???
>>807 ご返答ありがとうございます。
申し訳ありません。重要な部分を抜かしていました。
以下のようにすれば希望の動作になるかと思われます。
(switchで理論演算ができるとした場合です。)
switch ($err){
case &1: echo "1のときのエラーメッセージ";
case &2: echo "2のときのエラーメッセージ";
・・・}
というように、break;を入れずにコーディングすればすべてのcaseと比較されますよね。
説明が足らず申し訳ありませんでした。
$errにはエラーによって既に1,2,4,8の和が入ってるので、$errを配列にしてしまうとまずくないですか?
foreach(array(1,2,4,8) as $b) if($err & $b) echo $message[$b];
$message[n] n=1,2,4,8 として、それぞれにエラーメッセージを入れればできますね。
ありがとうございます。
どう見ても32文字以上の場合です。 ほんとうにありがとうございました。
>>810 > 以下のようにすれば希望の動作になるかと思われます。
ならんでしょ。&1に該当した時点で以下全部実行されちゃうもの。
例えば1と8に該当するメッセージを出したい場合にswitchでどう処理すんの。
> すべてのcaseと比較されますよね。
最初に該当する場所が見つかった時点で以下は比較されません。
813 :
807 :2006/04/04(火) 00:08:19 ID:???
>>810 あー。スマソ
err1とかのdefineじゃ一括処理はしにくいんで配列化したんだが
変数名がバッティングしてるとこまで気にしてなかった。
うpしたファイルをrenameで任意の2バイトを含むファイル名を付けるのって無理ですかね? Invalid argumentって出ちゃう
815 :
805 :2006/04/04(火) 01:08:10 ID:???
>>812 そうなのですか。それは知りませんでした。
一度真になった時点で、それ以下は真偽にかかわらず、
比較されずにすべて実行されてしまうのですね。
不思議な条件分岐ですね。浅学でした。ご指摘ありがとうございます。
>>813 私もややこしい文を書いてしまったので勘違いを招いてしまったのだと思います。
度々申し訳ありません。
$errに代入される数字は、1を除き2の累乗であることを思い出し考えつきました。
for($i=1; $i<=8; $i*=2) if($err & $i) echo $message[$i];
一般にはどのようなアルゴリズムでチェックをしているのでしょうか。
外部にfunctionばっか書いたphpファイルがあって、 それを使いたいファイルの最初でinclude使って呼び出してるんですけど。 一度呼び出したら全てのfunctionを読み込んじゃうのですか? それともfunction ()と書いた時点で該当functionのみが呼び出されるのですか?
意味分かんないけど、読み込んだ時点で実行はされないよ。 日本語でぽk
>>816 >一度呼び出したら全てのfunctionを読み込んじゃうのですか?
「読み込んじゃう 」の意味が判らん。
同じファイルに複数のfunctionを記述してるなら、
そのファイルをincludeしたらメモリには「読み込んじゃう」よ。
ifで動的にincludeは、どうだったか忘れた。
>>815 お前が最初に書いた方法が一般的な方法だと思う
俺には無駄な方法とは思えないしこんな処理を簡略化しようとも思わないな
>>803 それは$i=0からはじめて$iが15の時だけ実行、だよ。
>>809 どうしても正規表現でやりたいなら/^[0-9a-zA-Z]{32}$/だな。
strlenつかったら?
822 :
805 :2006/04/04(火) 10:11:09 ID:???
>>819 そうですか。
あの方法はエラーが4パターンの場合ですが、
エラーのパターンがいくつもあった場合を考慮すれば、
すべてifですととても長くなってしまうと思いまして。
似通った部分をがあるとどうしても一つにまとめようとするタチなので・・・
たいして処理速度が変わるわけでもないですしね。
貴重なご意見ありがとうございました。
>>822 処理速度云々より、エラー発生時のメッセージ出力にバグが混入すると
最悪ケース時の保守効率が大きく落ちてしまって、致命傷になる場合がある。
単純なforeachくらいまでは許容できるが、数値演算のような手法は入れないのが吉。
>>822 処理速度で言ったらまとめたときの方がむしろ遅いだろう…
エラーの値を1、2、4、8の加算で表現しようとも思わないな。 元々そういう結果を返す関数があってそれを処理したいというならともかく。 $errを配列にしてエラーコードを順に格納するか、配列にしたくない場合は 「,」や「:」などの文字で連結するなどして、エラー内容を示す文字をセットして それをループ→連想配列にセットしたメッセージを表示、とかにする。 その方が拡張性やメンテ効率が高くて扱いやすい。
PHP5.1.0の環境(mb有効)で「てすと」をstrlenしたら 3て返ってきたんだけどいつから6じゃなくなったんですか?
>>826 そりゃmbstring.func_overloadに2がセットされて
strlenでmb_strlenが呼び出されてないか?
突然ですが mysql_free_result() や mysql_close() って必要ですか? 今まで.phpの最後で常に mysql_free_result(); mysql_close(); exit; ってやってたのですが、 途中で mysql_close してその後も処理が長いのなら有効だけど、 最後におまじない感覚で付ける程度なら別にいらないですかね?
829 :
805 :2006/04/04(火) 13:48:50 ID:???
>>823 安全性を考慮すれば確かにifが一番ですね。
ややこしくて見難くなるという欠点もありますし。
>>824 よく考えると余分な処理が入るので確かに遅くなりますね・・・
短くするということに拘りすぎていました。
>>825 特にプログラムに制約はありません。
ただやってみたいだけだというか、論理積で判別するということに感動してしまったので・・・
効率の良いコーディングというのはただコードを短くするだけではないのですね。
後々のメンテナンスのことやエラーを最小限にとどめること。これが肝心ですね。
アドバイスありがとうございます。
小数点以下4桁を取得したいのですがうまくいきません $a = 0.654338473287589 $a = sscanf($a,"%0.4f"); 「Bad scan conversion character "."・・・」というエラーが出てしまいます printfだと通るのでフォーマット部分は台状豚と思うのですが・・・
>>828 スクリプトの一番最後に記述するなら不要。
(PHPに自動で解放させた方が、見た目の処理時間は若干短くなる)
でも自分は気持ち悪いからcloseはしてる。freeは必要な時だけ(他の変数の場合も)
>>830 $a = 0.654338473287589;
echo intval($a * 10000)/10000 - intval($a);
833 :
832 :2006/04/04(火) 16:57:03 ID:???
わりい、後の - intval($a)は余計だ。 小数点以下だけの場合と勘違いした。 $a = 0.654338473287589; echo intval($a * 10000)/10000;
>>830 sprintf(,"%0.4f", $a);
じゃいかんの
835 :
834 :2006/04/04(火) 17:06:01 ID:???
コピペで余計なコンマが入った
PHPってC言語みたいだね。
( ´д)ヒソ(´д`)ヒソ(д` )
838 :
830 :2006/04/04(火) 17:29:36 ID:???
>>832 >>834 ありがとうございます
すみませんちょっと言葉足らずだったようです○凹
具体的には小数点以下二桁までの%表示が目的でした。(0.65438・・・であれば65.43%というように)
ifやらsplitやら駆使すればいけるとは思うんですが、勉強中の身なのでスマートな方法を模索してました・・・
839 :
832 :2006/04/04(火) 17:45:30 ID:???
>>838 んじゃ、これで
echo round($a * 100,2);
>>832 おおおおおお
ぜんぜん関数しらな過ぎですねおれ。
精進します!ありがとうございました
>>831 そうなんですよ。気持ち悪いんですよね
mysql_close();
exit;
と決まり文句のようにスクリプトの最後に付けてましたが、
実行速度面で差が出るならなくしたほうがスマートですね。
>>841 差が出ると言ったのは、その一行分をパースする時間の差のことだろ。
あくまで“差があるか無いかで言えば”ベースの話なんだから、実際には差なんて無いよ。
それより、プログラムを書く者として、自分で獲得したリソースを自分で解放するクセは付けた方がいいんじゃないかと思うよ。
それはすなわち、今どんなリソースが開かれてるかを意識するってことになると思う。
でないと、肝心なときにリソースリーク出しちゃうよ。
843 :
nobodyさん :2006/04/04(火) 19:07:07 ID:mQslQj05
PHP Version 4.3.11 正規表現の検索文字列が*だったりすると エラーが出てしまいます。 mb_eregi(): mbregex compile err: invalid regular expression; there's no previous pattern, to which '*' would define cardinality エスケープするのに、エラーが出る文字をいちいち探すのが大変なので どこかに一覧とか有りますでしょうか。
eclipse とかIDE使ってれば閉じるの忘れたり少しは防げるんじゃ
>>842 いや、差があると言ったのは「見た目」の話。
出力を先にやってリソースの解放を後回しにできるので
例えばHTTPの出力を受け取る側から見ると若干レスポンスがよい。
(出力バッファの噛ませ方にもよるので一概には言えないけど)
>それはすなわち、今どんなリソースが開かれてるかを
>意識するってことになると思う。
だね。
>>827 7が設定されてたので戻しました。thx
847 :
nobodyさん :2006/04/04(火) 22:35:01 ID:ERhiveKK
>>847 streemwrapper で検索しても何も出てこないと思ったらtypo
国内に限らずphp使ってる香具師はスキル低い香具師が多いよ。 そういうスキル低くても使えるように設計された言語ってのもあるけどな。
>>847 別にそんなにカチンとくるようなことは書いてなかったけど?
コミュニティの規模で言うと英語>日本語は当たり前だから、
その中のアホ(褒め言葉)な香具師の数も英語>日本語なだけ。
>>843 > どこかに一覧とか有りますでしょうか。
PHP公式サイトのオンラインマニュアル
>>850 そりゃあ習得コストが低い言語なんだから、裾野も広いわな
当然といえば当然
print $_SERVER['HTTP_USER_AGENT']; たった一行のこのスクリプトに脆弱性はありますか? あれば具体的にどういった方法による攻撃が可能か教 えてください。(単なる知的探究心)
855 :
nobodyさん :2006/04/05(水) 09:00:46 ID:NCTGlvjg
>>854 可能性があるとすれば、USER_AGENT にとてつもなく長い文字列が渡された時とか、
あるいは通常は含まれない文字が含まれている場合(\0 とか)に何か起こるかもしれない。
もしバッファオーバーフローによる脆弱性があるならば、USER_AGENT に何らかのコードを埋め込むことにより、
PHP の実行権限の範囲で任意のコマンドなどを実行できる可能性がある。
けど、そういうのはスクリプト自体の脆弱性とは言わないと思うよ。
スクリプトに脆弱性があるってのは、たとえば $_SERVER['HTTP_USER_AGENT'] をそのままSQLに埋め込んで
実行しちゃうようなコードについて言うんだと思う。
その点から言えば、そのスクリプトには脆弱性は無さそうだ、と言えるんじゃないかな。
856 :
854 :2006/04/05(水) 09:08:56 ID:???
>>855 なるほど。たった一行のスクリプトにもそんな問題点(厳密には言語依存の)があるん
ですね。非常に興味深いです。
SQLを発行したりする動作は、チェックを怠れば簡単に脆弱性を生んでしまうのであえ
て記述しなかったのですが、print命令一個でも弱点をつかれると危険かもしれません
ね。
ご回答ありがとうございました。
簡単に弄れるUAに対して何も警戒しない方がおかしい。
858 :
856 :2006/04/05(水) 09:29:06 ID:???
>>845 でもサーバの負荷が高まってる場合にもそうだとはいえない。
マメに開放できる部分は開放したほうが、アクセス集中しているときの
処理は裁けるだろ。
860 :
855 :2006/04/05(水) 09:37:29 ID:???
蛇足かもしれないけどもう一点。基本中の基本を忘れてた。
もし
>>854 の出力がブラウザに対してのものならば、USER_AGENT にタグを埋め込むことにより悪用できるね。
その場合には、そのスクリプトは脆弱だと言えるのかな。
>>854 >>855 >>856 シンプルな例だと、USER_AGENTがそのサイトのID、パスワードを入力させる
FORMのHTMLで、POSTの送信先が攻撃者の影響下のサーバだっら、ログイン情
報筒抜けになる。この場合だとID盗みたい相手のUSER_AGENT変えなきゃならんが、
容易に変えられるブラウザもあるし、変えた状態でそのブラウザ再配布することだっ
てできる。
もちろんこれは単純な例で、Javascriptとか組み合わせてもっと複雑なこと仕掛ける
事だって可能。
>>860 その場合、大抵被害を受けるのはクライアント側=UA偽装者
だね。
串系だとまた違うと思うけど。
>>862 UAが表示される掲示板とかだったらどうよ?
>>863 それは、UAを保存するってことであって、
>>854 の単純なprintの事例には当てはまらない
メールで受信したものをmysqlに取り込みたいんだけど どんな方法があるでっしゃろ?
1レコード1行ずつでも、1メールずつでも好きに入れればいいじゃん。
867 :
nobodyさん :2006/04/05(水) 20:10:33 ID:NCTGlvjg
>>865 スクリプトでメールを受信する方法について聞いてるの?
だったら、POP を話すスクリプトを書くか、.forward や .qmail 等で受信メールをスクリプトに引き渡すようにするといいんじゃないかな。
メールを取得するなら imap_open だろ
Amazonの特定のページに一定時間ごとにcron起動のPHPスクリプトから アクセスしてページ内容を取得し、商品の値段とかランキング順位とかを自動で得たいんですけど、 ページ内容の取得ってどうやればいいのでしょうか・・・。 (これってつまり、検索エンジンとかのクローラーを作るのと同じ原理??) ど素人過ぎて質問がおかしいかもしれませんが、どなたかヒントをください。
>>869 そのうちリモホ特定で灰汁禁になるから意味無いよ。
>>869 ひとまずこのスレを"ページ"で検索ぐらいはしたんだろうな?
>>854-855 おい、それ以前に、htmlspecialcharsを通さないとXSSの脆弱性があるだろーが。
873 :
872 :2006/04/05(水) 21:53:56 ID:???
って既出だったね すまそ
>>855 >$_SERVER['HTTP_USER_AGENT'] をそのままSQLに
普通にやってるけどなぁ。
リスクとコスト、天秤にかけて、それをしなければならないケースなんてそんなにないんじゃね?
つか、漏れはそんなシビアな仕事は一生無縁だし、やりたいとも思わんな。
>>875 いや、いくらなんでもmysql_escape_string()くらいはかけてSQLに入れるでしょ。常識的に。
>>875 天秤にかけるほど高いコストじゃないじゃん。
>>871 はい、
>>473 からの流れを参考にやってみましたが、
アマゾンのページからは情報を取得できません。
ちなみに、他のサイトからは取得できたので、アマゾン側で何かしらクローラーみたいなのを
弾くようになっているのでしょうか??
AWSは、たかがこれだけのために登録するのも面倒で・・・
(ある一つの商品を自動で一週間くらいチェックしたいだけなんです)
>>878 ユーザエージェントで弾いてんじゃね
と勝手な予想
php5 なら file または file_get_contents でUserAgentをいじれるみたいだけどね
特定のページとやらが検索結果だと出来るかどうか分かんないな
884 :
nobodyさん :2006/04/06(木) 04:55:30 ID:tcJKbNjs
<input name="int1" type="checkbox" <?php print $i; ?> > と記述すると一番後ろのHTMLの「>」がHTML上で文字として表示されてしまいます。 何故でしょうか?どのように記述すれば解決しますか?
<input name="int1" type="checkbox"><?php print $i; ?>
>>882 あれ・・・ホントだ・・・
「file_get_contents」にこだわってて、なんで出来ないんだろ?って
思ってたら、「file」だとページの内容を取得できますね・・・。
でもアマゾン以外のサイトでは「file_get_contents」でも内容を取得できたのに、
なぜアマゾンだけは出来なかったんだろう? そしてなぜ「file」なら成功したんだろう??
大垣リファレンス本をいくら読んでもど素人な俺にはサッパリわかりません。
正規表現について質問です。 13<>ほげほげ<>ほげほげ<> 12<>ほげほげ<>ほげほげ<> 11<>ほげほげ<>ほげほげ<> というような文字列の中から 12<>ほげほげ<>ほげほげ<> だけ取り出したいとします。その場合 12<>(.)+ で取得できるのですが 012<>ほげほげ<>ほげほげ<> 112<>ほげほげ<>ほげほげ<> このような文字列も取得してしまいます。 上記なような文字列が含まれる中 12<>ほげほげ<>ほげほげ<> だけ取り出すにはどのように記述すれば良いのでしょうか。
889 :
888 :2006/04/06(木) 05:53:57 ID:???
申し訳ありません。先頭に^つけたらおkでした。お騒がせしました。
>>887 勉強がてらやろうと思ったら、思ったより時間がかかった・・
まぁ、趣味でやったので必要なくても構わないけどね・・
もっとこうしたらっていうのは腐るほどあると思うので前向きなアドバイスは頂けたら嬉しいです。
-------------------------------------------------
header("Content-Type: text/html;charset=Shift_JIS");
mb_detect_order(SJIS);
print "encode:" . mb_detect_encoding("新渡戸 稲造") . "<br>";
print "新渡戸 稲造" . "<br>";
$search = "新渡戸 稲造";
$search = mb_convert_encoding($search,"UTF-8","SJIS");
$search = urlencode($search);
print "エンコード後文字列:<br>" . $search . '<br><br>';
$search = urlencode($search);
$url = '
http://www.amazon.co.jp/exec/obidos/search-handle-url/index=books-jp&field-author= ' . $search . '/';
print "アクセスするURL:<br>" . $url . "<br><br>";
$content = file_get_contents($url);
var_dump($content);
-------------------------------------------------
>>880 mod_rewrite
か
content negotiation(MultiViews) + path info
>>890 瑣末だがmb_detect_order('SJIS');
単に抜けただけだと思うけど。
894 :
nobodyさん :2006/04/06(木) 09:12:14 ID:tcJKbNjs
1桁数値(1)を2桁文字列(01)に変換して代入したいのですが sprintfのようにデータを成形して 文字列変数に代入できる関数はありませんか?
>>875 DB破壊されたりダンプ取られておわりでんがな。
898 :
894 :2006/04/06(木) 10:05:03 ID:???
できました!どうもありがとうございました。
899 :
nobodyさん :2006/04/06(木) 10:22:27 ID:n7Il5xOB
if (ereg("hoge", $var)) とするのと if (preg_match("hoge", $var)) とするのでは どちらが良いのでしょうか?
901 :
nobodyさん :2006/04/06(木) 10:32:01 ID:iRMo+Utm
>>899 preg_ の方がパフォーマンスがいいというのがどっかに書いてあったと思った
>>899 サンプルで正規表現使ってないのかもしれないが
if (strpos( $var, "hoge") !== false)のほうがはるかに速いと思われる
>>879 実際のとこSQLインジェクションを実際に食らうケースが
ほとんど無い&狙ってやるような外基地が来たら諦めた方が早い
ってのがリスクとコストを天秤に、の話だとは思う。
だけどそれ以前の問題として、USER_AGENTって
たまに顔文字入れてたりするバカがいる(案外多い)ので、
「'」を含んでてそのままだとSQLがエラーになったりするのな。
そういう、一般ユーザレベルのトラブルとクレームを防ぐ目的から
その手の外部から取得するデータをエスケープするのは
「当たり前」という感覚にしとかないと、ごく普通の仕事でも
「とても金を払えるレベルの品質じゃない」という烙印を押されるのよ。
UserAgentを('A`)にしてるけど、SQLのエラー垂れ流しサイトが結構ある。多くは個人サイトのようだが。 「アクセスログを徹底的に取っています」と言われているみたいで、忍者のアク解並みにムカつく。
んなことでいちいち腹たてんな 禿るぞ
>>905 お前アレか、最近流行りの
「バカにされていると思い込んで」殺人事件とか起こすタイプか?
>>904 キーボードを少しタイプしてエスケープしたほうが楽じゃない?
まあUSER_AGENTにかぎらず、SQLの値としてぶち込むならエスケープしとけ。
ラッパ使うなりして、 文字列は全部エスケープするような書き方にしとけばいい。
('A`)
( 'A)y-<) <プォーー このラッパじゃない
>>910 頭つかわなくていい仕事は他にもたくさんありますよ^^
914 :
nobodyさん :2006/04/06(木) 18:08:54 ID:vzhvHF2I
検索した文字列に色を付けて表示みたいなのはどういう方法でやるんでしょうか? いちいち検索した文字列Aを<font color=red>A</font>みたいに置換して表示するしか無いのかな?
>>914 Googleで何かの単語で検索して、キャッシュ表示でソース見てみれば?
>>899 ダンプしてみたら、そのほうが早いね。俺の環境ではeregの7割くらいの速度になったよ。
有益な情報ありがd。
ダンプじゃねー。ベンチだったorz
920 :
nobodyさん :2006/04/06(木) 23:20:44 ID:7dDG5hih
CSVを1行ずつMysqlにインポートしようと思うのですが、うまくできません。 スクリプトは↓です。 $fp = fopen($_FILES['upfile']['tmp_name'], "rt"); $filename = hoge; while ($data = fgetcsv($fp, 10000)) { foreach ($data as $value1 => $value2){ $sql = "INSERT INTO customer_csv (name, value1, value2) VALUES ($hoge, $value1, $value2)"; mysql_query($sql); } } ちなみに、私が今格闘しているCSVは2列から成ります。 何か、アイディアありましたら、 またよろしくお願いしますm(__)m
>>920 アイデアもへったくれもあるか
> foreach ($data as $value1 => $value2){
foreach ($data as $d) {
list($value1, $value2) = $d;
922 :
nobodyさん :2006/04/06(木) 23:57:29 ID:7dDG5hih
>>921 こう↓してみましたが、
while ($data = fgetcsv($fp, 10000)) {
foreach ($data as $d) {
print_r(list($value1, $value2) = $d);
$sql = "INSERT INTO customer_csv (name, value1, value2) VALUES ($filename, $value1, $value2)";
if(!mysql_query($sql)){print"*";};
}
}
list()の部分では、ちゃんと格納されています。
でも、mysql_query()がfalseを返します。
csvはただの文字列なのです。
他にも何かありましたら、お願いしますm(__)m
>>921 なんだそりゃ!?
while ($data = fgetcsv($fp, 10000)) {
list($value1, $value2) = $data;
の間違いだろう。
あとSQLの値はちゃんとクオートしれ
$sql = "INSERT INTO customer_csv (name, value1, value2) VALUES ('$filename', '$value1', '$value2')";
924 :
nobodyさん :2006/04/07(金) 00:34:14 ID:x2+fAQ84
>>923 カキコありがとうございます。
おっしゃる通り、
クォートしたらインポートできました。
ただ、(スレ違いかと思いますが)
この↓ようなcsvをインポートしたのに、
No.,grade
2000001,1
2000002,2
:
下↓のようになってしまいます。
mysql> select * from customer_csv;
+--------+------+--------+--------+
| csv_id | name | value1 | value2 |
+--------+------+--------+--------+
| 1 | hoge | 200033 | |
| 2 | hoge | N | o |
| 3 | hoge | g | r |
| 4 | hoge | 2 | 0 |
| 5 | hoge | 1 | |
そこで、インサート部分に
VALUES ('$filename', '$value1', '$value2') FIELDS TERMINATED BY ',' ";
を加えてみたのですが、
今度は、また、インポートできなくなりました。
バージョンは、
info.phpによれば、
phpは5.0.1、
mysqlは、Client API version 3.23.57 と出ました。
他に、何か分かりましたら、
お教えくださいm(__)m
>>924 >FIELDS TERMINATED BY ','
何の意味が???
とりあえずif(!mysql_query($sql)){print"*";}の前に print $sql; をやってみて
insert文自体が正しいかをちゃんと確認すれ
926 :
nobodyさん :2006/04/07(金) 01:09:58 ID:x2+fAQ84
>>925 ありがとうございます。
おっしゃられたとおり、
printしてみたところクエリーがちゃんと発行されていたので、
実行したらうまくいきました。
>>897 だって見られて困るデータなんか入ってないしw
バックアップあるしw
>>904 喰らった事無いし、そんなイタズラするヤシがクレーム入れるわけないし、頭のわるい倉の想定の範囲内で動作させるとこ見せて、それで問題無し。
管理画面からのデータ登録、削除、編集、一覧
外側から、検索、検索結果の各種ソート、ページング、この程度で100とかもらっちゃってるんですけど。
結局、ガワだけきれいにして、トップのメインビジュアルたまに差し替えてやるだけで大喜びよw
>>927 はいはい。これからもずっと言い訳して脆弱性ありまくりのスクリプト書きまくってくださいね。
>>927 何この馬鹿。
もし、脆弱性が発見されたら、会社全体の信頼が一気に失せるってこと分かってる?
それも、SQLインジェクションの対処という基本的なことすらしてないなら、
取引相手が激減するぐらいの打撃を受ける可能性がある。
俺がクラなら脆弱性意図的に無視するようなとこに依頼したくないからwww
880です。
>>891 さん、ありがとうございました。
HTTP_USER_AGENTにSQL埋め込むだけでインジェクション成立か。 アフォサイト撲滅のためにDROP埋め込んどこう(w まあphp使いに仕事頼んでる時点でスキル低いのは覚悟してるでしょ。 Javaなら100じゃ済まんし。
と、PHPすらまともに書けない愚民が申しておりますW
Java(笑)
Java(苦笑)
JavaScript(爆)
,===,====、 _.||___|_____||_ .. / /||___|^ l .. (・ω・`)//|| |口| |ω・` ) . ./(^(^ .//||...|| |口| |c ) ... / // ||...|| |口| ||し ....... (・ω・`) //.... ||...|| |口| || /(^(^ // .... .||...|| |口| || "" :::'' |/ |/ '' " ::: ⌒ :: ⌒⌒⌒ :: "" ` :: ,, ::::: ,, ; ̄ ̄ ̄ "、 :::: " ,, , ::: " :: " :::: "
つーか、変数で入力する値をエスケープするだけの作業で リスクが大幅に減るのに、なんで言い訳して無能をさらす 必要があるんだろ。
個人用のデータベースサイト作っててURL知ってるのは自分だけなんだが 今スクリプト確認したらちゃんと// 汚染除去とか// SQLインジェクション対策とかコメントが書いてあった さすが俺様と思った
専用の関数まで用意してあっていたせりつくせりなのに、 そういう所で手を抜こうとする神経が理解できん 最低限のレベルでも、高々関数を1つ噛ませるだけの手間なのに
ここは見事な釣り堀スレですね
Javaすら書けずに、phpに逃げ込んでる香具師が釣れまくり(w
おっ、Java書けるんだぁすごいんだね Javaすごいなぁ、いや本当すごい
JavaScriptとPHPしか書けないなぁ・・・
>>943 サイト運営ならそれだけ書ければ十分だと思う。
JavaScript俺も書けるように頑張る。
氏ね俺。
>>944 ん、俺はJavaScriptから始めたのでPHPが書けるようになったんだが。
未だにJavaScriptとJavaと使い分けてかけない奴がいるのか
クライアントサイドでJavaScript無効にされてることもあるので、 JavaScript -> PHP と覚えてったσ(゚∀゚ ∬オレ // ↓↓↓↓↓↓↓↓ 再 開 ↓↓↓↓↓↓↓↓↓
コメントにするって事は再開はスルーしろってことか。 いい度胸してんな。
コメントせずにかくとエラー吐くんだろ
// このスレ的にはこんな感じか <?php echo '再開'; ?>
<?php
//
>>951 よ、むしろこんな感じだろ。
echo '再開';
?>
<?php
//
>>952 よ、むしろこんな感じだろ。
?>
再開
saikai();
exit;
Fatal error: Call to undefined function: saikai()
WebアプリはPHPだけあればいいよな
再会 そして…
$shutdown -h now
echo ''Hello World!!;
962 :
961 :2006/04/07(金) 23:16:53 ID:???
ま、間違えたけど、う、打ち直したりしないんdから!
>>927 お前、不動産屋あたりの仕事を請けてるだろww
>>927 100ぐらいの仕事しかしてないんならそんなもんだな。
個人情報関連でその脆弱性で飛んだらお前もまとめてあぼーんすればいいさ。
>>964 そんなもんなのか。
個人サイトだけど漏れのサイト(アパート検索サイト)は1日3万PVぐらいなんだけど毎日大量の攻撃的なログが残るけどな。
SQLインジェクションを試されたり、フォームに膨大なデータを入れてバッファーオーバーフローを狙ってるような攻撃がきたり、
CSRFで荒らしを試みられたり、名前とか色々なフォームにタグ入れてPOSTされたりなど。
SQLインジェクションの対策もしてないと、俺のサイトなんて数日で乗っ取られるとおもうけどな
googlebotとYahoo! Slurpしか見にこないウチのサイトじゃ関係ない話だけど('A`)、 そういうのは不正アクセス防止法でどうにかできんのかな? やっぱりサイバーノーガード戦法じゃだめだろうけど
>>965 1日3万PVもあるサイトって俺には想像もつかないんだけど、
どうやってログチェックしてんの?
まさか生ログを目でズラズラと追っかけてんの?
単なるアクセス解析ソフトじゃ攻撃的なログかどうか判別できないだろうし・・・
>>965 っていうかさ、そういうのって、言ってみれば
「住居不法侵入未遂」と同じ行為だよね。
今の法律は「サーバー不法侵入未遂」で逮捕できないのだろうか?
969 :
965 :2006/04/08(土) 08:45:48 ID:???
>>967 Apacheの生ログはAnalogなどで解析するだけで目でチェックはしてない。
攻撃傾向などはphpのプログラム自体にログの出力ルーチンを組み込み、
それは手動でざざっと観覧してる。(例えば検索フォームに入力された文字列など)
>>968 あったら怖い、、
自分もついつい他の人のサイトでここに○○を入れるとどうなるかなーと好奇心で色々やりたくなっちゃうしw
970 :
nobodyさん :2006/04/08(土) 08:53:07 ID:Ultjru+K
掲示板の記事を削除する機能をいれたいのですが、 記事番号とパスワードをいれて、それがTrueなら削除と言う形にしたいのですが、 記事番号をまずファイル(txt)から探しにいって、その行の[6](PASS)と[1](記事番号)が一致なら削除と言う形でいいのでしょうか? その場合、入力された記事番号を配列に入れるようなやり方はどうすればいいのでしょうか?
array
>>969 >プログラム自体にログの出力ルーチンを組み込み
なるほど!! 自分の欲しい情報(ログ)だけ自分で吐き出せばいいのか。
>あったら怖い
でも冷静に考えたら「住居侵入未遂」と何ら変わらない、立派な犯罪行為だよね。
「入ろうとしただけ」でも。むろん「たまたま間違って」変な入力とかしちゃう可能性もあるけど、
短時間に繰り返しそういうことやってる記録が残れば、十分に犯意を認められるでしょう。
現在の法律ってどうなってんのかな?
侵入未遂ってかピンポンダッシュに近いかも?>入力をいじってみる ピンポンダッシュが犯罪かどうかは知らん
>>968 犯人が捕まって処罰されて終わりで済むなら、
大阪の池田小学校の事故後の問題は、とうに解決してるわな。
多少の抑止効果があるとは思うけど、そういうのは
「まともな人」にしか通用しない。
そして「まともじゃない人」に法律は関係ない 無力だね、ぼくたち(´・ω・`)
977 :
nobodyさん :2006/04/08(土) 14:17:17 ID:neGSM4sD
htmlメールをテキストメールに変換するツールを作りたいんだが、 どうすればいいでしょうか? タグを全て取り除くくらいしか思いつかない。 というか普通のテキストメールに<重要>が入ってたら 取り除かれそうでいやん
str_replace (<, <, $var)
引用符で括らないと...
980 :
nobodyさん :2006/04/08(土) 14:48:55 ID:w/uOiIRC
検索システムを作ろうとした場合、 <select name ="aaa"> <option>--選択なし--</option> <option>a</option> </select> で、選択なしを選んだ場合、 空白として処理したいのですが、 if ($aaa == "--選択なし--"){ $aaa = "";} としてもうまくいきません。 どうしたらよいでしょう?
===
wait()みたいな関数ないでしょうか。 数秒ストップみたいな
sleep()やusleep()みたいなのならある。
>>973 ピンポンダッシュのつもりが、うっかりドアをこじ開けちゃったら犯罪だぜ。
>>975 人殺しとサーバー侵入とでは、やりやすさの度合いがはるかに違うことを考慮せよ。
サーバー侵入は、その気になれば自宅の部屋から一歩も出ずに、決断してから30秒後にも実行できる。
抑止力の存在が非常に重要だ。
>>977 htmlメールの場合には、ここからここまでhtmlだっつーマークがついている。
それをチェックした上でタグ抜きすればよい。
>>980 <option value="実値">表示値</option> と書くのが正しい。
そして、$aaa($_GET['aaa']や$_POST['aaa']) = "実値" となる。
986 :
nobody :2006/04/08(土) 18:43:48 ID:MHlGyYpV
アパッチ上のPHPでSQLserverにアクセスしてデータを取りたいんですが、 テーブル名に()<全角かっこ>が入っていて、 普通の文字コード変換(mb_convert_encoding($string, "SJIS", "AUTO"))では エラーになってしまいます。 対応策はありますでしょうか?
テーブル名を変える。
988 :
nobodyさん :2006/04/08(土) 20:57:13 ID:AiL9m4c/
phpでmovabletypeみたいなブログツールを作っています。 新規エントリーのときはプルダウンでカテゴリーを選ぶようにしています。 新規にカテゴリーを追加するときは カテゴリーを追加ボタンを押すと小窓が開いて、 カテゴリー名を入力→保存→小窓閉じる という流れになっているのですが、 メインのウインドウに戻ったときに、いったんブラウザを更新しないと、 (もう一回データベースを読みに行かないと) プルダウンに追加したカテゴリーが反映されません。 ちなみにエントリーの内容と記事に付けるカテゴリー名は 別のテーブルで管理しています。 ここで問題なのですが、IEだとリロードすることで、 途中まで書き込んだフォームの内容が 全部消えてしまいます。 これを回避するにはどうすればいいでしょうか? よろしくお願いします。
>>988 新規カテゴリの時は記事POST時に一緒に受付でいいんでない
わざわざ小窓を開く意図がわからんぺ
>>988 全然PHP的解決じゃないけど、
1.メインウインドウのカテゴリー表示部分はID付きDIVタグ内に記述
2.小窓でカテゴリー更新→JavaScriptで親ウインドウのカテゴリーDIVのInnerHtmlを更新
ってやれば、容易に連動できるんじゃない?
それ以外にも方法はあるだろうけどいずれにしてもJavaScript併用が必要そうだし。
991 :
990 :2006/04/08(土) 21:57:55 ID:???
あ、いけね。読み間違った。更新したいカテゴリーはselectのプルダウンなのね。 じゃあ、その内容を小窓からJavaScriptで更新すればいいわ。
>>929 すげー愛社精神ワロス
うちの会社も、エラー処理とかやってると、
「そんなのいいから、とりあえず動くようにしちゃってよ。予算も時間もないんだから!」て怒られるよ。
上に命令される以上知った事じゃない。
993 :
980 :2006/04/09(日) 00:32:45 ID:???
>985 ありがとうございました。 なぜか、valueを削除していました。 もう一つ質問なんですが、 検索結果を、表示させる際、ページを分けて表示したいのですが、 検索結果の2ページ目以降が、フォームで受け取った値を保持しません。 どうしたらよいでしょうか?
994 :
nobodyさん :2006/04/09(日) 01:05:33 ID:qYTyFCRs
>>992 たった一つの関数噛ませるのがそんなにイヤ?
とういうか、どんだけ大掛かりなことを想像してるの?
SQLインジェクション以前に、文字列入力するフォームにアポストロフィ一個入ってるだけで動かなくなるようなもの作って納品してるの?
>>992 すごい落ち着きの無い会社だな。
漏れの会社は上司からは、コードが汚いだの、安全性は最重視しろだのと言われるし
セキュリティホールチェックの期間も十分に与えられる
ただもし脆弱性が発見されたら首レベルの始末が・・・orz
>>994 そんな欠陥プログラム小学生でもつくんねーよなw
プロが
そんなもん作らないで^^;;;;; エラーチェックやセキュリティ確保をする時間すら与えられないなら悪いけどその会社自体がくさってる
>>992 文字列入力で ' だのを含められただけで動かないものは、「とりあえず動く」レベルではないと思うけど・・・
>>992 よくそんな会社で仕事してられるな。
プログラマの能力評価もまともにできねーだろ、そんなとこじゃ。
つーか、学生のバイト中心で安い!早い!だけを売りにしてる会社じゃねーの?
>>995 うちはそこまで安全重視ではないけど、SQLのエスケープ処理くらいはさすがに常識の範疇。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。