【PHP】下らねぇ質問はここに書き込みやがれ 35
PHPに関する質問用スレです。ここならお前の下らない質問に回答があるかも知れません。
まず読め→【PHP マニュアル】
http://www.php.net/manual/ja/ PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは
>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 34
http://pc8.2ch.net/test/read.cgi/php/1165519374/ ◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
http://pc8.2ch.net/php/subback.html ・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
http://pc8.2ch.net/db/subback.html ・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
関連スレ
注:昔は本スレ(PHP質問スレ)というのが別にあったけど、今はここが本スレです。
◆超初心者を自覚してる方ははこちらへどうぞ
くだすれPHP(超初心者用)2
http://pc8.2ch.net/test/read.cgi/php/1164617202/ ◆その他
http://pc8.2ch.net/php/subback.html PHP関連スレは非常に多いのでこの中でブラウザのCTRL+F等で「PHP」を検索!
5 名前:nobodyさん[sage] 投稿日:2006/12/08(金) 04:24:36 ID:???
【簡易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プログラムとして実行された結果になる。
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に保存?
→ 好きにしてください
「エスパーきぼんぬ」「氏ね」「(゚Д゚)ハァ?」等のレスを貰う八ヶ条。
1. ハードウェア、OSのバージョン等には一字一句触れない。
2. 大切な個人情報が漏れるとまずいので、己の行った操作、変更などは秘密。
3. エラーメッセージの類は決して書かない。「エラーが出るんです」で留める。
目の前で生じている現象をそのまま具体的に書くなどもっての外。
事実より俺様の脳内解釈を優先すべし。
4. 独り言文体で必勝。
「…なんだけど、どうすればいいのかなぁ」「何が悪いんだろう?」
5. 「急いでいます」「困っています」等、自分の都合を全面に押し出す。
6. もう試したことを得意げに指摘してくる奴には、厳しく対応。
「それが駄目だったから質問してるんです」「それはもう試してみて駄目でした」
"どう"だめだったのか、本当に実際それを行ったかどうかなんか問題じゃない。
7. ストレートに答えを書かないもったいぶったレスには、逆切れで対応。
「だからどうすればいいんですか?」「分からないなら引っ込んでろやゴルァ」
示されたURL等を参照するなんて態度は、回答者を甘やかすことに他ならないので
絶対に避ける。
8. 情報は小出しに。
「エスパーきぼんぬ」 補足
上の八ヵ条を「一つでも」満たす者は質問者として不適格だということだ。
そのような悪い質問に対して答えられるのは,
質問者の意図をすべて汲み取ることのできるエスパーでもなければムリ,
という意味であって,決して,高度な技術を持つユーザに対する尊称でなはい。
まちがっても「エスパーの方,回答お願いします」
なんて痛い質問するな。つうか氏ね。
7 :
1:2006/12/21(木) 13:52:35 ID:???
>>4で前スレの4+5を一緒に貼ってしまってる…。吊ってくる。
すみません、何かfunctionを使ったらエラーが出るんです。
急いでいるので教えてくれませんか???
>>1 乙
エスパーきぼんぬも入れてくれてありがとう。
>>9 急ぐのをやめればOK
「年内で終了なんだよな」というのが気になったので、あえて入れないままにしました。ごめん。
今後は●持ち頑張れなのかもしれません。
12のPHP最適化テクニック
ttp://phpspot.org/blog/archives/2006/11/12php.html 01. staticメソッドが使えるなら使おう。速度は4倍になる
02. __get, __set, __autoload は使わない
03. require_once は重い
04. include, requireで読み込むファイルはフルパスにしよう
05. スクリプト開始時のUNIXタイムを $_SERVER['REQUEST_TIME'] で取れる
06. strncasecmp関数やstrpbrk関数を使えるケースはこれらを使い、正規表現は使わない
07. preg_replaceはstr_replaceより速い、しかし、strtrはpreg_replaceより4倍速い
08. 引数を、単体か配列かで自動判別するようなコードは出来るだけ避ける
09. @ を使ったエラー制御はとても遅い。→ @fputs($fp, "?");
10. $row["id"] は $row[id] より7倍速い
11. PHPのエラーメッセージは重い( noticeとかwarningとか)
12. for ($x=0; $x < count($array); $x) のように、forの中でcountを使うと毎回countが呼ばれるので使わない。
15 :
軟式PHP:2006/12/21(木) 14:24:43 ID:???
require_once…使ってる('A')
>>15 俺もだ・・・
これはrequireかincludeにかえたほうがいいのかな
>>14 03と05が為になった。
10は?
後ろのidは定数?
>>15 本とかwebでサンプル見ると、普通に使ってるよね。
>>16の言うとおり変えたほうがいいのかな?
>>16 そらー、多重読み込みしないように気を遣って
無条件に読み込むようにすれば速いでしょう。
でも多数のincludeファイル間で相関があるなら
メンテナンス性を考慮するとonceが必要だと思うけどね。
明らかに多重読み込みを防止する必要が無い場面でまで
onceを使うなよ、って程度でいいんじゃないか?
>>14 07が意外だ…str_replaceってそこまで遅いのか!?
ページの最初にheaderとして使う場合はincludeでよさげかな
じゃあおれが夜中ベンチマークとって調べてみるよ
>>17 $row[id]と書いた場合、まずdefine定義の「id」を探して
それが無かった場合に"id"という文字列として扱われるから
その検索にかかる時間の話だと思われ。
無駄な検索処理を避けよう!ってのは02、03、04も同様かと。
$data = array(
'1'=>array('type'=>'hoge', 'age'=>22),
'2'=>array('type'=>'foo', 'age'=>13),
...
);
こんな配列があった時、
$data[1]や$data[2]や$data[3]などをランダムに入れ替えたいのですがどのような方法があるでしょうか?
簡単に言うと
$data = array(
'1'=> array('type'=>'foo', 'age'=>13),
'2'=>array('type'=>'hoge', 'age'=>22),
...
);
こんな感じで、$data[$1]ここの$1以下をランダムで挿げ替えたいのです。
shuffle($data)ではできませんでした。。
$msg = "MIME-Version: 1.0\n";
〜 省略 〜
$msg .= "From: $this->m_from\n";
$mp = popen("/usr/sbin/sendmail -f $this->m_from $this->m_to", "w");
fputs($mp, $msg);
pclose($mp);
今までメール送信するときはこの用にsendmailを使ってきたのですが、
qmailで同じようなことを行う方法をご存知ないでしょうか。
よろしくお願い致します。
>>25 そんな変なメール送信方法、使ったことありません。
むしろそんだけ単純な方法なら簡単にqmailに変えられるんじゃない?
qmailのsendmailラッパーを使えば見た目sendmailで中身qmailとかできるでしょ。
mail関数あるのに・・・
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
そういえばどこかに自作関数公開するスレなかったっけ?
こんなの作ったんだが使えるかな?
北緯東経より二点間の距離をメートルで返す
function gps($NA,$EA,$NB,$EB){
list($NA1,$NA2,$NA3,$NA4) = split("[.]",$NA);
list($NB1,$NB2,$NB3,$NB4) = split("[.]",$NB);
list($EA1,$EA2,$EA3,$EA4) = split("[.]",$EA);
list($EB1,$EB2,$EB3,$EB4) = split("[.]",$EB);
$q1 = round($NA1+(($NA2/60) + (($NA3.".".$NA4)/3600)),6).",+".round($EA1+(($EA2/60) + (($EA3.".".$EA4)/3600)),6);
$q2 = round($NB1+(($NB2/60) + (($NB3.".".$NB4)/3600)),6).",+".round($EB1+(($EB2/60) + (($EB3.".".$EB4)/3600)),6);
$NA = $NA1 + ($NA2 / 60) + ($NA3 / 3600) + ($NA4 / 3600000);
$EA = $EA1 + ($EA2 / 60) + ($EA3 / 3600) + ($EA4 / 3600000);
$NB = $NB1 + ($NB2 / 60) + ($NB3 / 3600) + ($NB4 / 3600000);
$EB = $EB1 + ($EB2 / 60) + ($EB3 / 3600) + ($EB4 / 3600000);
33 :
続き:2006/12/21(木) 16:05:07 ID:???
$NA = 3.1415926535 * $NA / 180;
$EA = 3.1415926535 * $EA / 180;
$NB = 3.1415926535 * $NB / 180;
$EB = 3.1415926535 * $EB / 180;
$NA = $NA - ((11.55 / 60) * 3.1415926535 / 180) * sin (2 * $NA);
$NB = $NB - ((11.55 / 60) * 3.1415926535 / 180) * sin (2 * $NB);
$c = cos($NA)*cos($NB)*cos($EA-$EB)+sin($NA)*sin($NB);
$s = sqrt(1-($c*$c));
$t = $s/$c;
$z = atan($t);
$z = $z * 6369000;
if($z){
return $z;
}else{
return FALSE;
}
}
>>32 よくわかんないけどすげ〜
あなたのサイト教えて
>>35 ごめん、まだサイト持ってないです
就職活動中だがポートフォリオない俺オワタwwww
----------------------------------------------------
(使用例)
//大阪
$osaka_n = "34.41.56.713"; //北緯
$osaka_e = "135.29.53.705"; //東経
//兵庫
$hyogo_n = "34.41.27.261"; //北緯
$hyogo_e = "135.11.50.825"; //東経
$result = gps($osaka_n,$osaka_e,$hyogo_n,$hyogo_e);
echo $result;
----------------------------------------------------
▼結果表示▼
27566.2781881
----------------------------------------------------
あんまり利用頻度は低そうだけどすごいと思うよ
>>23 解説ありがとう。
PHP暦長いつもりだけど、define定義の「ID」が未定義の場合、
”ID”という文字列として扱われることを知らなかったよ。
でも個人的にはいやな仕様だな。
バグの原因になるような気がする。
39 :
nobodyさん:2006/12/21(木) 16:58:28 ID:/jd0802W
少しご質問。
foreachでA配列を回しDBにインサートしていっているのですが
A配列の最尾からインサートしていくという処理は可能なのでしょうか。
>>38 notice errorが出るから判るよ
E_NOTICE消してたらだめだけど
43 :
nobodyさん:2006/12/21(木) 17:19:18 ID:/jd0802W
>>40 A配列のcountをとってfor文から行う事で解決しましたん!
44 :
nobodyさん:2006/12/21(木) 17:20:40 ID:/jd0802W
>>42 ありがとう
array_reverse 調べてやってみます!
MySQL3.23で使っていたデータベースを
別PCの5.1のに移したら
phpMyAdminで構造のとこ見たら何かエラーでてる・・・
やっぱり同じバージョンで統一しておかなきゃダメなのかな
っていっても、既に3.23の配布は終了しているわけで
>>41 thx
開発中はいつもE_ALLに指定してるので大丈夫そうだね。
>>45 何かエラーじゃ全くわからんが
MySQL は 4.0 以前と 4.1 以降では全く別物
>32
地球は完全球体じゃないという野暮なツッコミはなしですか
50 :
nobodyさん:2006/12/21(木) 18:59:59 ID:ZaC7YilI
log4php使ってる方いますか?
php5でも正常に使えるのでしょうか?
>>47 そか、ありがと
3がDLできるとこってもうないのかねぇ・・・
3どころか4.0自体がもう旧式だと思う・・・
>>51 4.0.xであれば3との親和性は十分高いから、4.0.xをインストールするのが適切。
4.1以降でさえなければまず大丈夫じゃない?
54 :
nobodyさん:2006/12/21(木) 21:39:49 ID:/jd0802W
えと、URLに付属するGETを削除する方法ってありますか。
セルフ.php?action=tatsunoko&id=pro
二回目はidを有効にしたくないのです!。
セルフ.php?action=tatsunoko&id=pro
↓
セルフ.php
>>54 2回目って何?
Locationヘッダで自分自身に1度飛ばしちゃえばいいのかなーって内容に見えるけど。
57 :
nobodyさん:2006/12/21(木) 22:16:14 ID:o0k/ncWb
mysqlを4.1(rpm)に、phpを5.2(コンパイル)にアップしました。
phpinfoで確認すると、cliでは mysqlの Client API version が 4.1.22 となりますが
webブラウザから確認すると 3.23.58 となっています。
apacheモジュールとcliではmysqlクライアントは別のものを使うんでしょうか?
Client API versionを上げるにはどうしたらいいのでしょうか。
入力→確認→送信
でセッション使ったんだが、クリアするのに
unset($str)でだいじょぶかな?
前スレにunsetはやめたほうがいいようなこと書いてたし
だからunset使わず、$a="";や$a=array();等使えと何度いったら(ry
61 :
nobodyさん:2006/12/21(木) 23:15:17 ID:cxJGLCdv
すみません、最近XPにアパッチ入れてphpいじりはじめたのですが、
ほんのサンプルにしたがってphp書いたらタイトルが文字化けしました。
<html>
<head>
<title>サーチエンジン活用php</title></head>
<body>
test
</body>
</html>
これのheadタグ内に、<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=EUC_jp">
を足しても、Shift_JISに変更しても、やはり文字化けします。
php.ini の mbstring.internal_encoding = EUC-JP をShift_JISに変更しても
化けるんですが、どこを直したらいいのでしょう?
すみませんが、ご回答よろしくお願いします。
mbstring.http_output
63 :
nobodyさん:2006/12/21(木) 23:32:31 ID:1NDthtg1
$int = 300;
変数$intには (int) 300 が代入されているとします。
これを、1から300まで一つずつ配列に入れたいのですが、どういうふうに
するのが一番スマートでしょうか?
そういう関数があれば一番良いとは思うのですが……。
余談: 書くときに「ずつ」なのか「づつ」なのか迷った。
調べてみると「づつ」は歴史的仮名遣いらしい。今まで「づつ」って書いていたよ……。
64 :
54:2006/12/21(木) 23:33:16 ID:???
>>55>>56 今みると自分でも意味不明でした。
今日は晩飯抜きの刑で明日に備えます。
65 :
63:2006/12/21(木) 23:36:07 ID:1NDthtg1
例示:
array(300) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
:
:
[298] => int(299)
[299] => int(300)
}
こんな感じです。分かりにくいとは思いますがよろしくお願いします。
66 :
nobodyさん:2006/12/21(木) 23:38:26 ID:cxJGLCdv
>63
for($i=1;$i<$int;i++){
$intarray[]=$i;
}
68 :
63:2006/12/21(木) 23:39:48 ID:1NDthtg1
>>67 やはりループさせるしかありませんよね。
ありがとうございました。
ループしかおもいつかんかった。
>>63 $array = range(1, $int);
任意のセッション変数を破棄するときに、なぜunsetではダメなの?
俺がテストしてみたところ、unsetによって、
セッションファイルに記録されていた変数名とその内容(値)が
きっちり削除されていたので、問題ないと思うんだけど?
>>71 unset($_SESSION)はだめよってことじゃないの
>>72 なるほど、じゃあ例えば
unset($_SESSION['hoge']);
ならばOKってこと??
curl_getinfoを使ってファイルの更新時間って取得できる?
マニュアルでそれぞれの項目の説明で違う事書いてあるんですけど・・
使ってみたらいいんでしょうけど、記述方法が間違っているのか値が取得できないんです。
正解を教えてください
76 :
nobodyさん:2006/12/22(金) 15:34:26 ID:u4lBJyPy
$dataの中が"あああ","いいい\""と[\"]が余分に入っているデータがあるのですが、
これを消す(\"を空白に置換する)方法が分かりません。
$str=eregi_replace("[\"]","",$data);
としてみたのですが、全体の"まで消えてしまい、希望通りなりませんでした。
どうしたらいいのでしょうか?
>>76 エスパーな俺はmagic_quoteの問題だと推測。
消す事を考える前に余計な文字が入る理由を考えよ。
正規表現がちがくね?
「\\\"」 かな、試してみて
79 :
76:2006/12/22(金) 15:45:45 ID:???
>>78 これです!\を消すのにどういう正規表現かわからなかったんです。
凄く参考になりました。ありがとうございました。
82 :
nobodyさん:2006/12/22(金) 17:15:50 ID:FQdb0ydc
77 :nobodyさん :2006/12/22(金) 15:40:20 ID:???
>>76 エスパーな俺はmagic_quoteの問題だと推測。
消す事を考える前に余計な文字が入る理由を考えよ。
77(*´・ω・)(・ω・`*)ネー
84 :
nobodyさん:2006/12/22(金) 17:24:40 ID:n9VSwh4k
データベースからデータを取得して表示する処理なんですが、一ページ
30件ずつにわけて表示することにしました。
SELECT * FROM `tbl_name` LIMIT 90, 30
ここで困ってしまったですが、次のページ(90件以降の30件)と
前のページ(90件以前の30件)をナビゲーションしなければならないことです。
私は、それぞれのページへリンクすることでこれを実現しようと考えたのです。
<a href="?page=2&count=30">前のページ</a> :: <a href="?page=4&count=30">次のページ</a>
ただ単に ($_GET["page"] + 1), ($_GET["page"] - 1) とやってもできるのですが、これだと
データが存在しないのに永遠とページが作られてしまうだけなので、次の30件、前の30件が
それぞれ存在する場合にこのリンクを表示するようにしたいと思っています。
こういう場合どうするのが一番効率的にできるのでしょうか。
できれば関数化して、ページがあれば TRUE 、なければ FALSE というのが良いと思っています。
表示総数取得してページ計算したらいいだけじゃないの?
俺はこの方法だけど?
86 :
nobodyさん:2006/12/22(金) 17:43:37 ID:n9VSwh4k
>>85 $result = mysql_query( "SELECT COUNT(*) FROM `tbl_name`" );
$row = mysql_fetch_row( $result );
$num_maxrows = (int)$row[0];
総数を取得して $num_maxrows に代入しました。
そこから、どういう式をつくればよいのかが分かりません。
かなり強引にやればできますが、普通はどういう式なのかを教えてくれると嬉しく思います。
>>86 85じゃないが。
たとえば1ページ30件と仮定し、全部で100件のデータがあるとする。
その場合、ページ数*30 でページ終端の番号が出る。
4ページ目で 30*4=120 となり該当件数を超えるので終端であることがわかる。
そのため「(ページ番号 * 表示件数) >= 最大件数 の条件が成り立つとき、
次のページへの遷移を作成しない」という条件が成立する。
あとはがんばれ。
蛇足
select でカウントを持ってくる場合、できるだけ pk の値を参照した方がいい。
若干だが負荷が下がる。
なけりゃあしゃあないが。
>>88 プライマリキーかどうかより、検索で使用頻度の高いindexかどうかが肝心。
プライマリ設定であっても実際のプログラムで使用頻度が少ないものだと
count(*)の方がまだ高速だったりするよ。
>>89 すま、まちがいた…<index と pk
まさに蛇足だった…。
91 :
nobodyさん:2006/12/22(金) 20:17:08 ID:n9VSwh4k
<input type="text" name="a[b1]" value="1">
<input type="text" name="a[b2]" value="2">
<input type="text" name="d[e1]" value="8">
のようなデータをPOSTで受け取ると
それぞれ$a[b1][c1]、$a[b2][2]、$d[e1][8]のような形にし、
そこに同一の文字をセットしたいのですが、うまくいかずに困っています。
function alt_form($var, $set){
foreach($var as $foo){
foreach($foo as $key => $val){
$tmp[$foo][$key][$val] = $set; //$fooを入れることができずにerrorが出ます。
}
}
return extract($tmp);
}
alt_form($_POST, "入れたい文字");
なにか解決策はないでしょうか?
name属性に[]は使えるよ name[] みたいにね
>>92のような使い方はしたことないけど
95 :
92:2006/12/22(金) 22:49:17 ID:0IVErS6h
>>93 配列で受け取りたいときは、こうしないとできないと思って。
でもmixiのプロフィール変更の趣味の部分はname=hobbyで統一されてる・・
どうやって処理してるんだろう
>>92 お前、なんかすっげー間違ってると思う。
仮にお前が考えてる通りに実現できたとしても、すごく効率の悪いやり方。
なんでそんな複雑なやり方にしたいの?
もっと頭使ってシンプルにしな。
<input type="text" name="a[b1][1]" value="設定したい値">
100 :
92:2006/12/22(金) 23:31:02 ID:0IVErS6h
(´;ω;`)ウッ
出直してきます
>>95 チェックボックスの値の渡され方が判らないときはGETメソッドでリクエスト見てみ
渡された値の根本的な処理法が知りたい場合はperlの解説サイトとか見てみ
102 :
75:2006/12/22(金) 23:37:44 ID:???
curl_setopt
CURLOPT_FILETIME = TRUE を設定すると、ドキュメントの更新日時を取得しようと試みます。 この値を取得するには、curl_getinfo() で CURLINFO_FILETIME オプションを用います。
curl_getinfo
CURLINFO_FILETIME" - ドキュメントを取得するのにかかった時間。 取得できなかった場合は -1
正解を教えて〜ヒントだけでも頂戴
値自体が出てこないからわかんないんです
103 :
92:2006/12/22(金) 23:48:19 ID:0IVErS6h
>>101 上書きされると思ってたんですけどそうではないんですね。
勉強になりました。
ありがとうございます。
>>102 "CURLINFO_FILETIME" - Remote time of the retrieved document, if -1 is returned the time of the document is unknown
だから誤訳じゃないの
とりあえず、手をうごかせ
105 :
92:2006/12/22(金) 23:52:23 ID:0IVErS6h
それと自分は前のすれ?で
フォームの確認画面からどうやってその値を維持するのか質問していたものです。
で結局自分で間違った方法でできたと勘違いしてしまいまして
今、やり直そうとしているところです。
入れたい文字にcheckedを入れてみようと思っていたんですが
間違ってるみたいなので別の方法考えて見ます。
106 :
nobodyさん:2006/12/23(土) 00:24:01 ID:k4+RqfGZ
便乗で悪いんだけど
登録内容の修正画面とかでフォームの値を再現するときって、
sessionなりhiddenなりで渡して、○○だったらchecked表示〜ってやつを全部繰り返すしか方法ないの?
POSTリクエストした内容ってどこかに残ってないのかね。javascriptのhistory.back()でもだめだし・・・
>○○だったらchecked表示〜ってやつを全部繰り返すしか方法ないの?
単に配列をループで回せばいいだけじゃん。
これならチェックボックスの数がいくつになろうともコードは変わらない。
POSTリクエストした内容に何を期待してるの?
>>109 考えればすぐ作れるレベルじゃないの?と思う上に
具体的なサンプル示すには質問の方が具体性無さ杉
基本形は
foreach($_POST as $key => $value) {
修正画面用のFORM組み立て処理
}
かと思うけど。
111 :
107:2006/12/23(土) 02:41:39 ID:???
>>109 自分で考えもせずにすぐサンプルとか言うのはバカの証拠だぞ。
あと、
>>110も指摘している通り、お前が具体的に何をやりたいのか
サッパリ分からないので、サンプルを示しようがない。
具体的なサンプルってのは具体例を挙げよということではなく、
実際に何らかのサンプルを挙げよ、って意味だよ。
実際例とか無いの?できるできるっていう抽象的な話だけ?
というわけでよろしく。
>>112 自分で考えもせずにすぐサンプルとか言うのはバカの証拠だぞ。
あと、
>>110も指摘している通り、お前が具体的に何をやりたいのか
サッパリ分からないので、サンプルを示しようがない。
>>112 普段から具体例見ながらコーディングなんてやってないから
いきなりサンプル探してきてくれって言われても困る。
>>110のforeachじゃサンプルにならんのか?
考えればすぐ作れるレベルだし、そうじゃないならいい勉強になる例題だと思う。
どっかからソース拾ってきて眺めてみるって勉強法はいまどきはやらないのかな。
$inputdata = $_POST["inputdata"]; #過去に入力されたプルダウンのvalue
$arr = array(); #プルダウンメニューの(連想)配列
print "<select name=\"pulldown\">\r\n";
foreach($arr as $key => $value)
{
print "<option value=\"$key";
if($key == $inputdata) print " checked";
print ">$value</option>\r\n";
}
print "</select>\r\n";
htmlホニャラララとか打つのめんどいから省いた。
動くか試してもいないけどよかったらどうぞ。
>>106 ひょっとしてこの質問って、
POSTで送信→確認画面(ここにリンク)→クリックで修正画面
って構成になってるとき、リンクにパラメータとか一切つけないで
修正画面を組み立てるにはどうするのか?って話?
そういう話ならセッションかhiddenで修正画面に全POSTデータを
渡さないと無理だと思うよ。当たり前だけど。
117 :
115:2006/12/23(土) 05:04:23 ID:???
あー、見事に間違えてるや。まあ動かせばすぐわかるレベルだし
まあいいか。。。
>>112 お前なぁ、バカな上に、その偉そうな態度は何なんだよ?
氏んだほうがいいよ。
UTF-9でコードを書いています。
メールを送信すると、UTF-9で書かれたメールが送信されるため、
文字化けしてしまいます。
どのようにしたら、文字化けを防ぐことができるのでありましょうか?
>>119 mb_convert_encoding()でヘッダ、本文を個別に変換してからメールするか、
mb_send_mail()でお任せ変換をかけてメール送信までやってもらうか。
ただ、mb_send_mail()はPHPのバージョンによってはバグってることがあるので
過信は禁物。楽だけど。
122 :
nobodyさん:2006/12/23(土) 08:22:06 ID:U3EbhbvS
朝っぱらから下らないかも知れない質問で悪いんだが…
php.iniのsession.use_trans_sid設定についてマニュアル読んだんだが
「透過的なセッション IDの付加をするかどうか」の、“透過的”ってどーゆー事?
IPアドレスかなんかで他人と重複しないsidを割り当てる、みたいな事?
>>122 PHPで表示する各リンクやフォームに自動的にセッションIDパラメータを付加する、って意味。
これがOFFで相手がクッキーを使えない端末が相手の場合は、
プログラマが自分でリンクやフォームにセッションID値を埋め込む必要があるけど、
これをONにしとけばPHPが自動判別して(相対パスで自サイト内へのリンクの場合に限り)
全部のリンク・フォームに自動的にパラメータをHTMLの中に埋め込んでくれるようになる。
それを「透過的な付加」と表現している。(セッションIDの値が透過的なわけじゃないよ)
124 :
122:2006/12/23(土) 08:57:59 ID:???
なるほど。
すごく丁寧なお答えを頂けたお陰で頭の中がすっきりしました。
session.use_only_cookies=1で運用しようとしてる自分には必要ない機能かな。
でも、得体の知れない物が1個減ってよかったです。
本当にありがとうございました。
>>112 書店へGO(図書室&図書館でもいいぞ)
ファイルフォームに適当なファイル名打って、POSTで取得した$_FILES['hoge'][tmp_name]って
そのファイルパスが存在しなくても何らかの一時ファイルを開く?
ファイルの存在チェックをfopenするあたりでやってエラーならPOST元のページに値を返したいんだけど、
fopen失敗すらしないからどう処理すればいいのかと・・・
>>126 fopenのモードによる。"r"なら失敗するけど"w"なら作っちゃうからダメでしょ。
ファイルの存在チェックは普通file_exists()とis_file()の組み合わせで行うものだと思うけど。
n a b c ←フィールド名
-------
1 o t t
2 o u t
3 s p p
4 s o p
5 s q p
上記のようなデータベースのテーブルがある場合に
cフィールドの値が異なるものだけ1行ずつ取得したい、
つまり上の場合、1と3のaフィールドの値(oとs)だけ取得できれば良い、
という場合、スマートな取得方法はあるでしょうか?
思いついたのは、全行一旦配列として取得して、
cが重複する値を含む配列は重複分を削除(unset)、
なんですが、
これだとデータ量が多い場合にメモリを食って、すごい無駄な作業が多いかな
と思っています。
129 :
128:2006/12/23(土) 13:29:12 ID:???
書き忘れてました、ちなみに mysql 使ってます。
>>128 SQLでできるからDB板でSQLの質問してくるといいよ。
131 :
128:2006/12/23(土) 13:38:16 ID:???
>>130 レスサンクスです、
PHP側の処理で何か良い方法ないかなと思ってます。
SQL文をカキカキいじるのが非常に苦手なので・・・。
ただ、実際どんな記述になるのかさっぱり分からないので、
DBで聞かせてもらおうと思います。
ありがとうございます。
というか、DBでできることは全部DBにやらせるのはパフォーマンス向上とともに
余計なバグ増やさないポイント。
133 :
nobodyさん:2006/12/23(土) 15:40:51 ID:ECUJ+Mwa
君たち、ちょっといいかな。
返信機能付掲示板の子レスはどのようにログに書き込めばいいのだね?
忙しいだろうけどこの質問のために時間割いて教えたまえ。
どのスレに質問しようか迷った末、ここでさせてください。
微妙にすれ違いだったらすいません。
fedora5を使っていてphpを5.2.0にあげてみました。
無事make installできて問題なく動いてるのですが、
pear install ***
をやると
PHP Warning: PHP Startup: ldap: Unable to initialize module
Module compiled with module API=20050922, debug=0, thread-safety=0
PHP compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
in Unknown on line 0
Warning: PHP Startup: ldap: Unable to initialize module
Module compiled with module API=20050922, debug=0, thread-safety=0
PHP compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
in Unknown on line 0
というWarningが出るようになりました。
その後pearのインストールもできるし、その他の動作にも今のところそれほど問題もないようなのですが
ちょっと気になりましたので、ご存じの方いましたら、このWarningの意味、回避方法等、教えていただけると助かります。
ちなみにphp.netでldapのマニュアルを見てみましたが、いまいち何をするものかわからず(DB関連?)、
話の種に--with-ldapでコンパイルしなおしてみましたが、状況は変わりませんでした。
135 :
134:2006/12/23(土) 15:46:07 ID:YVUy+5Yq
ああ、いつもsage消すの忘れる・・・
JD使ってるんですけど、デフォルトでsageになっちゃうもので
>>134 LDAPのIモジュールとPHPのAPIのバージョンが違ってるからじゃないの
サーバー上のファイルをダウンロードさせる流れなのですが、
window.open('download.php?no=123');
で開いた先のdownload.phpで
header("Cache-Control: private");
header("Content-Disposition: attachment ; filename=" . mb_convert_encoding($this->get_name(),"SJIS","EUC-JP"));
header("Content-Length: ".$content_length);
header("Content-Type: application/pdf");
としています。
このやり方だと別ウィンドウに空白ページが表示されたのち、ダウンロード確認ダイアログが出るのですが、
ダイアログ上のボタンを操作した後に、空白ページの方が消えずに残ってしまいます。
どうにかダイアログの「開く」[保存する」を生かしたまま自然と消す方法無いものでしょうか?
>>138 window.openしないで現在画面で同じことすればよい
140 :
134:2006/12/23(土) 21:52:31 ID:YVUy+5Yq
>>136 ありがとうございます
yum list installed | grep php
したらphp-ldapもふくめ、5.1.6のパッケージがインストールされていました。
こいつを消して、インストールしなおしたら、出なくなりました。
すっきりしました
どうもです
141 :
nobodyさん:2006/12/23(土) 23:44:22 ID:XutG8yPr
>>133 親スレNoとレスNoを書き込み内容と一緒に保存すりゃいいだろ。
142 :
nobodyさん:2006/12/24(日) 00:45:19 ID:+LXDPeGu
セッション関数を用いないとセッションはできないのでしょうか?
自作でセッションを行い事はできないのですか?
143 :
nobodyさん:2006/12/24(日) 01:06:55 ID:DO1hDjYZ
>>142 できるよ。
ユニークなID生成してクッキーに持たせて各クライアントを識別するって感じ。
ただ、あんまり知識なしでやると、セキュリティに脆弱なものになってしまうことも
あるかもしれない。もっとも標準のも使い方やバージョンによっては危ないですが
>>192 セッション関数と同じことをやればできるよ。
車輪をもうひとつ発明するの?
145 :
142:2006/12/24(日) 01:27:27 ID:???
phpがバージョンアップされて仕様が変更されても対処できるようにしたいんです。
独自仕様で挑戦してみます。ありがとうございました。
146 :
134:2006/12/24(日) 02:10:04 ID:muKXaag1
もうひとつお願いします。
configureの時に
--with-imap=shared,/usr/local/imap-2006e --with-imap-ssl
と、sharedを付けて後読みにしようと思ったのですが、うまくいきません。
imap.soというのが/usr/lib64/20060613に出来るので、
iniに
extension_dir =/usr/lib64/20060613
extension=imap.so
と書いてみましたが、ONになりません。(なんのエラーも出ません)
dl('imap.so');
も試してみましたが、パスは通ってるのですが
「これはextensionファイルではありません」っぽいエラーがでて動きません。
ちなみに=shared,を外してコンパイルすると
問題なく動きます。
何か解決策がありましたらお願いいたいします。
いちおう
Apache/2.2.2 (Fedora)
PHP Version 5.2.0
です
まちがいなくここで聞いても解決しないと思われ。
他板で聞いたほうがマシ
おまえらのPHP理解度<<<<<<<超えられない壁<<<<<<150の理解度
s/おまえら/148/
150 :
nobodyさん:2006/12/24(日) 03:46:39 ID:pn7eEEmF
文章を改行毎に配列に格納してくれる関数ってありませんでしたっけ?
151 :
nobodyさん:2006/12/24(日) 04:03:49 ID:JTHPmry9
>>150 $array = split("<br>",$var);
改行って<br>?\n?
152 :
151:2006/12/24(日) 04:17:58 ID:???
$array = split(array("\r","\n","\r\n","<br>","<br />"),$var);
これでいいや
>>144 > 車輪をもうひとつ発明するの?
よくそういうこと言い出す人いるけど、汎用的な関数を使うより独自に用途に適した関数作ったほうが動作も速いし安定するわけ。
そして汎用的なものと違い機能が限定される & 独自開発なものだとブラックボックス化する ということによりセキュリティも向上する。
あ、もちろんセキュリティに関しては、セキュアなコーディングができない人が書くと逆効果だけどね。
分かりやすく Perl にたとえると、use CGI; use Encode; を外して独自に Cookie取得とかフォームデコードのロジック書くだけで、
一般的な掲示板なら 30%以上のリソース削減ができる。
自分ひとりで書くならそれでいいけどチームでやる場合はねえ。
リーダー「このプロジェクトではセッション関数の使用は禁止です。
弊社の独自クラスを使ってください」
っていわれたら普通に萎えるな。挙動を勉強するのメンドクセ。
>>154 Cとかでコーディングする場合は普通は独自クラスだらけだけど・・・
>>153 俺もそうだ。
既存のDAOやフレームワークがあっても自分で作りたくなってしまう。
作り方も知らないで使いたくないし、そんなに多くの機能はいらないし、内容が分からないと何か不安になる。
>>153 >独自に用途に適した関数作ったほうが
の時点で車輪じゃないよ。
べつに車輪を発明するのが悪いとはいわない。でも、本当に必要か考えないと。
とくに、セッションやセキュリティ関連については、下手が作るとろくなことはない。
おまえらのウンチクを語るスレじゃねーんだよ。
犬小屋を作ったこともない人が、家を建てる。
車輪を作ったこともない人が、クルマを作る。
どちらも不可能ではないだろうけど、俺はそうしたくない。
俺だったらクルマを作る前に、まずは車輪やハンドルなどの各パーツを
拙くてもいいから自分で作ってみて、構造や原理、挙動などを体得する手法を選ぶ。
もちろん、その時は上手な先人のモノを参考にしながらね。
そんで、自分で車輪を再発明してみて原理が理解できたら、そこで初めて、
他人が作った「もっと優秀な車輪」を採用してクルマを組み立てるな、俺なら。
どういう仕組みで動いてるかちゃんと理解するために解析したり、
自分で作ってみたりするってのは別にいいと思う。
ただまあ、どんな技術も土台になる技術や他の技術を利用した上で
成り立ってるもので、それらをすべて自分でまかなうってのは非現実的。
他人が作ったライブラリとか一切信用できないならPHP自体使えないし。
まあ程度問題だし、かけられる時間がどのくらいかによるし、結局
好き好きなのかな。
>>155 C初心者だけど、あれってライブラリかなり使わないかね。
ApacheだとコアやモジュールはAPR使うし。
そもそもクラスって使えたっけ。
おまえのグチをきくスレでもない
162 :
92:2006/12/24(日) 10:19:08 ID:c6yKDW/O
>>92です。
ヒントを元に作ってみましたので、報告に来ました。
おかしいところがあればご指摘ください。
$center = array('sugaku_1' => array('数学T・A','数学T','受験しない'),
'kokugo' => array('国語','受験しない'));
foreach($center as $subject => $select){
foreach($select as $key => $val){
echo '<input type=radio ';
echo 'name='.$subject.' ';
echo 'value='.$key.'';
if(isset($_POST) ){
if($key == $_POST[$subject]){
echo ' checked';
}
}else{
(int)$last = (int)count($select) - 1;
if($key == $last){
echo ' checked';
}
}
echo '>'.$val.'<br>'."\n";
}
}
すでにある物を改良したり、似たようなものを作るのは「発明」なんかじゃねーだろ。
独自クラスを強制するのは構わんから、
100%仕様書通りにしてくれ。
一般的なモジュールはググればバグレポートも出てくるが、
独自クラスはそれも無い。
それも踏まえてドキュメントを用意しろ。
>>163 Wikipediaででも「車輪の再発明」でもしらべてみろ
>>142 それなりに枯れてるPHPlibのセッション機能を参考にするといいと思うよ。
入力文字列からJavaScriptや意図しない関数を除外したいのですがなにかヒントはありませんか?
すべてのタグを無効化する
htmlspecialchars()
script タグの中に出力するのは論外
169 :
nobodyさん:2006/12/24(日) 16:15:53 ID:JTHPmry9
クリスマスだし、独りで過ごす俺に何かプログラム組んでやってくれないか(´;ω;`)
print_r($Xmas);
ほれ
171 :
nobodyさん:2006/12/24(日) 17:09:57 ID:JTHPmry9
>>170 何も表示されない・・・・・(´;ω;`)ブワッ
PHP 注意: 変数が定義されていません
(´;ω;`)ブワッ
形が有るモノが全てではないんです。
174 :
167:2006/12/24(日) 17:42:12 ID:???
>168
ありがとうございます。
var flag = false; function disableSubmit() { if (flag) { return false; } flag = true; if(document.seform.soushin) { document.seform.soushin.disabled = true; } return true; }
こんなタグ?スプリクト?が混じるんですけど・・
htmlspecialchars() で除外できますか?
記述ミスしてるのかなぁ〜除外できないんですけど・・
>>174 <script>とかonclick=とかに出力しなければ実行されないから
それだけ気をつければ問題ないでしょ。
htmlspecialchars()は関係ない。
<script>がきたら<script>に変換してくれるだけ。
うわ、やらかした。
<script>がきたら<script>に変換してくれるだけ。
が正解。
177 :
167:2006/12/24(日) 18:25:38 ID:???
ありがとうございます。HTMLの変換だけですよね
データ取得→データベース(MYSQL)→再利用
こんなのをやりたいのですが、データの中にスプリクトが混入するのでデータベースに入力出来たり出来なかったり
挙動不信なんです。
解決のヒント下さい
フォームからの入力されるとき → 生のまんまいれる = <script>hogeohoge</script>
↓
データベースから取り出すとき → 生のまんま扱う = <script>hogeohoge</script>
↓
HTMLに吐き出すとき → 変換する = <hogehoge>
これで特に問題ないかと。
180 :
178:2006/12/24(日) 19:31:27 ID:???
>>179 なんでスペースの話になってるの?
<script>タグをまるごと変換するんじゃなくて、
< を <
に
> を >
に変換するっていう基本的な話だよ。
181 :
167:2006/12/24(日) 19:49:53 ID:???
HTMLだけであれば関数でなんとでもなるんですけど・・
182 :
179:2006/12/24(日) 20:02:34 ID:???
>>180 そういうことだったか。
<script> を <hogehoge> に、みたいにscript要素ばっかりを取り出してたから
タグ利用可能掲示板での危険な要素の使用禁止でもやってるんかと誤解しちまった
>>178 DBに入れるときとHTMLを表示するときにエスケープっしょ?
>>165 車輪の再発明は既にあるのにそれを知らない、関知しないのが前提。
だからわざわざ「改良」と言っているのだ、脊髄反射イクナイぞ。
mixiにログインして、毎回日記をチェックするのが大変なので、
ログイン→見たい人の1週間以内の日記をピックアップ→表示
みたいな、mixiでRSSリーダーみたいなことをしたいのですが、
どういう処理を書けばいいのか悩んでいます。
どなたか知恵をお貸し下さい。
質問です
POSTやGETで送られたデータをまとめて処理したいのですが
やり方がわかりません。
よろしくお願いします。
>>185 「作ってください」ならスレ違い。
やってて分からない事があったのなら、分からない箇所をもっと具体的に書いてくれ。
>>186 $_REQUEST
186じゃないけど
PHPマニュアルでREQUESTある?
探しても見つからないんだが
190 :
186:2006/12/24(日) 22:18:15 ID:???
>>187さんありがとう。
たとえば$_REQUESTの配列すべてにtrimしたいのですが
foreachでできますでしょうか?
やってみたけどできなかったので、よろしくお願いしますです。
ちなみに$_REQUESTと$_POSTは同じでしょうか?
192 :
186:2006/12/24(日) 22:27:17 ID:???
>>191 ありがとうございます
$_REQUESTを小一時間勉強してきますです。
うわー
俺今まで送られてきたデータ全て
$dt1 = $_POST['dt1'];
$dt2 = $_POST['dt2'];
$dt3 = $_POST['dt3'];
とかやってたわ
こんな簡単な方法があったんだな
194 :
186:2006/12/24(日) 22:57:26 ID:???
え?$_POSTと$_REQUESTの違いがよくわからない…
>>194 print_r($_POST)
print_r($_REQUEST)
196 :
186:2006/12/24(日) 23:04:28 ID:???
>>195 はい。でも必要ないデータなので$_POSTでいいのでは?
>>193さんが言ってる意味がよくわからないのは俺だけでしょうか?
ちなみに$_REQUEST使うより$_POSTや$_GET使ったほうがいいとどこかに書いてありましたが。。
197 :
193:2006/12/24(日) 23:06:14 ID:???
送られてきたのを簡単に全部各配列に入れるんだよね?
198 :
186:2006/12/24(日) 23:13:23 ID:???
>>197 そうっすね
でもそれは$_POSTでも同じだし、結局取り出すのではないでしょうか?
>>198 foreach($_POST as $key=>$value){
$$key = $value;
}
これじゃいかんの?
ドルマーク二つって何?
>>198 $_REQUESTは$_GETや$_COOKIE, $_POSTなどを全部纏めた配列。
添え字の重複は設定されている優先順位に基づいて処理
積極的な使用は推奨されてなかったと曖昧に記憶してる
>>200 変数の値を変数名として使用
>>200 $abc = "test";
$$abc は $test
203 :
200:2006/12/24(日) 23:37:52 ID:???
ありがとう!
これ使うと複雑になりそう、どの変数が存在するかとかでロジック作れそうではあるが・・
よくわからんが
extract($_POST);
でいいんじゃないの?
| | | | |┃| :|
| | | | |┃|i | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | | ガタガタ |┃| < そうと聞いちゃお・・・・
| | | |______|ミ | .i.| | あれ?開かない・・・
| | ̄ ̄ ̄ ̄ ̄ ̄| | |┃|:. ,| \____________
| | | | |┃| i|
| | | | |┃| :|
| | | | |┃|i |
| | | | |┃|, :.|
|_|====――●==|_|______|┃| i|_______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄
extract($_POST) とか extract($_GET) の話はテンプレ
>>4の7番め参照。
part16・826氏の説明がわかりやすくて、しばらくまるごとテンプレ採用されてた。以下引用。
-----
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するのは楽だと思いますけど。
207 :
186:2006/12/25(月) 05:46:20 ID:???
みなさんありがとうございます。
勉強になりました。楽なやり方あったんですね。
ちなみにフォームから送られたデータはどのような処理をしたらいいでしょか?
trim
htmlspecialchars
mb_convert_kana($value,"KVa");
これくらいで十分でしょうか?
よろしくお願いします。
(しかしここは勉強になるなぁ)
208 :
nobodyさん:2006/12/25(月) 07:06:34 ID:pCOFjbSe
用途による。好きにすれ。
>>206 っていうかさ、本題から外れるんだけど、
セッションにパスワードを保存する意味ってあるのかな??
ログインフラグを立てておけば済む話なのでは。。。
>>209 それを言い出すと他にも突っ込みどころ満載になっちゃうから
211 :
nobodyさん:2006/12/25(月) 09:53:19 ID:rDGXp0bv
mixiで携帯から日記投稿するために、、専用の投稿アドレスが
割り振られますよね??
で、この各個人別の投稿専用アドレスにメールを送ると日記投稿されるわけですが、
このとき、mixi側では当然受信と同時になんらかのスクリプトが動作してるんでしょうけど、
アドレス毎に.forward(とか.qmailとか)を設定してるんでしょうか?
もちろん設定作業はスクリプトで自動化されてるでしょうけども、けっこう無駄っちゃ無駄ですよね?
こういうときに、もっとうまく、一つの.forward(.qmail)設定しとくだけで、
全てのある特定のメールたち(たとえば日記投稿用メアドに来たヤツだけ…とか)を処理するには
どうしたらベストなやり方だと思いますか?
とりあえず俺が思いついたのは、日記投稿専用のサブドメインを作って、そこに来たヤツを全部一つの.forwardで処理する…みたいなの。
たとえば〜〜@nikki.hoge.comなら、〜〜の部分が何であれ、
[email protected]に転送して、それの.forwardに書かれたパイプ処理をさせるとか。
メールを直接スクリプトに渡せばいいんでない?
>>212 論点ずれまくり。
っていうかそんなことは誰でも分かっている。
>>211をよく読め。
>>211 ミクシィはよく分からんけど、そのサブドメ方式でいいんでないの?
215 :
nobodyさん:2006/12/25(月) 13:53:24 ID:G8V0+xwB
最近2ちゃんが重いんですけど全部FOXさんが導入したスクリプトのせいでしょうか?
FOXに聞け
218 :
nobodyさん:2006/12/25(月) 14:34:19 ID:SBWHAYMt
始めまして、質問です。
$str = " ... $lt;span class=.....>hogehoge</span> ....";
こんな文字列から正規表現をつかって hogehoge の部分だけを取り出したいのですが、
どうしたらよいでしょうか?
219 :
218:2006/12/25(月) 14:37:03 ID:SBWHAYMt
すみません、訂正です。
$str = "... <span class=\".....\">hogehoge</span> ....";
220 :
誘導:2006/12/25(月) 14:43:28 ID:???
PHP プログラムでたまに変数が @$hogehoge[$hagehage] などと
いう使い方で出現するプログラムを見たことがあるのですが、
Perl じゃなくて PHP でも @ って何か特殊な意味があるのでしょうか?
どうやってするの?
今まで勉強してたのはCで、つい最近webproやりたいなと思ってHTMLとCSSやってるんだけど、みんなはやっぱり
HTML・CSS→PHPの順で学んだの?
K*NT -> HTML/CSS -> PHPの順が基本。
ファミリーBASIC→N88BASIC→アセンブラ→C→VB→VC→Java→PHP→CSS
HTMLは基本文法以外は必要なときに見ているだけで、
あんまり、いつ学んだかは意識したことないなぁ。
Java なんかやるやつはばかです。
Javaは馬鹿な俺には書けません。
機械語→PHPの順
>>226 ワラタww
「とほほ」も付け加えるべし。
232 :
nobodyさん:2006/12/25(月) 22:10:54 ID:3ON9VEdM
少しスレ違いですいません。
XMLHttpRequestについて勉強しているのですが、
PHPで複数回レスポンスを送信するにはどうすればいいのでしょうか?
受信できるかどうかわかりませんが、
while ($a <= 10) {
//$aを送信するとして、ココの記述が知りたい
}
という状態です。
よろしくお願いします。
10回のレスポンスをどうやってブラウザで受け取るんだ???
10個の値を書いてXML1回で渡すんじゃダメなの?
Firefoxで、アンカータグのラベル機能に関するバグ発見。
URLが
http://example.com/hoge.php?x=10&y=20#label のように引数の後にラベルがつく形になっているとき、
hoge.phpが出力するHTML内に<a name="label"></a>があっても、
そこにジャンプしてくれない・・・というバグです。
(ちなみにIEでは上記のやり方でしっかり飛ぶので、IEまたはFirefoxの仕様なのか
それともバグなのか、ハッキリしないけど)
>>225 HTML・CSSとPHPの間にJavaScriptをはさむのが主流。
漏れの場合は、HTML・CSSの次にXMLとFlashをやって、今PHP勉強中って感じ。
ActionScriptも多少かけるんで、JavaScriptもそれなりにいけるかなー
>>231 とほほ -> HTML/CSS -> K*NT -> Perl -> 一旦全て忘れて -> Perl -> Le*'s -> PHP -> 一旦全て忘れて -> PHP
237 :
nobodyさん:2006/12/25(月) 22:32:33 ID:FViFZp7L
おいwwww
ひろみちゅがコンドーム買ってるぞ。
清純な彼のイメージが(つД´)
>>235 そうなんだ・・。本屋とか行くとPHP&MySQLっていう本を良く目にするんだけど、PHP勉強すると同時にMySQLも勉強した
ほうがいいのかな。
240 :
nobodyさん:2006/12/25(月) 22:43:33 ID:3ON9VEdM
>>233 XML1回で渡すのはだめなんです。
どうやっても受け取れないもんなのでしょうか?
>>238 ユンケルローヤルA買ってるし
やる気満々?
>>240 そしたらクライアントのJavaScript側でループすべきだよ(10リクエスト10レスポンス)
どうにもループさせる理由がわからんが・・・
>>234 >firefoxでバグ
むぅ、たしかにIEだと成功するが、FFだとダメだな。。。
ちなみに俺のFFは最新の2.0.0.1だが、そっちは?
244 :
232:2006/12/25(月) 23:35:04 ID:3ON9VEdM
>>240 ループさせる理由は、WebアプリでDB操作(INSERT/UPDATE)をするためなんです。
なので実際は10回どころか千・万単位のリクエストになります。
画面なしのバックグラウンドで動かすわけにはいかない、という条件です。
推定処理時間は数分です。
その処理時間の間に何か表示させたいと思っています。
無理な場合は、NowLoading...みたいな感じで処理中表示のajaxを使うつもりですが、
出来たらプログレスバーを作りたいと思ってajax、XMLHttpRequestについて勉強していました。
1リクエスト複数レスポンスというのは無理なんでしょうか、、、
何のために ajax があるというのか
>>244 だったら1件1件レスポンス返す必要ないでしょ。
DB更新するのと画面に何か表示させたいのは別の話。
247 :
234:2006/12/25(月) 23:54:14 ID:???
>>243 当方の環境は、IE6.0、Firefox1.5と、2.0です。
Firefoxはどちらでもダメでした。
これって既知のバグなんでしょうか?
>>234 仕様だヴぉけ。htmlとphpの基礎をもう一度勉強してこいクズ
どの仕様?
仕様ならしょうがないね
>>248 html も php も全然関係ないじゃん
query 文字列の後に hash がくるのは正しい URL だし
それで常にジャンプできないようであれば
Firefox の不具合でしょ
実装してないだけで不具合っていうのもどうかと。
まぁバグだと思うならレポート出せばいいよ。
実装すべきなのを実装していないのもバグでしょ
けど、それらしい情報ないな
アンカーを実装してないって不具合ってレベルじゃねーだろ。
未完成といわれても仕方ない。
でも本当に本当なの?ちょっと信じられないのだが。
俺はFF入れてないからわかんないけどaタグの書き方とか間違ってない?
別に問題なくジャンプするよ。
俺もそんなバグ情報はいくら検索しても出てこなかった。
でも自環境でテストしてみたら、
たしかにFFのアンカーラベル機能は死んでる様子。
俺も簡単な実験をやってみた。
具体的には、test.php(ひたすら改行して、縦に長〜いページを出力するだけのスクリプト)で、
出力するHTMLの一番下(BODY閉じタグの直前)に、<a name="#label"></a>と記述。
この状態でtest.php#labelにFFからアクセスしても、ページ下部のラベルには飛ばない。
>>234はクエリ文字列のあとにラベルを付けた状態らしいが、俺はクエリ文字なしでも同じ結果だった。
>>257 拡張子を.htmlに変えたらどうなる?
> name="#label"
id="#label"
こんなんみつけた。name属性じゃなくてid属性でやってみてー
目的地アンカーの最適化
http://www.seo-equation.com/reference/cat17/end_anchor >旧来の HTML では、a要素の name属性にアンカー名を付与して
>ウェブページ内の特定箇所をリンク先として参照できるようになる
>目的地アンカー(終点アンカー)が一般的に良く使われていますが、
>XHTML1.1 では、name属性は完全に廃止され、
>旧来の目的地アンカーのテクニックは利用できません。
>本文書では HTML4 の仕様から新たに登場した id属性を指定することで、
>これを代替する手法を解説します。
PHP利用メモリってどの位が適当か計算方法とかってありますか?
多分デフォルトのメモリ量では確実に不足してると思われるんですけど・・
script.php?name=value#label Firefox/1.5.0.9
<p id="label">なんたらかんたら</p> 飛ぶ。日頃使ってる。
<a name="label">ここへ飛べ</a> 昔、こうしてた。飛ぶ。
<a name="label"></a> さっき試した。飛ぶ。
<a name="#label"></a> IE6: なぜか飛ぶ/Fx: 飛ばない。
で、なんでFxスレなんですか。
FireFoxは完璧です。
バグだと疑うならまずはIEを疑ってください。
と信者が申してました。
>>261 やったこと無いけど、一番重そうなページで memory_get_usage とか
memory_get_peak_usage を使ってメモリの使用量を測定し、想定する
同時接続数を掛けてみてはどうか?
265 :
232:2006/12/26(火) 02:29:42 ID:K7ycYnW/
>>246 すいません。書き方が悪かったので訂正します。
ループさせる理由は、WebアプリでDB操作(INSERT/UPDATE)をするためなんです。
なので実際は10回どころか千・万単位のリクエストになります。
画面なしのバックグラウンドで動かすわけにはいかない、という条件です。
推定処理時間は数分です。
その処理時間の間に、進み具合が分かるプログレスバーを表示させたいと思っています。
-----
元の書き込みのwhileは別例になります。
DBとか書かないほうが説明しやすいかと思いまして、、、
動作としましては、
Javascriptからの1リクエスト、
↓
----- ループ -----
PHPからのレスポンス送信
↓↑
Javascriptでのレスポンス受信
-----------------
が可能かどうかが知りたかったんです。
これが出来れば処理状況表示のプログレスバーも出来そうな気がするので、、、
よろしくお願いします。
やっぱりそれならレスポンス受信する分、リクエスト飛ばすしかないよ。
こんな感じじゃない?すげー重くなりそうだけど。
function insertDB(){
for( i=0; i<100; i++ ){
Ajaxでサーバに i 件目を格納させるリクエストを飛ばす;
成功したらプログレスバーのwidthを+1pxする;
}
}
setTimeout() か setInterval() 使いたまえよ
てかここって php のスレだよね
>>265 最初の一件のリクエストで何万件だかの SQL を発行
進捗とともに状況をファイルに書き出す
ajax で一定時間ごとにファイルを読みに行く
そんな難しいことじゃない
けど 232 はもっと勉強が必要だと思う
>264
ありがとうございます。
メモリの設定値はphp.iniを変更するだけでいいですよね?
大丈夫かなぁ
ちなみに関数の使い方はマニュアルをみたのですがなんか理解しずらいっす
htmlとphpが=だと思ってるやつは池沼。バグ云々の話だクズども
的外れの回答をしたうえに謎の捨てゼリフか
>>238,241
女性用剃刀も買ってる。
パイパン&ソーセージでソフトSMかな。
俺も初めてのヒゲ剃り母ちゃんの使ってたから、
女性用のほうが慣れてるぜwww
でもパイパンにするのにあのカミソリじゃ危ない希ガス・・・
パイパンにしたいなら、男性用電動シェーバーのヒゲトリマーで全体を短くしてからにするとラク。
パイパンにするのにPHPはいらないだろ!
vipのクソスレコレクションを作りたいんですが
自動的にスレを保存するにはdatファイルにアクセス・読み込み・保存でよろしいのでしょうか?
datファイルとはお金をかけないと不正アクセス禁止法にひっかかるのでしょうか?
279 :
nobodyさん:2006/12/26(火) 11:52:40 ID:UoOJj1FX
教えて下さい。
登録サイト(mixiなど)でみかける住所フォームで、
都道府県を選択したら自動でその市区郡が選択できるようになるのがありますが、
PHPで同様なことをしたいのです。
どうしたらよいでしょうか?
参考になるコメント、助言お願いします。
>>279 PHPでは不可能です。
javascriptをご利用ください。
>>279 配列に都道府県を入れる
↓
foreachで吸い出す
>>278 できないのは仕様ですと言われればそれまでだからな・・・。
余談だけどPHPでシングルトンやるなら、結局は実行時にしかチェックされないってことも考えるといいかも。
たとえコンストラクタをprivateにしても、phpの場合は実行時にnewをして初めてエラーが出る。
だからJavaでコンパイル時にチェックさせるような実装を真似る必要はなくて、コンストラクタをpublicにしかできなくても、例えばクラス外からnewされたら例外を投げる、みたいなやり方で十分だと思う。
もしくは継承ではなく、コンポジションにする(PDOのインスタンスをプロパティとして持つ)って手もあるんじゃないかな。
>>279 非同期でやるならJavaScriptだけどmixiは画面遷移してるね。
都道府県が選択されたらonChangeでPostして都道府県IDを飛ばすだけだな
284 :
279:2006/12/26(火) 11:59:21 ID:???
的はずした・・汗
都道府県を選択
↓
次のページへ移動
↓
市区群表示
じゃだめか?
285 :
nobodyさん:2006/12/26(火) 12:04:01 ID:TexWR+4f
postから受け取った値をhiddenでまわす処理をセッションで行いたいのですが、
hiddenをつかおうがセッションを使おうが、一回はpostされるわけですよね?
postの中身を改ざんされる恐れがあると思うんですが、
予防法などありましたらアドバイスお願いいたします。
286 :
279です:2006/12/26(火) 12:07:27 ID:???
甘い思い出
なら時間とともに美化(改竄)されるのはしょうがないね。
290 :
nobodyさん:2006/12/26(火) 14:05:13 ID:Jf/WWK78
1,234,567みたいにカンマをつける書式に数値を文字列に変換する方法を教えてください
おれはドブネズミですか?
293 :
278:2006/12/26(火) 15:01:13 ID:???
>>282 的確な返答ありがとう。確かにもっともな話ですね。
あんまり考えないことにする(笑)
phpでプログラム作ってみたから、ライセンス認証を取り入れて公開してみようと思うんだけど、
どこかライセンス認証に向いてるシステム作ってるサイトしらない?
自分で作ってもいいんだけど、既存のものがあるなら見てみようと思ってさ。
>>295 そういうケチを付けるだけの情報量ゼロないちゃもんもいりませんから。
とかいうとお前もなと不毛な鸚鵡返しが返ってくると↓↓↓↓↓↓↓↓
煽り合いはよくないよ^^
文字列から、0x00 やら BOM やらといった
不要な文字を除去したいのだけど
str_replaceにはどう書けばいいのでしょうか?
>>298 $str = str_replace(array("0x00", "BOM"), "", $str);
300 :
298:2006/12/26(火) 17:30:33 ID:???
いやいやいやいや。
そのものではなくて、文字コード0x00とUTF-8のBOMという意味です。
301 :
nobodyさん:2006/12/26(火) 17:40:21 ID:fFhrPh3D
現在、PHP上から、サーバPCの電源断するVBSを使用しようとしていますが上手くいきません。
VBSファイルの内容は、
Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem")
For Each objSystem In objSystemSet
objSystem.Win32Shutdown 8
Next
という割と有名なやつです。poweroff.vbsで保存されております。
PHP上の呼び出しは、
$ret = system("C:\**********\poweroff.vbs");
となっております。
PHP上で実行すると、確かにシャットダウンは開始するのですが、
画面が暗転してシャットダウンが途中で止まったり、
ログイン時のダイアログが表示されたり、たまに完全にシャットダウンされたりします。
ちなみに直接VBSを呼び出すと無事シャットダウンされます。
OSはXP、Apache1.3.28+PHP4.4.2です。
何か原因があるのでしょうか?
chmのphpマニュアルの文字化けはいつになったら治りますか?
303 :
nobodyさん:2006/12/26(火) 18:38:36 ID:Jf/WWK78
>>291 そそそ、それでした!!
ありがとうございまーす
>>302 おまえの環境をみなおしたほうがいいよ。
おれは文字化けない。
305 :
232:2006/12/26(火) 20:53:02 ID:???
>>268 そういう手法は全く考えてませんでした。
ズバリな回答ありがとうございました!
> けど 232 はもっと勉強が必要だと思う
(´・ω・`) がんばります
2ちゃんねるのdatファイルからタイトルを取得したいのですが、
ログのどこみたらのってますか?
5つ目にありました。ありがとうございました。
310 :
nobodyさん:2006/12/27(水) 00:49:17 ID:uQ88JK/1
ケーキ食べたいんですけど、どこのコンビニのケーキがいいですか?
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ <こいつ最高にアホ
彡、 |∪| /
/ __ ヽノ /
(___) /
312 :
nobodyさん:2006/12/27(水) 00:58:17 ID:0HWbicIg
$tit ="この部分";
//〜〜
$Yow ="この部分";
//~~
//~~~^^
$ok ="この部分";
//〜〜
このように記述されてるPHPの「各""(ダブルクォーテーション)の中」に
「文字を書き込み」、かつ「""の中身」に既に文字が入っていれば
「上書きして文字を書き込む」PHPを作成したいのですがどうすれば良いでしょうか
意味わかんね
314 :
nobodyさん:2006/12/27(水) 01:02:35 ID:0HWbicIg
指定されたファイルの文章中の
$tit ="この部分と";
//〜〜
$Yow ="この部分と";
//~~
//~~~^^
$ok ="この部分";
//〜〜
に特定の文字を書き込むPHPを作成したいのですがどうすれば良いでしょうか
下記のコードをShift_JISで保存して実行すると
<?php
mb_internal_encoding("UTF-8");
$str = 'あaいiうuえeおoかkaきkiくkuけkeこkoさsaしshiすsuせseそsoたtaちchiつtsuてteとto';
echo mb_substr(mb_convert_encoding($str, 'UTF-8', 'SJIS'), 0, 10);
echo "\n";
echo mb_convert_encoding(mb_substr($str, 0, 10), 'UTF-8', 'SJIS');
?>
結果が
あaいiうuえeおo
あaいiうu
となります。mb_substrの返り値が違うのは
Shift_JISは1〜2byteのみで表現するのでbyte数で返してもほとんど支障はない
UTF-8は1〜6byteで表現しbyte数で返すと文字数が少なすぎる場合があるので文字数で返す
ということでいいんでしょうか?
316 :
315:2006/12/27(水) 01:07:45 ID:/UATDQ7l
ID忘れました。
例題
ノロが怖いので丁寧にチンチンを洗ったら気持ちよくなりました。
ノロって気持ちいいんですね。
上の条件を満たす関数を作りなさい。
優秀賞はノロウィルス一年分贈呈
318 :
nobodyさん:2006/12/27(水) 01:26:54 ID:uQ88JK/1
いまカミナリがなってます。
パソコンが壊れた場合、phpがインストールできなくなるのでしょうか?
>>318 はい。
使い物にならなくなるので、粗大ゴミに出してください。
>>314 置き換えたい文字列をあらかじめ __hogehoge__ とかにしておいて、
すべて変数$beforeにいれておき
$after = str_replace( $before, "__hogehoge__", "書き込みたい文字列" );
switchっていうのは、
ifとelseifのみの、elseがない条件文のようなものという認識であってますか?
あってない
初心者のとき以外switch文なんか書いてないしこれからも書くことはないだろう。
なんかメリットあるのか?
OS のネイティブアプリとかで
message (イベント)を処理するときに使う
if 文で書くと冗長になる
条件 a の時に処理 1 を
条件 b の時に処理 1 と 2 をなんて時に使う
if 文で書くと
同じことを複数書くか(メンテナンス性が最悪)
if 文を増やすか(速度的なペナルティがある)するしかない
Web アプリではあまり使わないけれども
あぁ、冬休みになったんだなぁ…
switchを絶対使わないって何かgotoみたいなアレかねw
PHPのswitch文は便利じゃん。
別にデメリットがあるわけでもなし、
使わんとかいう理由がわからん。
…と、思ったんだけど、
自分のソース見たら使ってなかったw
男なら全部if~else
男なら配列で済ますか、関数ポインタ
男ならPHPなんかやるやよw
>>315 echo mb_convert_encoding(mb_substr($str, 0, 10), 'UTF-8', 'SJIS');
だと文字コードが違うのでmb_substrが正常に動作しないだろ
echo mb_convert_encoding(mb_substr($str, 0, 10, "sjis"), 'UTF-8', 'SJIS');
334 :
nobodyさん:2006/12/27(水) 13:18:19 ID:OjKZeNpj
$as = "/*";
$ad = "*/";
include("summary.php");
include("chmary.php");
$as;
include("この部分");
$ad;
変数によって、コメントアウトさせようとしているのですが
うまく行きません、どうすればいいのでしょうか
>>334 普通にif文でスキップしてはいかがでしょうか?
>>334 すごいことを考えるもんですね
コメントはプログラム実行前のParserで処理されるから不可能だよ
>>335-
>>356 失礼しました、ありがとうございます
>>334 それじゃなんにも出力してないだろうが!
>>338 前後の記述部分を
端折っただけなのです
PHPの勉強を始めようと思って色々調べてみたら
XAMPPというソフトが紹介されていました。
そのソフトは一括で色々なものがインストールできる見たいなんですが
自分は今のところPHPとApacheとMySQLしか使う予定は無いのです。
それでもXAMPPをインストールする価値というのはあるのでしょうか?
それとも別々にインストールしたほうがいいと思いますか?
バナーをクリックしたらカウントアップされるというのを
作ろうとしているのですが、PHPだけで出来ますでしょうか?
アクセスカウンターみたいな形ではなく、あくまでバナークリックです。
ご存じの方は設計のアドバイスをいただければ助かります。
342 :
nobodyさん:2006/12/27(水) 14:28:54 ID:0HWbicIg
<form method="post" action="form_d.php">
でform_d.phpとform_d2.phpの両方へデータを送りたいときは
<form method="post" action="form_d.php">
<form method="post" action="form_d2.php">
と記述するしかないのでしょうか
>>342 そういう書き方ってHTML的にいけたっけ?恐らく駄目な気が・・。
それよりも受け取る側を2つに分けたら?
>>343 度々すみません受け取る側を2つに分けるというのは具体的にはどう記述すれば
いいのでしょうか、
>>340 XAMPPの説明呼んで、使いたいと思わなければ個別にインストール。
>>342 1クリックで1リクエストが基本。
form_d.phpにリクエストして、
form_d2.phpへは、form_d.phpからPOSTしてやれば?
>>340 後から掃除するのが大変だから、
必要なものだけインストールしな。
設定の手間なんかは一緒だから。
動作テスト用だろうし、1回構築すればいいだけだからね。
348 :
nobodyさん:2006/12/27(水) 17:16:19 ID:omeCjei1
self の説明はマニュアルのどこら辺にありますでしょうか?
クラスとオブジェクトってとこ。
chmod("ファイル名",777);と指定すると
Warning: chmod(): Operation not permitted in 〜
と出てしまいパーミッションの変更に失敗してしまいます。
原因をご存知の方が居りましたらご教授お願いします。
開発環境 : FedoreCore5
PHP : PHP Version 4.3.10
Server API: Apache 2.0 Handler
352 :
315:2006/12/27(水) 18:30:53 ID:/UATDQ7l
>>333 レス遅れてすみません
文字コード指定すればよかったんですね
ありがとうございます。
検索システムについての質問です
15個くらい検索項目がある検索システムを作らないといけないんだけど、
ポストされたデータがNULLじゃなかったら、SQL文にOR繋いで、(name LIKE '%{$_POST['name']}%') みたいな感じで増やしていけばいいですか?
>>353 その質問のどこがPHPなんだ
基本的な考え方はそれでいいと思うよ。
そんなにたいしたことのない検索なら。
>354
ごめん、POST以外は確かにSQLの質問だったな…
高等な検索ってどうしますお?
高等な検索って何さ?
「たいしたことのない検索」の反義語かなw
たった15個
15個も
ORでつなげたSQL文をimplodeとかで生成すりゃ十分じゃね?
5個くらい、ORで繋げたLIKE咬ますと、量にもよるが結構もっさりしねぇ?
>>360 そりゃ、どう考えてもPHPのせいじゃねーな
>361 尿意
implodeでもいいし、気合でつなげてもいいし、ただ10項目位のOR LIKEは、否定的だなぁ
SQL的に重くなるね
いっそのことPL/SQLとかストアドプロシジャ使ったら?
>354>358>359>360>362>363
皆さんありがとうございました。
とりあえずimplodeで作ってみます〜
もっさりしたら、ストアドプロシージャーも視野に入れますが…
一万行データあって、18列…
量つなげるのはやばそうですねぇ… 作って、酷かったらまた考えて見ます〜
>364
エスケープ? ぁぁ外側に「” ”」で囲っているので、大丈夫かと…ってことかな?
>>365 実に馬鹿
ヒント:SQLインジェクション
なるほどねぇ。。。
ZFのサニタイズらしい機能使ってて、最近全く気にしてなかった〜
サニタイズって年寄りをターゲットにした悪質設備会社だっけ?
全ページ共通のメニューをphpに書き出して、外部化しようと
ttp://neta.ywcafe.net/000372.htmlを参考にしています。
メニューで現在表示しているページには、class="here"などを付加させたいのですが、
どういう風に条件をつけたらいいかアドバイス頂けないでしょうか?
今みているページのファイル名のみ(ルートからのアドレスを取得する関数はあったのですが)を取得する方法なんかありますか?
basename
371 :
350:2006/12/28(木) 09:52:55 ID:???
>>351 chmod("ファイル名",0777);
の間違いでしたm(_ _)m
fedoreのセキュリティの設定辺りが
関係していそうな気がするのですが
一通りググって見たのですが
関連した記事が見つからなかったので
質問させていただきました。
>>371 このどれかに該当しないの?
注意: カレントのユーザは PHP を実行しているユーザです。 これは普通のシェルや FTP アクセスでのユーザとはたいてい違います。 たいていのシステムでは、ファイルの所有者のみがそのモードを 変更可能です。
注意: この関数では、 リモートファイル を使用することはできません。これは、処理されるファイルがサーバのファイルシステムによりアクセスできる必要があるためです。
注意: セーフモード が有効な場合、操作しようとしているファイルあるいは ディレクトリの UID(所有者)がスクリプトの実行ユーザと同じかどうかを PHP がチェックします。さらに、SUID・SGID や sticky ビットを 設定することはできません。
373 :
nobodyさん:2006/12/28(木) 11:40:40 ID:DqIHSsqd
初歩な質問ですが正規表現で
[0-9a-zA-Z]で英数字にマッチするのですが
これプラス「-」にマッチするものってどう記述したらいいですか?
よろしくお願いします。
プラスの意味がよくわからないけど、バックスラッシュでエスケープすればいいんじゃないかな。
375 :
nobodyさん:2006/12/28(木) 11:46:11 ID:DqIHSsqd
半角英数字と「-」にマッチするモノを抽出したいのです。
バックスラッシュ試してみます。
>>375 [0-9\-] とか。
というか、それは正規表現スレがあるのでそちらでどうぞ。
377 :
nobodyさん:2006/12/28(木) 11:51:52 ID:DqIHSsqd
スレ違いなのですね。
ありがとうございました。
378 :
373:2006/12/28(木) 12:26:20 ID:DqIHSsqd
正規表現のほうでPHPで聞けと言われたのですが・・・
376さんが言ってるような表現になると思うのですが何故か上手くいきません。
「-」記号が入ってないときは上手くいくのですが・・・。
あぼーん
>>378 あら、そいつは失礼。
問題なければ、対象の文字列(可能ならその部分のソースも)をさらした方が早く回答もらえるかも。
俺もそんなにやってるわけじゃないけど…。
>>378 ダブルクォーテーションでくくってるんじゃね?
ってか、ソースコピペすること。
>>378 "/[0-9\-]/"
"/[-0-9]/"
とか確か先頭に置けばエスケープなしでもいけた気が
[0-9\x2D]
384 :
373:2006/12/28(木) 13:36:49 ID:DqIHSsqd
$prot = BC-K-o58tB;
$proto = ereg_replace("[0-9a-zA-Z]{10,10}","成功",$proto);
こういう感じです。
385 :
373:2006/12/28(木) 13:40:18 ID:DqIHSsqd
10文字検索したいのですが-が間に入っているから上のソースではマッチしません。
さっき教えてもらったように[\-0-9a-zA-Z]{10,10}とかも試して見ました。
>>384 1・一行目が「prot」なのに、置き換え対象が「proto」になっている
2・文字列として定義するなら BC-K-o58tB は 「"」か「'」で囲む。
で、とりあえず [0-9a-zA-Z\-] として動いたよ。
-が入っても10文字なの?
389 :
373:2006/12/28(木) 13:53:57 ID:DqIHSsqd
$proto = "テストBC-K-o58tB";
$proto = ereg_replace("テスト([0-9a-zA-Z\-]{10,10})","成功\\1",$proto);
で動作しません・・・。
$protoを"テストBCaKao58tB"にすると動作するのですが・・・。
動作確認済み
<?php
$proto = "テストBC-K-o58tB";
$proto = ereg_replace("テスト([0-9a-zA-Z\-]{10,10})","成功\\1", $proto);
echo $proto;
?>
>>389 そのソースをまるっとコピペして動作した。
それで動作しないなら、おまいの環境が悪いかと。
392 :
373:2006/12/28(木) 14:00:25 ID:DqIHSsqd
すみません。動きました。少し別の所に問題があったようです。
みなまさ本当にお世話になりました。
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ <こいつ最高にアホ
彡、 |∪| /
/ __ ヽノ /
(___) /
これだけ教えてくれた人がいるのに
「少し別のところ」も書かないなんて。
はいはい冬休み冬休み
395 :
nobodyさん:2006/12/28(木) 14:15:53 ID:e+ebdVG/
@
396 :
373:2006/12/28(木) 14:16:52 ID:DqIHSsqd
あまりに恥ずかしかったのでw
実は、
$proto = ereg_replace("テスト([0-9a-zA-Z\-]{10,10})・・・([0-9a-zA-Z]{10,10})","成功\\1", $proto);
でして後部のほうに\-を入れてなかったのです。
でも基本的に\-を入れると言うのはここの皆さんのおかげでわかりましたので。
後部にもう一つ同じ箇所があってそこを修正していませんでした。
皆さん本当にありがとうございました。
>>373 なるり。
まあそういうケアレスミスはよくある事だからがんばりやー。
恥かしくてもそういうのを書いておいたほうが、後々のためになるから出来るだけよろしゅう。
398 :
nobodyさん:2006/12/28(木) 17:51:58 ID:Qv14/Bkx
sessionのセキュリティの話で、
セッションIDの他に推測されない値をCookieに入れておくみたいな話があるけど、
これは、どういう攻撃を避けるためなのかな?
もし仮にPHPのセッションIDの生成方法が解読されても安全
任意の桁数で連番をつけるにはどうすれば良いですか。
1,2,3-10-100-1000を
0001,0002,0003-0010-0100-1000といった感じです。
掲示板のログファイルに最適なのは何ですか?
csv? xml? ただのテキスト?
.dat
ログファイルなら、コンマ区切りのテキストファイルが良いと思ふ。
## 俺はいつもデータベースを用いているからな……。
409 :
nobodyさん:2006/12/28(木) 23:58:55 ID:w/qu4zo9
文字列を
%98%37みたいに変換できる関数なかった〜?
411 :
nobodyさん:2006/12/29(金) 00:08:29 ID:YLaIusHS
ありがとー
412 :
nobodyさん:2006/12/29(金) 00:25:48 ID:UI+BpgQS
画像ファイルをbase64エンコードして保存しました。
それを元に戻してブラウザに出力するには、「Content-Type: image」のヘッダを吐いて
base64デコードした文字列をechoで出力する....という単純な処理でいいの?
>>412 いいよ。
つか、何故そんな簡単なことを実際にやって確かめないの?
415 :
nobodyさん:2006/12/29(金) 00:32:01 ID:UI+BpgQS
>>413-414 ご回答、ありがとうございます。
>何故そんな簡単なことを実際にやって確かめないの?
いや、やってみたことはやってみたんですよ。
もちろんうまく出力することはできたんですが、なんだかこれでいいのかなって。
自分流で強引な方法なのかもと不安になってしまったんです。
すみませんでした。
416 :
nobodyさん:2006/12/29(金) 00:37:55 ID:1uYyFHrL
マルチバイトの関数を私用するとエラーが出ます。
いろんなサイトでmbstringの設定方法を参考にしましたがだめです。
バージョンで動作が違うとかありますか?
mysql_escape_string($item);
mysql_escape_string($table);
$sql = "select $item from $talbe";
としなくても
$sql = "select $item from $talbe";
mysql_escape_string($sql);
でも同じですよね?
寝ずにずっとやってたら頭回らなくなってきた orz
PEAR::DBで指定クエリーでのデータの行数だけ
取得する方法ってありますか?
クエリーで一回格納してそれをnumRows()する方法
$rs=$db->query($sql);
$rs->numRows();
では、データ量が多い場合にメモリ無駄に食いますよね
それを避けて、行数のみ取得したいと考えてます。
$num = $db->getOne("select count(culum) from...");
>>402 とりあえずブラウザでみれないようなファイルに
>>418 $item に " が含まれていたらどうなるのだね?
上は正しい SQL 文になるが
下は SQL インジェクションの餌食になるよね
>>419 SELECT COUNT(*) FROM TABLENAME;
423 :
nobodyさん:2006/12/29(金) 02:25:43 ID:zzjbblat
アンケートシステムを作っているのですがどうしても解決できない問題があるのでお願いいたします。
1.質問文、項目は管理者が自由に増やしたり削ったりできる
2.質問が1の時もあれば5つのときもある(管理者次第)
3.複数選択も管理者が選択できる
以上の機能でMySQLにユーザが選んだデータを入れていくのですがこのようにクエリがまったく予測できないのでどのように入れたらいいか見当もつきません。。
今、考え付くのが
一つのチェックに1行作るくらいです。。
お力お貸しくださいm(_ _)m
>>421 >下は SQL インジェクションの餌食になるよね
ならなくね?
>>423 質問テーブル(親)−質問項目テーブル(子)−回答選択肢テーブル(孫)
回答テーブル
質問ID
質問項目ID
回答選択肢ID
>>424 下のは文字列を扱うSQLが実行できないだろ
select password from user_master where userid='hogehoge'
↓escape
select password from user_master where userid=\'hogehoge\'
規制解除
>>403-408 遅くなりましたが答えてくれてありがとう。
ぶっちゃけ拡張子はどうでもいいんですけどね。
csvとxmlには、ファイルを扱う専用の関数があるみたいなので、
ログの管理がしやすいのかな?なんて思っただけなので。
DBが使えない環境でも使えるようにしたいので、
407さんの助言通り、csvをテキストとして処理したいと思います。
>>419 確かめずに書くけど、PEAR::DBのnumRows();って、
DBによって実装が違ったような…。
MySQLだと SELECT count(*) WHERE ・・・
を投げてたと思う。
429 :
428:2006/12/29(金) 09:12:28 ID:???
間違ってた…。
ネイティブの関数だから、メモリは関係ないかも。
DB側の実装によるんじゃないかな。
430 :
nobodyさん:2006/12/29(金) 10:34:00 ID:JQJ1UMkF
<html>
<head>
<?php
$encoding = "EUC-JP";
$str = '<meta http-equiv="Content-Type" content="text/html; charset='.$encoding.'">';
echo $str;
?>
<title>あいうえお</title>
</head>
<body>
<p>あいうえお</p>
</body>
</html>
として表示させると、文字化けします。(このスクリプト自体がShift_JISで保存してる為)
そこで、mb_convert_encodingを使ってみたのですが、
echo mb_convert_encoding($str, 'EUC-JP');
echo mb_convert_encoding($str, 'EUC-JP', 'Shift_JIS');
echo mb_convert_encoding($str, 'EUC-JP', 'auto');
などとやっても文字化けしたままでした。
根本的な解決は、このファイルをEUCとして保存するしかないのでしょうか?
それとも何か使い方が間違ってるだけなのでしょうか?
どなたかお助けください。
PHPってシングルクオートでも動くんだ。知らなかった。ためしにこれはどう?
$str = '<meta http-equiv="Content-Type" content="text/html; charset='.$encoding.'">';
↓
$str = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=".$encoding."\">";
432 :
430:2006/12/29(金) 10:54:04 ID:JQJ1UMkF
>>431 レスありがとうございます。
それでもだめみたいでした。
ファイル自体をEUCで保存すれば文字化けはしませんでしたが、
$encodingの値はいつでも変えれるようにしたいので、
その都度コードを指定して保存しなおすのは大変なので、
どうにかしたいのですが、どなたか宜しくお願いします。
なんだ、内部コードじゃなくてHTML部分の静的な文字列のことか。
それだったらファイルをShift_JISで書いたときは $encoding = "Shift_JIS";
それだったらファイルをEUC-JPで書いたときは $encoding = "EUC-JP";
にしなきゃダメじゃない?
>>432 >ファイル自体をEUCで保存すれば文字化けはしませんでしたが、
>$encodingの値はいつでも変えれるようにしたいので、
>その都度コードを指定して保存しなおすのは大変なので、
意味がわからない。
EUCで保存すれば問題ないならそれでいい気がするのだが
つかそういう設定は普通define使うだろ?
436 :
430:2006/12/29(金) 11:36:44 ID:JQJ1UMkF
>>434 内部コードっていうのがよくわからなくて・・・
HTMLの文字コードとは違うものなんですね。
混同してすみませんでした。
>>435 ちょっと説明すると長くなるのですが、
実はhtmlのDoctypeからhead間を出力するクラスを作っています。
自分の作ってるPHPは、
どれもhtmlのbody間の使いたいところでincludeする形になっていて、
単体ではhead間などは出力しないようになっています。
そこで、単体でも使えるように、そんなクラスを作っているのですが、
今まで作ってきたスクリプトの、保存した際の文字コードが違ってたりして、
上のスクリプトのencodingの値を変えないと、文字化けしてしまうのです・・・
ファイルの文字コードは、時期ごとに変わっているので、
(Shift_JIS→EUC-JPときて、今はUTF-8を使っています。)
いちいちファイルをチェックしなくても、どの文字コードがだいたいわかります。
数が多いので、できれば統一したくないというのが理由です。
説明がわかりづらいかもしれませんが、
不可能なようなので、あきらめて全て統一する方向にしたいと思います。
437 :
nobodyさん:2006/12/29(金) 11:57:06 ID:ttVITF9r
Smartyの質問ですがよろしいでしょうか?
PHP→Smartyに $common_template_dir として "/path/to/" を設定します。
で、インクルードファイルとして"/path/to/header.tpl"を読み込みたいのですが、
下記の方法では(もちろん)うまくいきません。
(変数名自体がかわっちゃうから当たり前ですよね)
{include file="$common_template_dirheader.tpl"}
{include file="/path/to/header.tpl"}
となるように記述したいのですが、どうしたらいいのでしょうか?
>>436 は 自分のしたいこと・しなければならないことがわかっていないような気がする。
そもそもMETAタグを文字コード変換してどうしようというのか。
たぶん、問題はphp.iniのdefault_charsetじゃないかと推測するが。
ファイルの中から日本語を検索するには、mbstringが有効じゃないとだめなのですか?
調べても、しっかり説明されているところが見つかりません。
あいかわらずマルチバイト系の関数はないってエラー吐くし、解説サイト全然役に立たない。
>>437 assainにいれちゃえばいいのでは。
php側
$smarty->assign('include_tpl', '/path/to/header.tpl');
tpl側
{$include_tpl}
440です
違う気がしてきた。sryネ
>>439 mbstring系の関数がないなら…
Windows系→php.iniでmbstringを有効に
Linux系→./configureオプションに--enable-mbstring --enable-mbregex を追加してリビルド
かなり下質かと思いますが、、ずっと気になっているので質問です。
みなさんは、ファイル名やフォルダ(ディレクトリ)名の付け方って
特にこだわっていたりしますか?
ファイル名の場合はそれぞれの用途や名称を元にしたらいいのですが、
フォルダ名を付ける時、どういう名前がわかりやすいのか悩む時があります。
例えば、どのコンテンツにも使うものやfunctionファイルなど。
(commonとかmoduleとかにしていますが、、)
気にする必要はないと思いますが、ファイル名・フォルダ名の付け方について
混乱しない・汎用性の高い付け方があったら教えて下さい。
CSRFって、Referが取得できるなら、それをチェックするだけで、万事OK?
>>445 何がダメなのかを教えていただければ、これ幸い。
447 :
446:2006/12/29(金) 15:13:39 ID:???
実際のところReferは取れないこともあるし、
SESSIONを使ったサイトしか作るつもりが無いので、
セッションに前画面の情報を入れて(Referの代替程度の話)
更新系の画面ではそれをチェックするぐらいでいいかなぁと。
>>446 CSRFの何がどう危険なのか、その仕組みを全く理解してないようだな。
まずその仕組みを徹底的に調べろ。
で、とりあえずリファラのチェックは全く対策にならない。
なぜなら、いくらでも偽装できるから。
mixiの「ぼくはまちちゃん事件」も徹底研究しろボケ。
postkeyがあってもCSRF脆弱性を無くせなかったmixiを反例にすべし。
450 :
446:2006/12/29(金) 15:19:53 ID:???
451 :
446:2006/12/29(金) 15:24:28 ID:???
逆にpostkeyの必要性があまりわかっていない…orz
セッションIDのみより暗号強度が強くなるという認識程度。
>>447の方法だと、あとはセッションハイジャックの問題になると思ってるんだけど…。
452 :
nobodyさん:2006/12/29(金) 15:48:32 ID:1NnWPd/m
パスワードの暗号化について質問です。
いくつか調べたところ、crtptを使うのが一般的みたいですが、
これだと復元出来なくなるので、「パスワードを忘れた人に再送信」
などのシステムが作れなくなります。
しかし、暗号化しないとDBを使ってもセキュリティ的によく無いとも聞きます。
こういう場合、どうしたらいいのでしょうか?
「パスワード登録」→「ssl通信」→「データベース保存」
「データベースにパスワード問い合わせ」→「ssl通信」→「パスワード再送信」
>>452 パスワード忘れた人には、古いパスワードを捨てさせて、
新しい仮パスワードを発行するのが、普通じゃない?
で、ユーザーから本パスワードに変更してもらう。
455 :
452:2006/12/29(金) 16:02:34 ID:???
>>454 ありがとうございます。やっぱりそれしかないんですかね。。
あと、それなら「管理者が管理するシステム」でも
古いパスワードは捨てて、再設定する方式になりますよね?
目で見て確認出来ないのは辛いですが、そのようにシステムを変更します。
>>453 パスワードを生のまま保存してるのか?
なんと恐ろしいことを・・・
普通はMD5ハッシュ化して保存。
>>453でいいじゃん。なんでスルーされてるのか疑問なんだが
>>442 既存の環境が悪さしてるかと思って、Windowsクリーンインストールしたマシン用意したが同じ結果。
PHP4でも5でも動いてくれない。
管理者だろうが、他人のパスワードを見れるのは問題だよ。
460 :
446:2006/12/29(金) 16:29:17 ID:???
>>449 mixiがpostkeyがあってもダメだったのは、
postkeyが固定だったことと、
他の脆弱性でpostkeyが漏れたからじゃないのかな??
>>448 > なぜなら、いくらでも偽装できるから。
典型的に間違ったこといってるね。
被害者がリンクを踏んだりした被害者の Referer を偽装することは、
【ブラウザに脆弱性が無い限り】 できない。
ちなみに、つい最近 Flash にその脆弱性が発見されたが、すぐ修正版が公開されたし、
Referer 関係の脆弱性はそこまで多くない。
>>461 おたくが言うところのブラウザは脆弱性だけがリファラが偽装の手段なの
PHPでもheader関数で簡単にリファラ偽装できるけど
463 :
461:2006/12/29(金) 17:04:58 ID:???
>>462 ほんとに分かってないね。
Referer はクライアントが送信できる任意の情報だから簡単に偽装できるよ、そりゃ。
でも CSRF ってなんだか分かってる?
おまいさんが言ってる Referer を偽装できる人は 悪意のあるWebサイトの管理者のことだよね。
CSRF対策の被害者は 【悪意のあるリンクをクリックした人】 であり、その人が自ら Referer を偽装する動機はないわけ。
php の header 関数を利用して、悪意のあるページを閲覧した第三者が送信する Referer を偽装する方法があったら教えてくれ。
今現在そのページを何人の人が見てるかが知りたいのですが、
セッションを使えばいいんですよね?
> Referer を偽装できる人は 悪意のあるWebサイトの管理者のことだよね
ちがうよ
私の場合CSRFとかの意図は無いが普通にリファラを制御しながらブラウジングするけど
466 :
nobodyさん:2006/12/29(金) 17:54:04 ID:e5ul8+TJ
すんごいくだらない質問だとおもうんですが詰まってます。お助け!
$dataC[$i][$c] = str_replace("(9)","$123_0123",$dataC[$i][$c]);
のようにして、ある文字列の中にある(9)を$123_0123という文字列におきかえたいんですが$をエスケープする為に\$としてみたのですが$しか表示されません。
いろいろためしてみたのですが、どうも混乱してきました。$をエスケープすれば文字列としてあつかわれるんじゃないんでしたっけ?
アドバイス御願いします。
467 :
nobodyさん:2006/12/29(金) 18:06:43 ID:e5ul8+TJ
↑ですが、
$dataC[$i][$c] = str_replace("(9)","$123_0123",$dataC[$i][$c]);
を
$dataC[$i][$c] = str_replace("(9)","$ABC_0123",$dataC[$i][$c]);
にしてください。そこの変数名名前がやばかったんで、ダミー入れたら数字のみにしてしまいました。
468 :
461:2006/12/29(金) 18:11:05 ID:???
>>465 そういうことか。
つまり、普段から Referer を偽装してブラウジングしている人が悪意のあるリンクをクリックした場合に、そのRefererを偽装している人が保護されないということね。
それなら正しいわ。
ただ、Referer については RFC で定義されているので (「送信しない」という選択肢は認めている。)、 RFC に反する通信を行っている人 かつ
Referer をデフォルトで偽装するブラウザは無いに等しい のでそれを保護する必要があるのかは疑問だけど。
逆に言えば、クライアントは Referer の送信を拒否する権利がある (RFCでも認められている) ので、そういった正当な通信までもをエラーで拒否するのは
アクセシビリティ上の問題があるけどね。(ちなみに、W3Cの文法チェックステッカーや多くのSSL検証シールはそれやってる。)
470 :
nobodyさん:2006/12/29(金) 18:28:09 ID:e5ul8+TJ
>469
う…おはずかしい。
”を’にすればよいだけでした。
感謝します。
ありがとう。
471 :
nobodyさん:2006/12/29(金) 19:50:57 ID:e5ul8+TJ
すいません。又質問なのですが
$dataC[$i][$c] = str_replace("(9)",'$ABC_0123',$dataC[$i][$c]);
によって、ある文字列の中の特定の文字が置換されDBに格納されました。
そのDBに入った文字列のなかにある$ABC_0123をecho等で書き出すときに変数に戻すにはどうすればよいでしょうか?
DBはmysqlです。
sqlから呼び出した文字列はどのような扱いになっているのでしょうか?
宜しくお願いします。
473 :
nobodyさん:2006/12/29(金) 21:23:29 ID:e5ul8+TJ
たびたびすいません。なるほど、特別な戻値になってるわけですね。
SQLから戻ってきた文字列は中にどのような関数や変数を入力してもそのまま出力されることから、恐らく''で囲ったのと同じ文字列として扱われているようです。
実験的に
$AAP = str_replace('BB_0123',"$BB_0123",$AAP);
のように呼び出した文字列に対して置換をおこなうと展開されるようになりました。
ありがとうございます。
ただ、全ての変数および関数に対して置換をおこなうのはどうも効率がわるいきがします。
''でかこった文字列を""でかこった文字列に変換する良い方法はないでしょうか?
よろしくお願い致します。
>>473 そもそもDBに格納するデータにPHPコード(変数とか関数とか)を入れるのが
根本的におかしいと思うんだが、何でまたそんな妙な設計にしてるのさ
475 :
nobodyさん:2006/12/29(金) 21:35:19 ID:e5ul8+TJ
>474 さん
携帯対応のシステムなのですが、絵文字のライブラリー群はすでにあり、その仕様が
$aaa_123の変数が有る場所にはアクセスしてきた携帯キャリアに併せた絵文字コードに変換して送信する。
という仕様なんです。
で、DBの中に直接変数をいれておけばあとはecho等で吐き出せば全キャリア絵文字対応になる予定だったんです。
で、一番最初に御聞きさせて頂いたようにDB入力時にまず変数が文字列として入らない事に躓いて
次に、DBからひっぱってきた変数が展開されない事に躓いてると。
そういう訳なんです。絵文字なんで全置換プログラムなんて書くと量も多いし、負荷も心配で。
なにか良い知恵が会ったらアドバイス頂きたいです。
eval使えば?
requireとかincludeって連続で使う場合、
require('hogehoge.php');
require('hagehage.php');
みたいので当ってると思うんだけど、これをスマートに一文で表記する方法とかないかな?
>>477 必要なファイルをrequireしてるphpファイルをrequireする。
とか、セットという概念を作ってrequireするとか。
特定の文字列を渡したら、特定のファイルを複数requireしてくれる関数を作るとか。
>>475 serializeとかの関数で作り直せないか考えてみたら
>>475 PHPの変数を展開させたりなんかしないで普通テンプレートみたいな形でやるんじゃないの
文字列にマルチバイトが含むか含まないかチェックする関数ってなかったっけ?
>>481 無いんじゃないかな。
strlen()とmb_strlen()の結果を比較して
差があったらマルチバイト文字を含む、
と判断する手法があるみたいだけど。
一連の流れをまとめたものとして、ユーザー定義関数を作るのは正しいことですか?
最終的に文字列をprintするだけで、汎用性もないものなんですけど…
!$abc と $abc == falseって同義ですよね?
485 :
nobodyさん:2006/12/30(土) 10:05:56 ID:egNnis/4
486 :
nobodyさん:2006/12/30(土) 16:06:11 ID:Y367ZOEi
if (extension_loaded('sqlite')){
echo 'OK';
}else{
echo 'NG';
}
こんなコードを書いてSQLiteが使えるかどうかチェックしたが、NGと表示されてしまう。
php_sqlite.dllはちゃんと入ってるし、読み込むように設定してあるハズなんだが、
どうすればいい?
}
>>452 Mcrypt使えば?
スクリプト見られたらおしまいだけど、クリアテキストで保存するよりはマシじゃね?
>>786 対症療法だけど、extension_loaded('sqlite')の代わりにdefined('SQLITE_OK')使えばいいんじゃない?
452絡みだけど、パスワードを暗号化して保存するのって一般的なの?
サーバ機が自分の管理下にあるならその必要はないし、レンサバみたいな環境なら、サーバ管理者が利用者のパスワードを覗く方法なんていくらでもある(サーバのログとか)わけだから、暗号化してもしょうがない気がするんだけど。
>>490 ・暗号化しておけば何らかのセキュリティホールでデータが漏れても生のパスワードは漏れない。
・(利用者からみて)大企業でもデータ漏れをやらかすのに個人の管理者なんて信用できない。
>>490 俺のパスワードが流出したら責任とって被害額を賠償してくれるんだね?
494 :
nobodyさん:2006/12/30(土) 19:07:41 ID:kiTSZZLq
PHP部の最後に
session_destroy();
を入れたら
エラー:
Trying to destroy uninitialized session
が出ました。
ログイン画面なので、クライアントがセッション値を保持していなくても
念のためにセッションを全破棄させたいのですが、
session_destroy();
ではダメなのでしょうか?
OS のロードを得るような PHP の関数って無いでしょうか?
ロードが高いときにはいくつかの処理をスキップするような
プログラムを書きたいのですが。
web特化なんです!ごめんなさい><
>>491 セキュリティホールを危惧して暗号化、ってのはわからなくもないけど・・・。
もしデータベースの生データが外部に漏れるような大惨事が起こってしまったとしたら、ログイン用パスワードだけが暗号化されてたかどうかなんて、大した問題じゃないような気もする。
サーバの管理人が信用できない場合には、そのサーバ管理人に漏れたら大きな損害が発生し得るサイトの運営は、そもそも避けるべきだしね。
それよりかサイトに訪問する側としては、パスワードを忘れた場合に復元してくれる機能はあった方がありがたい(特に、記憶にあまり残らない、どうでもいいサイトであればあるほど)。
つーか、大規模なサイトでもパスワード復元機能ってけっこうあるじゃん。
>>493 こちらで明示したプライバシーポリシーに反する形で、万一そんな失態を犯してしまったら、謹んでお詫びするし、相応の金も払うよ。
>>495 つ SNMP関数
サーバでSNMPが有効になってる必要があるけど。
>>497 ぜんぜんわかってないな。
まず全てのデータベースが名前や住所を保存してるわけではない。
メアドとパスワードのみで会員登録できるサービスもある。
だからパスワードが漏れたことのみが問題になるケースもある。そして、
>こちらで明示したプライバシーポリシーに反する形で、
>万一そんな失態を犯してしまったら、謹んでお詫びするし、相応の金も払うよ。
同じパスを使ってるユーザーなんて五万といるし、
メアド+パスで他のサービスも入り放題。
「相応の金」はあんたのサービスで被った被害だけにとどまらないよ。
>つーか、大規模なサイトでもパスワード復元機能ってけっこうあるじゃん。
あるねー。よくこんなリスキーなことするなあって感心してるよ。
500 :
nobodyさん:2006/12/31(日) 02:31:47 ID:bO4aspIb
pngファイルからswfファイルに変換する方法ってありますか?
502 :
500:2006/12/31(日) 03:16:04 ID:bO4aspIb
>>501 ありがとうございます。参考にして見ます。
よかったぁ〜
とりあげずパスワード復元〜〜とか、俺のパスワード〜〜
って能書きこいてる奴に攻撃されても大丈夫だ
今年最後の日本語でおk
>>498 THX
そうか、SNMP を使うという手があったか。
506 :
nobodyさん:2006/12/31(日) 08:06:07 ID:B2TdPhYS
fopen()のmodeを見ると、
どれもファイルポインタを先頭か終端に置くと書いています。
これはつまり、ログなどを追加して書き込むときは、
ログファイルの先頭か終端からしか書き込めないということを示しているのですか?
それとも何行目とか、この文字列の後とか指定できるのでしょうか?
ログにxmlを使っていて、先頭が<?xml version〜になっているので、
どうログを追加しようかと悩んでいます。
ログをxmlにするときは、元のログファイルを文字列に読み込んで、
文字列にログを追加した後、
一旦ログを空にして、書き込みなおすという方法しかないのでしょうか?
書き込みなおす方法でもいいのですが、レスポンスが悪そうな気がして・・・
>>506 ファイルっていうのは基本的にそういうもの >先頭から上書きしてしまうか、終端に続けるか
ファイルは全体丸ごとで1塊のものであって、「途中に挿入する」というのは
後半部分を挿入内容の分だけ後ろにずらして移動させるような処理が必要で、
そのような機能はOSのファイル機能の中には含まれていない。
お手軽な手法としては「全部読み込んで文字列を編集して全部書き込み直し」かと。
レスポンスを気にするなら「挿入位置より後半だけ読み込んで以降を削除→挿入内容+後半内容を追記」
などという手も取れなくは無い。
でも別システムとの受け渡し用の一時データファイルならともかく、次々と追記される目的の
ログファイルにXMLを使うこと自体が間抜けな設計に思えるけど。
データベースへの接続のためのパスワードって
どこに書いておくのが安全なんでしょうか?
スクリプトは当然 Apache から読めないとダメなので、
1)誰でも読めるようにする→論外
2)Apache プロセスと同じユーザ(例:ユーザ名 apache)が読めるようにする
3)Apache プロセスと同じグループ(例:グループ名 apache)が読めるようにする
の選択肢しかないように思えるのですが、
他に何かいい方法があるのでしょうか?
同じサーバを使っている他のユーザから見られないようにしたい、
でも Apache からは見られるようにしたい、ということです。
ACL が使えるファイルシステムならいいのでしょうけど・・・
サーバは Debian GNU/Linux etch です。
509 :
508:2006/12/31(日) 10:14:10 ID:???
PHP スクリプトだけどあえて CGI として作り、
suExec を使うというのはできれば避けたいです。
510 :
506:2006/12/31(日) 10:20:35 ID:B2TdPhYS
>>507 ご丁寧に解説していただきありがとうございます。
これできっぱりfopen()でどうにかするという方法は諦めがつきました。
>お手軽な手法としては「全部読み込んで文字列を編集して全部書き込み直し」かと。
やはりこの方法がいいんですかね。
今回のようなケースはこの方法をとりたいと思います。
>でも別システムとの受け渡し用の一時データファイルならともかく、次々と追記される目的の
>ログファイルにXMLを使うこと自体が間抜けな設計に思えるけど。
仰るとおりですね。XMLにする必要ないですね。
普通のテキストファイルにして、fopenでファイルの終端に置くことにします。
どうもアドバイスありがとうございました。
511 :
nobodyさん:2006/12/31(日) 11:32:08 ID:Exl/tsr7
>>499 レンサバでメアド+パスワードで登録できるサービスやってるんですけど、かなり危険ですか?
$a = array (array('hoge', 'foo', 'bar'),
array('koko', 'mo'));
という配列の最後に同じ文字列を追加したいのですがどうすればいいでしょうか?
$in = '入れたい';
$a = array (array('hoge', 'foo', 'bar', $in),
array('koko', 'mo', $in)); //実際はもっとたくさん配列があります。
こんな感じにしたいです。
>>512 foreachでまわして追加すればいいんじゃね。
>>513 foreach($a as $val => $key){
array_push($key, $in);
}
で入ると思ったんですけど追加されないんですよ。
>>512 PHP5なら
foreach ($a as &$value) {
$value[] = $in;
}
それ以前なら(動作確認してないので注意)
$all_push = create_function('$arr, $data', 'return $arr[] = $data;')
$a = array_map($all_push, $a, $in);
function example($a, $b) {
〜
}
この$aと$bというのは、いきなり書いていいのでしょうか?
それとも、この関数の前に、$a = ""; $b = "";とか書いとくべきですか?
ユーザー定義関数について質問なんですが、
複数引数がある時、個別に引数ってとれるでしょうか?
説明が下手で申し訳ないのですが、具体的には、
function func($a,$b){
$c = "{$a}さんは{$b}型です";
return $c;
}
ここで、funcの第一引数$aが佐藤だったら田中に置き換えみたいなことがしたいです。
if(preg_match("/佐藤/",func($a)){
では、第2引数がないと怒られます。
if(preg_match("/佐藤/",func("佐藤","A")){
だと、第2引数もろとも置き換え対象になってしまいます。
どう書いたらいいのかわからなくて困っているので、
どなかたお助けください。
519 :
518:2006/12/31(日) 17:51:48 ID:???
置き換えしようという考えが間違っていたみたいです。
関数内に、
if($a=="佐藤"){
$a=="田中";
}
でいけました。
ということで自己解決です。
ナイス解決
SimpleXML関数を使って、XMLを書き出しているのですが、
addChildで要素を加えた時、CDATAセクションが作成できません。
addChild("cdata", "<![CDATA[ ]]>");
というのも、<>がエスケープされて&lt; &gt;になってしまっているようです。
XmlWriter関数ではCDATAを扱えそうなものがありましたが、
ドキュメント不足で今のところ理解できていません。
SimpleXML関数で、CDATAセクションを出力することは不可能なのでしょうか?
523 :
521:2006/12/31(日) 19:04:53 ID:???
>>522 ありがとうございます。
どうもサポートしていないようですね。
参考にさせていただいたサイトでは、スクリプトが複雑だったので、
自分で置き換え用のスクリプトを書いて対応することにします。
524 :
nobodyさん:2006/12/31(日) 20:23:20 ID:Dpv/dM4g
携帯用サイトをEUC-JPで作ってしまいました。
(PHP+MySQL)
ある程度作ってしまってから、EUC-JPが全ての携帯に対応していないことを知り、
Shift-JISに変更したいのですが、これは一から作り直すしかないのでしょうか?
525 :
nobodyさん:2006/12/31(日) 21:38:58 ID:b7fBDglP
質問です。
echo mb_detect_encoding( file( $uri ) );というように、
URIの文字コードを判断しようとすると正常に判定してくれません。
逆リンクしてきたページのタイトルを取得しようとしているのですが、
決め打ちで変換しても正常に判定してくれません。
回避する方法はありますか?
メタタグから判断した方が確実ですか?
>>524 出力の時にエンコードしては?
526 :
nobodyさん:2007/01/01(月) 00:29:02 ID:n0VP9emO
>>524 出力だけSJISにする。
ただし、フォームがあれば、そこから送った値はSJISなのでEUC-JPに変換する必要がある。
>>524 一からってのがよくわかんないけど
FTPでアップするときに変換してもいいしフリーソフトで変換してもよい。
みんなあけおめ
あけおめ
あけお
530 :
524:2007/01/01(月) 07:53:05 ID:fMPusSJi
あけましておめでとうございます。
Dreamweaverを使っていて、
・[プロパティ]⇒[エンコーディング]でSJISに変えると文字化け。
・なので、日本語の部分は打ち直す
この方法以外に簡単にエンコードする方法はないのでしょうか。
>>525 出力の文字コード指定をしたのですが、
mb_http_output('SJIS');
としても、変化はないです。
>>526 フォームはあります。
ですが、今はそれ以前の問題のようです。
>>527 文字化けせずに変換する方法はないものでしょうか・・・。
531 :
524:2007/01/01(月) 09:25:46 ID:fMPusSJi
・全てShift-JISにエンコードして、文字化けを修正
上記で解決しました。
データベースはphpMyAdminを使っているので、
Shift-JISで観覧可能です。
Shift_JIS環境でMySQLの場合、mysql_real_escape_stringが
正常に動作しないらしいよ。
誰か「mb_mysql_real_escape_string」を作ってよ
後、EUC-JPだけど、Shift_JISはアンダーバーだよ。
MySQL使ってるって事はユーザーの投稿扱ってるな。
その場合、文字コードを途中で変えると、絵文字化けるよ。
俺はここら辺で1週間悩んだから頑張れw
ドコモ絵文字はバイナリデータ。
AU絵文字はHTMLに書き込む場合は<img localsrc="番号">で出力できるけど
フォームからはSJISの文字として送られてくる。
かなり面倒。
俺はエスケープじゃなくてstr_replaceで完全に¥や;や=とかを消してしまって
絵文字をそのまま扱えるようにバイナリデータとしてMySQLに保存してるが
もっとスマートなやり方がきっとあるから、見つけたら教えてくれ。
>>534 すみません
>MySQL使ってるって事はユーザーの投稿扱ってるな。
の意味が判りません。教えてください。
MySQLのデータの中身は完全自前で容易されたデータなのかな?
例えばMySQLでSNS的なものや掲示板やランキング的なものを作ってたりしてたら
登録されるユーザー名とかサイト名とか投稿文に
勝手に携帯の絵文字がバンバン入ってくるんです。
それをMySQLに保存したりする用途じゃなければ大丈夫です。
それ以外の用途があんまり思いつかんかった。
通販とかに使ってMySQLの中にはいるデータが
全部こっちで用意したものなら気にする必要は無いです。
後、着メロとかのデータベースでも関係ないですね。
ちょっと視野が狭くなってたかも…。
変な質問で申し訳ないのですが、
return true;
とか
return false;
ってどういう意味なんでしょうか?
自分で関数作る時、真と偽の結果を出力する。
ユーザー定義関数かfunctionで調べて使い方覚えた方が良いよ。
それが扱えないと全く話にならないです。
それ覚えたら次はCLASS覚える→Pear覚えるってやってくと
短時間で大きい物作れるようになる。
マジッククオートをオンにしているのは、
SQLインジェクションの対策だけなのでしょうか?
DBを使わないプログラムの場合は、
\'"が入力に入っててもエスケープしなくて大丈夫でしょうか?
543 :
nobodyさん:2007/01/01(月) 13:48:43 ID:RgWEDbNk
すいません初心者なので
ホントにくだらない
質問です。
他人の書き込みに対して
返答する
たとえば
>>100とかって
どうやってやるんですか?
>>543 if( ">>"のあとが数値だったら ){
$str = "<a href=\"#"+数値+"\">>>数値</a>";
}
if( ">>"のあとが数値だったら ){
$str = "<a href=\"#"+数値+"\">>>数値</a>";
}
ブラウザのネットゲームを作っているのですが、
チャットは一人一人にログ作ったほうがいいですよね
今はDBで全てのチャットを管理しているのですが・・・。
やはりそれだと負担がすごくなりそうです。
新しくDBを作成してアカウントごとにテーブルを分けるのも考えてみたのですが、
さすがにひとつのゲームで2つもDBを使う気にはなれません・・・。
開発経験がおありの方、ご指導お願い致します。
DB作成する必要あるの?テーブル増やすのじゃだめなの?
それに新しくDB作ったとしても何か問題あるの?
>>547 一人ひとりに各チャットログがある場合は
一つのテーブルで処理すると莫大な行になってしまう
最初にデータベース名を変数に格納して、
SQL実行をfunctionでmysql_db_selectと実行するのをまとめてしまったので・・・。
あー、でもチャットのみならDB作ってしまってもいいかもしれない・・・
テーブルが存在するか調べる関数ってPHPにあったっけ・・・?
これはまたMySQLスレのがいいのかな
莫大な行になって何か問題あるの?
検索のときに遅くなったりするのでは?
そもそもゲームのチャットログなんて大事に保管する必要ない気がするんだが。
>>511 だから、各id.cgiに各30行ほど入れておけばいいかなーと思った
553 :
nobodyさん:2007/01/01(月) 15:40:27 ID:pMMaY4YI
掲示板とかのログなんですけど、
普通は書き込み内容はそのままログに書き込んで、
表示の時にエスケープ処理とかするようですが、
書き込みの時点でエスケープ処理をして、処理済みのを書き込み、
表示は処理済のログをそのまま出すっていう手法はまずいでしょうか?
表示する内容としては同じものになるとは思うんですけど、
ログに書き込む内容が異なりますよね?
後者はユーザーが投稿した生のデータを改竄してログに書き込んでる気がするので、
前者のほうが支持されるのでしょうか?
それともセキュリティー的に何か問題とかあるのでしょうか?
MySQLで検索遅くて使えない位の会員がいる奴の質問とは思えないな…
もし遅いならゲームでのテーブルの使い方に問題ありそう。
IDに関連付けてテーブルをちゃんと分けてないで
色々ぶっこんで毎回全部読み込んでるとか、インデックスつけてないとか。
>>553 > 書き込みの時点でエスケープ処理をして、処理済みのを書き込み、
> 表示は処理済のログをそのまま出すっていう手法はまずいでしょうか?
非常にまずいです。
どうしてもそうせざるを得ない状況、例えば、極限まで最適化した処理をする都合上、
エスケープ処理にかかる負荷を減らしたい、などではない限りやるべきではありません。
理由としては、
・エスケープ漏れになりやすい。(例えば、新たにメールでの投稿を受け付けた場合など。)
・場合によってはエスケープ解除が必要になって面倒。(例えば、投稿内容のメール通知や、記事のダウンロード機能をつけた場合。)
・記事編集機能のロジックを組むのが面倒になる。
など。
>>553 SQLサーバーにそのまま渡して良いのは、プロトコルレベルで
プリペアードステートメントが使えるときだけ。
SQL文に書き込み文をそのまま挟んで発行するのはありえない。
最初に意図しない奴は全部弾いて終了させるかユーザーに書き直させる。
掲示板の本文欄みたいにある程度記号使わせる場合は
変換して突っ込む以外ないよ。
エスケープはマルチバイトの環境でちょっとバグが出てる。
多分、どっかのブログ読んでそう思ったのかもしれないけど
今それを読んで何か考えるには早い。危ない。
膨大な行がいやならユーザーごとにテーブル作ればいい。
なぜデータベースを作るのか。
559 :
nobodyさん:2007/01/01(月) 16:29:08 ID:0qkB5k7p
phpで掲示板を作りたいのですが、
ファイルの文字コードはshift_jsを選ぶべきでしょうか?
クライアントからの入力があるサイトではシフトJSが多い気もするので気になります。
560 :
553:2007/01/01(月) 16:35:26 ID:pMMaY4YI
>>556-557 どうもありがとうございます。
書き込む文字列を成形するときに、
エスケープ処理してしまう関数を使っているので、
>>556さんのおっしゃる
>・場合によってはエスケープ解除が必要になって面倒。
というのは痛感していました。
今作ってるのは、ちょっとした機能をPHP側でつけている、
Ajaxチャットを目指しているのですが、(DBは使用していません)
JavaScriptはさっぱりなので、参考サイトを色々まわってるのですが、
JavaScriptのXMLHttpRequestを使ってログを取得して表示することになると思います。
その場合、エスケープ処理はJavaScriptでやることになると思うのですが、
それでも安全性に問題はないですか?
スレ違いですかね・・・
>>559 utfだとサイズがちょっとでかくなるってだけで、
別になんでもいいよ。あとjsじゃなくてjisね。(Shift_JIS)
562 :
556:2007/01/01(月) 16:40:19 ID:???
>>560 「出力」の状態でエスケープされていない文字列を送信するのは危険ですので、
出力時にエスケープをして、その出力はサーバサイドプログラムで動的に行うことになります。
負荷の問題でそれができない場合には、入力時にエスケープすべきですね。
JavaScriptから読み取ることを想定したファイルであっても、当該URLを直リンクで指定されたら、XSSできちゃうわけで・・・。
Refererで参照元URIをチャットページに制限しても、チャット内でURL貼られた場合の処理とか、Referer 詐称している人が保護できなくなるとかいろいろ面倒なので。
メールで添付ファイルを送信する場合、
普通、一旦一時ファイルとしてアップしたファイル($_FILE)を
コピーして一時ファイルじゃなくする必要ってあるものでしょうか?
一時ファイルでやってみたのですがうまくいきませんでした。
他人のソース見てみると一旦コピーして、それから
手動で削除しているようなんですよね・・・
例:
ttp://php.s3.to/net/#mail
>>562 どうもご丁寧にありがとうございます。
XSS対策も含め、まだ理解しきれてないことが多いので、
設計を見直しつつ、セキュリティの勉強もしてまいります。
565 :
560:2007/01/01(月) 16:59:44 ID:pMMaY4YI
すみませんsageてました。
暇だから作った関数でも
function rand_parsent($var,$min_par,$max_par){
$min_var = $var * $min_par;
$max_var = $var * $max_par;
$var = round(rand($min_var,$max_var) / 100);
return $var;
}
rand_parsent(基準数値,最小値%,最大値%)
ネトゲの武器ダメージ算出などにでも使ってくだしあ。
echo rand_parsent(100,80,120);
『80〜120の数値をランダムで表示』
567 :
nobodyさん:2007/01/01(月) 17:43:12 ID:6lGuu3mG
>>559 配布する目的ならsjisじゃないと、サポートに文字化けと騒ぐ小僧が後を絶たなくなる
自分で使うのみならeucが良いかと
blogとか何らかのutf-8を想定し配布するならutf-8ですっと何度も書き
言い聞かせないと文字化け小僧が出現してウザイです
sjisはメタ文字とか色々と潰す処理が面倒ですけどね
568 :
nobodyさん:2007/01/01(月) 20:25:00 ID:PQGIOQJU
569 :
【大吉】 :2007/01/01(月) 20:32:18 ID:???
ヒント:post打ってセッションに閉じ込めろ
570 :
nobodyさん:2007/01/01(月) 21:00:28 ID:PQGIOQJU
>>569 POSTで受け取ることができます?
POSTでリクエスト送信してもGETで返ってき、
一部POSTで返ってくれたりでもしたら嬉しいのですが。
(現在外出中なので、帰宅してから調べてみたいです)
セッションは考えましたが、途中でユーザーにダイレクトでURL入力されると
意味のないことかなーと思いました。
GETで返る、って意味が分からん。
GET・POSTというのは、どういう形式で鯖にリクエストを投げるか、を示す。
<form action="device:gpsone" method="post">
<input type="url" value="
http://www.example.com/">
<input type="submit" value="動作するかしらねーぞ">
</form>
573 :
nobodyさん:2007/01/01(月) 21:37:00 ID:PQGIOQJU
POSTではできないようなことをブログで見ました
(自分ではまだ試していませんが、帰ったら試してみます)
POSTできないと、URLをダイレクトに書き換えられて人生終わります
getで受け取った値をセッションに保存。
値が書き換えられてたら処理中断。
発想をかえてみれ。これじゃだめか?
postでも好きな値送れるじゃん
576 :
512:2007/01/01(月) 22:13:21 ID:sSR0Omy3
>>515 レス遅くなりましたが、ありがとうございました。
>>574 別ページから直接URLを打たれた場合対処できないかと
>>575 送信⇒中間⇒返答
だから、POSTで何もできなす・・・
WEBである以上嘘ついてるかどうかは確認できないって事だよね
どういう状況なのかようわからん
>>577 だから別ページから直接URL打たれてもセッションにキーなども一緒に保存しといて
比較して不正なら中断すればいいだろ。
>>579 移動した距離分ポイントを増やすようなシステムだけど、
URLで座標が書き換えられるような不正を防止したい
>>580 別ページにフラグ立てておいて
次のページにすればフラグを消す?
すまんがサッパリ理解できない
AUの携帯からフォームでGPS情報を送らせるわけでしょ。
なんかセットでこちらで用意した暗号データみたいのを一緒に送るとか・・
>>581 とりあえずあれだ、落ち着け。
そして セッション の意味を調べてこい。
あけおめ!
>>464だけど
現在の閲覧者カウントするのはセッション使うでおk?
初歩の知識がたりなさすぎる。
入門書ぐらいのことは一通り学習しなさい。
話はそれからだ。
588 :
nobodyさん:2007/01/02(火) 00:48:14 ID:fMlbvj4z
くだらない質問すみません
phpのコードを書くときにどのようにスペースを開けて書くのが普通なのでしょうか?
たとえば$hogeが存在したら$hogeにaaaをセットするとしたら
if(isset($hoge) ){
$hoge = 'aaa'; //タブは全角にしてあります。
}
こんな感じでいいのでしょうか?
自分ではこれで見やすいと思うのですが、
みなさんはどんな感じに書いていますか?
>>581 セッションを理解してなかったらWebアプリ作れないだろ。
オークションで他人に落札させ放題、ショッピングで他人に買い物させ放題だぞ。
593 :
588:2007/01/02(火) 01:26:01 ID:fMlbvj4z
594 :
nobodyさん:2007/01/02(火) 12:47:05 ID:349lz7NW
フォームのname属性は、どこのサイトを見ても
だいたい半角英数で記述されています。
そこを日本語で記述されていたら何か問題があるのでしょうか?
<input type="radio" name="ほげほげ" value="">
日本語にしたい理由がわからない。君子危うきに近寄らず、ですよ。
596 :
nobodyさん:2007/01/02(火) 14:27:30 ID:P6xryFlt
よくある同じ趣味のお仲間募集掲示板を作ろうと思っているんですけど、
記事からメールを送る場合、匿名で送れるようにする予定です。
そこで、この場合、管理者側でメール内容を記録しておくべきでしょうか?
597 :
nobodyさん:2007/01/02(火) 14:47:18 ID:jphvwS0n
認証のことで質問させていただきます。
PEARのAuthにてごく普通の認証を行っています。ログインフォームとは
別のページへ移動した際も、ログインフォームがあるページと同じくこのように
$myauth = new Auth("DB", $params, "loginFunction");
DBへ接続して認証状態を得たほうが良いのでしょうか?
index.php <- ログインフォーム。ログインするとhimitsu.phpへのリンクが出現。
himitsu.php
himitsu2.php
himitsu3.php
・
・
・
友人は
「セッションIDをクッキーに保存して、値があるか無いかで判断すればいいじゃん」
と言っているのですが、簡単にクッキー偽装が出来てしまいそうで心配です。
よろしくご教授お願いします。
テキストと画像をアップして、それらをいくつかのテンプレに基づいて
合成して、雑誌風の画像を作ってくれるphpってありますか?
知ってる方いたら教えてください。
ある
>>597 Auth.phpの中を見てみれば分かるけど、
セッションデータが無いならDBにチェックしにいくけど、
それ以外ならセッションデータだけでチェックしているよ。
クッキー偽装つーかセッションハイジャックを気をつけないといけないが、
そんなに悪い手法では無いかと。
んで、$myauth = 〜 の行もAuth.phpを読んでみれば分かるが、
それを指定したからといって、必ずしもDBに接続しにいくわけじゃない。
$a='${abc}です。';
で定義されている文字列変数があるとして、これをそのまま print すると、
${abc}です。
と表示されますが、この後色々な処理をして、$abc に"abcdefg"が代入されるとします。
その後、この文字列の中の変数を再度パースさせて、print $a; で、
abcdefgです。
と表示させる方法は無いですか?
printとechoを使い分けてれば解決する話だ。キエロくず
だいたい、そんなのも知らないようだと.で文字列連結もしらないんだろうな。
市から勉強しろやたこにんげん
今日は随分荒れてますね。
荒れてるのは1人だけだろうけど^^;;;;;
>>602 $a='\${abc}です。';
$abc = "abcdefg";
print( str_replace( "\${abc}", $abc, $a ) );
607 :
597:2007/01/02(火) 15:20:05 ID:jphvwS0n
> 601さん
わかりやすく説明していただきありがとうございました。
大変よくわかりました!
>>606 ありがとうございます。
その手がありますね。ただ、出来るだけ汎用化したいので、$a の中に出てくる
変数を固定したくないので…
>>608 $fieldname = "abc";
$a="\${".$fieldname."}です。";
$$fieldname = "abcdefg";
print( str_replace( "\${".$fieldname."}", $$fieldname, $a ) );
eval ("\$a = \"$a\";");
print $a;
ってのもありだろうけど、$aをきちんと制御(不用意なものをそのまま使わない)できるのが前提。
おいらは明示的に割り当てた変数だけを展開して欲しいので、
汎用性を犠牲にしても、テンプレートエンジンとかstr_replaceを使う。
>594
HTMLの仕様で、nameは [a-zA-Z][a-zA-Z0-9_:.-]* のみ使える。
>>608 >>603-604はスルーか貴様は!?
それがいやだったら可変変数でも使っておとなしくしてろや。
礼もいねねーようならくんな!くず!
>>612 明らかに教え方が悪いおまえのせいだろwwww
>>612 お前みたいな回答者はいらんから帰ってくれ
匿名で文句いってんじゃねーよ608
新年から嫌な気分にさせんなよ。オレさまが代わりにレスしてやる。
>>603 意味不明
>>604 質問をよく嫁
619 :
602:2007/01/02(火) 18:37:18 ID:???
>>609-610 なるほど。こんなやり方があるとは思いませんでした。特に、610 はビックリです。
自分的には、610 の方が使いやすそうです。
(用意したテキストファイルを読み込んで、その中にある変数をパースしたいので、
後者じゃないと目的を達さない気がしています。)
>>612 echo を使っても、私には実現不可能だったのでスルーしました。それ以上質問すると
更に怒りを買いそうだったので、黙っていたのですが、気に障ったのであれば申し訳ありません。
621 :
621:2007/01/02(火) 19:21:52 ID:???
すいません、トクトクでサーバ借りようしてIDとパスワードの入力でつまずいて帰ってきますた
622 :
nobodyさん:2007/01/02(火) 19:38:07 ID:P6xryFlt
optionの値の改ざんを防ぎたいのですが、postで別のページに値をわたしたとき
その値をif文でチェックし、チェックし終わったらセッションに入れて、次のページにとばしてやる。
という方法が妥当でしょうか?ご教授お願いいたします。
623 :
nobodyさん:2007/01/02(火) 19:43:36 ID:gs/abRLq
>>622 そのページでチェックすればいいだけでは?
htmlspecialcharsを使いどころなんですが、
htmlに表示する前にしますよね?
たとえば
「echo $変数」を行う数行前にhtmlspecialcharsを使ってもいいのでしょうか?
それともechoで出力するときに「echo htmlspecialchars($変数)」とするべきでしょうか?
なんでそう思ったの?
考えたソースを見せてみ?
626 :
624:2007/01/02(火) 20:42:22 ID:???
$a = "はじめてのPHP";
$a = htmlspecialchars($a);
echo $a;
こういう流れなんですが、いかがでしょうか?
>599
見たいなアプリ、ご存知の方いたらソフト名を教えてください。
>>626 なんでそう思ったのか聞いてるのに・・・・
まぁ626と
echo htmlspecialchars("はじめてのPHP");
は等価
$ time md5sum dummy_4gb.bin
real 3m59.607s
user 0m49.463s
sys 0m51.619s
$ time md5sum.php dummy_4gb.bin
real 5m24.863s
user 1m54.487s
sys 1m0.032s
$ cat md5sum.php
<?php
print md5_file($argv[1]);
?>
630 :
624:2007/01/02(火) 20:59:40 ID:???
ありがとうございます。こうかなと思った理由は、出力と同時にサニタイズを行わないと
改ざんとかされたりしてセキュリティ的に危ないのかなと考えて不安だったんです。
おかげさまで一つ勉強になりました。ありがとうございます。
631 :
nobodyさん:2007/01/02(火) 21:14:26 ID:gs/abRLq
等価じゃないでしょ。
$aは上書きされてるんだから、$aをあとで使うかどうかじゃないの。
結果的に等価なんだから一緒だろ
626と比較するなら628は等価。
端的にしか書かないから分からないけど
XSSを知って原理は知らないけど変数に代入するといつの間にか内容が改ざんされるかもしれないって思ったんでしょ?
数行前でも100行前でも同時でも途中で処理入れない限り全く同じ。
634 :
nobodyさん:2007/01/02(火) 21:59:45 ID:XpLMgPdp
MERONっていうメール送信ソフト使ってるけど、
携帯には送信できないのな・・・
自宅鯖で携帯宛にメール送信したいんだがどうすればいいよ
それっておまいの携帯側が拒否ってるんじゃないのか?
637 :
nobodyさん:2007/01/02(火) 22:22:48 ID:XpLMgPdp
環境変数でファイル名を取得する関数はありますが、
それでは<title></title>のタグ内の文字を取得
する関数というのはないのでしょうか?
アクセス解析もどきを作ろうとした時、この部分でひっかかっています。
正規表現 title phpでググレ。ブログでそれについて解説してるサイトがあるから見つけて見なさい。
質問です。javascript内にphpを記述しても問題おきませんか?
>>640 PHP(サーバサイド)でJavaScriptを動的に書き換えることはよくあること
>>641が書いてるような方向の話じゃなくて
<script>document.write("<?php いろんな処理 ?>");</script>
という質問なんじゃないかと思ったりしてる。
>>640 サーバサイド クライアントサイド でぐぐる
スレ違いの話になるが、googleも広告だらけでまともな情報が探しづらくなったね。
まだマイナーだったころはregいじってIEでググレるようにして・・・
あのころは貴重だった。
>>642もちゃんと理解してるのか?
クライアント側にくるときにはもうPHPのコードはなくなってるでしょ。
647 :
640:2007/01/02(火) 23:07:05 ID:???
>>647 たとえば都道府県なら1〜47以外のvalueが来たらエラーメッセージor捨てる。
チェックはサーバ側でやるんだからJavaScriptとかあまり関係ない気がするが。
アバターのように、画像を合成(重ね)させるにはどうすれば良いのでしょうか。
何か参考になるサイトなどがあれば教えていただけませんか?
651 :
649:2007/01/03(水) 00:18:53 ID:???
>>650 そこはある程度見ました
<?
//イ霖?
$im1 = imagecreatefromgif("01.gif") or die("error!".__LINE__."\n"); //セ隍サ、?
$im2 = imagecreatefromgif("02.gif") or die("error!".__LINE__."\n"); //ヌリキハ
//ヌリキハソァサリト?
$trans = imagecolorallocate($im1, 255, 255, 255) or die("error!".__LINE__."\n");
imagecolortransparent($im1, $trans) or die("error!".__LINE__."\n");
//イ霖?、ナ、ヘ、?
imagecopymerge($im2, $im1, 0, 0, 0, 0, 200, 200, 100) or die("error!".__LINE__."\n");
header("Content-Type: image/gif");
imagegif($im1);
imagedestroy($im1);
imagedestroy($im2);
exit;
?>
としたのですが、透過されません。
透過はpngしかされないのでしょうか?
652 :
649:2007/01/03(水) 00:22:55 ID:???
すみません、バージョンは5.1.4です
gdのバージョンは?
655 :
649:2007/01/03(水) 01:00:41 ID:???
GD Version bundled (2.0.28 compatible)
FreeType Version 2.1.9
です。
$trans = imagecolorallocate($im1, 255, 255, 255) or die("error!".__LINE__."\n");
を
$trans = imagecolorclosest($over, 255, 255, 255);
にすれば解決できました。
ぶっちゃけ理由はわかりません。
その二行だけじゃ判断できないよ。
変数に何入れてんのか教えてくれれば理由がわかるかもしれないが・・
>>656 すみません、とりあえずソース出します
<?
$m1 = imagecreatefromgif("01.gif");
$m2 = imagecreatefromgif("02.gif");
$trans = imagecolorclosest($m1, 255, 255, 255);
imagecolortransparent($m1, $trans);
imagecopymerge($m2, $m1, 0, 0, 0, 0, 200, 200, 100);
header("Content-Type: image/gif");
imagegif($m2);
imagedestroy($m1);
imagedestroy($m2);
exit;
?>
とりあえず、ってことは何か説明あるかしら
>>658 説明構いませんが、何を説明すれば良いのでしょうか?
全部
今日はじめてvip板いってきたんだけど、なにあのノリwwwww
2ゲットの練習板かよwww
いや、それ、感染してるから。
664 :
nobodyさん:2007/01/03(水) 05:28:24 ID:ILx6vQ3+
今、アップローダー作ろうと練習していますが、わからないので質問させていただきます
form.php
<FORM action = "form.php" method="POST" enctype="multipart/formdata">
<input type="file" name="upfile">
</FORM>
でファイルをアップし、それを”up”というフォルダに格納するためには、どうすればいいのでしょうか
>>665 速レス感謝です!
熟読してきます
ありがとうございました
668 :
nobodyさん:2007/01/03(水) 09:27:49 ID:kYTtXkBf
アクセス解析を作っているのですが、どうやってログ分けしようか迷っています。
とりあえず1つのファイル(実際にはDBを使っているので1テーブル)で、
リンク元、リファラー、アクセス・日、アクセス・月、アクセス日時
を取得してアクセス毎に1行ずつデータが追加されるようにしています。
しかし、これだとただログが膨大になってくるし、表示時にも使い勝手が悪いので
「アクセス・日」と「アクセス・月」はログファイルを分けました。
それで迷っている点なのですが、やはり各項目(リファラー毎とかリンク元毎とか)
分けてログに記録する方がシステムの汎用性として使いやすいのでしょうか?
それとも1つのファイル上で記録する方が処理も速く、無駄が省けるのでしょうか?
>>668 全部まとめて記録していいよ。
ログが膨大になっていくのは当たり前なので、
ログが溜まったら分離すればいい。(目安は3000件ぐらい)
それで見たいログを選べるようにすればおk
>>669 そうですね。表現的に分けた方がやりやすい時は分けます。
あと、ログについても件数によって分けるようにします。
DB使う場合はちょっと難しいですが、勉強します。
アドバイスありがとうございました。
671 :
nobodyさん:2007/01/03(水) 14:09:43 ID:riX414lp
質問させてもらいます。
例えば、ある関数を実行した後、指定時間たった後に
関数を実行するという事は可能なんですか?
初心者ですが宜しくお願いします。
>>671 もっと具体的(関数の内容やら指定時間やら)じゃないと回答のピントがズレそうだけど、
sleep()使ったり、プログラム実行関数を使ってバックグラウンドで実行したり。
権限が許せばcronとか。
WebProgは如何に処理を手早く済ましてデータを送り返して次のリクエストを待ち受けるか、
ってのが根底にあるから、長時間(といっても秒単位)一つのプログラムが走りつづける状況ってあんまり無いよ。
PHPから切り離して外部に処理を任せるのが普通じゃないかな。
phpでcurl関数を使うための設定で苦戦しています。
現在の状態は以下のとおりです。
・php表示時
Fatal error: Call to undefined function curl_init() in 〜
・php.ini
extension_dir = "C:\php\ext"
・C:\php
libeay32.dll、ssleay32.dllがあります。
extにはphp_curl.dllがあります。
・phpinfo()で確認した結果
Configure Commandに--with-curl[=DIR]がありません。
・print_r(get_loaded_extensions())で確認した結果
curlらしきものはありません。
libcurlの設定の問題なのかもしれませんが、
いまいちよくわかりません。
初歩的な質問ですみませんが、教えて頂きたいです。
よろしくお願いします。
ちょっとスレ違いの話だけどさ、
DBの1つのテーブルに30万件の行とか大丈夫かな?
一気に表示させるわけじゃないし、ごく一部(重数行)を検索するだけ。
675 :
nobodyさん:2007/01/03(水) 15:56:25 ID:t8t0mqjn
phpでsslを利用したいのですが動きません。
apache2.0.59です。
ご教授おねがいします。
>>673 Apache再起動した?
PHP.iniの
;extension=php_curl.dll
このセミコロンを下のように外した?
extension=php_curl.dll
>>675 どのようにして動かないか言ってみろ
じゃないとアドバイスできない
>>676 すんません
ちょっとINDEXについて小一時間ほど教えてください
>>675 意味がわかんない。プロトコルとサーバサイド関係ないでしょ。
httpをhttpsにしたとたんに動かなくなったとかなら逆に尊敬する。
>>678 2chの全スレからこのスレを探し出すのはたいへんだろう?
「ネット関係」の「WebProg」っていう目次があるからこのスレにたどりつける。
INDEXってのはそういうこと。
具体的にはCREATE INDEXでググってくれ。
>>677 Apache再起動しました。セミコロンも外してあります。
Eclipse3.2を使っていますが、curl関数にカーソルを当てたときに、
関数仕様?のようなものは表示されます。
実際、phpinfo()やprint_r(get_loaded_extensions())では表示されないので
読み込まれていないようにも思えますが…。
>>680 小一時間ほどどもです
さっそく調べてみます
683 :
nobodyさん:2007/01/03(水) 16:04:36 ID:t8t0mqjn
>>679様のいうとおりです。httpをhttpsにしたらアクセスできないんです。
>>681 Apacheでたまに再起動でちゃんと再起動されない時あるからなぁ・・・
そのときはサービス終了させて、再度立ち上げたけど(過去に苦い経験)
phpinfo()で読み込まれていないってことは、パスとかその辺が臭いな
バージョンとか教えてくれたら答えてくれる神いるかもしれんな
686 :
nobodyさん:2007/01/03(水) 16:08:59 ID:t8t0mqjn
こういうページが表示されます。
どなたかご教授おねがいします。
Web ページへのナビゲーションは取り消されました
対処方法:
ページを最新の情報に更新する。
>>683 headerとかでリダイレクトするURLをhttpでハードコーディングとかしてんのか?
プロトコルに依存したコード書いちゃダメだよ。
さすがにsslをインストールしてないとかhttpしか起動してないとかは無しな。
688 :
673:2007/01/03(水) 16:15:16 ID:???
>>684 バージョンは次のとおりです。(OSはWinXPです)
Apache 2.0.59
PHP 5.2.0
環境変数は、Pathに"C:\php"を追加したのみです。
どなたか気づいた点がありましたら、よろしくお願いします。
extension_dir = "C:/PHP/ext" でもだめ?
690 :
nobodyさん:2007/01/03(水) 16:17:19 ID:t8t0mqjn
httpかわかりませんが、WindowsXPsp2とMEDIA PLAYERとIE7を起動中です。
sslはインストールした記憶がありませんが、apacheをインストールしたなら大丈夫だよと
友達に言われたのでたぶんはいってます。
ちなみに<a href="
https://localhost/">はじめてのリンク</a>で飛べませんでした。
<a href="
http://localhost/">なら飛べます。
大変恐縮ですがご教授お願いします。
>>688 設定しているphp.iniと実際に使われているphp.iniが違うんじゃないかな。
>>690 大丈夫じゃないので、その友達を問い詰めるかググル先生に聞く。
適当に「apache ssl インストール」ぐらいがキーワードかと。
692 :
673:2007/01/03(水) 16:22:07 ID:???
>>689 "\"を"/"に変更しても特に変わりませんでした。
また、他のextensionについては、;(セミコロン)を外すだけで
読み込まれるのを確認しました。
偉そうに回答してたが俺もcult使えなかった、ごめん
694 :
認定回答者:2007/01/03(水) 16:40:42 ID:???
気を落とすなよ。人のために答えてあげる姿勢はすばらしい
MySQLの検索結果を$resultに格納して、
foreach($result as $value){
print_r(mysql_fetch_assoc($result));
}
って無理だっけ?
$resultには結果データが入ってます。
>>695 $resultがmysql_queryの返りなら
while ($row = mysql_fetch_assoc($result)) {
print_r($row);
}
>>696 サンクス
何で今までforeachで成功してたんだろ
いやいやforeachもwhileもどっちでも結果はでるから
どのようにすれば対象文字列に日本語が含まれているかどうかで
分岐できるんでしょうか。
if (preg_match("/[^ -~¥r¥n]/", $str)) {
# 日本語かも
} else {
# 英語のみかも
}
>>697 よーく見よう。
foreach($result as $value){
print_r(mysql_fetch_assoc($result));
}
配列を処理するときはforeachを使えと過去ログから散在言ってきたうわなにするやめr(ty
705 :
nobodyさん:2007/01/03(水) 23:22:09 ID:hZ6vl50d
Zend Studio使ってる人に質問
どうせつかうなら新しいバージョンが良いと思うんだけど、英語に困らなければ
Zend Studio5.5をUSの全土から購入しても良いものかな
日本語文字コード処理とかで面倒でなければいいのだけど。
ここで聞くより専用すれいくことをおすすめする
707 :
nobodyさん:2007/01/03(水) 23:27:21 ID:t8t0mqjn
if文で条件に(9 < $a <21)とやりたいんですけど誤動作とかしますかね?
教本みても(9<$a)など判断材料がふたつしか使われてないので使って良いのかわかりません。
どなたかアドバイスお願いいたします。
やってみるといいよ。
709 :
nobodyさん:2007/01/03(水) 23:46:29 ID:t8t0mqjn
いや、もうためしているのですが、成功するときとしないときがあるんですよ
>>709 問題
・$a < 21の戻り値の型は?
サニタイズの質問です。
$test['aka'] = "あか";
$test['midori'] = "みどり";
$test['kiiro']="きいろ";
foreach ($test as $v) {
$v = htmlspecialchars($v);
}
とした場合、
サニタイズした値を、$testにキーを替えずに格納するにはどうしたらよろしいのでしょうか?
array_keys
foreach ($test as $k => $v) {
$test[$k] = htmlspecialchars($v);
}
とか
$test = array_map('htmlspecialchars', $test);
参照foreach
715 :
711:2007/01/04(木) 01:05:19 ID:???
ありがとうございます。
すべて試してみました。
無事どのやりかたでも解決の道につながりました。
ありがとうございます。
>>707 素直に
if( 9 < $a && $a < 21 )
にしたほうがいい。
でないと
>>710がいうようなバグの温床になるぞ
自分のサイトを晒してセキュリティをみてもらうのってありですか?
それはおまえ次第だ
ソース見せてくれたほうが早いような気がするけど
まぁ興味心からサイト見せてもらいたいところ
自分は「住所」みたいな項目をログに保存する時、
愛知県,名古屋市,中区
見たいに、都道府県別・市区町村別など分けて記録するようにしているのですが
最近この方法でいいのかどうか悩む時があります。
と言うのもあまり,で分けていくと住所としてわかりにくいので
例えば住所録を作るなら、「名前,愛知県 名古屋市 中区,000-0000-0000」
見たいな記録の仕方の方が良いのかな?とも思います。
上記はログファイルに記録する方法で説明しましたが、DBを使う場合など
フィールドの数が増えすぎるのを気にしています。皆さんの方法を教えて下さい。
721 :
717:2007/01/04(木) 08:16:03 ID:???
徹夜で制作してたので夜の21時ごろにURL晒しにきます。
>>720 ・誰がログを見て分かりにくいの?
・前の形式だと何が都合悪くて、その形式だと何が都合良いの?
・フィールドが増えすぎると嫌なのは何故?
>>719 住所を細かく分けることに意味があるの
俺なら住所はそのまま1個のデータにする。
検索が必要なら郵便番号とか自治体コードをつけてそれで検索するようにする
>>720 その程度の知識で出会い系サイトはむりだからやめとけ。
725 :
nobodyさん:2007/01/04(木) 13:43:29 ID:LCXiivMy
携帯対応の画像掲示板を作ろうとしているんですが
画像を鯖にうpする方法は、携帯でファイルを添付して、
サーバーに送るっていうのは分かるんですが
PHPでそれらしきスクリプトを見た事がないんです。Perlならあるんですが
どうすれば良いんでしょうか?
>>726 いや、ケータイはPOSTでアップロードするんじゃなくて
メールに画像ファイルを添付して特定アドレスに送信で
「アップロード」するのが普通。
PEARのクラス使えば楽に作れるよ。
728 :
nobodyさん:2007/01/04(木) 15:23:16 ID:9Z/Os6JC
規制報告って何
731 :
nobodyさん:2007/01/04(木) 15:49:30 ID:LCXiivMy
>>728 dat取得して、指定番号のログ見ればいいじゃないか。
まぁ
http://(略)/39からHTML取得して、正規表現で必要なのを取り出しても良いかと
>>731 POP3でメール拾ってくる(PEAR使うと楽)か、.sendmail .qmailとかが使える環境ならそれ利用してメールを取得。
取得したメールをデコード(PEAR(ry)して添付ファイルを取得。
検索汁。サンプルも大量に転がってるからそれ参考にするように
733 :
nobodyさん:2007/01/04(木) 16:37:06 ID:77+OJBx3
listの変数名の付け方で悩んでます。
現在のコード
for($i=0; $i<50; $i++){
list($a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$a10,$a11,$a12,$a13,$a14,$a15)=explode(",",$list[$i]);
〜ここに処理〜
}
上記の用なコードで、list()内の
$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$a10,$a11,$a12,$a13,$a14,$a15を
別で定義する事はできないのでしょうか??
例えば
$explode=$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$a10,$a11,$a12,$a13,$a14,$a15;
for($i=0; $i<50; $i++){
list($explode)=explode(",",$list[$i]);
みたいな感じで、、、
どなたかご伝授お願い致します。
なんかきったないコードだなぁ
>>733 explodeされる内容が必ず15個に分割できるような内容なのかとか
チェックはしないの?
素直に配列で受けた方がいいと思うけどね。
$a1と書くのも配列の添え字で指定するのも変わらんと思うけど。
preg_replace('/([a-zA-Z]+)/', strlen($1), $str)
みたいに置換部で関数に $n を渡すことはできないんでしょうか?
>>733 実際に$a1〜$a15みたいな連番なら配列インデックスの0〜14と全くかわらないから
恐らく名前をわかりやすくしたいんだろ。
分割した値を受け取って名前をわかりやすくしたいならこうやる。
define('id',0);
define('name',1);
define('mail',2);
$a = explode(",",$data);
echo $a[id];
echo $a[name];
echo $a[mail];
ちなみにPHPは配列の中に配列を入れる2次元配列が扱える。
ファイルから一行ずつ取り出して、$i++させてexplodeしたのを
line[$i][id]みたいにも出来る。
>>736 \nの置き換えは出来る。
strlen($1)って何?$1って。
iと1ってすげー離れてて打ち間違えるはず無いんだけど。
変数で頭に数字とか無理だし、基礎の基礎から勉強しなおさないとダメ。
>>736 コールバックを使う
preg_replace_callback
>>738 マニュアル嫁
740 :
nobodyさん:2007/01/04(木) 18:18:52 ID:zO0Pn/NQ
配列の重複した値を数えてくれるような関数はありませんか?
なければどうすればよいのか教えてください
array_uniqueで重複を取り除いた配列と
元の配列を比較をして、被ってる奴を取り出せそう。
742 :
736:2007/01/04(木) 19:27:39 ID:???
>>739 できました。ありがとうございます。
でもめんどくさいなあ。
>>738 勉強します。すいません。
743 :
nobodyさん:2007/01/04(木) 19:39:51 ID:vYwloFhp
セッションはsession_regenerate_idなどを使ってページを切り替えるたびに
新しいものにするのがセキュリティとして安全が高まるのでしょうか?
744 :
738:2007/01/04(木) 19:52:53 ID:???
>>738 お前が勉強し直せw
マジで間違ってるよお前
746 :
nobodyさん:2007/01/04(木) 20:05:02 ID:vQ5HUYnY
質問です。
セキュリティ上、エラー表示をすべてOFFにしているのですが、
以下のスクリプトだとエラー表示がOFFになりません。
----test.php----
@require('../test.inc.php');
以下略
----------------
----test.inc.php----
error_reporting(0);
--------------------
test.phpのrequireの前の@を消すとエラー表示がOFFになるのですが、
万が一requireに失敗したときにエラーが表示されてしまいます。
test.phpの先頭にerror_reporting(0);を書けばいい話なのですが、
サイト全体でphpファイルがいくつもあり、
サイト全体でエラーが出ていないかチェックしようと思うと、
すべてのphpのerror_reporting(0)をコメントアウトしなければなりません。
そういった手間を省くためにtest.inc.phpに記述しているのですが、
スマートに解決する方法はないのでしょうか?
初期化スクリプトを使う
正規表現について質問です。
・一番最初に半角英数が入力されている、
・または
・タブと空白と改行が混じっている
以上の条件で自分なりにしらべて書いてみたのですがエラーになりました。
どなたかご教授お願いいたします
preg_match("a-zA-Z0-9|\t\n\r\f",$a)
749 :
748:2007/01/04(木) 20:22:42 ID:???
訂正です、こちらでエラーになりました。
preg_match("^a-zA-Z0-9|\t\n\r\f",$a)
開き角括弧による文字クラス定義
752 :
740:2007/01/04(木) 20:45:43 ID:???
>>741 もう少し具体的に教えて頂けないでしょうか
753 :
nobodyさん:2007/01/04(木) 20:50:19 ID:LL+BmzpW
.htaccessでdenyとかにしたら?
>>752 array_uniqueを調べる努力はしましたか?
720ですが、レスが流れたので、改めて質問します。
自分は住所を項目として登録する時、登録時のフォームは
都道府県[ ]//[]はテキストボックス
市区町村[ ]
その他[ ]
と言う風に3つのテキストボックスにして、保存時は「都道府県,市区町村,その他」
という風にしています。ですが、
>>723さんの言うには「細かく分ける必要はない」
とのことなんですが、それなら修正時に困ると言うことは無いのでしょうか?
誕生日なら年とか日を元にlistで配列に代入出来ますが、
住所だと難しいと思うので、分けて保存するようにしています。
>>753 apacheのDocumentRoot以外におく
>>758 例えば会員制のサイトだと、住所を細かく入力して後で修正しますよね?
そういう作りの時に、自分は細かく分けるようにしているのですが、
それだとカンマが増えてログが見づらいなと思うようになってきたんです。
住所を複数登録したい場合も増えるし。
とはいえ、分けないで1つにしても修正・編集時に適応させる方法が
わからなくて、質問した次第です。
直でログをテキストエディタで編集するバカ発見
会員の情報とログは別物じゃないの?
それとも、会員の情報=ログ?
>>761 自分が間違ってたらすみませんが、、会員サイトとかアドレス帳とか
ログを保存する形式のシステムって
登録フォーム→ログ保存(datファイルやDBに書き込み)
編集→ログ読込→編集フォームに反映
っていう流れでは無いのでしょうか?別物だという認識はなかったのですが・・・
答えなってねぇw
abc[0-9]{3}
という正規表現で
abc000 や abc010 などには対応可能ですが、
abc000や abc000などの
全角バージョンにも対応させるためにはどうすればよいでしょうか?
強制的に半角に変えてから正規表現チェック、という方法を
思いつきましたがもっとストレートな方法などはあるでしょうか?
>>764 これまでのレスで
>>722の理由は書いてるはずなんですが、、、
とりあえず現状の方法でやってみます。ありがとうございました。
768 :
nobodyさん:2007/01/04(木) 21:46:44 ID:bHMCSjbZ
>>749 preg_match("^[a-zA-Z0-9\t\n\r\f]",$a)
って[ ]を使えば?(あと|は取り除いたけど)
>>767 まず722にはっきり答えてくんないと回答しようがない
772 :
nobodyさん:2007/01/04(木) 22:10:10 ID:1paIAynv
>>762 修正作業としては一列で読み込み&保存するだけの事だから
別にログが見づらくてもフォームで修正や管理するのであれば
問題ないのでは・・
773 :
736:2007/01/04(木) 22:13:41 ID:???
e 修飾子てのもありました。
774 :
738:2007/01/04(木) 23:10:02 ID:???
言ってる意味がわからんのだが俺がなにを間違っていっているのか言ってみろ
replacement では、 \\n 形式または $n 形式(PHP 4.0.4 以降)で参照を指定することができます。
777 :
738:2007/01/04(木) 23:37:17 ID:???
$1が使えると思いこんでるってことか?
778 :
ポンタ:2007/01/04(木) 23:38:15 ID:???
クズどもいきがんなよw
思った、2ちゃんってデータベースで管理してたんだね。
780 :
nobodyさん:2007/01/05(金) 00:35:35 ID:bC4ZcHyY
配列の値からある値を検索して、
見つかったらAの処理、
見つからなかったらBの処理
を行いたいのですが、どなたかお願いします。
試したけどうまくいかなかったソースです↓
$array = array("a","b","c");
if (array_key_exists("e",$array)) {
echo"存在する";
}else{
echo "存在しない";
}
s/array_key_exists/in_array/
782 :
780:2007/01/05(金) 01:03:45 ID:???
ありがとうございます。
in_arrayで無事に解決しました。
783 :
nobodyさん:2007/01/05(金) 06:19:47 ID:MZtN5g8D
メールが送られてくるたびにそのアドレスにログインURLを付属して返信したいのですが(メールが来る度、動作させたい)、これはCRONとかでやるしかないのでしょうか?
レンタルサーバーのためCRONはいじれません。。
ご教示お願いいたしますm(_ _)m
とりあえず、PHPと無関係に動くブツにしたほうがよさそうなので、
レン鯖板で該当鯖のスレを探してそこで訊いたらどうですか。
メールが届いたときに自動返信する仕組み自体はいろいろあるので。
785 :
nobodyさん:2007/01/05(金) 07:06:17 ID:c7t/kCs2
>>12 ピザ???テラワロスwwwww
オメーみたいなやつは食欲抑制剤でも飲めば?輸入品のさ。
日本じゃ全然効かねー詐欺レックスしか処方してくんねーだろ
http://urara.cart.fc2.com 他にもこのサイト武器や独立支援とか盗撮機とか美容とか色々欧米のもの
輸入してるみたいでレアモノが多いか重宝してるが。まぁどーでもいいが。
>>16 お前テラヤバスwwwwwwwwww孤独氏けてーい
786 :
nobodyさん:2007/01/05(金) 08:37:25 ID:UZOqG6YA
これなんて誤爆?
質問も回答も冬休み化
789 :
nobodyさん:2007/01/05(金) 10:22:06 ID:wLYNe8ol
PEARのAuthを使っているのですが、よくある「次回から自動的にログイン」という
チェックボックスの機能を実現できずに困っています。
PEAR Authにこの機能があるのであれば使いたいのですが、探しても情報が無いのです。
お教えいただけたらと思います。よろしくおねがいします。
790 :
nobodyさん:2007/01/05(金) 10:25:34 ID:xRwT+D17
xoop関連とかでそういうのあった気がする
ヒントにはなるかも。
791 :
nobodyさん:2007/01/05(金) 10:31:26 ID:xAOCVwN4
ここのサイトのX-File Access Counterなんですが
ttp://xworks.org/ >//設置例
>//public_html / (トップページ
http://xworks.org/)
>// |
>// +-- arc / xfac.php [604] //このスクリプト。
>// | | log.dat [666] //ログファイル。
>// | | recent.dat [666] //最近のログファイル。
>// | | .htaccess [604] //アクセス制御ファイル。
>// | | template.txt [604] //出力 HTML テンプレート。
>// | |
>// | | download.zip [604] //ダウンロード対象のファイル。
>// | | ------------ [---] //....................................
>// | |
>// | +-- sub / download.zip [604] //サブディレクトリ以下のファイルにも有効。
>// | | ------------ [---] //....................................
>// |
>// +-- img / graph.gif [604] //グラフに使用する画像。
>//設置ができたら
http://xworks.org/arc/download.zip のようにアクセスします。
>//正しく設置できていればダウンロード確認ページが表示され、さらにそのページ内のリンクを
>//クリックすればファイルがダウンロードできます。
とりあえず.htaccess以外を設置してパーミッションも上記の通りに設定したんですが、
いざダウンロード対象のdownload.zipにアクセスしてもダウンロード確認ページが表示されずにファイルがそのまま落とせてしまいます。
無知でお恥ずかしいですがアドバイスいただけないでしょうか
書き忘れました
OSはWindowsでPHPバージョン4.4.2です
793 :
nobodyさん:2007/01/05(金) 11:04:49 ID:aYFge0L5
指定文字を簡単に10文字程度の暗号化にする関数を教えてください
794 :
nobodyさん:2007/01/05(金) 11:23:36 ID:xRwT+D17
>>791 うーん すれ違いじゃないかな
きちんと動作環境と設置したスクリプトが動いてるか
まずチェックいるんじゃないかな。
それと、.htaccess外してる時点で有効にならんと思うんだけど。
796 :
nobodyさん:2007/01/05(金) 12:12:08 ID:OoQZfzW8
小数点1桁まで表示させたい場合どうしたらいいですか?
797 :
796:2007/01/05(金) 12:19:01 ID:???
解決すますた。
>>796 number_format( $result, 1 );
799 :
nobodyさん:2007/01/05(金) 12:28:45 ID:xAOCVwN4
>>794 一応動作環境は満たしてました
PHP(Ver 4.1.0 以降)
mod_rewrite(.htaccess)
以上を利用できるサーバー
.htaccessの中身はデフォルトの状態でこうなっています
RewriteEngine on
RewriteRule ^(.*)$ index.php [L,QSA]
なんかうまくいかない(.htaccessを設置したままでdownload.zipにアクセスすると403になってしまう)ので外してやってました。
追記です
>設置したスクリプトが動いてるか
以前試したふたばのスクリプトは設置しただけで正常に動いてくれました
そのRewriteRule意味あるのか
消せよ
pearのmail::mimeで取得したメールデータが
エスケープシーケンス漏れのような形でたまに文字化けするのですが、
修正方法はないでしょうか。
エスケープシーケンス、文字化け、あたりで
ぐぐったんですが、わかりませんですた orz
803 :
783:2007/01/05(金) 14:12:19 ID:85tKInQQ
追記させてください。
メールが送られてくるたびにそのアドレスにログインURLを付属して返信したいのですが(メールが来る度、動作させたい)
↓
メールが送られてきたら送信元のIP、USER_AGENTをあらかじめ取得しておいてSESSION開始、
ここで登録の続きをしてください。
http://example.com/?sessid=SESSION_ID としたいのです。
調べてはみたのですがAutoResponderしかわかりませんでした。。
ご教示お願いいたしますm(_ _)m
804 :
nobodyさん:2007/01/05(金) 14:19:21 ID:UXQGeZPl
FedoraCore2でPHP4でパーミッション0777でディレクトリを作成する
プログラムを作成したのですが作成したディレクトリにFFFTPでデータを
アップしようとするとデータをアップすることが出来ません。
似た症状とおもわれる
>>371さんのところに
Fedoraのセキュリティの設定とありますが
もしセキュリティの設定が原因なのでしたら
どの辺りを修正すればよろしいのでしょうか?
スレ違いでしたらすみません。
>>804 パーミッション777のディレクトリはできてるんだよね?
なんかPHPの問題じゃなさそうだなぁ。
知らんけど、SELinuxとか調べてみたら?
>>804 スレ違いだボケ!ちゃんとスレタイ見て書き込め!
とか言うやつうざいよな。
chown
807 :
nobodyさん:2007/01/05(金) 14:58:53 ID:aYFge0L5
findfirstみたいな関数をおしえて
808 :
804:2007/01/05(金) 15:00:03 ID:UXQGeZPl
>>805 ディレクトリは作成できるのですが
0777で作ったパーミッションのディレクトリが
なぜか755になってしまいます。
>>806 chownも試してみたのですが
駄目でした。
810 :
804:2007/01/05(金) 15:05:50 ID:UXQGeZPl
SELinuxのほうを調べてみようと思います。
>>803 どういうシステムを組んでるのか知らないけど、
MTA MDAあたりでググってメールの仕組みを理解してから改めてPHPの質問を。
safe_mode = onでmkdirできましたっけ?
>>810 SELINUXは無効にするだけでいいよ
816 :
804:2007/01/05(金) 16:03:51 ID:UXQGeZPl
>>812 umaskを用いて777のパーミッションの
フォルダの作成に成功しましたが
パーミッション関係を変更する
PHPでumaskを使用しないで
0777ディレクトリの作成をしている
サンプルソースとかがありましたので
これでいいのかなと思っていたりします。
>>814 SELinux=disabledにしようと思っていたら
すでにSELinux=disabledでした
817 :
77:2007/01/05(金) 16:54:38 ID:???
>>804 で、結局FFFTPでデータをアップすることはできたの?
777でも755でもあっぷることはできるわけだが。
818 :
804:2007/01/05(金) 17:02:47 ID:UXQGeZPl
>>817 パーミッション755の方は
553 Could not create file.
と出て失敗しますが
パーミッション777の方は
成功しました。
ちなみに755の方はFFFTPから削除できず
テラタ−ム使ってrmコマンドで消しました。
linux板だと思った
PHPの開発でパーミッション意識したこと無いな。
バッチで動かすとき以外問題ないと思うけど。
バッチのときも755とか775とかにするだけだし。
単純に、ディレクトリのユーザ、グループがapacheとかwwwで、
ftpはそのグループでもないユーザで実行してるから、777じゃないとダメなんじゃないの?
あとは、linux版だね。
mysqlのバージョンで4.1はあぶないでしょうか?
いまからなら4.0のほうがいいですか?
823 :
789:2007/01/05(金) 18:49:50 ID:wLYNe8ol
789です。
その後PEAR Authにて自動的にログインの機能はなさそうなので、
どうにかしたいのですが、お知恵を拝借できないでしょうか?
1.ログイン時に発行されたセッションIDとランダムな文字列をクッキーに保存。
DBにセッションIDとランダムな文字列をinsert。
2.ブラウザを閉じる
3.再びアクセスしたときに、ランダムな文字列をキーとしてセッションIDを取得
こんな事をやろうとしているのですが、そもそもログイン状態とは何をもって
言っているのか分からなくなってしまっています。
よろしくおねがいします。
ttp://www.freshmeeting.com/ このサイトのPHPでできたメッセンジャーってのがあるんですが
ただのチャットにしかみえません。
チャットをメッセンジャーと偽ってお金とってるようにしか見栄ナインですけど
このスレの専門家方からみてどうなんでしょうか?
>>822 安定してる4.0をお勧めする
>>823 なんかめんどくさいことやってるな。
クッキーだけでいいんじゃねえの
>>825 いいんじゃない?(どうでも)
>>822 あなたが何をもってログイン状態としたいかによると思います
>>825 メッセンジャーってナニ?
MSNメッセンジャーみたいなやつ?
あれって結局チャットじゃん
メッセンジャー**型**Web会議システムです。
830 :
nobodyさん:2007/01/05(金) 20:15:49 ID:KZl21FT9
簡単なアップローダを作っているのですが、質問があります
1.まずは多重投稿判定をする
2.拡張子判定
3.同名ファイル判定
4.全部チェックして大丈夫ならばUPLOAD
という処理なのですが、
1と2を同時に満たしてしまった場合、
if($host == $lip && $last_time*60 > ($now-$ltime)){ //投稿間隔
require("head.txt"); //<html>~<body>までのタグファイル
echo("投稿間隔が短すぎます!最低5分開けてください。");
require("bottom.txt");//<body>~</html>までのタグファイル
}
if(!in_array($ext, $kaku)) { //拡張子判定
require("head.txt");//<html>~<body>までのタグファイル
echo"PNGorMNGorCPGファイルじゃないです";
require("bottom.txt");//</body>~</html>までのタグファイル
となり、html二つのファイルを出力してしまいます。このような場合はどのようにして一つにまとめればいいですか?
説明不足ですいません・・・
日本語でOK
つっこみどころ満載だがつっこんでるヒマないので
}
if(!in_array($ext, $kaku)) { //拡張子判定
↓
}
else if(!in_array($ext, $kaku)) { //拡張子判定
833 :
823(789):2007/01/05(金) 21:24:27 ID:wLYNe8ol
セッションもクッキーもブラウザを落とすと消えちゃってもうダメです・・orz
if (isset($_COOKIE["visited"])){
$count = $_COOKIE["visited"] + 1;
}else{
$count = 1;
}
$flag = setcookie("visited", $count);
print('<p>あなたの人生で'.$count.'回目の閲覧です</p>');
試しにこんなソースを書いたんですが、新しいブラウザで開くと
カウンタが戻ってしまいます・・・。
助けてください・・。
ログイン状態とは何か分からなくなるとか言っといて
結局はマニュアル読んでないだけか
>>832 別にそこは else if である必要はない。
>>830 アップローダーなら、3の部分は鯖側でmd5なりでリネームしたほうがいい。
あと拡張子の判定だけど、純粋に拡張子だけチェックするだけじゃ、
実は中身はzipとかexeとかの場合もあるわけで、その辺も考えた設計にしないと。
headerぐらいチェックしろ
839 :
nobodyさん:2007/01/05(金) 22:53:43 ID:/7wZXGPA
>>743 はい。
ただしAjaxやフレームみたいに非同期にリクエストが飛んでくるアプリだと面倒。
841 :
nobodyさん:2007/01/06(土) 11:58:18 ID:ytrpiRW2
includeやreuqireを使用する時に絶対指定は出来ないのでしょうか?
現在は、include("../setting.php");のようにしているのですが、
サイト内にincludeやrequireを多用しているので、たまにエラーになった時
どこを指定すれば表示されるのか悩む時があります。
843 :
nobodyさん:2007/01/06(土) 13:36:00 ID:IU0kz2UK
file_get_contents
eval
とか。
>>842 この場合フルパス指定と絶対指定は一緒じゃないの?
絶対パスで問題ないけど
846 :
841:2007/01/07(日) 02:06:47 ID:???
絶対パスはファイルシステム上のパスだよ。
絶対パス /home/username/www/hogehogeappli/setting.php
相対パス ./setting.php
Winなら
絶対パス C:\Program Files\Apache\htdocs\hogehogeappli\setting.php
相対パス .\setting.php
848 :
841:2007/01/07(日) 03:57:21 ID:???
>>847 ありがとうございます。ググったら分かりました。
以下のような感じで取得するんですね。
$path = realpath("setting.php");
require_once("$path");
ただ、思ったのですが、サイトに直接絶対パスを指定するならミスは出にくいでしょうが、
絶対パスは固定なのでサーバを移動した場合はすべて書き替える必要がありますよね?
そう言う場合、やっぱり別のファイル内に絶対パスへの記述を書く必要があるわけで、
相対パスで指定する場合とさほど変わらないのではないでしょうか?
849 :
nobodyさん:2007/01/07(日) 05:46:38 ID:JUgRUpjp
PHPをつかいたくてapacheをインストールしてみました。
index.html.varってなんですか?
850 :
nobodyさん:2007/01/07(日) 07:12:16 ID:/n2+oTVO
851 :
nobodyさん:2007/01/07(日) 11:40:42 ID:MUdDhnAV
PHPで簡単にRSSを出力したいんですが
良いライブラリありませんか?
PHPはXMLサポートが強いだろうと思ってたのに、
見つかるライブラリはパーサー系で、全然ライターが見つかりません!
そもそもここは自分で作るのを対象とした人のスレじゃないのか?
いつからそーなったんだ?
855 :
nobodyさん:2007/01/07(日) 13:56:32 ID:NUGiiTOR
配列を比較して、一定の個数一致している要素があればファイルへのリンク
を出力したいのですが、htmlタグを入れたとたんにプログラムが通らなくな
ります。(エラーも何も表示されません。)
phpファイル内でのhtmlタグの使い方が分かっていないので、少々
お聞きしてもよろしいでしょうか?
ファイルのパス:$arrValue[1] タイトル:$arrValue[2]
$common_word = array_interse($word_Unique,$arrValue);
$array_count = count($common_word);
if($array_count >= 6)
{
<html><head></head><body><a href="$arrValue[1]"
<u>$arrValue[2]</u></a></body></html>
}
>>848 特定のパスまでを定数で設定しておけばいい。
define("PATH","/home/hoge/util");
または、一つのフォルダに読み込むファイルをまとめるとか・・。
で、上のように定数で設定して。
require(PATH);
とか
require(PATH . "/db");
とか
とにかく定数をうまく使うと、サーバを変えても無問題
>>851 PEARであるはず
>>855 出力の基礎勉強した?
if($array_count >= 6)
{
<html><head></head><body><a href="$arrValue[1]"
<u>$arrValue[2]</u></a></body></html>
}
でどこで表示する命令書いてるの?
というかこれでエラーで無いのかな。
まず
print "基礎から勉強しろ";
echo "マニュアル嫁";
の意味が分かる?
パースエラー出るわな
859 :
855:2007/01/07(日) 16:19:47 ID:WQemd8r2
>>857 なるほど。意味が分かりました。
phpファイルの中でhtmlのタグを組み込んで使うということを
したことがなかったので、htmlと同じ要領で使っていました。。。
あと、エラーは
ini_set("display_errors","1");
error_reporting(E_ALL);
にしていますが、何も表示されませんでした。
860 :
841:2007/01/07(日) 16:30:50 ID:???
>>856 正直、あまりよくわかっていませんが、、
リファレンスを見ながら頑張ってみます。
アドバイスありがとうございました。
ソース汚くなるからオススメしないけどPHPを閉じれば動くよ
<?php
if($array_count >= 6){ ?>
<html><head></head><body><a href="<?=$arrValue[1]?>">
<u><?=$arrValue[2]?></u></a></body></html>
<? } ?>
>>851 XML_Serializerでググってみよう!
経験値が10増えるごとにレベルアップする処理を考えています。
以下の処理で問題ありますでしょうか?
$new_level = int( ($experience / 10) + 1);
864 :
nobodyさん:2007/01/07(日) 20:00:32 ID:3Mm5NOOO
それだと経験値が15からレベル2になるような
$今の経験値に10をたした変数 = $いまの経験値+10;
if(($exp>=$今の経験値に10をたした変数){
echo"れべるあっぷですがなにか?";
}
868 :
nobodyさん:2007/01/07(日) 21:12:34 ID:JUgRUpjp
はじめて作ったPHPスクリプトを配布したいのですが
文字コードはなにで配布するべきでしょうか?
それとも何種類かの文字コードで保存したファイルを複数設置しておくべきでしょうか?
どなたかアドバイスおねがいいたします。
>>868 UTF-8 にして下さい。
改行コードは LF です。
メモ帳で見れない、という苦情に対しては TeraPad を使いなさい、とダウンロードページにでっかくかいときましょう。
870 :
nobodyさん:2007/01/07(日) 21:24:58 ID:JUgRUpjp
あいがとうございます。
もしUTF-8で配布する理由を聞かれた場合、なんて説明したらいいのでしょうか?
ご伝授願います。
GUGURE
厨房のためにShift_JISでいいよ。
UTF-8を求めるような上級者は簡単に変換できるし。
>>870 仕様で通せばいいんじゃね
自分も最近はUTF-8以外はあまり使わないよ
I18N対応ということで
875 :
869:2007/01/07(日) 22:32:01 ID:???
>>870 お好きなのをどうぞ。
・漢字と制御コードが重ならないから。
・日本語以外にも対応しているから。(世界中のほとんどの言語で使える。)
・Google が使っているから。
・時代の最先端だから。
・厨房ほいほいになるから。
>>872 Kent の CGI みたいに "表\示" なんてださいエスケープ処理をするわけですか?
迷惑なのでやめていただきたいです(><)
>>875 いつの時代のPHPだ?そんなのしなくても化けないでしょ。
それに、UTF-8に変換するのもEUCに変換するのも簡単だし。
>>876 print "表示";
これ化けない?
EUC-JPでいいよ。
EUC-JPとUTF-8は文字コード変換してもプログラム内の互換性はあるけど、
(EUC-JP or UTF-8)とShift_JISは文字化け起こるから互換性ないよね。
880 :
nobodyさん:2007/01/07(日) 23:19:06 ID:9nfE/S0K
setcookie()はtime()に時間追加して、期限を決められるけど
sessionはどこに保存されて、いつまで有効なんですか?
>>880 php.iniに書いてあるっしょ。
Win系はC:\Windows\Temp
UNIX系は/tmp
がデフォルトだったような。
882 :
880:2007/01/07(日) 23:29:22 ID:???
>>866-887 ありがとうございます。
経験値は、1ごとあがるのではなく、突然5など上がったり、下がったりもしますので、
色々むずかしゅうございます。
非公式のmod_formを使用してます。
apache2.2.3にいれたんですけど、perlからだと動きますが
phpからだと動きません。
付属のadmin.phpもエラーで開きません。
どなたか同じ症状の方いませんか?
>>883 文字コードの変換を、出力ハンドラ(output_handler)に
設定したmb_output_handlerに任せて一括変換する(設定だから)。
別にハンドラに任せないで出力部分で逐一変換しても良いし、
コンテンツ毎で最初のところで出力バッファリングのOn/Offやハンドラの設定をしても良い。
887 :
nobodyさん:2007/01/08(月) 03:51:28 ID:qSyZrtVb
セッションIDが突然変わる現象に悩まされています。
特にセッションを破棄しているコードを入れているわけではないです。
しかも、再現性がなくて1000回に1,2回程度発生します。
このような現象が発生する原因ってどのようなことが考えられますか?
PHP5で、OSはLinuxです。レンタルサーバー使用です。
宜しくお願いします。
セーフモードは、PHP 6.0.0 で削除されます。
ってことはモジュールのみってこと?
>>887 look -n -f サーバのIP -r セッションIDが記録されたファイル
でてきた結果をはれ。話はそれからだ。
>>889 レスありがとうございます。
それが、レンタルサーバー(xrea)で、コマンドが使える環境にないんです。
セッションファイルの書き込み処理が怪しいということでしょうか?
xrea側の問題か、自分の処理の問題か、
切り分けができないので、苦心しているところです。
$array="aaa","bbb","ccc","","";
という配列があったとします。これを空白のものを削除して
$array="aaa","bbb","ccc";
とするにはどうしたらいいのでしょうか?
正規表現で置き換えをしても上手くいきませんでした。
>>893 foreach($array as $line=>$value)if($value=="")unset($array[$line]);
895 :
893:2007/01/08(月) 11:13:49 ID:???
DB使うときの素朴な質問なんですけど
ファイルのDL数を表示させたい場合は
DLログからそのファイルのIDを元に集計するのがいいのか
DLがある度にそのファイルのDL数カラムを+1するのがいいのか
どんな感じにしてますか?
>>896 お好きな方を。
DL数を表示させる度に集計するのと
実際にDLした時にカウント処理、表示するときは取り出すだけ。
どっちがいいかは自明な気がするが、
画面構成(ひとつのファイルのDL数?それともリスト表示)
なんかにもよるだろ。
>>887 ガーベッジコレクション
と、
セッションのオートスタート
smarty使うときはassignするときにhtmlspecialcharsかければいいの?
それともテンプレート側で{$hoge{escape}とかするの?
{$hoge|escape}
デフォルトでエスケープしてくれればいいのにねぇ
それはデフォルトでエスケープ通すように設定するだけだと思うが…
どうやるの?
変数が$aから$zまであるのですが、これを4ずつ表示させる時
if($page=="1"){
echo $a;
(a〜dまでの変数を表示)
echo $d;
}elseif($page=="2"){
(e〜hまでの変数を表示)
}
みたいな感じで、ifで分けてechoを書いて表示しているのですが、
もう少し効率化する方法はないでしょうか?上記だと単純ですが
ifとechoの数が増えすぎてしまいます。
$hensuu = array(
$a,$b,$c,$d,
$e,$f,$g,$h,
$i,$j,$k,$l,
$m,$n,$o,$p,
$q,$r,$s,$t,
$u,$v,$x,$w,
$y,$z
);
$i=1;
foreach($hensuu as $v =>$k){
if($i <5){
echo $k;
echo "--";
}else{
echo "<br><br>";
echo $k;
echo "--";
$i=1;
}
$i++;
}
906 :
904:2007/01/08(月) 18:36:17 ID:???
>>905 ありがとうございます。1行目って変数になっていますが、
"a","b","c","d","e"みたいに表示させるんですよね?
(でないと、----と続きます)
foreachを使うんですね。勉強になりました。ありがとうございました。
分割ダウンロードを行いたいのですが、途中からある部分までをダウンロードする方法はありませんか?
自分で言ってるように、途中からある部分までを出力すればいいんじゃね?
何バイト目から何バイト目という指定はどこで行うのですか?
fseek
>>906 >>905に書いてあるものをコピペしただけじゃ---しか表示されねえよw
$hensuuの中身ぐらいは自分で格納しろ
>>904 for($str='a',$count=1;strlen($str)<2;$str++,$count++){
print $count%4 ? $$str : $$str.'<br>';
}
クロスサイトスクリプティング対策で
この文字が表示されるなら安全!という文字はありますか?
例えば<b>a'b"</b>これがそのまま表示されたらOKみたいな
914 :
nobodyさん:2007/01/08(月) 21:03:55 ID:52nsxxTD
MySQLに関することなのですが、、PHPを使用するのでこちらで質問します。
例えば、フィールド名を取得するにはmysql_field_nameで出来るのですが、
変数内の文字が含まれているフィールド名を取得すると言うことは
出来ませんでしょうか?
要は
$text="テスト";
$sql="select * from test_table where ( )='$text'";
上記の()内のフィールド名を取得したいのです。
915 :
nobodyさん:2007/01/08(月) 21:37:26 ID:wThRBDhy
EUCとShift_Jisでechoで表示する文字に互換性をもたせる場合、
以下のように書くほうがよろしいでしょうか?
echo "<a href\"index.php\">";
いままではEUCで
echo '<a href\"index.php\">';
とやってたんですけど
Shift_Jisで作らなくてはいけないときもあるので
PHP.iniの設定で内部で変換させるのではなく、
手動で文字コードを変換する前提でご教授願います。
>>915 どのあたりが互換性をもたせるようになっているつもりなの?
で、互換性って?
>>914 SQL文としてやりたいのかPHPのロジックとしてやりたいのかどっち?
その前にHTMLの規格と互換性てか準拠した方が・・・
EUCもsjisも全然絡んでないように見えるのは俺だけか
920 :
915:2007/01/08(月) 22:53:12 ID:HgcS2TL0
アク禁食らいましてレス代行していただいております。
訂正です。
sjisとeuc互換(予定などの文字化けについて)自分がこうしたほうがいいと思っている記述
echo "<a href\"index.php\">";
いままではEUCでこうかいておりました
echo '<a href"index.php">';
EUCならechoで\や"などをエクスケープしなくてもとよかったんですけど、
携帯サイト構築にはsjisじゃないとダメですよね。
そこでEUCからsjisに変換すると、echo内でエスケープしなかったものは
文字化けの原因になるかと思いました。
知識不足でわかりずらい表現ですがご教授お願いいたします。
Shift_JISやEUCは日本語文字コードのことだよ。
おまえさんのコードには日本語が書いてないので関係ない。
エスケープに関しては
print "<a href=\"index.php\">";
で統一したほうがいいんじゃね?
922 :
921:2007/01/08(月) 23:03:20 ID:???
わかった。aとhrefの間に日本語というか全角スペースが入ってて文字コードでひっかかるんだな。
そこは半角スペースにしろ。
"表"とかの5Cと何か勘違いしてないか
GETでURLエンコードされたデータと
rawurlencodeでエンコードされたデータは違いますよね。
なぜ違うのでしょうか?
>>924 マニュアルの urlencode() と rawurlencode() をじっくり見比べたうえでの質問?
926 :
924:2007/01/09(火) 02:51:01 ID:???
あ、マニュアル嫁ってことですね。
すみません。スルーしてください。
マルチバイトじゃない文字列なんだから、なんでもいいような気がするが。
PHPでMySQLに「01」や「02」という文字列を挿入したいのですが、挿入後のデータを見てみると、「1」「2」となってしまいます。
これの原因がPHPなのかMySQLなのかよくわからないのですが、どうすれば「01」「02」などのようにそのまま挿入できるのでしょうか?
型はTEXTにしています。
>>928 もう一度型の確認
クエリーの発行前にダンプしてSQL文の確認
01をコーテーション「'」で括っているか確認
930 :
928:2007/01/09(火) 09:06:34 ID:???
>>929 レスありがとうございます。確認したところ、コーテーションで括られてなかったようです。申し訳ない。
配列からクエリ文を自動的に作成する関数を作って使用してたのですが、そこら辺の文字列と数値の判別(コーテーションで括るかどうかの判別)が甘かったようです。ひとまず全部括るようにしました。
931 :
nobodyさん:2007/01/09(火) 11:29:33 ID:SE+exVcd
こんちくわ。お願いです。
適当なサイトのHTMLを取得して
・コメント(<!-- *** -->)
・CSS(<style> *** </style>)
・JAVASCRIPT(<script> *** </script>)
を取り除く部分の正規表現にperlのpreg_replaceを使用していましたが、
表示できません。のエラーになってしまいます。
mb_eregi_replaceにかえたところ動いたのですが、気持ち悪いです。
何か原因等考えられないでしょうか?
とりあえず書いた正規表現載せろよ馬鹿
preg_replaceってマルチバイト文字列に対応してるの?
してないけど。
対応ってどういう意味で対応しているのかが分からん。
正規表現の書き方次第だけど、preg_replaceにマルチバイトは突っ込まない方がいいね。
937 :
nobodyさん:2007/01/09(火) 14:57:46 ID:mhBiayKz
クラス名を可変にしたら以下のワーニングが出るようなのですが、
可変クラスは使うなってことなんでしょうか?
それとも使い方が悪いのでしょうか?
Strict Standards: Only variables should be passed by reference
コードは以下。
$this->user = new $userClassName();
938 :
937:2007/01/09(火) 15:07:32 ID:mhBiayKz
すいません。
勘違いでした。他の問題があったようです。
>>938 他にはじゃなくて、このコードも十分問題を含んでいるけど。
940 :
937:2007/01/09(火) 15:28:08 ID:mhBiayKz
>>939 どんな問題でしょうか?
フレームワークとかだと、可変クラス名とか可変変数は、
わりと使われていると思ってました(T-T)
941 :
nobodyさん:2007/01/09(火) 16:18:56 ID:MvDAcO9A
move_uploaded_file って成功してもfalse返すんですけど何ででしょうかね?
942 :
nobodyさん:2007/01/09(火) 16:35:42 ID:ojqZCWoI
smartyで(PHPの)countにあたる関数はありますでしょうか?
あったら教えてください
count・sizeofは普通に使える。
というかSmartyのcountを知っててPHPのcount知らないってどういう順序で勉強したのだろうか・・・
拾い読みってやつ
946 :
nobodyさん:2007/01/09(火) 18:09:49 ID:E47pJCGV
マヌアル嫁
前後が逆になったということぐらい、普通の人ならわかる。
K国人には無理か。
>>944 942はSmartyのcountを知らないのではないでしょうか?
$count = 5;
この$countの数字が5の場合、0〜4の5つの配列を作りたいのですが、
(20だったら0〜19の20個の配列)
どのように書けばいいのかわからなくて困っています。
for($i = 0; $i < $count; $i++) {
$int = $i.",";
$arr = explode(",", $int);
echo $arr[0]; //0になってほしいのに01234と出力される
}
どなたかお助けをorz
これでいいの?
$count = 5;
for($i = 0; $i < $count; $i++) {
$arr[] = $i;
echo $arr[$i] . "<br>\n";
}
954 :
nobodyさん:2007/01/09(火) 20:43:00 ID:E47pJCGV
$arr[] = $i;
っていうか、シンプルにこうすればいいだろう。
$count = 5;
$arr = array($count);
957 :
952:2007/01/09(火) 20:55:00 ID:???
>>953-954 どうもありがとうございます。勉強になります。
$arr[] = $i;
こういう書き方は想像もしていませんでした。
>>955 それだと、$arr = array(5);ってなりませんか?
>>956 どうもありがとうございます。
そんな便利な関数があったのですね。
今回はこの関数を使いたいと思います。
みなさまレスどうもありがとうございました。
>>957 >$arr[] = $i;
>こういう書き方は想像もしていませんでした。
マニュアルの配列のところに書いてあるよ
959 :
nobodyさん:2007/01/09(火) 21:48:15 ID:E47pJCGV
マヌアル嫁
DB接続に関して教えてください。
当方sybase-11.9.2, php4.3.11を使用しています。
ユーザが指定したクエリーを実行するようなCGIを作成していますが、
条件が中間一致であったりすると、
大量のデータ+検索の遅延でユーザの元に応答が返ってきません。
その際に、ユーザが中止ボタン(ブラウザの)で検索をやめたとしても、
DBに対するリクエストは残ったままになっているようです。
そのような状態が続くと、どんどんDBに負荷がかかってしまいます。
みなさんはどのようにして回避されていますか?
961 :
nobodyさん:2007/01/09(火) 23:45:31 ID:kOE6jhXa
>>960 解:「Sybaseなんてものは使わない」
962 :
nobodyさん:2007/01/10(水) 00:24:26 ID:/8+Ver2h
PHPとMYSQLでリレーションの質問です。
数値|場所
01|北海道
02|青森
03|秋田
数値|名前|場所
01|林檎|02
02|流氷|01
03|八郎|03
のようなテーブルがあるとします。
下のテーブルからデータを全件引っ張ってきて、場所に上のテーブルの場所を当てはめるには
for($i=0; $data[$i]; $i++){
MySQLにつなぎ num = 場所 で名前を引っ張る
$data['場所'] = $fetchしたデータ['場所']
}
とやるのが普通なのでしょうか? 下のテーブルの件数が多くなれば多くなるほど、DBにつなぐ回数が増えるので、遅くなりそうな気がします。
>>962 JOINしろ。
SELECT ユーザー.名前,住所.場所 FROM ユーザー INNER JOIN 住所 ON ユーザー.場所=住所.数値;
「ユーザー」と「住所」はテーブルの名前ね。
つーかリレーションっていう言葉知ってるのにJOIN知らないのかよ。
964 :
962:2007/01/10(水) 00:48:08 ID:/8+Ver2h
>>963 そんな便利な事が出来たんですね。 それだとDBに1回の接続で場所データも入りそうですね。
お恥ずかしながらsqlはほんのとっかかりしかやってないので、joinというのを知りませんでした。
精進いたします。 またよろしくおねがいします。
ありがとうございました。
join一生懸命勉強して極めても使っているのがMySQLだったら・・・・