【PHP】下らねぇ質問はID出して書き込みやがれ 86
質問者はまず
>>1 を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは
>>2-10 辺り
次スレは
>>980 が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 85
http://pc11.2ch.net/test/read.cgi/php/1245074032/ ◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
【簡易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に保存?
→ 好きにしてください
7 :
977です。 :2009/07/31(金) 21:44:01 ID:f7nn6Kbb
だめだ。わかんないよ。
データベースの設計はちゃんとできるの? 第三正規化とかわかる?
ちゃんとPHP理解してからDBにさわった方がいい、慎重にコーディングしないとXSSの脆弱性を内包することになる
お前ら容赦ないなw
11 :
977です。 :2009/07/31(金) 22:06:18 ID:f7nn6Kbb
いや、僕が作ったわけではないので。 ただどうやって作ったのか。 チェックボックスのデータをひとつずつ区切って処理 するにはどうしたらいいのかがわからなくて 。
>チェックボックスのデータをひとつずつ区切って処理 これが何をいってるのかわからん だいたいこれOR検索じゃん 複数の市町村にチェックつけたら物件表からOR検索するんでしょこれ
配列をcountして1つならそのまま複数なら並べてor これだけ
14 :
977です。 :2009/07/31(金) 23:08:21 ID:f7nn6Kbb
配列をcountして1つならそのまま複数なら並べて ここのソースを頼みます。 一から教えてください。
15 :
nobodyさん :2009/07/31(金) 23:16:35 ID:FLyuwNhj
mime typeにないファイルをポストしたとき mime typeの○○/拡張子の○○の部分って何が表示されるのでしょうか
application/なんとかストリーム
17 :
nobodyさん :2009/07/31(金) 23:18:17 ID:FLyuwNhj
○○/拡張子←拡張子じゃありませんでしたすいません
例えばapplication/activemessageのapplicationの部分はどうなるのでしょうか
>>15 よろしくおねがいします
18 :
nobodyさん :2009/07/31(金) 23:19:11 ID:FLyuwNhj
>>16 ありがとうございます。
わからないものはapplicationになるんですね
ありがとうございました
まず自分で考えて書け お前が例に出したページで考えてみろ nameがtown_cd[] valueは新宿区が13104 渋谷区が13113 たとえばこの2つを選択したら物件表にどういうQueryを投げるか考えてみろ
>>19 安価付けろ、ID:FLyuwNhjに言ったように見えるぞそれ
いや見えないだろw
22 :
nobodyさん :2009/07/31(金) 23:56:56 ID:f7nn6Kbb
わかった。 考えてみる。
考えるほどのものじゃないだろ・・・ select * from 物件表 where 市町村id=13104 or 市町村id=13113 $_POST['town_cd']には 0=>13104 1=>13113 が入ってるんだからあとはforeachでまわして ベースになるquery(selevt * from 物件表 where)にくっつけてやればいいだけの話
Javascript でグリッド(表)を作るのですが、表示件数が15万件と多く、一度に表示しきれません。 ページャをそのまま使うのではなく、スクロールバーの上下でページ移動ができるようにしたいです。 また、スピードを重視するため、表示する分+α程度のデータだけを AJAX で取ってきます。 ページャのページ指定をスクロールバーにバインドできるのか? というのが今考えていることです。
そうですか。頑張ってくださいね。
>>23 様
ありがとうございました。
理解できました。
27 :
977 :2009/08/01(土) 01:31:32 ID:???
すいません。26です。 foreach($_POST['town_cd'] as $val){ select * from 物件表 where $valでOK?
28 :
977 :2009/08/01(土) 01:34:23 ID:???
もし違っていたら訂正をお願いします。
$query = "select * from 物件表 where"; foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 市町村id={$val}"; continue; } $query .= " or 市町村id={$val}"; }
>>29 なんで試しに動かしてみないの?バカなの?
〜〜〜というエラーが出たが原因が分からない
なら話はわかるが、なんで実行もしてないソースこれでいいか聞いてんの?
32 :
977 :2009/08/01(土) 01:50:42 ID:yM0cIisM
なるほどそういうことか。勉強になります。
理解できましたっていってたのにw 吹いたわ
34 :
977 :2009/08/01(土) 02:06:37 ID:yM0cIisM
理解できていませんでした。 もっと勉強します。 ありがとうございました。
SQLインジェクションに注意
そういやfor分の中で if () { 処理; continue; } 処理 ってやるのと if () { 処理; } else { 処理; } ってやるのってなんか違いあるの?
全然違うだろ
だから何が違うのかって聞いてるの。日本語分かる?
ID出さないの? スレタイ日本語だけど読める?
>◆回答者への注意 >・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。 読めなかったら振り仮名振ってあげます
41 :
36 :2009/08/01(土) 02:55:19 ID:uPB6yqUJ
悔しいの?wwwwwwww
んで結局誰もわからないのか?
>>36 for(){
A処理;
if () {
B処理;
continue;
}
C処理;
}
A->B->...
A->C->...
for(){
A処理;
if () {
B処理;
} else {
C処理;
}
D処理;
}
A->B->D->...
A->C->D->...
よって前者はDの処理が必要な時、B・Cの両方にD処理の記述が必要であるため後者を用いる事が正しい
D処理が不要であれば結局はどちらも同じである
速度面ではどうだろうとおもってJavaScript+Firefoxでやってみたが変わらないね elseブロック通る分時間かかるかなと思ったけどそうでもなかった
>>49 ifが評価されたらelseブロックをまるまる飛ばすから、elseブロック直後にforブロックの終端があれば大差ないと思うよ
ループの検証のコードなんざどの言語でもいいだろ・・・
peclにMemcacheとMemcachedがあるけど、どう違うの?
またつまらんことでもめてたのか?
55 :
nobodyさん :2009/08/01(土) 11:17:38 ID:yM0cIisM
もっとPHPができるようになりたいです
で?
お前ら喧嘩すんな、慎吾こち亀でもみてろ
>53 memcachedの方が速いし多機能(検証済)。 memcacheは独自実装。memcachedは中身がlibmemcachedという汎用ライブラリ。
59 :
nobodyさん :2009/08/01(土) 20:34:37 ID:o7Ir56np
Cookieを削除する必要がある時ってどんな時ですか?
>>59 cookieを何に使っているかによって変わると思うが。
一般論としてなら、必要なくなったらさっさと消す。
ブラウザが毎回サーバーに送信していることを忘れるな。
僅かながら帯域を消費しているし、サーバーの処理も余計に必要になる。
普通に、セッションクッキーにすればいいんじゃあ…
62 :
60 :2009/08/01(土) 22:09:44 ID:???
>>61 これは俺へのレスなのか?
それとも独り言?
63 :
nobodyさん :2009/08/02(日) 00:48:57 ID:Zm7WmY12
>>60 どうも。
後、ブラウザが閉じられるまで有効なセッションって、どうやってブラウザが閉じられたかどうか判断してるんですかね?
ブラウザ側が判断してるんでしょうか。
C++で10年食ってるプログラマでPHP初心者です。 PHPのクラスに関する解説を見るとどれもnewで生成したクラスをdeleteしてないんだけど、PHPにはdeleteというものがないのですか?
マニュアルくらい見ようぜ
>>58 ありがとん。公式にはどっちがどうとか書いてなかったので、
どっち使えばいいのかちょっと混乱しちゃいますよね。
>63 他にどんな可能性があるのか言ってみろよ低能
>>63 デフォルトではセッション識別にCookieを使っている
クライアントの終了時に破棄する設定のSet-Cookieを返すことで実現する
>>64 オブジェクトが参照されなくなった時点でGCが後始末する
C++10年やっててもスレタイもマニュアルも読めないんだな
unset($hoge);
exit;
72 :
nobodyさん :2009/08/02(日) 23:17:28 ID:V4BPZ7v2
フォームのテキストエリアに確認したい内容を、 改行を入れると複数入れられるようにしています。 そして実際の確認時に $array = explode("\n",$text); foreach($array as $val){ if(確認の場合の条件){ 一致した場合はループを抜ける } } というように配列に入れて、foreachで1行ずつ確認しています。 これはこれで良いのですが、foreachを使わず、配列に入れずに 確認する方法って無いでしょうか?
何を確認するんだ
74 :
72 :2009/08/02(日) 23:29:14 ID:V4BPZ7v2
すみません、説明不足でした。$textには以下のような値が入っているとします。
$text="a
b
c";
それを改行毎に配列に入れて、
>>72 のようなforeachを使って
配列の中身に特定の文字列があるか確認したいと思います。
$array = explode("\n",$text);
foreach($array as $val){
if($val == "a"){
return false;
}
}
普段はこのような書き方をしているのですが、
foreachを使わない書き方はないでしょうか?
$array = explode("\n",$text); if(in_array("a",$array)===true){ return false; }
===trueの意味何かあんの
速度的な意味
78 :
72 :2009/08/03(月) 00:09:28 ID:???
>>75 ありがとうございます。in_arrayを使うんですね。
あと、explodeは¥nではなくて¥r¥nじゃないと駄目でした
Windowsは\r\n、UNIX系は\n、初期のMacは\r
便乗して $array = explode("\n",$text); foreach($array as $val){ if(strpos($val, "a") !== false){ return false; } } の場合はもっと単純に短くできますでしょうか?
81 :
nobodyさん :2009/08/03(月) 00:18:52 ID:VvsrItXl
ID出し忘れましたすいません
1万回程度ループさせて 867 名前: nobodyさん [sage] 投稿日: 2009/07/27(月) 17:40:26 ID:??? PHPで実行時間を求める方法 <?php $time_begin = microtime(true); /* expression */ echo "実行時間".(microtime(true) - $time_begin)."秒"; ?> これで時間計ればいいと思うよ
コードの短さの話をしてるんだろ
strpos($text,"\na\n") !== false ? return false : ""; 1行で
たった1行でバグ含むなよ。
こいつ・・・たった1行に2つもバグを含んでいるぞ。
これはひどい
三項演算子って、可読性悪そうなのに好きな人はやたらと使いたがるよね
可読性を高められそうなときだけ使うな
91 :
nobodyさん :2009/08/03(月) 04:53:20 ID:UYXdY2Ut
馴れだよ
>>63 ブラウザが閉じられた時点で、ブラウザが保持しているセッションクッキーが破棄される。
サーバー上にあるセッションデータはそのまま残っているが、そのセッションを参照する
クライアントがいなくなったので無いも同然という状態。
サーバー上にあるセッションデータは、最終的にphp.ini等で設定されているGCによって
破棄される。
確か、デフォルト設定では24分の生存期間が設定されている。
なお、サーバーから破棄されるまではセッションIDを知っていればそのセッションを再利用
可能なので注意。
93 :
nobodyさん :2009/08/03(月) 13:08:45 ID:U06Xk0yO
ダブルクウォーテーションとシングルクウォーテーション どちら使っても良い状況のとき、 何か理由があってこっち使うほうが良い みたいなことはありますか? 好みでいいのでしょうか よろしくお願いします
94 :
nobodyさん :2009/08/03(月) 13:12:33 ID:LOY5W65B
ファイルのアップロードについて質問です。 アップロードの最大サイズ、メモリの最大使用領域 これらは現在稼働中の鯖のメモリを考えて割り当てたほうがいいんですかね。 (2GBのメモリ積んでる場合は2GBまでとか←単純計算で) ファイルを40GBまでうp可能な鯖を構築したいのですが、 メモリに格納ではなく、一時的にtmpとして保存することは可能でしょうか?
>>93 シングルクオートは変数を展開しない分、処理速度が速いと思うよ。
96 :
nobodyさん :2009/08/03(月) 15:01:27 ID:GfwjTEf5
レンタルサーバで使用中の容量が使える容量のフルに なっていないかどうかをPHPで確認する方法って どんな方法が考えられますか? 「一時ファイルを同階層に作り、書き込みしようとして例外が返されたら容量がフル」 みたいなことを考えたのですが、なんかちょっとスマートじゃない気がしてしまうんです。
float disk_free_space( string directory )
>>97 レスありがとうございます。
さくらのレンサバなんですが、ユーザとして使える容量ではなく
サーバマシンの空き容量と思われる数値が返ってきてしまいました。
>>98 カレントディレクトリ以下の使用容量を取得したらいいんじゃない?
>>98 disk_free_spaceの引数で該当ディレクトリを指定するのは?
もしくはsystemでduで調べるとか。
あとはさくらのレンサバ知らないけど、もしquotaで制限かけているなら
「quota -u ユーザ名」 で確認できるかもしれない。
phpからなら、こんな感じか。
$quota = system('/usr/bin/quota -u ユーザ名' , $retval);
101 :
nobodyさん :2009/08/03(月) 16:30:18 ID:8ObdthvW
>>95 3GhzのCPUを使ってたら、そんなの誤差の範囲内だと思うけど?
102 :
nobodyさん :2009/08/03(月) 16:31:33 ID:8ObdthvW
変数展開をCPUの仕事だと思ってる日曜プログラマーって使えないよね
よくわからんが、寝ぼけて文中に変数名入れちゃわないように スタティックな文字列はシングルクォートにするようにしてる。
ifとcaseと三項演算子の中からいちばん可読性の高いものを自然に選べるのがよいプログラマ? ifとcaseと三項演算子の中からいちばん処理速度の速いものを自然に選べるのがよいプログラマ?
そのレベルなら可読性でしょ。 数100万単位のデータ処理なら、設計の自由度と判りやすさで RMDBSを選ぶか、またはシーケンシャルアクセスを使って独自 の高速データ処理ができる方法を選ぶかって考えなきゃいけないけど。
コーディング規約を守れるのがよいプログラマ
仕様書やコーディング規約通りにかけるのがよいプログラマ。
>>109 いいじゃないかよぉ、Typoくらいよぉ(><)
TypoでRDBMSをRMDBSは無いわ・・・
>>110 間違ったんだろ?知識なんてカケラも無いんだろ?素直になれよ?
113 :
96 :2009/08/03(月) 17:29:19 ID:???
>>100 quota制限でビンゴでした。
ありがとうございました。
eclipseってなんで160MBもあるん
>>64 C++でいったんnewした
クラスをdeleteしないと、なにがどうなるの?
116 :
nobodyさん :2009/08/04(火) 09:46:49 ID:2TKWOoA9
質問です。
http://www.livein-tokyo.com/search3.php で"市町村id={$val}" の一致したデータを出す場合
$query = "select * from 物件表 where";
foreach ($_POST['town_cd'] as $key => $val) {
if ($key == 0) {
$query .= " 市町村id={$val}";
データを出すsql文
continue;
}
$query .= " or 市町村id={$val}";
}
foreach ($_POST['town_cd'] as $key => $val) {
if ($key == 1) {
$query .= " 市町村id={$val}";
データを出すsql文
continue;
}
$query .= " or 市町村id={$val}";
}
でOK?
$_POST['town_cd']は配列?
118 :
nobodyさん :2009/08/04(火) 09:52:17 ID:2TKWOoA9
配列です。
>>118 環境作って実際に動作させてみた?
・上のforeachと下のforeachはそれぞれ何がしたいの?
・foreach内の$keyが0か1かで判断していいの?
・$_POST['town_cd']が無い場合(全件取得の場合?)に
$queryは "select * from 物件表 where"になるけどそのまま実行したらエラーになるよね?
>>116 手出すのは早すぎなんじゃない?もっとちゃんと基礎から勉強してきたほうがいいよ。
$query = "select * from 物件表 where";
foreach ($_POST['town_cd'] as $key => $val) {
if ($key == 0) {
$query .= " 市町村id={$val}";
continue;
}
$query .= " or 市町村id={$val}";
}
この時点で$queryはOR検索で全てのデータを問い合わせる文になってるんだからこれ以上の処理はいらない。
あとはこのクエリを投げて返ってきた結果(オブジェクト・配列・ハッシュ等)を元にHTMLを仕上げればいいだけ。
121 :
119 :2009/08/04(火) 10:18:45 ID:???
$keyってもしかしてwhereの直後の条件(orがいらない)かどうかの判断で使ってる? それなら、ベースとなるSQLを「select * from 物件表 where 1」と「where 1」とするのが定石。 これなら$_POST['town_cd'] が空(全件の場合)もエラーにならない。 つまりこんな感じか $query = "select * from 物件表 where 1"; foreach ($_POST['town_cd'] as $key => $val) { $query .= " or 市町村id={$val}"; }
空の場合はSQLException出さない?
123 :
119 :2009/08/04(火) 10:48:29 ID:???
>>122 俺に言ってる?
SQLExceptionはでないと思うよ「select * from 物件表 where 1」を実行すればわかる
上の書き方だと、$_POST['town_cd']が空だったらforeachでWarningはでるけど。
普通は例外キャッチして検索条件入れてくださいってechoするよね
125 :
122 :2009/08/04(火) 10:52:21 ID:???
ああ・・・Javaと混ざってた。スルーしてちょうだい。
>>124 それは要件によると思うよ
>>116 のような不動産サイトで各種条件(価格とか面積とか)を指定して物件を絞り込むような場合
条件指定しなければ全件でてくる所が多い。
いちいち全件出すような仕様にはしないんじゃない? 転送量的にも負荷的に考えて もし出すにしても人気のものとか売り出したいものとか数件出す程度にする 規模のおおきくなる商用サイトとかだとそういうかんじだとおもうけど 動画サイトとかは典型例 全件なら全件チェックを別途いれるんじゃないかな
こまけえ話はいいんだよ
とりあえず
>>116 は勉強不足
実力に見合ったとこからやらないと
いきなり飛び級してもついていけなきゃ意味がない
かえって遠回り
1ページ辺りの表示件数は制御するけど 条件は全部無条件にするって意味じゃね
>>116 ,120,121
SQL Injection も指摘しておく
>>130 そこまで言い出すと余計混乱すると思うw
かもしれないが,実システムでは避けては通れない道なんだから オミットできるものではない
まぁSQLインジェクションなんざXSSと同じで関数1つでどうにかなる問題だけどな
$_POST['town_cd'][0] = " '; DELETE '物件表"; こんなデータが入ってきたらどうするんだろう
くだ質でもそこまで考慮した回答を提示しろって事か。 ただ、要点しぼらないと余計わからなくなるかもしれないし。 悩み所だな。
XSS 対策には引数が必要な罠
ENT_QUOTESだろ
function escape($str){ return stripslashes(htmlspecialchars($str,ENT_QUOTES)); } $_GET = array_map("escape", $_GET); 1つずつエスケープするのは面倒なので俺ならこうするな
出力時にエスケープしてください
うっかりエスケープ忘れしてしまうような設計なら問題あり
無条件でstripslashes、$_GET上書きに違和感を感じるが・・・
>>145 出力時のうっかりミスを考えるなら、その関数を入れ忘れるのも考慮しないといけないんじゃ?
そしてそのリスクって変わらないと思うんだけど。
スクリプト内の色々な箇所でecho出力してるわけじゃないでしょ?
>>142 は一か所に入れておけば済むが、
出力時のエスケープは何箇所かに及ぶため、
人間である限りうっかりが起こる。
失敗学的に 142 のようなのを一か所だけ、が安全。
入力時にエスケープするのは意味あいが変わるじゃん エスケープした時点で受け取った入力内容と異なるデータになっちゃう セキュリティを考慮しても違和感のあるプログラミングは避けたほうがいいと思う 入力時にエスケープは個人的にはないわー
150 :
147 :2009/08/04(火) 14:22:16 ID:???
>>148 やっぱり設計思想というか考え方の差だね
俺の場合は出力箇所はスクリプト内で常に1箇所にしてるのと、
出力する変数は全て一つの表示用配列に入れ、出力時に1回
>>142 のようにエスケープすれば良いようにしてる。
だから安全度は変わらないと思う。
そろそろフレームワーク使えと言われそうだw
「違和感」を感じるかは、 セキュリティを重視するか、 セキュリティを軽視したコードを書くかの主観の問題。 セキュリティを重視すれば違和感を感じない。 毎月のようにある Web アプリの XSS 脆弱性は、 まったくエスケープしていないのではなく、 出力時にエスケープしているため。
自分はフレームワークでも
>>142 みたいのを入れてるよ
echo何度も実行するより$echo .= 〜みたいにつなげていって最後に出すのが速度的にもいいね。
$_GET全てに無条件でエスケープは無いな 受け取ったデータ全てが画面表示されるわけでもないし
XSS 脆弱性を出す人はみんなそう言うんだよ
URLの長さの上限はIEで2100バイト、Apacheで8190バイトだし変換コストでの問題は無いと思う
>>151 出力時にエスケープしているのにXSS 脆弱性があるってのはどういう状況?
できれば解説お願いします。
単に「うっかりミスが出やすい」という話?
セキュリティ云々じゃなくて単純に変なだけでしょ とにかく$_GET $_POSTは有無をいわさずエスケープっておかしいよ 入力値はまずチェック(バリデーション)からはいるでしょ? わざわざエスケープ済みのデータを基準にしてチェックするわけ? 入力時エスケープにするとしてもタイミングが悪いよね? やるとしてもデータ格納直前にやるべきでない?
htmlspecialcharsは表示直前 エスケープはDBに入れる直前が基本だろ
ううむ・・・ 色々調べてみたけど 入力時エスケープによって脆弱性が生まれると主張する人も結構いるね
htmlspecialcharsは表示直前 DBに入れるのは受け取った生のデータが基本だろ
162 :
161 :2009/08/04(火) 14:53:50 ID:???
もちろんSQLインジェクション用のエスケープはするよ
たぶんうっかりミスで過去にひどい目にあったんだろ。
「htmlspecialcharsは表示直前」だと「うっかり」忘れる。 世の Web アプリの XSS 脆弱性のほとんどはこの「うっかり」。 だから、最初の段階でエスケープ。 従来のソフトウェア工学的には変かもしれないけれど、 人間工学的には必要。
議論がループしている。
>>142 - から再読を。
ただの個人の主張をさも学問ぶるとか。。
うっかりミスというかルール作りすればそんなのおきないでしょ たとえば文字列出力時は function es($str) { echo htmlspecialchars($str, ENT_QUOTES); } es("<strong>ほげー</strong>"); っていう風にやるとか voidにしたけどStringにして echo es("<strong>ほげー</strong>"); にするとか 必ず何かを通すようにルール作りしとけばよい
うっかりDBパスワードをechoしてしまうかもしれないからDBは使用厳禁ってか?
>>167 たぶんそのルールを忘れるって事だと思うぞ。
議論は平行線のままだろうな。
厳密なコーディング規約を作れば良い
→ルールを守らない奴がでてくる
しっかりテストすれば良い
→テストに抜けがあるかもしれない
こういう事だろ?
「必ず何かを通すようにルール」や 「コードレビュー」によって 100% 見落としがなくなりますか?
じゃ最初の段階でエスケープするのは絶対忘れないの?
>>172 子供じゃないんだから…。
「一か所に入れるだけ」というルールは守られやすいし、
コードレビューでも一か所を見るだけだから
見落としの可能性は極めて低いでしょう?
その逆に、表示直前だと、ページ数が数百、
出力箇所が数千ある場合、
見落とす確率が非常に高くなるよね。
そして、それこそが Web アプリの脆弱性なんですよ。
規模が大きいとエスケープの確認するだけで数時間いるかもね
その数時間を 20 回、100 回と繰り返せば、確実に見落とすから。
設計がヘボいからそういう考えに陥る
ウェブアプリの脆弱性君
お前のアプリケーションは入力データをそのまま出力するだけなのか
信頼しないデータは入力されたものだけなのか
次のスクリプトを読んで
>>142 が無価値なものだと気付こうぜ
<?php $uri = $_GET['uri']; $filename = apache_lookup_uri($uri)->filename; ?>
URI <?php echo $uri; ?> に対するファイル名は <?php echo $filename; ?> です。
例外処理は本質じゃないので省いてあります
>>173 >その逆に、表示直前だと、ページ数が数百、
>出力箇所が数千ある場合、
>見落とす確率が非常に高くなるよね。
普通はMVCのビューに変数を渡す時、またはビューが変数を出力
する時に一括してエンティティ化や文字コード変換などの出力処理
をかけるんだよ。
カプセル化して出力には必ずビュークラスを通すようにしておけば
目視で全部確認するなんて前時代の方法はいらない。
>子供じゃないんだから…。
100%とか言い出したのはそっちだろ?
本題に自信がないのか知らんけど煽りで煙に巻くのはやめてほしいね。
たまに
>>142 みたいなの湧くけど
HTML以外への出力、例えばメールとかPDFとかに乗っける場合は
わざわざ元に戻すのかな?
マクロ用意しとけばうっかりなんておきねえよ
>>180 まあ、そうだろうな。
意外と、メールはすべてHTMLメールで、
PDF出力はHTML2PDF的なものを使う、
とかかも知れんけど。
184 :
nobodyさん :2009/08/05(水) 00:04:48 ID:QkW6R4Ei
一つのテーブルに項目が多いので、ループでうまくMYSQLにINSERTしたいのですが、 スマートなやり方が思いつきません。どなたかテクニックを教えてください。 テーブル名:user id =>(主) grade first_name1 last_name1 first_name2 last_name2 sex birth_day school tell tell2 zip_code add1 add2 mail で、項目名がキーで連想配列(arr)に入ってるとしてお願いします。
俺はその手のはテーブル構造を書いたArrayをまわすようにしてる。 でも、値によって保存方法のルールが複雑なら、別に愚直に長く 書いてもいいと思うぜ。
186 :
nobodyさん :2009/08/05(水) 01:09:35 ID:8EYjxJv2
$query = "select * from 物件表 where 1"; なんで1が必要なんでしょうか? foreach ($_POST['town_cd'] as $key => $val) { $query .= " or 市町村id={$val}"; } 後この$query .= " or 市町村id={$val}"; は なんのために必要なんですか? ぜんぜんわかりません。 教えてください。 こういうことが書いてあるサイトがあれば教えてください
SQLスレでやれ
>>186 where 1は全件検索
そのSQLだと
select * from 物件表 where 1 or 市町村id=1
とかになるから結局全件表示されちゃうんじゃね?
見直したほうがいいよ
189 :
nobodyさん :2009/08/05(水) 01:29:22 ID:8EYjxJv2
$query = "select * from 物件表 where"; foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 市町村id={$val}"; continue; } $query .= " or 市町村id={$val}"; } or市町村id={$val}"; ってなにをしているの? もし板違いならどこを参考にすればいいの?
190 :
nobodyさん :2009/08/05(水) 02:32:30 ID:FCm+s8yN
【OS名】FreeBSD 6.2 【PHPのバージョン】php5.2.3 【連携ソフトウェア】mysql4.0.27 【質問内容】 時間とともに常に変化していく折れ線グラフを表示させたいんだけど、 (ページを更新しなくてもずっと動いている折れ線グラフ。 株価のようなグラフがリアルタイムで動いていくイメージです) これを実現するためには何をどうすればいいのか方向性を教えてください。 とりあえず今はjpgraphを使ってグラフを描こうとしてるんだけど、 ページを更新させずにグラフを動かすっていうのがさっぱり分かりません。 ソケットというものを使う必要があるの? そもそもPHPで作れるの?JavaScriptとかも使うの? こういうことを勉強しとけ、この本orサイトを読めっていうのがあれば 教えてください。
>>189 select * from 物件表 where 市町村id=1 or 市町村id=2 or 市町村id=3
なんてのを想定してるんだろ?
そのままの意味じゃねえか
この意味がわからないならSQLの勉強しろとしかいいようがない
test
>>190 jpgraphでグラフを描けるのであれば、後はページの一部をjavascriptで定期更新するだけ。
ajax timerで検索してみると良いかも。
後はjavascriptのスレで質問してくれ。
195 :
119 :2009/08/05(水) 10:52:28 ID:???
>>188 ぼけてた・・・andじゃなくてorだもんな。
みなさん、間違った回答をしてしまいすみませんでした。
>>180 そう。戻す。
HTML 出力時に「わざわざ」直前にエスケープして
それを忘れて XSS 脆弱性を出すように、
メールや PDF の「わざわざ」直前にデエスケープして
それを忘れて脆弱性じゃないバグの方を選択する。
それに、HTML より、メール、PDF の方が出力箇所が圧倒的に少ないから。
だから脆弱性を重視するかどうかなんだって。
197 :
nobodyさん :2009/08/05(水) 11:15:13 ID:4RYOgnxK
PHP4年使ってきたけど、未だにPECLがわかりません。 なので今日しっかり理解しようと思います。 PECLはどういった位置づけなのでしょうか。 以前まで、PEARのようなライブラリと思っていたのですが、 最近はdllのようなモジュールとしての扱いかなと思ってきました。 それで正しいのでしょうか。
標準機能じゃ満足にできないことをやるためのもの ペイントじゃうまくできないからPhotoshopいれたり CADやりたいけど標準じゃないから新しく入れたりみたい
199 :
nobodyさん :2009/08/05(水) 11:38:00 ID:8EYjxJv2
$query = "select * from 物件表 where"; foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 市町村id={$val}"; continue; } $query .= " or 市町村id={$val}"; } では市町村idが多い場合、orも増えるということ?
>>199 なぜ自分で試してみないんだ?
試した上で疑問点を質問しなさい。
202 :
nobodyさん :2009/08/05(水) 11:58:13 ID:8EYjxJv2
http://www.livein-tokyo.com/search3.php みたいなものをどうやって作るのかしりたいんです。
まだ作ってないので、ためしようがないんです。
<li><input type="checkbox" name="town_cd[]" value="13105" />
みたくいっぱい地区が並んでいますが、この場合
$query .= " or 市町村id={$val}";
$query .= " or 市町村id={$val}";
ってならべていくの?
それとも
新しくforeach ($_POST['town_cd'] as $key => $val) {
if ($key == 0) {
$query .= " 市町村id={$val}";
continue;
}
$query .= " or 市町村id={$val}";
}
を作るの?
意味がよくわからなくてすいません。
どうやって作っているのか知りたくて。
教えてください。
203 :
190 :2009/08/05(水) 12:01:53 ID:FCm+s8yN
>>202 前者だったら同じ値じゃないか
チェックボックスのデータはPHPで配列で受け取れるんだよ
205 :
478 :2009/08/05(水) 12:28:42 ID:???
つまりひとつずつ $query = "select * from 物件表 where"; foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 13105={$val}"; continue; } $query .= " or 13105={$val}"; } foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 13106={$val}"; continue; } $query .= " or 13106={$val}"; } と書けるわけだ。
206 :
nobodyさん :2009/08/05(水) 12:29:57 ID:8EYjxJv2
つまりひとつずつ $query = "select * from 物件表 where"; foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 13105={$val}"; continue; } $query .= " or 13105={$val}"; } foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 13106={$val}"; continue; } $query .= " or 13106={$val}"; } と書けるわけだ。
$query .= " 13105={$val}"; は $query .= " 13105=".$val; こうしたほうが速度的に早くなる
208 :
miniyou :2009/08/05(水) 12:59:19 ID:9EvJqO1U BE:897350663-2BP(0)
CGI初心者です。以下のコードは、現在ページのURLを取得する物で、あるサイトで見つけたものですが、PHPではなく、CGIでしたいのです。CGIに直してみようと思いましたが、難しくて分かりません。PHP/CGIが得意な方、CGIに直して頂けないでしょうか。大変困っております。
if( isset($_SERVER['HTTPS']) ){
$http = ($_SERVER['HTTPS'])?'
https:// ':'
http:// ';
}else{
$http = '
http:// ';
}
define('CONFIG_THIS_URL',$http.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$url = CONFIG_THIS_URL;
>>202 いきなり全部作る気なのか?
疑問のある部分のコードをひとつずつ実際に実行して試してみろって。
今の調子じゃ永遠に理解できないぞ。
それともテストプログラムを作れない理由が何かあるのか?
>>208 まずCGIという言葉の意味について勘違いしているようだから意味不明だぞ。
>>208 PHPはApacheモジュールのほかにCGIとして動かすことが出来ますがそれでは駄目?
CGIって大概はPerl実装のこと言ってるんだろ。そっちの噛み付き方のが意味不明。
え
>>212 cgi=perlのつもりと判断する要素がひとつでもあったか?
211のような話かもしれんし、cやruby、shとかかもしれんだろ。
決め付けるのも良くないぞ。
皆さん、Windowsでのテスト時のファイルへの絶対パスの指定ってどうしてます? c:\tmp\001.tmp c:/tmp/001.tmp file:///c:/tmp/001.tmp 色々な方法がありますが、それがベストなんでしょうか。
216 :
mikky :2009/08/05(水) 15:03:18 ID:9EvJqO1U BE:3140726797-2BP(0)
【記述】
$http = ($_SERVER['HTTPS'])?'
https:// ':'
http:// ';
print $http;
結果:
http:// と出力されました。
【記述】
define('CONFIG_THIS_URL',$http.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$url = CONFIG_THIS_URL;
結果:何も表示されません
217 :
miniyou :2009/08/05(水) 15:08:43 ID:9EvJqO1U BE:598233762-2BP(0)
名前「mikky」に間違えてました。すみません。
218 :
miniyou :2009/08/05(水) 15:10:11 ID:9EvJqO1U BE:498528825-2BP(0)
ありがとうございました。 後は自分で調べて勉強してみます。
>>216 下はechoもprintもしてないんだから表示されなくて当然。
であなたの質問は
・phpを、apacheのモジュールではなくcgi(という仕組みで)動かしたい
・phpを、cgiという仕組みを使いperl(php以外の言語)で動かしたい
のどっち?
220 :
215 :2009/08/05(水) 15:13:25 ID:iDK7D7+A
sage入れたまんまだった。 どれがベストなんでしょうか。 というのも finfo_file関数で、パスが取得できずに困っています。 返り値は「false」なので、 「filename のテキスト表現、あるいはエラーが発生した場合に FALSE を返します。 」 と書いてあるので、テキスト表現が間違っているのかなと思っています。 取得は C:/xampp/hoge.tmp C:\xampp\hoge.tmp 両方のパスで行いましたがどっちもfalseが返ってきます。 どのようにして取得すれば良いのでしょうか。
>>220 phpinfo()で表示されるパスを参考にしたらいいとおもうよ
223 :
nobodyさん :2009/08/05(水) 16:01:42 ID:4RYOgnxK
>>221 エラーは表示されませんでした。
ただ、Falseが返ってくるだけです。
他のファイルでは正常に表示されました。
原因不明なのでいまだにエラーわからずじまいですが・・・
ありがとうございました
224 :
nobodyさん :2009/08/05(水) 17:22:17 ID:qtFRGhoH
DB(mysql)と連携して、特定のテーブルのカラムに対してキーワード検索したいと思います このとき、ユーザーが入力する検索キーワードが2つ以上ある時の検索手順はどうしたらいいでしょうか? 自分の考えでは $keyAry = explode(" ", $_POST['key']); 半角スペースをキーに切り出して、出来た要素をクエリ文のwhere以下で `tgtColumn`=%keyAry[0]% AND `tgtColumn`=%keyAry[1]% … としていくしかないかなぁと思います。 が、何か穴があるのではと思いますがわかりません。 上の配列要素の中に全角スペースがあればそれもまたexplodeのキーにして、再度検索キーワードを作り直す…くらいしか思いつきません。 何かもっと効率的に実践する方法ないでしょうか? php5.2.8 mysql5です。よろしくお願いします。
>>205 なんでひとつずつそんな冗長的なアホなコード書きたいの?
だいたいぜんぜん違うだろそれ
めちゃくちゃになるぞ・・・
たとえば$_POST['town_cd'] = array(13105);
が入ってたら
>>205 のコードだとループ終了時点で
$query = "select * from 物件表 where 13105=13105 13106=13105";
になるだろ
あんましったかはしなくていいからちゃんと基礎から勉強してください
ループや結合演算子の動作も理解できてないじゃん
ぜんぜん理解できてないしもう1度>>7-
>>35 を読み返した上でPHPマニュアルで1から勉強して下さい
公開したらURL教えてね $_POST['town_cd'] = array("; DELETE 物件表;"); を突っ込んであげるから
$query = "select * from 物件表 where"; if (in_array("1", $_POST['town_cd'])) { if (preg_match("/where$/", $query)) { $query .= " 市町村id=1"; } else { $query .= " or 市町村id=1"; } } if (in_array("2", $_POST['town_cd'])) { if (preg_match("/where$/", $query)) { $query .= " 市町村id=2"; } else { $query .= " or 市町村id=2"; } } if (in_array("3", $_POST['town_cd'])) { if (preg_match("/where$/", $query)) { $query .= " 市町村id=3"; } else { $query .= " or 市町村id=3"; } } こんなんを市町村分やりたいのならもう好きにしろって感じだなw
入れられる値を限定したいのならarrayにでも入れておけばいいさぁ
なぜarrayにこだわる? あれ?
>>229 誰のレス?>
>228にいってるなら何の話をしているのかよくわからないが
一連の流れにいってるのであれば
>>202 のページの話ね
name="town_cd[]"
$hoge[0]['node'] = "A" $hoge[0]['next'] = "B" $hoge[1]['node'] = "B" $hoge[1]['next'] = "C" $hoge[2]['node'] = "C" $hoge[2]['next'] = "D" ... の様な値から、流れ図を画像で出力したいと思っています。 上記のような値なら、 A→B→C→D… という画像が出力されるイメージ。 実際には、もっと複雑になり、一つのnodeから複数の線が出ることになると思うので、 できれば配列を引数で渡したら、画像を出力してくれるようなライブラリを使いたいのですが、 何か良いライブラリやサンプルはないでしょうか。 imagecreateのような、GD関数を使えば、簡単なものは実装できると思うのですが、 複雑になってくると、難しいかなと思っています。
それってニコ動が出してるなじゃんくてiphone側が出してるアラートじゃないの?
Session の扱いであって 本質的にケータイとは関係ないことだから
>>224 preg_split()が楽。UTF-8限定ならもっと楽
$tokens = preg_split('/\p{Z}+/u', $keyword);
$query = "select * from 物件表 where"; foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 13105={$val}"; } } foreach ($_POST['town_cd'] as $key => $val) { if ($key == 0) { $query .= " 13106={$val}"; } }
238 :
237 :2009/08/06(木) 15:35:13 ID:Qt302JJo
ageてしまった。
>>237 なんでもいいけどそのソースはなに?
$keyが0の時だけなんかしたいなら最初から
$query = "select * from 物件表 where 13105=".$_POST['town_cd'][0]." AND 13106=".$_POST['town_cd'][0];
でいいんじゃないの?
あとANDかORで繋がないと文法エラーになるよ
まだ続いてんのか。
241 :
nobodyさん :2009/08/06(木) 16:20:42 ID:sYopahvA
$ary = array(3, 5, 5, 9 ,2, 5, 2, 7)を $ary = array(3, 5, 9, 2, 7)としたいです。 ルールはindexの低い順に格納し、すでに格納している値と 同じ値ならスルーする。 アルゴリズムが分かりません。教えてください。
foreach でオリジナルの配列をまわし、新しい配列に 重複しないものだけを追加していけばいいんじゃないかな。
244 :
nobodyさん :2009/08/06(木) 16:30:42 ID:sYopahvA
245 :
nobodyさん :2009/08/06(木) 17:43:04 ID:Qt302JJo
ひとつずつくぎりたいんだ。 <?php if( isset(13106=$_POST['town_cd'] ){ $query = "select * from 物件表 where 13106=$_POST['town_cd'] }else{ } ?> 13106のデータを出したいんだ。 どうすればいい?
理想の入力データと出力データを書けうざい
247 :
nobodyさん :2009/08/06(木) 17:52:38 ID:Qt302JJo
$_POST['town_cd']に何が入っててどういう結果を出したいのかを書いて
249 :
nobodyさん :2009/08/06(木) 18:00:09 ID:Qt302JJo
$_POST['town_cd']にはひとつ13106がはいっていてほしい そして13106で検索してその土地、画像、説明文がでてきてほしい
>>247 phpはひとまずおいといて、必要なSQL文がどのようなものになるのか理解してからきなさい。
両方一緒に質問するのは君にはムリだよ。
13106っていうカラム名なの?
$_POST['town_cd']は絶対に13106が入るの? あとissetは変数がセットされてるか調べるだけisset(13106=$_POST['town_cd'])なんて使い方は出来ない
253 :
nobodyさん :2009/08/06(木) 18:11:22 ID:Qt302JJo
そうか。もうぜんぜんだめだ。 説明ができない。 $_POST['town_cd']はチェックされた数値が入る
254 :
nobodyさん :2009/08/06(木) 18:15:38 ID:Qt302JJo
$_POST['town_cd']にはチェックされた数値が入って それをチェックした分だけ画像や説明文をsql文で呼び出す プログラムを作りたい。
変数**には**から**の範囲の数値文字列が配列で複数個入っていて〜とか SQLのデータ構造は主キーが**で〜とか言ってくれないと
言っていることは分かるけど、 魚を与えるより、釣りの仕方を教えたい。 SQL は忘れて、まずは PHP のチェックボックスを学んだ方がいいよ。
なんか面倒になってきたな DBの内容を以下 テーブル名bukken 物件番号,土地,画像,説明文 001 東京 001.jpg 東京の物件です 002 大阪 002.jpg 大阪の物件です 003 京都 003.jpg 京都の物件です んで選択画面のHTMLで SELECT * FROM bukkenのクエリを発行し、結果を$bukkenに入れる foreach($bukken as $value){ echo '<input type="checkbox" name="bukken[]" value="'.$value[物件番号].'">'; echo $value[土地]; ・・・略 } 送信先で 2次元配列$_POST['bukken']に物件番号が送られてくる ここまでいいか?
>>236 どうもありがとうございます
たすかりました
ローマ字変数名きめぇ
ここまで分かるなら実際に動かしてみろよ・・
261 :
nobodyさん :2009/08/06(木) 20:16:35 ID:BSJAUmaX
MT互換というか、できるだけMTそのまんまの無料ブログサービスを教えてください
262 :
nobodyさん :2009/08/06(木) 20:17:47 ID:BSJAUmaX
誤爆しました すみません
>>247 あのさ・・・DB使ったシステム構築したことあるの?
13106と13107のデータをOR検索したら両方のデータがとれるじゃん
あとはとってきたデータを順番に表示してるだけでしょ
クエリ送る段階で分ける必要はぜんぜんないんだけど
何というか、2chにも親切な人はいるんだな
265 :
nobodyさん :2009/08/06(木) 21:41:08 ID:mexO5YhN
ども PHP書くとき何のソフト使ってます?
vi
viとは硬派だな 俺はvim + debugger.vim + Xdebug
最先端のメモ帳 ていうかこういう話題は別のスレだったきがするが
PHPエディタ(スタンドアロン)
PHPエディタ(IDE)からEclipseに移行中 でも重くてうんざりする。 PHPエディタのスタンドアロン版が不意に更新されたので、 IDE版もいろいろ不満点が解消される時が来るのかなーと少し期待。
PDT エディタは別スレあるが、全然書き込み無い komodoに期待してる。
>>270 >PHPエディタのスタンドアロン版が不意に更新されたので、
全然知らなかった。
だがたいした修正じゃないなw
秀丸だな
サクラ使ってる俺は少数派?
>231 PHP関係なくなって恐縮だが、graphvizを使うといい。
>>276 おおお…理想通りなソフトすぎて、感動してしまった…
これから色々調べて使ってみたいと思います。
本当にありがとうございます。
278 :
237です。 :2009/08/07(金) 03:45:30 ID:ts6lfKVw
257様続きをどうぞ。 勉強になります。 遅くなりましてすいません。
279 :
nobodyさん :2009/08/07(金) 03:55:38 ID:xbsfYg7f
DWみたくF12押すと、FTPでUPしてブラウザ立ち上がってそのページ表示 を自動でしてくれるエディタねいですか?
>>278 おいおい
テストをレン鯖でやる気かい?
xamppでもいれて開発しなさい
rubyでソケットで通信する際に TCPSocket.open("localhost", port) のように書くのを、 phpではどのように書けばいいのでしょうか?
fsockopenあたりしらべてみ
283 :
237です。 :2009/08/07(金) 06:52:46 ID:ts6lfKVw
257様そこまでは理解できています。 続きをお願いします。
284 :
237です。 :2009/08/07(金) 06:54:16 ID:ts6lfKVw
続きをかいてください。
しね
お前は何なんだ...。
結局は、誰かに代わりに考えて欲しいだけなのか。
つーか宿題なんじゃねーの?
俺が小学生の頃はそんな宿題はなかったなー。
>>279 xyzzy + browserex + ftpupdate
>>283 あとは送られてきた物件番号だけを問い合わせればいいから
$sql = "SELECT * FROM bukken WHERE ";
$where ="物件番号='" . implode("' OR 物件番号='",$_POST['bukken']) . "'";
$sql .= $where;
$sql変数のクエリを発行すれば良い
わかったらもうくんな
293 :
237です。 :2009/08/07(金) 12:37:32 ID:ts6lfKVw
$sql = "SELECT * FROM bukken WHERE "; $where ="物件番号='" . implode("' OR 物件番号='",$_POST['bukken']) . "'"; 最後の一文があんまりよくわかりません。 ここの部分を教えてください。 よろしくお願いします。 宿題ではないです。 勉強のためです。 しねとかやめてください。
294 :
237です。 :2009/08/07(金) 12:43:30 ID:ts6lfKVw
>>293 勉強なら implode() のマニュアル読んだ?
296 :
237です。 :2009/08/07(金) 12:54:05 ID:ts6lfKVw
読みました
勉強なら自分で考えろよ しね
読んだのなら分かるだろ 読んでないから分からない
だから実際にプログラムを書いて実行しろよ。 そうすれば一目瞭然だろうが。 どんだけ馬鹿なんだ。
>>296 実行できる環境は整えたのか?
コード自分で書いて試してみて、ちっとは試行錯誤した上で質問してくれないと。
301 :
237です。 :2009/08/07(金) 13:44:29 ID:ts6lfKVw
if( isset($_POST['bukken'] and is_array($_POST['bukken']) { $a = '`'bukken'` in ("' .implode('","' , array_map('mysql_real_escape_string', $_POST[''bukken'']) ). '")'; $sql = "select * from bukken where ID in ('$a') でどうかな?
302 :
237です。 :2009/08/07(金) 13:45:54 ID:ts6lfKVw
こんな感じで試してみたいと思います。 ありがとうございました。
implode() のマニュアルを読んだ上で何が分からなかったの?
1行目から突っ込みどころ満載なコードだな
305 :
nobodyさん :2009/08/07(金) 13:56:38 ID:ts6lfKVw
だめかな?
上の方で誰かがissetについて指摘してくれてたのにな。
と思ったら単に閉じてなかっただけか。 失礼。
書き直してやろうと思ったが2行目が解読不能でやめた
array_key_exists 使え。
expression and expressionなんて使い方出来たっけ?(expression=任意の式)
&&と同じか、でも普通使わないだろう
え、なんで?
演算子の優先順位表を読んでも理解できないんだろ
pythonで
>>> import urllib2
>>> req = urllib2.Request(url='
https://localhost/cgi-bin/test.cgi ',
... data='This data is passed to stdin of the CGI')
>>> f = urllib2.urlopen(req)
>>> print f.read()
と書くのを、phpで書くとどうなりますか?
echo 'read the thread title.';
そんなにID出したくないのか
319 :
nobodyさん :2009/08/07(金) 18:08:28 ID:/dIJ9UWZ
初歩的な質問をさせてくださいませ。 1ページ目:名前を入力 2ページ目:情報を入力 3ページ目:情報を入力 4ページ目:1,2,3の情報を出力 フォームとPOSTを使って上記のようなことをしたいです。 1ページ目で入力した数値を4ページ目で受け取りたいのですが、 <form action="2ページ目" method="post"> と記入しないと、submitを押した時に順番にページが表示されません。 そして、4ページ目で print ( $_POST['name'] ); と入力しても、 actionで指定したページが2ページ目なので、文字を受け取れません。 この場合どうすればよいのでしょうか? どうぞよろしくお願いします。
>>319 セッション又はhiddenで受け渡すのが一般的
321 :
nobodyさん :2009/08/07(金) 18:47:36 ID:/dIJ9UWZ
>>320 さん
ありがとうございます。調べてみます。
俺はhidden渡しで、変数名なども全部そのまま渡す事が多いな。 入力値検証(バリデート)のロジックが丸ごと使いまわせるし、途中のページを削ったり確認ページとかを増やしたり、などの処理も楽になる。
失礼します。2つほど質問お願いします。
$_GETでURLから引数渡すときに
http:// 〜/index.php?a=1&b=2&c=abc
とかやるじゃないですか。その場合の?以降全てを一つの文字列として受け取りたい場合
どうすればよろしいのでしょうか?一つ一つ分けての受け取り方は$_GET['a']とかすればいいのは
わかるのですけれども。
また日本語をc=%E3%82%A2%E3%83%8B%E3%83%A1のようにエンコードも日本語に変換されることなく
エンコードされたまま文字列として受け取りたい場合どうすればよいでしょうか?
一つの引数で受け取った場合$_GET['c']=アニメ とかなってしまってデコードされちゃうようなのですが。
よろしくお願いします。
すいません自己解決しました 2つとも $uri = $_SERVER['REQUEST_URI']; $ary_uri = explode("?",$uri); $arg = $ary_uri[1]; print $arg; これで解決できるようですね。お騒がせいたしました
>>323 $_SERVER["QUERY_STRING"]
ってのもあるぞ。
そのまま出ry・・なんでもない
ぶほw一行ですんだwサンクスwww
>>323 解決してるだろうけどURLエンコードはurlencodeという関数があるよ
>>329 うす。一つ一つ受け取る場合それやろうかとおもってました。
重ねてサンクス
331 :
nobodyさん :2009/08/09(日) 04:34:18 ID:jT8fv9uV
カレンダーを出力する(header関数で)プログラムがあるとします。 カレンダーの中身はDBから引き出すとして、そのDBは情報がUTF-8で保存されていて そのサイト自体もUTF-8だとします。 ここで、この出力するプログラムを外部サイトに埋め込んでその外部サイトに 出力するとしたら、外部サイトの文字コード(SJIS)に合わせて文字コードを変更する必要があるんでしょうか? (header関数で制御する部分)
333 :
nobodyさん :2009/08/09(日) 10:51:17 ID:jT8fv9uV
>>332 環境づくりをどうやったら良いのかわからないんです。マシン一台しかないし。。
PHP以前の話になってしまいますが、apacheのエンコード設定がUTF-8でも、
ページの文字コードってのは最終的に
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
で決定されるんでしょうか?
それなら同じサーバで1ページだけ、動かせば良いのかな
HTTPヘッダの Content-Type: */*; charset=* で指定されたエンコーディングが最も優先される カレンダーを表示するためにはPHPのコードを実行させるのか? それともiframeやscriptを使って結果だけ読み込ませるのか? 前者なら変換する必要がある 後者なら変換しなくていいがContent-Typeヘッダで明示し、更にscript要素を使う場合はcharset属性も指定する
header関数でカレンダーを出力って時点でよくわ
なんで能力無い人に限って「〜とします」とかさも抽象論みたいな言い回し使うんだろうね。 「私の環境は〜です」ってちゃんと言えよ。
337 :
nobodyさん :2009/08/09(日) 12:28:38 ID:Ho1U3iRt
>>333 文字化けで悩むのは時間の無駄だから文字コードは全てをUTF-8に統一な
文字コードの設定が必要なモノ
apache
PHP
DB
HTMLの出力
HTMLやPHPなどのファイル
>>334 詳しい説明ありがとうございました
色んなやり方を試してみたいと思います
>>337 ありがとうございました
339 :
nobodyさん :2009/08/09(日) 18:48:31 ID:j1FcAzsW
あん?臭い口開けるな
341 :
nobodyさん :2009/08/09(日) 19:01:49 ID:j1FcAzsW
別に開けてませんけど^^;
342 :
nobodyさん :2009/08/10(月) 03:54:04 ID:GiR2mz2l
PHPでバッチスクリプトを書く場合、 #!/bin/env php <?php から始めるので合ってますか?
>>342 動かそうとしてるPHPがCGIモードだとHTTPヘッダがでるかも。
php -q としておけば?
あとenvは/usr/binにあるとは限らない。
ごめん、envは、/usr/bin/じゃなくて、/bin にあるとは限らない。
345 :
nobodyさん :2009/08/10(月) 19:25:14 ID:8T/ZNI95
http://up2.viploader.net/pic/src/viploader1125909.bmp 画像のように、色分けした枠ごとに送信先を変えたいのですが、上手い方法を教えてください。
「変更」と「詳細」は思惑通り行くのですが、チェックの項目を、下の「削除」と「メール作成」で扱おうとすると
上手くいきません。
上の表はSQLから取り出したデータをループで表示しています。
本当なら「詳細」はIDからリンクさせたいのですが、IDのデータをリンクで渡すやり方がわからなく、仕方ないので
無理やりやっています。
htmlスレの方で聞いた方が良いでしょうか。
>>345 ヒント、JavaScript使わないと無理そう
後はHTMLスレで。
赤→緑→黒の順番でformを書いてスタイルシートで整形する
>>345 >チェックの項目を、下の「削除」と「メール作成」で扱おうとすると
>上手くいきません。
もうちょっと具体的に
2列分ぐらいのHTMLをここに書いてみるべし
たぶんcheckboxの受け渡し方がおかしいとは思うが
<input type="checkbox" name="id[5854]">
みたいにして配列で渡すとよい
>本当なら「詳細」はIDからリンクさせたいのですが、IDのデータをリンクで渡すやり方がわからなく、仕方ないので
>無理やりやっています。
<a href="shousai.php?id=5854">5854</a>みたいにGETで渡せばよい
えっ
351 :
nobodyさん :2009/08/11(火) 04:26:11 ID:OhLUXqwk
シバン中envでパスを指定したphpを、 cronで実行すると、env php部分でエラーになります。 envがphpを見つけられないようです。 phpをフルパスで指定した場合、 あるいはターミナルから実行した場合、 あるいはスクリプトがrubyだった場合は問題ないです。 cron×env×phpの時に問題になります。 これは何故でしょうか?
盗聴ってLan内の事だよね?
353 :
351 :2009/08/11(火) 08:28:51 ID:???
cron実行時の環境変数PATHが貧弱なせいでした
というか実行するサーバが決まっているならphpのフルパスを書いた方が良いよ
while($row=$stm->fetch()){ for($i=0;$i<23;$i++){ if($i==0){ echo "<td align=\"center\">"; echo "<input type=\"checkbox\" name=\"check[]\" value=\"".$row['id']."\"/></td>"; }else if($i==1){ echo "<form method=\"POST\" action=\"../new_student.php\">"; echo "<td><input type=\"submit\" value=\"変更\"/></td>"; echo "<input type=\"hidden\" value=\"".$row['id']."\" name=\"id\">"; echo "</form>"; }else if($i==2){ echo "<form method=\"POST\" action=\"../display/student_page.php\">"; echo "<td><input type=\"submit\" value=\"詳細\"/></td>"; echo "<input type=\"hidden\" value=\"".$row['id']."\" name=\"id\">"; echo "</form>"; } else{ echo "<td> ".$row[$i-3]."</td>"; } } echo "</tr>"; } この下に削除とメールボタンがあるのですが、チェックボタンの間に変更と詳細があるので formをまたがせる事が出来ません・・・・ 簡単に言うと、 <チェックボタンのform> <変更のform></変更のform> <詳細のform></詳細のform> </チェックボタンのform> のような事がしたいです。
>>355 >>345 の人?
formをネストさせないで、
>>347 さんの言うようにcssで整形するか
押すボタンによってaction先をjavascriptで変える
どっちにしてもphpの話題ではない。板違い。
358 :
nobodyさん :2009/08/11(火) 12:01:47 ID:+4lP6KeF
お願いします -------------------------- <table border=1> <tr> <td>1</td> <td>aaaa</td> <td nowrap>bbbb</td> <td>cccc</td> <td>dddd</td> </tr> <tr> <td>2</td> <td>eeee</td> <td nowrap>ffff</td> <td>gggg</td> <td>hhhh</td> </tr> </table> ---------------------------- このようなHTMLのtdで囲まれた文字列を配列で取得したく preg_match_all("/(<tr>.*?<td>(.*)<\/td>.*<td>(.*)<\/td>.*<td>(.*)<\/td>.*<td>(.*)<\/td>.*?<\/tr>)/i",$html,$match); こう記述しましたが、期待通りの結果になりません どうすればよいでしょうか?
なんじゃそりゃ PHPで実行する前に正規表現チェッカで試すことをお勧めする
>>358 改行を最初に除去
$html = preg_replace('/\r/,'',$html);
$html = preg_replace('/\n/,'',$html);
preg_match(ry
何でわざわざ二回も
対象のソースがどんな改行コードで作られてるかわからない \nだけなら'/\r\n/'とするとヒットしない
(\n|\r)でいいじゃん
str_replaceでも
その書き方ならこれじゃだめなの? $html = preg_replace('/\r|\n/','',$html);
366 :
>>355 :2009/08/11(火) 13:05:46 ID:???
すいません。 レス下さった方、ありがとうございます。 失礼しました。
正規表現を理解できてないのに自慢げに書いてる男の人って…
擁護じゃないけど正規表現未だに難しいわ。 どっかトラの穴か相応のプロジェクトでこねくりまわさないと一生 正規表現がでてくるたびにつまづく気がする。
勉強しろよ
370 :
368 :2009/08/11(火) 13:23:37 ID:???
なんつーかSQLほど出てくる結果に感動が無いと申しますか
SQLのどんな結果が感動?
なんかアドバイスしたら
>>367 みたいに揚げ足取られるならしないほうがいいな
なんでそんなにひねくれてるの?
正規表現使ってないのにpreg_replace使う意味が分からない 指摘されて「こいつはひねくれてる」で終わるようなら回答しなくていいよ
374 :
368 :2009/08/11(火) 13:45:12 ID:???
結局なんか正規表現使う場合って場当たり的な書き方になってしまってるのがなんかやだなぁ SQLだとおもった結果を何回かのクエリやらプロセス通さず一発のクエリで導きだしたりが 醍醐味かなぁ。。まぁおれが正規表現こねたことないからだろうけど。
正規表現も、文字列の集合からおもった結果を一発でとってくるわけで ようは正規表現に苦手意識みたいなものがあるだけじゃないか? 複雑なSQL組み立てた時に感動するなら 同じように、パッと見暗号にしか見えない正規表現作れた時も感動できるかもよ。
376 :
368 :2009/08/11(火) 14:01:32 ID:???
たぶん変な苦手意識は少なからずあるな。見ただけでなんぞこれ〜ってなっちゃう。 読むのがつらいからかなぁ?対象となる文字列から人間の目での抜き出しはこんなに 簡単にできるのに、機械にあわせようとするからこんなややこしい暗号になってしうのか・・・つーかんじか
正規表現はコメント振ってても、後で見たら意味不明になってたりするしな・・・
>>376 SQLのどんな結果が感動なの?ねえ???
379 :
368 :2009/08/11(火) 14:15:43 ID:???
>>378 ん?自分で計算するのも面倒な行の合計だけでも感動しない?
SQLこねて作った場合でも感動するよ。
心の中で「あ、でたw」「数値変えたらちゃんと結果も変わったwおkおk」てなかんじで。
正規表現使ってる時の心の声は「あーなんでこれ抜き出せないんだよ」「たったこことここだけなのに!」
とかいう心の声が多いですわ。
>ん?自分で計算するのも面倒な行の合計だけでも感動しない? PHPの存在意義は・・・?
結果的に期待どおりの動きになってたらいいと思うんだが やたら人のスクリプトや考えを否定的なやつってうざいよな 正直ひねくれてると思われても仕方が無いと思うわ
382 :
368 :2009/08/11(火) 14:47:16 ID:???
まぁスレチだったわけですいません。なかなか正規表現に慣れないもので なにか良い見方・覚え方・学び方があるのならとはおもってずるずると。 380 まぁ今の話のなかではないね。3重以上のループ組むならやはりSQLで外部参照とか組んじゃうけど。 381 まぁ色々やり方あってもいいわな。美しいか美しくないかも上記ループのようにあるかもしれんけど。
結合はDBの基本では 「SQLは行の合計ができるから感動する」っていうから この人エクセルとかプログラム知らないのかなと思っただけ。 結局難しそうなものから逃げてるだけでは?
ここはPHPスレです
何事も勉強する意欲には「おー」とか思う感動が必要なんじゃないかなとおもって。 場当たり的に定石も美しさもわからずなんとか対処してる俺は正規表現をまともに習得できるきがしない。
>>385 >正規表現をまともに習得できるきがしない。
それがダメなんだってば
「出来ない」と思えば何もかも出来なくなる 「出来る」と思えば出来る
まだやってんのか。
正規表現なんて要は希望通りマッチすりゃいいんだから、適当に書くぐらいで丁度良い。 あれこれメタキャラクタ使って短縮したり技巧を凝らすのは好きな人がやればいい
391 :
368 :2009/08/11(火) 20:17:40 ID:???
その適当感がたまらなく嫌なんだ。。
適当人生のくせに
だから書くコードだけでもとw
正規表現になると玄人面したやつが素人の書いたやつに文句つけるから荒れるんだよ 変だと思ったらこう書けばよいとさらりと書き直してあげれば終わるんだから いちいちつっかかる必要はない 書き直したコードみて最初に書いたやつもほーこう書くのかーと勉強になるし まぁここ正規表現スレじゃないけどもう少し大人になろうぜ
正規表現は、ややっこしいパターンを書かざるを得ない羽目に陥って嫌々書いてるうちに自然と覚える。 分かってしまえば簡単。 複雑な技巧は、個人的には避けるべきだと思う。可読性とメンテナンス性が落ちる事が多い。
>>394 何でこう書かないの?的なツッコミが必ず入るのは勉強にはなるけど、
荒れやすい要素ではあるよなあ。
あとはお決まりの「メールアドレスを正規表現で(ry」も一言で済むのに
何故か突っかかられる印象がある。
397 :
nobodyさん :2009/08/12(水) 01:19:04 ID:PY+df2PJ
教えてください あるページでセッション変数として文字列を保存し、 異なるページで保存したセッション変数の中身を表示させようとしています。 まったく同じファイルなのですが、 IEだとうまく表示できるのに、 Firefoxだと何も表示されない(空文字)になってしまいます。 IEではうまく動作するのにFirefoxだと駄目なんてことはあるのでしょうか。 Firefoxはバージョン3.5.2で、 サイトから送られてきてたCookieを保存する、サードパーティのCookieも保存するに チェックがついていて、例外サイトには何も設定していません。 保存する期間はサイトが指定した期限までとなっています。 なぜなんだろう?
IEでうまくいって他がうまくいかない大半はタグの間違い IEはヘンテコリンなタグでも適当に解釈してしまうので、IEが間違っている
399 :
nobodyさん :2009/08/12(水) 01:45:20 ID:PY+df2PJ
ありがとうございます うーん。タグとかでなく、セッションに保存した内容が取得できないんですよね if ($var == ""){}でtrueになるので、タグ以前の問題ではないかと思っています
再現するコードうp
401 :
nobodyさん :2009/08/12(水) 02:14:30 ID:PY+df2PJ
了解しますた
呼び出す側
<?
$pic = "file.wmv";
session_start();
$_SESSION["pic"] = $pic;
?>
<html>
<head>
</head>
<body>
<object id="MediaPlayer" width="640" height="525" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codebase="
http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715 "
standby="Loading MicrosoftR WindowsR Media Player components..." type="application/x-oleobject">
<param name="FileName" value="movie.html" />
<param name="AutoStart" value="true" />
<param name="ShowControls" value="true" />
<embed name="プレーヤー名" type="application/x-mplayer2" pluginspage="
http://www.microsoft.com/Windows/MediaPlayer/ " src="movie.html" width="640" height="525" autostart="1" showcontrols="1"></embed>
</object>
</body>
</html>
呼び出される側 <? session_start(); $pic = $_SESSION["pic"]; if ($pic == "") { exit; } if (file_exists($pic)) { header('Content-Type: video/x-ms-wmv'); header('Content-Length: ' . filesize($pic)); ob_clean(); flush(); readfile($pic); } ?>
つvar_dump($pic)
PHPさんからSet-Cookieついた Firefoxさんたらガツガツ食べた 仕方がないのでWMPさん手ぶらで聞いた さっきのCookieご用事なぁに IEさんとWMPさんは仲良しなのでCookieを回し読みします
405 :
削ジェンヌ :2009/08/12(水) 02:57:34 ID:???
この場合読み込みを行うのはIEでもFirefoxなくWMPだな IEにCookie食べさせるとWMPでも使われるがFirefoxが食べたCookieはFirefox以外で使われない セッションの管理方法をcookieじゃなくてURLにセッションIDを付加させる方法にしたらいいと思う
PHPファイルの中でオブジェクト開けばいいんじゃ
日本語でおk
410 :
397 :2009/08/12(水) 15:18:43 ID:???
試してみました。 sessionIDをGETで渡して、 session_startの前にsession_id(string id)でsession_idを渡すことで ひとまず動作しました。 確かに、考えれば最後はWMPがhtmlを参照するので Firefoxで設定したsessionが読めるわけないですね。 でも、Firefoxの過去のバージョンではなぜかうまく動作していたんですよ・・ うーんなぜなんだろう・・
411 :
nobodyさん :2009/08/12(水) 16:10:37 ID:L+TnL+Ze
セッション引き回しも質問です。 [OS]FreeBSD 6.1-RELEASE-p10(CPIのシェアードプラン X30) [php]4.4.7 [DB等]mysql使用(phpでは--with-pgsql7も組み込み) [症状]セッションが引き回されない require "env.php"; session_start(); // 1回目 if ($DEBUG) { print_r($_SESSION); } $userId = $_POST['userId']; $passwd = $_POST['password']; $sessId = $_SESSION['userId']; $sessPw = $_SESSION['passwd']; // 2回目 if ($DEBUG) { print_r($_SESSION); }
412 :
nobodyさん :2009/08/12(水) 16:13:50 ID:L+TnL+Ze
(
>>411 の続き)
// MySQLへ接続
$conn_id = mysql_connect($MySQL['HOST'], $MySQL['USER'], $MySQL['PASSWORD']) or exit('MySQLへ接続できません。');
// 使用するデータベース選択
mysql_select_db($MYSQL['DATABASE'], $conn_id);
mysql_query("SET NAMES ujis");
// ユーザー認証
if (($sessId == null || $sessPw == null) && ($userId == null || $passwd == null)) {
echo "<div align=\"center\">";
echo "<p><font color=\"red\">ログイン情報に誤りがあります。<br>再度ログインを行ってください。</font></p>";
echo "<a href=\"index.php\">ログイン画面へ戻る</a>";
echo "</div>";
exit;
}
上記コードで、print_r()を2度呼び出して確認したところ、
1つめ…Array ( [userId] => ******** [passwd] => ******** )
2つめ…Array ( [userId] => [passwd] => )
となり、$_SESSION 配列の各要素の値が消えてしまいます。そのためか、if文が常に真となり、
セッションが引き回せません。この他のスクリプト間では何ら問題なく引き回せているので、
上記のソース部分に鍵がありそうなのですが、phpは慣れていないため原因がわからずにいます。
どなたかおわかりになる方がいらしたら是非教えてください。よろしくお願いします。
どこで$_SESSION['userId']と$_SESSION['passwd'];をセットしてるの?
414 :
nobodyさん :2009/08/12(水) 17:41:12 ID:L+TnL+Ze
>>413 ありがとうございます。続きのソースです。ログイン時に書き込みしています。
if ($sessId != null) {
$userId = $sessId;
}
if ($sessPw != null) {
$passwd = $sessPw;
}
$userResult = mysql_query("SELECT * FROM USER_MASTER WHERE USERID = '$userId' AND PASSWD = '$passwd'", $conn_id);
$userInfo = mysql_fetch_object($userResult);
if ($userInfo->USERID != $userId || $userInfo->PASSWD != $passwd) {
echo "<div align=\"center\">";
echo "<p><font color=\"red\">入力したユーザー情報に誤りがあります。<br>再度ログインを行ってください。</font></p>";
echo "<a href=\"index.php\">ログイン画面へ戻る</a>";
echo "</div>";
exit;
} else {
// セッションへログイン情報セット
$_SESSION['userId'] = $userId;
$_SESSION['passwd'] = $passwd;
//このあとhtml表示(省略)
}
>>414 $sessId $sessPw の2つに値は入ってるのかな?
function debug(){ $echo = '$_SESSION<br /><pre>'.print_r($_SESSION,true).'</pre><br />'; $echo .= '$_POST<br /><pre>'.print_r($_POST,true).'</pre><br />'; return $echo; } こんな関数書いてif文の前とかでecho debug();してみたら分かると思う あとファイルの先頭にerror_reporting(E_ALL);書いて潜在的なバグをつぶす
417 :
nobodyさん :2009/08/12(水) 23:35:55 ID:kCVCP35f
PHP5.3.0で $a1=x; $a2=y; echo $a1; echo $a2; と同じ動作をするコードを $a1=x; $a2=y; for ($i=1;$i =2;++$i) { echo $a$i; } のように書いたらecho $a$i;の部分でエラーが出ました。 正しく動かすにはどのように書けばいいのでしょうか?
文字列連結
それなら配列でまとめたらいいと思うんだが 分かりやすいし応用できる $a = array( [0] => x, [1] => y, ); foreach($a as $value){ echo $value; }
421 :
nobodyさん :2009/08/12(水) 23:49:37 ID:kCVCP35f
>>418 $a1="x";
$a2="y";
for ($i=1;$i<=2;++$i)
{
$a = "a".$i;
echo $$a;
}
でうまくいきました。
ありがとうございます
>>415-416 ありがとうございます。
いろいろ試してみたのですが、走らせていたサーバのphpでregister_globals=onとなっていました。
そのせいか分からないのですが、
>>411 ,412,414のコードのうち、411の
$sessId = $_SESSION['userId'];
$sessPw = $_SESSION['passwd'];
をコメントアウトしたところ、症状が解消しました。コメントあうとする前は、上記代入の前後で呼び出した
print_r($_SESSION) で、1回目では値があったのに2回目では消えていました。
つまり、上記のコード2行があると、その直前では値があったのに$sessIdも$sessPwもnullであり、
上記の2行がないと、$sessIdも$sessPwに $_SESSION['userId'] と $_SESSION['passwd']の値が
それぞれセットされているということになります。逆なら分かるのですが、症状はなくなったもののなんか
気持ち悪いです。
echo $a . $i; でいいだろ・・・
>>422 register_globalsはたぶん後方互換のためにonにしているのだろうが
好きなように変数の中をいじれるのでセキュリティに問題がある
直ちにoffにしたほうがいい
425 :
nobodyさん :2009/08/13(木) 02:18:30 ID:CXYe9XKR
Windows上のVMwareでCentOS5を動かして開発しています。 現在、PHP OpenID Libraryを利用して OpenIDのログイン処理のテストをしているのですが、 yahoo、mixi、ライブドア、はてな、いずれも 「現在ログインできません」のようなメッセージが出てログインできません。 curlやopensslが必要というのを見かけたので、確認しましたが、 いずれも有効になっていました。 レンタルサーバーなどにアップした場合はうまくいくのですが、 ローカル環境だとうまくいきません。 なにが原因なのでしょうか?
多分コードが悪い
427 :
nobodyさん :2009/08/13(木) 09:24:07 ID:h6lN5QEU
【OS名】RHEL 【PHPのバージョン】php5.26 【連携ソフトウェア】PostgreSQL 8.4.0 【質問内容】 Cronで回して相手サーバーにバックアップデータを投げたいのですが、レンタルなのでモジュールとかの追加は出来ません。 PHPでそういう事は可能でしょか? もし可能ならPHPでそういった事をやる際はどういった関数を使えば可能ですか?
telnetなりsshなり使え
429 :
427 :2009/08/13(木) 09:48:51 ID:h6lN5QEU
>>428 回答ありがとうございます。
telnetとsshのポート空いてないサーバーなのでそういった事が難しいため
PHPなどで出来ないかと思っておりました。
説明が不足しており大変申し訳ありませんでした。
データ量が少ないなら JSON なりでいいかもしれないけれど
432 :
425 :2009/08/13(木) 10:20:31 ID:???
>>426 ライブラリの使い方が間違ってるということでしょうか?
ほとんどコピペなので、コード以前の、
環境の問題のような気がしているのですが・・・
433 :
427 :2009/08/13(木) 11:03:42 ID:h6lN5QEU
>>430 すいません。
HTTPサーバーのみ稼働しててFTPが使えないです。
情報を小出しにしているわけではないですが他にも必要な情報あれば言ってください。
JSONって元気?
>>432 環境をコードに合わせるんじゃなくてコードを環境に合わせるべし
436 :
432 :2009/08/13(木) 12:48:26 ID:CXYe9XKR
>>435 できればそうしたいのですが、環境のどこがまずいのか分からなくて・・・
そもそも「現在ログインできません」とは、どういう状況なのでしょうか?
ライブラリのコードを追うしかない
OpenIDなんてはじめてしったわ 2年も前からやってるのか・・・ ぜんぜんついていけてない
>>433 相手サーバーでcron使って file_get_contents で ファイルもってくれば?
440 :
nobodyさん :2009/08/13(木) 16:54:53 ID:lMlALn5L
Windows環境でphpizeする方法が詳しく書かれているサイトってありますか?
441 :
433 :2009/08/13(木) 17:04:41 ID:h6lN5QEU
>>439 その手がありましたね。
すっかり忘れてました。
ですが諸事情あってあくまで初回のアクションはバックアップ元にしたいので
バックアップ元のCronでバックアップ先のPHPを叩くようにすれば出来そうです。
ありがとうです。
442 :
nobodyさん :2009/08/14(金) 08:03:40 ID:S/PVqIxN
PHPの質問とは直接関係ないのですがどこで聞けばいいのかわからないのでどなたかわかる方お願いします a.php header("Content-Type: application/zip"); echo "zipのバイナリコード"; ダウンロードダイアログでa.phpとなってしまうのですが(zipにリネームしたら開けるのですが) a.zipでダウンロードさせるにはどうしたらよいのでしょう? headerで何か明示的にダウンロード時のファイル名を指定できると読んでいるのですが やり方がわかりません(読み違いでできなかったらすみません)
444 :
442 :2009/08/14(金) 08:13:30 ID:S/PVqIxN
>>443 盲点でした
ズバリな答えが書いていますね
助かりました
どうもありがとうございました
445 :
nobodyさん :2009/08/14(金) 22:42:22 ID:vkQArbxO
mb_splitについて質問させてください 症状はFreeBSD7.1+PHP5.2.10のレンタルサーバで実行結果が以下のようになってしまいます $arrWork = mb_split (",", "2004年5月13日,1234566,aabbcccddd"); foreach ($arrWork as $data) echo "$data\n"; 実行結果 2004年5月13日,1234566 aabbcccddd 手元のWindowsXP+PHP 5.2.8では、以下の実行結果となり、当方はこちらの結果を想定してプログラミングをしています 実行結果 2004年5月13日 1234566 aabbcccddd おそらく文字コード関連だと思うのですが・・ なお、.phpファイルの文字コードは全てUTF-8で統一して有ります
mbstringの文字コードも設定しなきゃ
正規表現
448 :
nobodyさん :2009/08/14(金) 23:23:54 ID:vkQArbxO
ありがとうございます とりあえず以下を試して見ましたが結果は変わりませんでした ini_set(default_charset,"UTF-8"); ini_set(mbstring.internal_encoding,"UTF-8"); 他にも設定があるのかな・・ phpinfo()で確認したところ、サーバはEUC-JPでした
449 :
nobodyさん :2009/08/14(金) 23:36:35 ID:Tors7Awt
S-JISでスクリプトのファイル保存してるだろ
explode()使ってみても同じ?
言葉足らずだったかな。 S-JISでスクリプトのファイル保存してるだろ いま自分とこでテストしたら UTF-8で保存したら正しくて、S-JISで保存したら上記間違いと同じ結果になったよ。 なんか日の漢字コードとコロンのコードとの絡みでおかしくなってるのだとおもうよ。 結論:UTF-8で保存しなおせ
452 :
448 :2009/08/15(土) 01:30:41 ID:DUbarFt/
色々ありがとうございます
>>450 explode()、またはsplit()ならうまく行きました
ただマルチバイトに対応してるわけじゃない(と思う)ので気持ち悪いですね
"日,"だけの定型なら良いんですが、上の文字列と同時に日本語文字列も扱ってるので、ううむ・・
>>451 念のためサーバ上で確認しましたが、やはり全てUTF-8でした
しかしSJISで保存すると似た症状になるんですね、ややこしいなあ
453 :
451 :2009/08/15(土) 01:57:21 ID:???
こっちでそのソースコピってUTF8で保存、動かしたら 普通に動くのだけれどもね。
PHPで次のファイルを消すにはどうすればよいですか? ※.Netで言うところのFile.Delete(ファイルパス)みたいな関数はありますか? ./HOGE/TEST.JPG
unlink()とか?
unlink(/home/);
>>456 10年間撮り貯めた子供の写真が全部消えました・・・
458 :
nobodyさん :2009/08/15(土) 05:32:44 ID:YpOdOwqF
>>452 PHPコード上で
echo mb_regex_encoding();
とかで本当にUTF-8になってるか調べたり
mb_internal_encoding("UTF-8");
とかしてみたりしても同じ?
459 :
448 :2009/08/15(土) 08:21:22 ID:DUbarFt/
まず先にぐぐろうよ。
461 :
nobodyさん :2009/08/15(土) 13:01:22 ID:oRoHSHUF
<?= $hogehoge ?> こういう変数の出力方法はなんと呼ばれていますか? 上記書式で出力できるサーバとできないサーバがあって、原因や違いを調べています。 出来た方のサーバ 【OS名】Centos5 【PHPのバージョン】php バージョン不明 (今遠隔地にあって電源も切ってるので、弄れません) 出来なかった方のサーバ 【OS名】 WindowsXP +XAMPP 【PHPのバージョン】php5.3.0 PHP 出力・表示などでぐぐったのですが見つかりませんでした。 よろしくお願いします
マニュアルに書いてあるよ
464 :
nobodyさん :2009/08/15(土) 15:09:04 ID:oRoHSHUF
>>463 php.iniの設定を書き換えて出力できるようになりました
どうもありがとうございます。
どちらかというとApacheで何とかしろよという気がするな
>>467 ヒントをお願いします。
Apacheでも結構です。
Apacheのディレクティブのマニュアル読め
470 :
nobodyさん :2009/08/15(土) 22:31:47 ID:YpOdOwqF
forbiddenを知ってんのになに言ってんだ...。
472 :
nobodyさん :2009/08/16(日) 04:39:45 ID:K6eLO5dl
473 :
nobodyさん :2009/08/16(日) 08:42:22 ID:Lr9z6CdZ
GET,POST,COOKIEそれぞれに異なるセッションIDが格納されていた場合 どの順で有効になりますか?
GETとPOSTは一緒に出来ねーだろ
postするurlに?hoge=fuga付けたらできるでしょ?
>>473 PHPは COOKIE → GET の順で探して
セッションキーが存在しなければセッション開始せずに
POSTは自前で指定しないとダメなんじゃないか?
配列変数について質問です。 【OS名】FreeBSD6.x 【PHPのバージョン】php5.26 【連携ソフトウェア】postgres 変数 $a に下のような値がセットされていて、 $a[0][id] = 5 $a[0][name] = 山田 $a[1][id] = 7 $a[1][name] = 鈴木 $a[2][id] = 14 $a[2][name] = 山下 これを $a[id] = 名前 のように変換する関数はありますでしょうか? $a[5] = 山田 $a[7] = 鈴木 $a[14] = 山下 よろしくお願いします。
単純に foreach ($a as $b) { $c[$b['id']] = $b['name']; } でいいんじゃね。 DBのAPIによっては1番目のカラムをキー、2番目のカラムを値として 取得するメソッドがあることもあるよ。 1行ずつfetchする時に組み替えてもいいし。
479 :
477 :2009/08/16(日) 13:01:35 ID:???
必死だな
何が?
夏です
484 :
nobodyさん :2009/08/17(月) 10:52:23 ID:XUMXmNvO
起動すると指定ファイルを送信するものをcronで定期的に回したいと考えてますが ファイルのアップロードするものを替えれば出来るのではないかと考えてます。 受け側はpostで来たものをmove_uploaded_fileで受け取ればいいと思ってますが、 送信元にform methodを書くとsubmitしなければいけないのでcronで実行するだけではダメな状態です。 formではなく何か関数でファイルを送るようなものがPHPにあれば助言もらえないでしょうか。
HTTPリクエストでもFTPでもscpでもできるので何で送りたいかが問題かと
>>484 もうちょっと詳しく。それぞれのOSは?
送信元サーバからphpで、送信先サーバへファイルをpostするって事?
phpではなくrsyncで事足りるような気がする。
488 :
484 :2009/08/17(月) 11:28:26 ID:XUMXmNvO
説明不足で申し訳ない。
それぞれのサーバはCentOSです。
やりたい事は
>>487 さんの言ってることなんですが、レンタル鯖なのでrsyncを入れたりってことが出来ないです。
実際に送るファイルはzipファイルになります。
489 :
487 :2009/08/17(月) 11:51:52 ID:???
>>488 それなら、ftpでいいんじゃないか?
phpだとftp_connect・ftp_login・ftp_put 等で検索するとサンプルがたくさんでてくると思う
491 :
488 :2009/08/17(月) 12:21:28 ID:XUMXmNvO
>>489 FTPなくてブラウザからアップするタイプのサーバなのでFTPダメっぽいです。
>>490 よくわからないけど火壁の問題でもらいに行くのはアウトみたい。
あくまでリクエストに対してレスポンスを返すってのがデフォルトみたい。
じゃあサーバ替えろよっていわれそうですが、FTPなくても問題ないしそれ以外では満足してるので
この点だけ出来ればOKだと思ってます。
ftp_connectみたいなのでhttpとかhttpsがあればいいのかな。
もうメールで添付しちゃえよw
HTTP_Client::post()かな
494 :
488 :2009/08/17(月) 13:00:17 ID:XUMXmNvO
>>492 メールでもいいんですけど、両方とも鯖ってこととメールがないので難しいですね。
>>493 Pearが入ってたかどうか確認しないといけないですが、外部モジュールを使用せずに
PHPの機能でやるってのは難しそうですね。
submitなしで送るのは困難と考えていいのでしょうか。
rsyncじゃだめなのか?
496 :
488 :2009/08/17(月) 13:12:34 ID:XUMXmNvO
>>495 自分の鯖じゃないのでモジュールの追加とかが厳しいですね。
なのでPHPとかでやりとりできれば比較的そういった事を気にしなくてもいいかと思ってました。
>>494 できるよ。PEARだってPHPのネイティヴ関数使ってるわけだし
498 :
488 :2009/08/17(月) 13:39:31 ID:XUMXmNvO
PearのHTTP_Client::post()は PHPの何らかの関数を(もしくは複数)を使用して実現しているという事ですね。 どの関数かは調べないといけないですが。
HTTP_Requestでいいんじゃ?
あああ
501 :
nobodyさん :2009/08/17(月) 21:12:59 ID:N8y+jQ14
<input type="file" name="upfile[]"> <input type="file" name="upfile[]"> みたいに同じnameのinputが複数ある場合 HTTP_REQUESTで、両方のupfile[]に addPostDataしてやるにはどのように記述すればいいのでしょうか? よろしくお願いします
502 :
nobodyさん :2009/08/17(月) 21:14:28 ID:jMCEI25H
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| /⌒\ .. .|
| (:::::::::::::::) .|
|===×二×===| 日本国旗を友愛しました
| (:::::::::::::::) .|
| \.__./ .. .|
|_________|
ノ´⌒`ヽ _
/|\ | ヽ γ⌒´ \ / ! /!ヽ
| l ヽ | ヽ // ""´ ⌒\ ) / | ,' / !
| ヘ ! ヽ i / \ / i ) ,' !_/ / j
', ヽ | l i (・ )` ´( ・) i,/ ! ', / /
', ヽ!≡ l l (__人_). | ! ≡ ! /
ヽ ≡ ! \ `ー' / l ≡ ! ,.'
\ ≡ | ,.-  ̄メ、_', = / /
\ ≡ ! /てノしイ_人人ノ、 ヽ /
\― |/ヽ ,イ- 、ヽ / イ´ ̄ ̄ヽ_/
\ ヽ/ l ヽi / ̄`!
【党首討論】 麻生首相 「民主党の党旗、日の丸切り刻み作成…」→鳩山氏「神聖マーク、きちんと作らねば」→民主HPから写真削除★12
http://tsushima.2ch.net/test/read.cgi/newsplus/1250507570/l50
ついに他党の党旗暮らしか突っ込むところ無くなったのかw
国家の旗だろ
function flag()
>>501 upfile1、upfile2みたいにするしかない
507 :
nobodyさん :2009/08/18(火) 11:54:02 ID:vguzrODx
PHP5.3をインストールしたのですが、急に「Deprecated」エラーが表示されるようになりました。 error_reporting(E_ALL & ~E_DEPRECATED);と記述すれば表示されないと聞き、記述してみましたが表示されてしまいます。 error_reporting(E_ALL & ~E_DEPRECATED); var_dump(error_reporting()); 出力:int(22527) error_reporting(2); var_dump(error_reporting()); のように、Warningだけ表示させるようにしてもDeprecatedエラーが表示されてしまいます。 どのように対処すれば良いのでしょうか。
なるはずだよ。 その上でエラー出てるんじゃない?
509 :
nobodyさん :2009/08/18(火) 12:24:48 ID:vguzrODx
ちなみに出る部分はPEAR::DBとPEAR::PEARです。 これの=&を全て=にしたら解決しそうなんですが、それで何か支障とか出ないですかね。
出ないと思うよ
>>509 そのエラーは構文解析時に出る
PEARをrequire/includeする前にerror_reporting()を実行しているかい
512 :
nobodyさん :2009/08/18(火) 20:51:21 ID:4p9NHHkL BE:39461344-2BP(931)
配列についての質問です。 $s[data] = array(); とし、フォームに入力された値から、 $s[data][name]に名前を、 $s[data][age]に年齢を、 $s[data][sex]に性別を代入して、 “少なくとも1つ以上のフォームに入力された場合の処理”を記述するためのif文で、 if( !empty( $s[data] ) ) { ・・・ } と条件指定したのですが、入力の有無に関わらず実行されてしまいました。 原因を調べたところ、入力の有無に関わらず、 $s[data]の中には$s[data][name]と$s[data][age]と$s[data][sex]という 要素があると認識されてしまっていたためのようなのですが、 どうにかして、うまく条件指定する方法はないでしょうか?
if ( isset($_POST['name'])===true ){ $data = array( 'name' => $_POST['name'], 'age' => $_POST['age'] ); } こんな感じで入力があったときだけ変数を作って if( isset($data)===true ){ 処理 } 変数がセットされてたら処理するようにしたらいいよemptyはissetより動作が遅いし
514 :
512 :2009/08/18(火) 22:31:12 ID:??? BE:22197233-2BP(931)
>>513 レスありがとうございます。
1度の処理ですべてのフォームの値チェックをして、
漏れなどの記入ミスがあった場合はその旨を表示しつつ、
再度入力フォームを表示する(その際、問題なかった欄については初期値として表示させる)。
という動作をさせたいのですが、それだと、
名前欄に入力があったのみにしかチェックを行なえなくなりますよね。
配列の“要素が配列”である場合、その、“要素である配列”に、
要素が入っているかどうか調べることはできないんでしょうか?
>>514 <form action="" method="post">
<input type="text" value="" name="name" />
<input type="text" value="" name="age" />
</form>
たとえばこんなフォームがあっとして
これをnameだけ"test"と書き込んで送信したらPHPで受け取るデータは
$_POST['name'] = "test" //文字列
$_POST['age'] = "" //空の文字列
になる。ただしcheckbox等はチェックしてなかったら送信されない
516 :
512 :2009/08/18(火) 22:47:03 ID:??? BE:19731124-2BP(931)
>>515 レスありがとうございます。はい、それは理解できています。
今僕がやりたいのは、
if( 1つ以上の項目に入力されている ) {
全項目の値を、入力漏れや記入ミスなどそれぞれチェック
}
というものなんですが、そうなると、たとえば
>>512 の変数を用いて、
if( isset($s[data][name]) || isset($s[data][age]) || isset($s[data][sex]) ) {
それぞれのチェック処理
}
のように、全変数に値があるか否かを判断して、
1つでも値があったら・・・って言う方法しかないんでしょうか?
実際のフォームは
>>512 のように3個の項目しかないわけではなく、
10個とかたくさんあるので、見栄え的に汚くなってしまうため、
どうにかきれいに表現できないかな、と思ったのです。
>>516 count($array)で配列の数を数えられるけどだめかな
518 :
nobodyさん :2009/08/18(火) 22:51:23 ID:7JFUjPwR
>>516 なんでそんな複雑な配列にするのか?ってことが言いたいんじゃないの?
>>515 が理解できてりゃ悩まないと思う
見栄えねぇ。そういうのはある程度知り尽くした分野で自分で追求しなよ
スレタイ読んでくれたらうれしいね
521 :
512 :2009/08/18(火) 23:01:02 ID:??? BE:29595762-2BP(931)
>>517 レスありがとうございます。
$s[data]の中には $s[data][name],$s[data][age],$s[data][sex]
という3つの要素があるとみなされてしまうようで、
count($s[data])とやると、常に3という値が返ってきてしまうのです。
>>518 レスありがとうございます。
1つのスクリプトで、
・データ入力
・入力された値をチェック
・すべて正しく入力できていればMySQLへ書き込み
という処理をすべてしたいため、セッション変数を用いて場合わけしています。
そのためどうしても、1つ以上の項目に入力されている場合は〜、
という条件指定が必要なのです(僕の知識の範囲内ではですが)。
522 :
512 :2009/08/18(火) 23:04:55 ID:??? BE:118383168-2BP(931)
ちっさなclass書けばいいじゃん。見栄えも今風だしw
524 :
ひろゆき :2009/08/18(火) 23:07:55 ID:???
あ
1行では無理かもね
ifの中だけでチェックするならこんな感じかな もはやネタの領域だが if( $res = (function(){ global $s['data']; $c = 0; foreach($s['data'] as $value){ if(is_string($value)){ if(strlen($value)>0){ $c++; } } } return $c; } ){ 処理 }
$profile_check_array = array( "name" => "名前", "age" => "年齢", "sex" => "性別" ); //配列のキー取得 $check_array_kyes = array_keys( $_POST ); //定義した配列分まわしてチェックする for( $i = 0; $i < count($check_array_kyes); $i++ ) { $cach = array_key_exists( $check_array_kyes[$i], $_POST ) ); if( $cach == false or $_POST[$check_array_kyes[$i]] == "" ) { "はいってないー"; } } あとの調理はどうぞ。
528 :
512 :2009/08/19(水) 00:09:42 ID:??? BE:59192238-2BP(931)
>>526-527 うおっ、ありがとうございます。
そこまでいくと、
>>516 のようにしたほうが見栄えもいいんじゃないか、
って言う話にもなってきそうですが、
僕の知識的にはなかったものなので、勉強させていただきます。
わざわざありがとうございました!
本当にくだらない質問ですいません。 自分のサイトにメールフォームを設置していて 動作テストはFirefox3.0以降、IE6・7、OPERA、Google Chorome,Safari で確認済みです。 ですが、月に1回くらいの頻度で文字化けしたようなメールが来ます。 こんな感じです。 [御社名] AlRJUkXCXfAKfsG [ご担当者名] XaXcsANiTi [メールアドレス] ZuACulytkH [ご住所] lMfvCbGQJ [お電話番号] BsffuuhnL アドレスはいつも@マーク以下がsv602.lolipop.jpです。 ちなみに私が使っているサーバはロリポップです。 せっかく問い合わせが来てるのに逃してるのか 単なるエラーかはっきりさせたいのでぜひお願いします。
自動のコメントスパムぐらいにしかみえんな 心配ならphpスレに書き込んでいるのだからphpのメールフォーム先のスクリプト読んで 挙動確認すればいいとおもう。
>>529 スパム以外なら文字コードの問題かなISO-2022-JPっぽい
スパムだろ。
>>529 あれ?IDが???になってますね
気のせいですか?
534 :
nobodyさん :2009/08/19(水) 13:13:50 ID:Ph4gYam8
Calendar-0.5.4.tarを解凍すると、意味不明なファイルになってしまいます。 本来ならディレクトリ階層のファイルになるはずです。 package.xml^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@100664 ^@ 764 ^@ 764 ^@ 40416 11120534466 6416 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ 〜
535 :
nobodyさん :2009/08/19(水) 13:20:17 ID:rHPCm5Kh
すいません、質問いいですか? 【OS名】 linux 【PHPのバージョン】php5.1.6 【WEBサーバ】 Apache 【質問内容】 function send_to_smart($data1, $data2 ,$mode){ //パターン1 if($mode+0 == 0){ $request = "GET /aaaaa/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n"; send_request($request); //パターン2 }elseif($mode+0 == 1){ $request = "GET /bbbbb/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n"; send_request($request); } $fp = fsockopen("*****.jp",80); fputs($fp, $request); while (!feof($fp)) { $line .= fgets ($fp,128)."\n"; } fclose ($fp); } 上記の感じでソケット送信のプログラムを作ってます。 ・パターン1と2で別々にデータを送信してる ・2回とも情報送ってるはずなのに、受け取り側ではパターン1しか受け取れてない。 ・パターン2はデータが入っていないのではなく、リクエスト自体が来ていない。 ・2回ともレスポンスは取れている。ソケットオープンも問題なし。 パターン2で送れない理由がさっぱりわかりません。 これで、なんか原因や解決策判ったりしますか?
マルチですか
537 :
nobodyさん :2009/08/19(水) 13:38:37 ID:rHPCm5Kh
他のスレに同じ質問はタブーだったのか。 知らなかった、気をつけます。
538 :
nobodyさん :2009/08/19(水) 13:56:22 ID:rHPCm5Kh
記述間違ってました。 マルチはもうしないんで教えてください。 結構困ってるので 【OS名】 linux 【PHPのバージョン】php5.1.6 【WEBサーバ】 Apache 【質問内容】 function send_to_smart($data1, $data2 ,$mode){ //パターン1 if($mode+0 == 0){ $request = "GET /aaaaa/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n"; //パターン2 }elseif($mode+0 == 1){ $request = "GET /bbbbb/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n"; } $fp = fsockopen("*****.jp",80); fputs($fp, $request); while (!feof($fp)) { $line .= fgets ($fp,128)."\n"; } fclose ($fp); } 上記の感じでソケット送信のプログラムを作ってます。 ・パターン1と2で別々にデータを送信してる ・2回とも情報送ってるはずなのに、受け取り側ではパターン1しか受け取れてない。 ・パターン2はデータが入っていないのではなく、リクエスト自体が来ていない。 ・2回ともレスポンスは取れている。ソケットオープンも問題なし。 パターン2で送れない理由がさっぱりわかりません。 これで、なんか原因や解決策判ったりしますか?
乙
ファイルがないとかでレスポンスヘッダしか帰ってこないとかじゃね 自分はこんな感じで関数作ってるけど function httreq($url){ if(is_string($url===true)){ $headers = array( 'Host: '.parse_url($url,PHP_URL_HOST), 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1', 'Accept-Language: ja,en-us;q=0.7,en;q=0.3', 'Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7' ); $options = array( 'http' => array( 'method' => 'GET', 'header' => implode("\r\n",$headers), ) ); return file_get_contents($url, false, stream_context_create($options)); }else{ return false; } }
if(is_string($url===true)){ は if(is_string($url)===true){ だったすまそ
if(is_string($url===true)) なにこれ
ちなみにis_stringはboolで返ってくるのに===する意味あんの?
無いよ、厳密な比較が好きなだけ
そうだね、将来的に返り値がintになるかもしれないしね
546 :
538 :2009/08/19(水) 14:24:18 ID:rHPCm5Kh
うーん、やはり詳細なデータを入れないとだめなんですかね? あ、一つ書き忘れてました。 これ携帯用です。
面土居からテストすらしないんだけど 一応聞くがこの関数のmode値変えて2回呼び出してるんだよな?
>>538 よくわかんないけど$mode+0ってなに?
549 :
538 :2009/08/19(水) 14:46:00 ID:rHPCm5Kh
はい、そうです。 send_to_smart($data1, $data2 ,0); と send_to_smart($data1, $data2 ,1); で呼び出してますね
551 :
538 :2009/08/19(水) 14:51:05 ID:rHPCm5Kh
>>548 $mode+0で変数の型を数値に強制変換してます。
まぁ、今回$modeには元々数値しか入ってないんですが、クセですな。
ちなみにテキストに強制変換する場合は$mode.''です。
$mode内が1でもこの場合テキストと判断されます。
>>551 世の中にはキャストという便利なものがあってだな
>>551 関数内で強制変換とかバグ入り込みやすいコーディングしてんじゃねえぞksg
関数に渡す前に数値化しろよ
554 :
538 :2009/08/19(水) 15:14:25 ID:rHPCm5Kh
関数内での強制変換はよろしくないのか・・。 了解、そのやり方は使わないようにします。 というか レスポンスが返ってくる=データが送られている っていう認識だったんだけど違いましたっけ?
レスポンスヘッダは捨てられてレスポンスボディだけを受け取る 304(更新無し)とかだと下のような感じでレスポンスヘッダのみ帰ってくる HTTP/1.x 304 Not Modified Date: Wed, 19 Aug 2009 06:36:52 GMT Server: Apache
556 :
nobodyさん :2009/08/19(水) 15:46:17 ID:gdnF9G1d
CentOSでyumでPHP5.2.6を入れたのですが、 extension_dir = "/usr/lib64/php/modules" となっていたので中を覗いてみると dbase.so json.so mysql.so mysqli.so pdo.so pdo_mysql.so pdo_sqlite.so phpcups.so zip.so しかありませんでした。 ほかのモジュールはどこにあるのでしょうか・・・それともこれしかないのでしょうか。
yumだからじゃね?
>>556 yum search php
で探してみるとか。
というか何が必要なんだ?
>>556 てめえなめてんのか!
5.2.6なんて古いだろ!バージョンアップしろよ!
PHPナメ杉ksgkg!
560 :
nobodyさん :2009/08/19(水) 16:21:06 ID:gdnF9G1d
ありがとうございます。 Windowsでのdllではphp_fileinfo.dllに値するものです。
yumでインストールすると伸びませんよ 自分でソースコードから入れましょう
yumベースで他のも管理してるなら、別にyumを避ける理由ないだろw
yum信者きめえ
面倒なのでぜんぶWebmin任せ。
みんなすごいな、俺見習中だけどもPHPすらわからん。 ジャヴァスクリプトだのAjaxだの絡んでますますわからん。 向いてないのが良くわかった。
>>560 yum install php-pecl-fileinfo
でどう?
あなたの環境でもあるかどうかわからんけど。
567 :
nobodyさん :2009/08/19(水) 18:01:39 ID:gdnF9G1d
ありがとうございます。 その方法でfileinfoをインストールできました。 モジュールの中にしっかりfileinfo.soを確認しました。 ですが、 Call to undefined function finfo_open のエラーが出てきてしまいます。 httpd -k restartで再起動もかけましたが症状は変わらずです。 php.iniでは、ディレクトリの中身丸々モジュールを読み込んでいるようでした。 この場合はどういった原因が考えられるのでしょうか、宜しくお願いします。
>>567 >php.iniでは、ディレクトリの中身丸々モジュールを読み込んでいるようでした。
そんな指定できたっけ?
どの箇所?
普通に、php.iniに
extension=fileinfo.so
が要るんじゃないかな。
569 :
nobodyさん :2009/08/19(水) 18:15:53 ID:gdnF9G1d
>>568 extension_dir=ディレクトリ名
で、その中のモジュールは全て読み込んでくれませんでしたっけ?
ちなみに
extension=fileinfo.so
でも
extension=/usr/lib64/php/modules/fileinfo.so
でも読み込んでくれませんでした・・・。
>>569 >extension_dir=ディレクトリ名
は、ベースディレクトリの指定だと思うよ。
>extension=/usr/lib64/php/modules/fileinfo.so
こう書かなくて済むように。
で、読み込まれなかったというのは、apache再起動しても
Call to undefined function finfo_open
になったということかな?
/usr/lib64/php/modules/fileinfo.so
が実際に存在しているのは確認ずみ?
あ、ちなみに実際にcentosで試して回答しているわけではないから何か外しているかも。
571 :
nobodyさん :2009/08/19(水) 18:31:34 ID:gdnF9G1d
はい、確認しました。 extension_dir = "/usr/lib64/php/modules" extension=fileinfo.so pwd -> /usr/lib64/php/modules にて「fileinfo.so」を確認 httpd -k restartにてApacheの再起動
572 :
nobodyさん :2009/08/19(水) 18:36:20 ID:gdnF9G1d
Apacheのerror_logを確認したところ Unable to initialize module\nModule compiled with module とあったので検索してみると どうやらコンパイルでインストールしたphpとyumでインストールしたphpが共存しているのが問題みたいでした。 ですので、一度PHP関係を削除してインストールしなおそうと思います。 ありがとうございました。
573 :
nobodyさん :2009/08/19(水) 20:10:10 ID:I0IT/dw1
会社で公開してるシステムで再現性なしのエラーが見つかった ただ単純にpublic/user/のファイルからpublic/admin/のインデックスに移動 admin側でuserのとこで発行したセッションをキーにDBからデータを引っ張ってきて どうたらこうたらしてるだけのはずなんだけど ある利用ユーザが入れないらしい ただ、そのユーザのID借りても入れたし、 ブラウザやいろんなテストID使っても 一回だけしか再現できなかった こんな再現性がない不具合が見つかった場合、 どんなふうに原因を探すものなのでしょうか?
エラー起きたときに変数全部テキストかDBに保存するようにしたらいいんじゃね
ログイン周りといえばクッキーだろうか
576 :
nobodyさん :2009/08/19(水) 20:26:06 ID:I0IT/dw1
エラーがでたら は ありですね 具体的になにがエラーになってるのかは不明なんですけど、やってみようかと思います ちなみにクッキーは怪しいと思ったけど、セッションIDしかなかった
577 :
nobodyさん :2009/08/19(水) 20:45:43 ID:ECQ6gete
phpでFlateDecodeって扱える?
578 :
nobodyさん :2009/08/19(水) 22:24:32 ID:ECQ6gete
zlibの ・gzdeflate ? 文字列を deflate 圧縮する ・gzinflate ? deflate圧縮された文字列を解凍する これがFlateDecodeなのかな?
exec("zip");
ファイルにログを書き込んでいるのですが、更新順に読み込むには どうすれば良いでしょうか? ログファイルをスタックのように扱いたいです。 ファイルポインタを先頭に置くと一行目が上書きされていますので、しょうがなく 終端に置いて書き込んでいるのですが、そうすると逆から読み込まなければいけなくなっていしまいます。 ログの表紙形式としては、 2009/08/20 更新 2009/08/19 更新 2009/08/18 更新 のように降順に表示したいです。 ログがどのぐらいの量になるかわからないので、いったん配列に読み込んで、それから 逆順に出力するのも変な気がします・・・。
つスレタイ
下らなくない質問は余所でやれ。
>>580 データ全部読み込んでから、先頭に書いて元からあったデータを追加とか。
DB使ったほうがいいんじゃね。
あと
>>1 呼んでID出せ
>>580 ログを書き換えるということと追記は意味が違うよ
ログがどのくらいの量っていったってメモリを食いつぶすような量にはならないでしょ
もしも問題になるほどの量ならそもそも管理方法に問題がある
585 :
580 :2009/08/20(木) 15:44:42 ID:2mPTkGjX
レスありがとうございます。
ID出すの忘れてました。
>>583 DBをいじるのはあまり慣れていないので・・・・。
>>584 配列に読み込んでも大丈夫でしょうか・・・・。
ファイルポインタを終端に置き、そこから逆に先頭まで一行ずつ読み込むのは
無理でしょうか?
そしたら文章逆になるやん
>>580 $logfile = "example.txt";
$write = "追加したい文字";
$lines = file($logfile,FILE_IGNORE_NEW_LINES);
foreach($lines as $value){
$add .="\n".$value;
}
if(($fp = fopen($logfile,'a'))!==false){
fwrite($fp,$write);
fclose($fp);
}else{
return ("書き込みに失敗");
}
こんなかんじで
>>585 file_get_contentsつかってStringに読み込めばいい
それで先頭に新しいログ\nつけたしたものを
ファイルを書き換え(一旦中身消して)すればいい
$add .="\n".$value; は $write .="\n".$value; だスマソ
使い回せるようにfile使ったけど単に追記するならfile_get_contentsのほうがよかったかな
>>580 ファイルにどれくらいの行数を保存しようとしているんだ?
万単位になるならデータベースを使うのがいいと思う
格納するデータが少ないのであれば
態々降順にファイルを書かなくても最後に追記
ファイルを配列に格納>降順ソート>foreachで十分じゃないのか?
下手な小細工するよりこっちの方が早いと思う
592 :
580 :2009/08/20(木) 16:38:09 ID:2mPTkGjX
皆さんレスありがとうございます。
>>588 に書かれているやり方で、読み込みは先頭からするのが一番簡単ですかね・・・。
>>591 あまり決まっていないので、更新した内容があれば延々と書き続けると思います。
ただ、古いログは消しても支障ないので、あまりにも増えてしまったら消してしまう予定です。
593 :
580 :2009/08/20(木) 17:16:35 ID:2mPTkGjX
無事成功しました。 ありがとうございました。
594 :
nobodyさん :2009/08/20(木) 18:01:55 ID:WKWR+oFl
Apacheが起動しません。 error_logを見ると PHP Warning: PHP Startup: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in Unknown on line 0 PHP Fatal error: PHP Startup: Timezone database is corrupt - this should *never* happen! in Unknown on line 0 と書かれています。 [root@localhost]# httpd -k start [root@localhost]# 起動時にはエラーは出ませんが、実際は起動されていません。 上記のエラーが書き出されます。 PHPの問題なのかApacheの問題なのかOSの問題なのかすらわかりません。 似たようなエラーでは、php.iniのdefault.timezone=ASIA/Tokyoで解決してありますが、 こちらはそれでも解決しないです。
php.iniが読みに行けてないとみた。
596 :
nobodyさん :2009/08/20(木) 18:14:50 ID:WKWR+oFl
# PHP.ini Dir PHPIniDir "/etc" のように、php.iniの場所を指定してあげましたが、 やはりエラーが出てしまいます。
Apacheを再起動してないとみた。
default.timezoneがそもそもおかしいとみた。
HDDがいかれてると見た
600 :
nobodyさん :2009/08/21(金) 00:10:47 ID:e3oLJKKb
【OS名】centOS 【PHPのバージョン】php5.2 【質問内容】 mbstring.http_inputにSJIS mbstring.internal_encodingにEUC-JP のような設定です。 AjaxのページからのリクエストはUTF-8になってしまうので、 $_REQUESTに入るパラメータの自動文字コード変換をしたくないのですが、 方法ありますでしょうか? mb_convert_encoding($_REQUEST["TEST"],"SJIS","EUC-JP"); で戻そうかと思ったのですが、 たまに文字の一部が消えてしまいます。
PHPはUTF-8が標準、json_encodeとかいくつかの関数はUTF-8でしか受け付けない
PHPの自動変換って無効にするのが基本かと思ってた
603 :
nobodyさん :2009/08/21(金) 06:39:37 ID:1d2neVQK
HTTP_Requestで、POSTフォームのあるページにアクセスするときに、 valueしてあるところは弄らなくていいかなぁと思って(radioボタンとか)、 必要なフォームだけaddPostDataでポストしといたのですが、 結果は、スルーしたポストフォームは全て空になってしまいました。 クライアント側のブラウザに依存して判断しているからだと思うのですが、 これがもしもvalueで選択済みのフォームが大量にあった場合、 HTTP_RequestするときはaddPostDataも その数だけ指定しなければならないのでしょうか? value済みフォームは有効になるような都合の良いHTTP_Request関数などないでしょうか。 よろしくおねがいします。
value済みフォームって何?
605 :
nobodyさん :2009/08/21(金) 12:11:07 ID:PCqrhdqr
$hairetsu = array("test" => "pong","ok" => "ng"); test.logに"array("test" => "pong","ok" => "ng");をそのまま文字列として書き出したいのですが、やはりいちいちクォートして書き込むしかないのでしょうか?
シングルクォーテーションがあるじゃない
変数に格納された記述をそのまま出力する関数があるから探してみ
608 :
nobodyさん :2009/08/21(金) 12:24:19 ID:PCqrhdqr
>>606-607 var_export($hairetsu,TRUE);
でいけました。
ありがとうございましたm(__)m
>>605 str_replace("\n","",print_r($array,true));
610 :
nobodyさん :2009/08/21(金) 14:22:44 ID:WhelcFIU
質問します。幼稚園の年間イベントをまとめるアプリを作ります。 遠足などのイベントのページに、参加した子供たちを組分けして出力します。 (イベント名の見出しの下に、A組の参加生徒出力、B組の参加生徒出力、C組の… という形) 利用するテーブルは ○table1 イベント情報テーブル id, eventName, eventDay ○table2 参加した生徒テーブル id, evId, studentName, kumi です。 この状況で、table1.id=table2.evIdという条件でJOINし、SELECTのクエリ(以下)を実行して参加生徒を抽出するんですが、 SELECT table1.*, table2.evId, table2.studentName, table2.kumi FROM table1 LEFT JOIN table2 ON table1.id=table2.evId WHERE table1.eventName = '○○山の遠足'; どうやって組ごとにまとめて出力したら良いのか迷っています。(クエリの結果は当然、全ての組を含んでいます。) 自分の考えでは、 1)クエリ結果に対してforeach 2)それぞれのtable2.kumi値を取得して 3)重複を省きながら$kumiAry配列にpush 4)出来上がった$kumiAryの値をキーにしてリスト出力 という流れです。 しかし、もっとマシな効率的なやり方ないでしょうか? クエリを書き換える必要があれば、それも教えていただけると嬉しいです。 よろしくお願いします。
611 :
610 :2009/08/21(金) 14:23:55 ID:WhelcFIU
すみません、書き忘れました 環境は php5.2.6 Mysql5 です
クエリ結果に対してforeachかけなくても、クエリ結果から1件ずつ取得する時に while ($row = fetchする関数()) { $students[$row['kumi']][] = $row; } と連想配列に入れればいいのでは。 あるいは、幼稚園規模なら組ごとにクエリ発行してもいいと思うけど
私だったら ORDER BY table2.kumi,table2.studentName って並べ替えしておいて前の処理とkumiの値が変わってたらスタックを出力&クリアで 次の組に備えるとかやるかなぁ($oldkumiとか) つか少し気づいたとこは普通、生徒管理テーブル作ってstudentNameとkumiはそっちのテーブルだな。
そうだね。正規化してから始めた方がいいかも。
615 :
613 :2009/08/21(金) 16:28:52 ID:???
まぁ質問のために簡略化して書いてるのかもしれませんが。
616 :
nobodyさん :2009/08/21(金) 16:30:18 ID:o/Rwitrf
PHP5.3にFileinfoインスコしようとおもたらすでにパッケージに組み込まれてた 質問しようと思ったけど完全に独り言になってしまったぬるぽ
619 :
613 :2009/08/21(金) 17:12:10 ID:???
だって古いひとだものww
↓↓↓↓↓↓
では
>>617 が最先端の手法を
↓↓↓↓↓↓
糞スレ
最近まともな流れだったのに
>>617 お前しんでいいよ
自分の答えを言った上でケチつけろ
ケチつけるだけなら100年ROMってろ
お前もそうじゃん
>>622 どこが「そう」なのかkwsk
日本語理解できない人?
お前らまたやってんのか...。
とりあえず
>>617 は最先端の手法を頼む
↓↓↓↓↓↓
======糞スレ終了======
答えられないから終了にしたいんですねw なら最初から黙っとけよ
629 :
610 :2009/08/21(金) 18:13:11 ID:WhelcFIU
>>612-614 どうもありがとうございました
>>612 なるほどー、組をキーにした連想配列に入れて、そこから出力するわけですね
たしかにそっちのほうが楽かもしれない
>>613 すみません、スタックというのが理解できません。調べたんですがいまいちわからずで…
kumiの値を出力ごとにチェックして、例外(前のと違う)ときに次の組として処理し直すわけですね?
ちょっとやった事がない処理です。どうやったら良いのか考えてみます。。
もう一つ質問してもいいですか?
実はそれぞれのお返事をもらう前に、上で書いた自分なりの方法で「3)重複を省きながら$kumiAry配列にpush」を
とりあえずやっていたんですが、思ったように動きません。
$kumiAry = array();
foreach($allStudentAry as $key=>$value){
if(!in_array($kumiAry, $value['kumi'])){
array_push($kumiAry,$value['kumi']);
}
}
array_unique($kumiAry);
print_r($kumiAry);
結果、Array ( [0] => 3 [1] => 3 [2] => 3) と、思い切り重複してます。どこが問題なんでしょうか?
2つの方法で書き直す前に、スッキリしたいので教えてもらえると嬉しいです。
>>629 > すみません、スタックというのが理解できません。調べたんですがいまいちわからずで…
> kumiの値を出力ごとにチェックして、例外(前のと違う)ときに次の組として処理し直すわけですね?
> ちょっとやった事がない処理です。どうやったら良いのか考えてみます。。
基本的に上記の理解であってます。
1レコードづつ読み込んでは、出力用変数(メモリ)に出力形式なりで溜め込んで(これをスタックって言ってた)
kumi値が変わったところで溜め込んだものを出力。語弊を生むような語法を使ってしまいすいません。
>>617 に言われたとおり昔からあるデータベース読み込みの基本的なアルゴリズムですよw
631 :
607 :2009/08/21(金) 21:12:31 ID:???
>>608 いいってことよ
お礼は俺だけでいいよ606は関係なかったみたいだしw
スタックとかPHPでやるもんじゃなくね?
なんで? 配列でできるじゃん
634 :
nobodyさん :2009/08/21(金) 22:47:53 ID:PNbb36xj
◆質問です。
OS:windowsXP SP3 Pro
PHP:5.2.9
自PCに飛んでくるパケットをすべてキャプチャしたいです。
phpsnifferなるものを見つけて試したのですが、うまくいきませんでした。
(エラーは出ないが★部分で止まったまま何も起こらない)
http://eder.us/projects/phpsniffer/ ----------プログラマの主要な処理を抜き出したのが以下です。
$sock = socket_create(AF_INET, SOCK_RAW, SOL_TCP);
socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1);
$socks=array($sock);
$w = $e = NULL;
socket_select($socks, $w, $e, NULL);//★
socket_recv($sock, $packet, 65536, 0);
var_dump($packet);
-----------------------------
〜〜板いけ 〜〜のサイト見ろなどでも構いませんので
どなたか回答なりヒントをいただけないでしょうか。
635 :
477 :2009/08/22(土) 01:13:38 ID:???
tcpdump っておもったけどWindowsか、、
636 :
634 :2009/08/22(土) 02:01:56 ID:DV5PllOD
>>635 ヒントありがとう tcpdumpのwindows版でwindumpってのがあるみたい。
popenとの組み合わせでなんとかなるかも。
試してみます
637 :
nobodyさん :2009/08/22(土) 02:52:54 ID:h6KUXpBq
HTTP_Requestでcheckboxをチェックするのってどうやるのか教えてください
638 :
nobodyさん :2009/08/22(土) 02:56:11 ID:h6KUXpBq
自己解決しました
639 :
nobodyさん :2009/08/22(土) 14:15:17 ID:qs0RE9DR
クラスを定義したmyClass.class.phpをrequire_once('myClass.class.php')して実行し クラス中のメソッドを複数回実行してるんですが、最初の一回だけ動いて二回目以降は動きません。 なぜでしょうか? myClass.class.php ================================= class myClass{ function __construct(){ require_once("arrayList.php"); //配列リストの読み込み $this->musicGenreAry = $musicGenreAry;//$musicGenreAryはarrayList.phpに定義されてます } function func($aryName,$num){ if($aryName =="music"){ return $this->musicGenreAry[$num]; } } } 読み込む側の.php ================================= <?php function smarty_modifier_NUMtoTEXT($num,$aryName){ require_once("myClass.class.php");//記入値・登録値を取得するクラスの読み込み $myClass = new myClass(); echo $myClass->func($aryName,$num); } ?> すみません、続きます。
640 :
639 :2009/08/22(土) 14:39:16 ID:qs0RE9DR
639のつづきです 読み込み側の.phpを実行させるファイル test.tpl(smartyのテンプレートファイル) ================================================= <p> 好きな音楽は、 1){$rsGakki.music1|NUMtoTEXT:'music'} (※修飾子プラグインとして実行しています) 2){$rsGakki.music2|NUMtoTEXT:'music'} です </p> こんな感じです。 これで、1)ポップス とは出るものの、2) のあとに何も表示されず空欄になってしまいます。 なぜなんでしょうか。smarty修飾子プラグインのルールに何かあるんでしょうか? 検証として、別に用意した普通の .phpの中で、 $myClassObj->func('music',1)、$myClassObj->func('music',2)と したところ、ちゃんと目標の値を2つとも出力します。 smarty固有の問題ならsmartyスレで聞くべきなんですが、requireとかスコープとかで 間違ってるのかも知れないと思い、ここで聞きました。 例えば読み込み側.phpの、require_once()のタイミングはあそこでいいんでしょうか? 基本的におかしな事をしてるような気がして、自分ではわからない状態です。 色んなジャンルにまたがっててすみません。よろしくお願いします
requice_onceだから
642 :
639 :2009/08/22(土) 15:04:14 ID:qs0RE9DR
すみません、書き忘れましたが環境は PHP5.2.6、SMARTY2.6、CentOS5.3 です あと、今 function func($aryName,$num){ if($aryName =="music"){ print_r($this->musicGenreAry); //この行追加 print "abc"; return $this->musicGenreAry[$num]; } } したところ、print_rの結果を一度しか表示しないです(2回コールしてるので2回出るはず) print "abc";は二回出力します。 配列が吹っ飛んでるのかな? なぜでしょうか。。
643 :
nobodyさん :2009/08/22(土) 15:55:35 ID:TG4jntAz
>>641 ありがとうございます
今出先なので、帰宅したら試してみます!
644 :
nobodyさん :2009/08/22(土) 16:07:13 ID:zxIfIvf2
PDOのprepare()でDB関数をバインドすることは出来ないんでしょうか? イメージとしてはこんな形式で… $pstmt->bindParam(':foo', 'NOW()');
んなことしなくても、select now() as nowdate ; ってクエリをprepareして実行してnowdate ってカラムをとればいいじゃん。
bindParamって変数のバインドだぞ fooがNOW()という条件を作りたいならSQL文でfoo = NOW()と書きゃいいだけだろ 根本的に考え方が間違ってる
>>644 わざと出来ないようにしてると思ってもいいかも。
暇だから質問してこいよ fusianasaやって質問した奴は全部俺が答えてやる
やあ
650 :
nobodyさん :2009/08/22(土) 18:41:54 ID:kOYOIwI1
複数の画像がアップロードできてかるい、画像掲示板CGIって ないですかね
651 :
nobodyさん :2009/08/22(土) 19:18:40 ID:v9riHruT
return xml_parse(&$this->parser, &$data, true) ? $this->document : NULL; ってどういう意味でしたっけ?
652 :
651 :2009/08/22(土) 19:32:14 ID:v9riHruT
すんません、ただの分岐でしたね 申し訳ない
xml_parse関数の実装は知らん ?:は三項演算子。xml_parse関数の戻り値がtrueなら$this->documentを、falseならnullを返す。 文字列やら数値が返ってきた場合は、真偽値にキャストしてから判定する。0ならfalseとかな。
>>649 fusianasaって書いたらそのままそっくり言われた通りのことしかできないのはゆとりなんだよ
俺はfusianasanって書いてほしかったな
655 :
nobodyさん :2009/08/22(土) 20:33:26 ID:839IHuhx
初歩的で恐縮です。 郵便番号7桁の数字 1234567 を 123-4567 にしたいです。教えてください。
substr_replace($var, '-', 3, 0)
657 :
nobodyさん :2009/08/22(土) 22:16:18 ID:839IHuhx
>656 こんな関数あるんだな、初めて知った
>>656 2chにこんな親切な人がいるんだな、初めて知った
661 :
nobodyさん :2009/08/22(土) 22:32:21 ID:LFACnGww
ディレクトリのパスを取得する関数はありますか たとえば ./.../././ のようなパスを ../ に直したいのです
662 :
639 :2009/08/22(土) 23:07:01 ID:???
>>641 うまくいきました!
ありがとうございました
663 :
nobodyさん :2009/08/22(土) 23:14:03 ID:nZ+TC59g
fsockopen()とfwrite()つかってpost、getできるけど これってhttp requestでのpostと何が違うの 前者は、いちいち要求ヘッダ書くのが面倒くさいだけ?
>>655 俺ならもっと楽な方法を取る。
replace系使うまでもないかなと
$a = 1234567;
$[a][2]= $a[2]+"-";
えっ
なにそれ
123 + "-" + 4567 くらいにやってることの意味がわかりやすく伝わるコードじゃない限り、 どれでも大差ないって思っちゃうなー。
>>668 "/youtube\.\w+\/watch\?v=([\w-]+)/"
ドメインがyoutube.jpだったりwww.youtube.comだったりするのでこんなかんじかな
668
>>669 ありがとうございます。やりたい事が出来ました。
あと、正規表現について勉強をしているのですが、
"/youtube\.\w+\/watch\?v=([\w-]+)/"
のうち最後の「+」とは一体どういう意味なのでしょうか?
[〜]が範囲内の文字、[A-Z]でA〜Zの文字を指す \wが英単語つまり[a-zA-Z_0-9]と同じ意味 +は直前の表現が1個以上あることを示す。\w+ならa-zA-Z_0-9のどれかが1つ以上あとはググれ
672 :
nobodyさん :2009/08/23(日) 03:00:14 ID:RepkHWNs
PHP5つかってるんですが includeでindex?q=item&a=1&b=2みたいな引数を読み込む方法はありませんでしょうか? PHP4で絶対パス指定してた時代は出来たのですが! 怒ってます
>>671 ご丁寧にどうもありがとうございます。
ググって色々と勉強します。
675 :
nobodyさん :2009/08/23(日) 03:30:00 ID:RepkHWNs
>>674 はい4は読んでました。
たとえばキーワードで複数のAPI組み合わせてサイト作る機会って意外と多いと思うんですが
みなさんどうしてるんでしょうか。
PHP4に戻してCGI版PHP5にすればいけそうですか?
677 :
nobodyさん :2009/08/23(日) 04:01:33 ID:RepkHWNs
>>676 マジですか?それとも軽くあしらう感じの答えですか?マジだったらありがとう
PHP6や7になっても4を使い続けるつもりなら良いだろう
679 :
nobodyさん :2009/08/23(日) 04:07:32 ID:RepkHWNs
そんなつもりないです 時代の波にのりたいです
そうかそうか
includeする側でなんか変数に設定する っていうのでできると思うのだけども それは求めてるものとは違うんだろか?
って、$_GETとか$_REQUESTで一発かー。 >たとえばキーワードで複数のAPI組み合わせてサイト作る機会って意外と多いと思うんですが いまいち言いたいことが分からないなー。
683 :
nobodyさん :2009/08/23(日) 12:04:55 ID:AfcVjQ+e
localhostで実験しているときも、 自分のグローバルipを取得したいんですが、 何か簡単な方法ないでしょうか。 $_SERVER["REMOTE_ADDR"]すると127.0.0.1になってしまうんです。 よろしくお願いします。 windowsです。 (phpはapacheでlocalhost以外では実行できない設定にしてあります) exec("ipconfig")とやってみたらDefault Gatewayという項目しか出てきませんでした
外のサーバに問い合わせなさい
もうすぐ5マンアクセス突破 そーいえばWEB魚拓やりたいけど容量がパンクしちゃう!! とサガットさんが嘆いてました。
>>669 それだとnetにもひっかかるわな
悪意を持ってる人物がnetとかplとか空いてるドメインを見つけて使うかもしれないからこれはアウト
>>686 元のドメインはばらばらでも動画IDしか使わないんだから関係ないでしょ
688 :
nobodyさん :2009/08/23(日) 15:41:38 ID:Tby4tQso
foreachで配列の次の要素を見ることはできますか? ループのなかで5番目の要素を見てるときに6番目をみるような…
添字が0から始まるということを知らないゆとりでないなら再現コードを詳しく
ポインタを進めるとかキーをインクリメントするとか
691 :
nobodyさん :2009/08/23(日) 16:18:29 ID:Tby4tQso
foreach($allAry as key=>val){ //ここで$val['name']が『やまだ』を返すとき、次の$['name']と等しいか知りたいんです } foreachはどうもいまいち理解できません くだ質ですみませんがお願いします
>>691 foreach($allAry as $key=>$val) {
このなかにforをつかう
}
>>691 foreach($参照する変数 as $KEY名=>$値){
この書式をよく理解してないと思う。
この書式は、参照する配列変数の一次元目について、
キーと値の対応表を得るのに使う。要するに、配列の
キーがわからないときにそれをリストアップするものだよ。
なので、
$allAry が、
$allAry = array(
array('name'=>'yamada','age'=>15,addr=>'tokyo-to'),
array('name'=>'sato','age'=>18,addr=>'chiba-ken'));
というようなデータ構造の場合、$KEY名には、1、2しか
入ってこないし、$値には一名分の配列そのものしか
入らない。
もう、$allAryが、上記のような構造の場合、普通に
foreach($allAry as $one ){
とでもやって、一時変数に $one['name']の値を保存して
おいて逐次比較すればいいんじゃないかな。
$array[0][name] = "Yamada"; $array[1][name] = "nanashi"; を foreach($array as $key => $val) で展開したら、$keyが0のとき$val['name']に Yamadaが入るから、次のと比較するなら$key+1して$arrayを参照して比較すれば、 と思ったけど違ったんだっけか。
>>692 youtube以外のドメインからとったID( [\w-] )をどうやったらアウトになるのか教えて
>>696 信頼できるドメインからIDを取得できなかったらアウトですよね
>>696 悪意のあるコードを仕込まれたサイトのIDを取得した場合という判断を考えられない池沼乙
>>696 の言ってる意味がわからないんだけど
誰か翻訳よろ
>>696 youtube.hoge
youtube.test
こんなサイトがあったとして、君はyoutubeってだけで何でもいいからIDを取っちゃうのかい?
>>698 [\w-]のIDからどうやって悪意のあるサイトに飛ぶんですか。
取ってるIDは[\w-]の範囲内ですよ
>>698 もしyoutube.comからHTMLをとってきてIDとるなら問題ないし。
ユーザーが入力したものだとしたらドメインが一致してもそのIDがでたらめなものかもしれないからドメインの問題じゃない
馬鹿ばかりだな
>>701 IDから悪意のサイトに飛ぶなんてどの回答者も書いてないじゃん
少し落ち着けよ
飛ばないなら問題ないじゃん
>>691 は、ふつうこうやるんじゃないの?
foreach($users as $key => $user){
if($users[$key] == $users[$key+1]){
// ここにやりたい処理を書く
}
}
あ、たいしたことじゃないけど['name']を付け忘れたので修正 foreach($users as $key => $user){ if($users[$key]['name'] == $users[$key+1]['name']){ // ここにやりたい処理を書く } }
foreachでやるとオーバーするだろ そういう時はforでやるべし
重複があるかどうか一発でわかる関数があるのに何故使わない? マニュアルの配列関数のところ見れ
>>691 array_mapを使うと幸せになりますよ
関数を呼ぶのと、ifで比較するのってどっちが早いんだろうとか考えてると いいコードは書けませんよね
それは雇われたPGの考え
712 :
nobodyさん :2009/08/23(日) 22:23:38 ID:nlDqD5AK
ユーザログインを管理する公開されてるサンプルでもなんでもいいので 使いやすいもの・参考になる簡単なもの無いですか? やりたいことは、 ・各ユーザに対する専用ページの保護 ・ユーザ名・パスワードを入れた後はログアウトするまでユーザ専用ページ情報を開ける ・メールアドレスをユーザ名として使用
すいません。 できればコードは「クラス」なものが良いのですが。
714 :
691 :2009/08/23(日) 22:27:22 ID:???
アドバイスくれた方、みなさんどうもありがとう 参考にしてやってみます。ありがとう
>>715 ありがとうございます。
基本から良く分かってないのでできればどのCMSのこのモジュールが分かりやすいよ
とかいうのがあればおききしたいのですが。
>>716 知ってる限りじゃDrupal。
静的ページを作るだけじゃかなり面倒臭いので
CMSのコンテンツマネージメント機能を利用する
ついでじゃなきゃお勧めできないけどw
つーか、PHPの標準機能だけでも結構あっさりと
できるでしょ。ユーザ管理DBを置いて、共通処理
で各ページ表示処理の手前で、認証やってダメな
ら弾けばいいんだから。Cookieにすればパラメータ
の受け渡しに迷うこともないし、セッションとしても
使えるし。
>>716 どの程度の規模なん?
ユーザ少ないんだったらhtaccessという手もあるよ
>>717 Drupal調べてみます。
> つーか、PHPの標準機能だけでも結構あっさりとできるでしょ。
基本DB使ってセッションで_SESSION[USER]=ユーザ名があればログイン中
というふうにしたらメアドがネットにながれちゃうのかなぁ?とか。
んでなんか一回安全で一般的なユーザ管理の方法を学ぼうかなぁとおもいまして
サンプルを探しているわけです。
(できればフォームで登録申請→登録メアドにメールが届く→メール内URLをクリックで本登録とか機能も作りたい)
一応ネットでいくつか見てはみたのですが説明サンプル的なもので実践的でないもの
っぽかったので、これ使ってりゃそんな間違いないし簡単だよってものがあるのかお聞きしたかったのです。
>>718 100人程度登録・書き込みしてくれたらまぁいいかな程度なんですが。
Basic認証のことかなぁ?できればログインフォームでのログインクラスとして実装したいのですが。
720 :
nobodyさん :2009/08/24(月) 11:39:25 ID:F/8gKHCC
改行のない数万バイトのデータがあります これを一定(1バイトの文字*60文字=60バイト)の長さで一気に配列に格納したいのですがスマートな方法はありますか? このデータは最初から最後まで60バイトで区切っていって丁度きっちり割り切れるデータです
forで回せばいいじゃん
>>720 データの先頭60バイトを切り取って、配列に格納
この処理をarray_mapを使って再帰的に処理すればforより短いコードで書ける
array_mapでどうやって・・・?
ずばり str_split
バイナリセーフではありません
>>720 スマートと言っても何がスマートなのかよくわからん
見た目をすっきりなのか
行数をすっきりなのか
まぁ、こんな手もある
20文字区切りだけどな
$teststr = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
$splitstr = chunk_split($teststr,20,"\n");
$bunkatu = split("\n",$splitstr);
きっちり分けれるなら最後に区切り文字が二つ繋がるから空の要素が一つ出来る それの処理が必要
>>726 わざわざ改行をつけるなら初めから改行付きでデータを作るだろzk
みなさんありがとうございます、自分の知らなかった関数が出てきたのでちょっと調べてて遅くなりました
>>726 さんのchunk_splitが一番よさそうなのでそれでやってみようと思います
本当に勉強になりました、みなさんありがとうございました
chunk_splitの他にphp5での関数があるなstr_split
732 :
nobodyさん :2009/08/24(月) 12:44:08 ID:F/8gKHCC
733 :
nobodyさん :2009/08/24(月) 12:53:11 ID:F/8gKHCC
str_splitはsplitする手間が省けて区切り文字なく直接配列に割り振ることができるんですね ループの処理もいらず、短い1行でやりたいことができました!
僕が書き込んだんだぞ!! ぷんぷん
にこにこぷんぷん
ぷんすかぷんぷん
>>729 読んでからレスしたんだが
改行がないんだからわざわざ付けてどうすんだ
データ処理時に改行を付加するなら最初からデータの末尾に改行をつけるのがスマート
頭悪いな〜
>>738 頭悪いのはお前
数万バイトぐらいで改行分をケチる必要はないだろう
740 :
nobodyさん :2009/08/24(月) 16:26:21 ID:ywIYQab+
PHP Version 5.3.0 imagick2.3.0 / ImageMagick 6.5.5 を利用しています Imagickで取り込んだデータをブラウザに出力する場合、静止画であれば echo [Imagickのインスタンス]; でいけるのですが、 アニメーションGIFを出力する場合は一旦ファイルに書き出してからでないと無理でしょうか?
741 :
nobodyさん :2009/08/24(月) 18:12:09 ID:gGslhGFk
識別IDから国名を表示したく、以下のように書きました。 配列の要素数が増えると、処理が遅くなりそうで… そもそも、配列で処理しようとしてることが間違いなのか… 上手な書き方、教えてください。 <?php //$array[] = array(識別ID, 国名, 点数); $array[] = array('a01', '日本', '10'); $array[] = array('a02', 'アメリカ', '20'); $array[] = array('a03', 'ロシア', '30'); //(省略) $str = 'a02'; foreach($array as $item){ list($id,$name,$i) = $item; if(in_array($str, $item)){ echo $name; } } ?>
>>741 プログラムのほかの部分が判らんからあれだけど、
任意の識別IDから国名を出したいのなら、識別IDをキーにすべきじゃないか?
$array['a01'] = array('日本', '10');
$array['a02'] = array('アメリカ', '20');
$array['a03'] = array('ロシア', '30');
echo $array['a02'][0];
連想配列使おうよ
>>737 ちょっとは応用に頭を使えよ…
改行改行って拘りすぎだ
chunk_splitは特定バイト毎に改行文字を挿入する
だから\nじゃなくて<br>でも何でも使えるんだよ
今回は思いついた\nを使っただけだ
745 :
nobodyさん :2009/08/24(月) 20:51:53 ID:waMnQ6RO BE:66590093-2BP(931)
MySQLに格納した画像データの取り出しについて質問です。 格納の仕方・手順については、MySQL Query Browserを用いて、 格納した画像を表示・ローカルPCに保存(して表示)できたので問題ないと思います。 しかし、PHPを用いていざ表示してみようとすると、 『格納したものと同じデータ容量・同じサイズの白色(無色かも?)の画像』が表示されるだけです。 言っている意味が分かりづらいかもしれないですが、 それをローカルPC上に保存してみても、 画像を表示することはできないのですが、 (Windows Picture and Fax Viewerで表示しようとすると、 『画像を描画できませんでした』と表示される) データ容量とサイズはしっかりとあっています。 こういった場合に考えられる原因がお分かりになる方、ご教授いただけませんか。 ソースコードを書く必要があれば書きます。 また、他に不足している情報があれば補足しますので、 どうぞよろしくお願いします。
ヘッダ出してないからじゃね
HTTPヘッダ忘れ。
配列のソートに有用なライブラリを探しています。 今私がやりたいのは、二次元配列を、n番目の配列をキーにソートをする、ということです。 イメージとしては、MySQLのORDER BYみたいな感じです。 array_multi_sortでもできますが、ソートのパターンが増えるたびにコードを書かないといけないのが少し煩わしいです。 何かいいのないでしょうか。
スレタイ
751 :
745 :2009/08/24(月) 21:36:51 ID:waMnQ6RO BE:69057247-2BP(931)
>>746 ,747
ヘッダは
header('Content-type: image/jpeg');
と出力しています。
ただ1つ気になるのは、 image/jpeg であっているのか?というところです。
元画像はもちろん jpg なんですが、
先述の MySQL Query Browser を使って保存すると、
jpg とは認識してくれない( All Files(*.*) となっている)のです。
(もともと自動認識してくれないのかもしれませんが)
それを *.jpg として保存すると見られますし、あるいは *.png などとしても見られます。
ちなみにヘッダを出力しないと、文字化けしたバイナリデータが表示されます。
また、ヘッダの前に echo " "; などを追加するとエラーが起きるので、
ヘッダより前に何かが出力されてしまっている、ということもないと思います。
ソースコードの保存はutf8、BOMなしでしてます。
752 :
740 :2009/08/24(月) 21:37:48 ID:ywIYQab+
>>748 レスthx
なるほど、出力する時はその関数だったのか
php.netの例がそのままインスタンスechoしてるだけだったので、
正直変な書き方だとは思ってたんだw
どっちでもいいのかもしれんが今後はそれ使います
で、変更してみたけど結果は変わらず、
おそらくアニメーションGIFの1フレーム目だけが静止画として表示されるのみ
テストソース
$image = new Imagick('./img/0');
header('Content-type: image/gif');
echo $image->getImageBlob();
で、もうちょっと自力で探してたら
ttp://kyle-in-jp.blogspot.com/2008/09/imagemagickphpgif.html このブログでまさにやりたい事がエントリされたのでちょっとこれから勉強してきます。
754 :
745 :2009/08/24(月) 21:45:23 ID:waMnQ6RO BE:14798423-2BP(931)
>>753 了解です。
クラスオブジェクトとかを使っているので、
画像を表示するプログラム単体ではわかりづらいかもしれないです。
<?php
require_once( 'Config.class.php' );
require_once( 'Tables.class.php' );
$config =& new Config();
$_SESSION['permission'] = ADMIN;
$DSN = $config->DSN();
$uid = $_GET['uid'];
$img_type = $_GET['img_type'];
$cartoonist =& new Cartoonist( $DSN, "user_id", $uid );
// ↑Tables.class.php により、これで、
// Cartoonist テーブルの user_id フィールドにおいて、 $uid と一致するデータを、
// Cartoonist->user_id や Cartoonist->user_password などとして呼び出せます。
if( $cartoonist->isError() ) {
die( $cartoonist->getError() );
}
if( $img_type = "illust_1cut" ){
header('Content-type: image/jpeg');
echo $cartoonist->illust_1cut;
}
$cartoonist->__destruct();
?>
よろしくお願いします。
755 :
745 :2009/08/24(月) 21:46:46 ID:waMnQ6RO BE:29596234-2BP(931)
連投すみません、 ×:// Cartoonist->user_id や Cartoonist->user_password などとして呼び出せます。 ○:// $cartoonist->user_id や $cartoonist->user_password などとして呼び出せます。
>>744 <br>なんて使うか
バカじゃねええの
サイズだけじゃなく、MD5とかで壊れていないことを確認済みなんだろうか
array(18) { [0]=> array(2) { ["aaa"]=> string(1) "a-1" ["bbb"]=> string(6) "b-1" } [1]=> array(2) { ["aaa"]=> string(1) "a-1" ["bbb"]=> string(6) "b-2" } ....以下略 という風に並んでいるものがあって、 a-1 b-1,b-2.... a-2 b-1,b-2.... っていう風に取り出す方法ないでしょうか…。 どうしたら良いものかさっぱり…。 二次元配列…?でも上手くいかなかったし。
こういう場合、再帰という手法を使う
何のデータ構造だこりゃ?
762 :
759 :2009/08/24(月) 23:31:55 ID:HdED1h1S
sage入れてた。ごめんなさい。
とりあえず、このデータだけでは並びがわからん。
foreachで別の配列なり変数なりに放り込む
[0] ["aaa"] = "a-1" ["bbb"] = "b-1" [1] ["aaa"] = "a-1" ["bbb"] = "b-2" [0]と[1]の両方に同じデータが入ってるのか?
もしかしてただのcsvだったりするのか
767 :
nobodyさん :2009/08/25(火) 01:07:51 ID:Owp0h4vB
Auth::getAuthData()がうまくできなくて困っています。 ソースはこんな感じ。 require_once( "Auth/Auth.php" ); $params = array( dsn' => "mysql://user:pass@localhost/db", 'table' => "member_table", 'usernamecol' => "username", 'passwordcol' => "password", 'crypttype' => "md5", 'db_fields' => "*", ); $auth_obj = new Auth( "DB", $params ); $auth_obj->start(); if( $auth_obj->getAuth() ) { print "ようこそ!" . $auth_obj->getAuthData( 'username' ) . "さん<br>"; }; 認証はできててエラーは何も出ず、 ようこそ!さん と表示されます。getAuthDataがNULLを返しているような感じ。 フィールド名をいろいろ変えても同じ。 ぐぐったけどわかりません。 なんでこんなシンプルな関数が動作しないのか…。何を調べればいいのでしょうか。
array( [0] => array( [0] => "a", [1] => "b", ), [1] => array( [0] => "c", [1] => "d", ), ) こんな感じでかいてくれ上のだと見にくい
769 :
nobodyさん :2009/08/25(火) 01:11:13 ID:Owp0h4vB
771 :
759 :2009/08/25(火) 01:20:46 ID:EILdhFsc
array[18]{ [0]=> array(2){ ["aaa"]=> string(1) "a-1" ["bbb"]=> string(6) "b-1" } [1]=> array(2){ ["aaa"]=> string(1) "a-1" ["bbb"]=> string(6) "b-2" } [2]=> array(2){ ["aaa"]=> string(1) "a-1" ["bbb"]=> string(6) "b-3" } [3]=> array(2){ ["aaa"]=> string(1) "a-2" ["bbb"]=> string(6) "b-1" } [4]=> array(2){ ["aaa"]=> string(1) "a-2" ["bbb"]=> string(6) "b-2" } [5]=> array(2){ ["aaa"]=> string(1) "a-3" ["bbb"]=> string(6) "b-1" } .....略 書き方を変えてみました。
>>771 function array_print( $array )
{
foreach( $array as $key => $value )
{
if( is_array( $value ) )
{
array_print( $value );
}else{
print $value;
}
}
}
774 :
745 :2009/08/25(火) 01:39:37 ID:jyvND+zG BE:14798232-2BP(931)
レス遅くなってすみません。
>>757 元ファイルが jpg なので、jpg 形式で出力すればいいかと思ってたんですが・・・。
データベースに格納する際、何か必要な処理があるんでしょうか?
>>758 md5 で確認、といいますとどういうことでしょうか?
暗号化するコマンドの md5 しか知らないのですが・・・。
よろしくお願いします。
775 :
nobodyさん :2009/08/25(火) 01:42:12 ID:Owp0h4vB
>>770 エラー全部表示にしても、何も出ません。
しょうがない、Authを使うのはあきらめよう。これだから他人の書いたライブラリは信用できない。
776 :
745 :2009/08/25(火) 01:43:00 ID:jyvND+zG BE:51792473-2BP(931)
連投すみません。
>>758 もしかして、
echo $cartoonist->illust_1cut;
の部分を、
echo md5( $cartoonist->illust_1cut );
としてみる、ってことでしょうか?
そうなのであれば、その結果、
f85f7936575718c32cbc4018e7dc63a6
と出力されたので、壊れてないと思われます。
>>776 自作でいろいろやってる部分を省いて、一番単純なコードでちゃんと表示されるかどうか試してみたら?
問題が再現するコードってのはそういうこと
SQLに入れる段階でバイナリ含めてエスケープされると思うんだが
779 :
745 :2009/08/25(火) 02:30:52 ID:??? BE:44394236-2BP(931)
>>777 ,778,他皆様
以下のようなスクリプトにしてみたところ、表示できました!
あとはこれをいじってどうにか自分の思う形に持っていきたいと思います。
面倒見てくださった皆様ありがとうございました。
<?
// DB接続
$conn=mysql_connect("localhost","root","");
// DB選択
mysql_select_db("eninaru");
//DBからバイナリ画像を取得
$sql = " SELECT illust_1cut FROM Cartoonist LIMIT 1 ";
$result = mysql_query( $sql );
$val = mysql_fetch_assoc( $result );
//画像として表示
header("Content-type: image/jpeg");
echo $val['illust_1cut'];
exit;
?>
>>756 お前本当に頭悪いな
chunk_splitは区切り文字として何でも使えるんだから好きなのを使えば良いだろ?
固定バイト数毎に配列に格納する方法についての質問に
・forループで格納する方法の別の方法として
chunk_splitを使って特定バイト毎に区切り文字入れてsplitで分ける方法を出しただけだ
その後にphp5のマニュアルを見たらstr_splitを見つけたけどな
考え方として案を出しているのに区切り文字に拘り続ける理由がわからん
そんなのは自分のシステムに合わせた区切りにするだけじゃないのか?
お前らまだやってんのか 他人のどうでもいいプログラムのことでけんかすんなよ...
どうでもいい…(ノ_・。)
783 :
nobodyさん :2009/08/25(火) 10:55:25 ID:Nftjn5Vt
windowsXP+IISです あるシステム関数を含んだコードを実行すると下のようなエラーが出ます。 何に原因があると思いますか? Warning: system() [function.system]: Unable to fork ["C:/Program Files/Xpdf/pdftotext.exe" -enc Shift-JIS ./showPickingListNoUpdate.pdf2.pdf .\_4a933e906bb263.14282916] in C:\public_html\group\pdf_test.php on line 8
784 :
783 :2009/08/25(火) 10:56:27 ID:Nftjn5Vt
実行したスクリプト (以前にここでPDFのテキストを抽出したいと相談した時に教えてもらったサイトのコードで試しました パスは適宜修正済みできちんとその場所に実行ファイルやPDFファイルがあります) ---------------------------------------------- <?php class PdfToText { public static $exepath = '"C:/Program Files/Xpdf/pdftotext.exe"'; public static $options = ' -enc Shift-JIS'; public static function execute($path=null) { $tmp_path = PdfToText::get_temp_file_path($path); system(PdfToText::$exepath . " " . PdfToText::$options . " {$path} {$tmp_path}"); $text = null; if (file_exists($tmp_path)) { $text = readfile($tmp_path); unlink($tmp_path); } return $text; } public static function get_temp_file_path($path=null) { $dir = dirname($path); if ($dir[(strlen($dir)-1)] != DIRECTORY_SEPARATOR) { $dir .= DIRECTORY_SEPARATOR; } return ($dir . uniqid('_', true)); } } echo PdfToText::execute("./test.pdf"); ?>
>>780 自分のきめえさを指摘されたら本気になって弁論
フイタワ
787 :
nobodyさん :2009/08/25(火) 11:55:46 ID:2Veus9TY
つうかよどこのレンサバかぐらい書け
790 :
787 :2009/08/25(火) 12:44:57 ID:2Veus9TY
>>788 ご提案ありがとうございます。
ですが、「IRCBOTが1時間で勝手に落ちる」という問題が
解決可能なのであれば、SmartIRCでBOTを運用したいと思っています。
>>789 すみません、書き漏れておりました
レンタルサーバーはland.toという所を使っています。
http://land.to/
>>783 >>785 の書いているIISが実行ファイルを処理できる権限があるかどうかのチェック
>>787 スクリプトはCRONか何かで定期的に起動するタイプなのか?
常駐だとレンタルサーバーならプロセスがkillされているかもしれん
792 :
787 :2009/08/25(火) 13:22:01 ID:2Veus9TY
>>791 ご回答ありがとうございます。
CRON等で定期的に起動はしていません。
EIからBOTスクリプトの書かれたphpを一度だけ読み込んでます。
読み込んだ後はブラウザを閉じています。
>常駐だとレンタルサーバーならプロセスがkillされているかもしれん
なるほど。。。
BOTを常駐させたいのですが、プロセスがkillされない方法は
ないでしょうか?
793 :
787 :2009/08/25(火) 13:23:51 ID:2Veus9TY
>>EIからBOTスクリプトの書かれたphpを一度だけ読み込んでます。 EIではなくIE(インターネットエクスプローラー)。 失礼しました。
>>792 レンサバでプロセス占領するようなことすんな
やるなら自鯖でやれ
氏ねksg
恥ずかしいなぁ
798 :
787 :2009/08/25(火) 16:36:34 ID:2Veus9TY
そんな事は知ってんだよ 他の奴なんかどうだっていい、俺さえよければいいんだ わからねえなら下らないレスすんな雑魚ども
ID:2Veus9TY 質問内容から知ってるような感じには見えなかったなあ
いやいや、レンタルサーバーとはいえ、この程度であーだこーだ言ってる人がどうかと思う。 そもそもレンタルサーバー屋と借りてる奴との間の話だし。 VPSとか借りたらどう? 他のお客さん関係なくなるし。 共有なんかだと、プロセスみてずっと動いてるの殺したり、定期的にいろいろ再起動されたりするので無理じゃね。
専用サーバやVPSならまわるか共有サーバーであーだーこーだ言わない人のほうが少ないな
スルーしとけよ
803 :
nobodyさん :2009/08/25(火) 17:18:40 ID:TGZyUfPX
鯖くらい自分で立てろよ なんならスペース貸そうか?
phpでデーモン作るのは簡単にできるけど、実際問題色々とナンセンス。
805 :
nobodyさん :2009/08/25(火) 22:27:39 ID:Y/NZgk2c
PHP 5.3.0 finfo_open → resource(12) of type (file_info) finfo_file → NULL どうしてもfinfo_fileでNULLが返ってきます。 ローカルサーバーでは正常にファイルタイプが返ってきました。 ちなみにmimeのデータベースはローカルで成功したものをLinuxにアップロードして使っています。 なぜこのようなことになるのでしょうか・・・。
>>805 finfo_openのリソースをfinfo_fileで使用するから片方だけ通らないってのも変な話だ
その部分のコードをアップしてくれないか?
807 :
nobodyさん :2009/08/25(火) 23:29:39 ID:Y/NZgk2c
$finfo = new finfo(FILEINFO_MIME, "/etc/httpd/conf/magic"); $mimetype = $finfo->file($finfo, $file_path); var_dump($finfo, $mimeType, $file_path); Warning: finfo::file() expects parameter 1 to be string, object given in /home/uploader/data/class/Uploader.php on line 52 object(finfo)#3 (0) { } NULL string(14) "/tmp/phpmGveGV" こんな感じです。 おかしいな、$finfoオブジェクトなのに・・・ newじゃなくfinfo_openならさきほどのresource(12) of type (file_info)がかえってきてました
PHPで携帯のサイトを作成しています。 空メールを送って、メールを自動返信する処理を作成しているのですが、 ソフトバンク携帯だけ、自動返信メールの件名がダブって送られます。 例えば、件名が「登録ありがとうございます!」だったら、「登録ありがとうございます!登録ありがとうございます!」みたいな感じです。 その他の2キャリア、auとドコモは大丈夫でした。またPCから送ってみたのですが、そちらも大丈夫でした。 メールを送る処理は、普通にmail関数を使っているのですが、これはソフトバンク携帯の仕様なんでしょうか?
809 :
nobodyさん :2009/08/25(火) 23:33:05 ID:Y/NZgk2c
ごめん、オブジェクトにしたら書き方間違えてた $finfo = new finfo(FILEINFO_MIME, $this->getMagicFilePath()); $mimetype = $finfo->file($file_path); var_dump($finfo, $mimeType, $file_path); die; object(finfo)#3 (0) { } NULL string(14) "/tmp/phpCZhdyB"
コピペじゃなく手書きしたんだよな? 2行目:$mimetype 3行目:$mimeType
811 :
nobodyさん :2009/08/25(火) 23:41:57 ID:Y/NZgk2c
どう見てもコピペです 本当にありがとうございました
812 :
nobodyさん :2009/08/25(火) 23:43:33 ID:MI9sHpli
しばらくphpから離れてたんですが PHP5.2.x系の最新版ってないんですか? PHP5.3しかないのですが・・・
813 :
nobodyさん :2009/08/25(火) 23:46:34 ID:8cJr6T6d
>>811 ネタっぽく返ってきてるんだがw
解決でいいのか?w
>>812 意味が良くわからん
環境にもよるが本家にも無かったか?
815 :
nobodyさん :2009/08/26(水) 00:08:15 ID:zWNH0csG
はい、解決です 本当にありがとう
816 :
nobodyさん :2009/08/26(水) 04:21:39 ID:8mfIJWwV
<?php for($i=0;$i<5;$i++) { echo $i."<br>"; } for($j=0;$j<5;++$j) { echo $j."<br>"; } ?> これなんで、$iも$jも同じ結果になるの? 前置加算だったら、$j=0に++して最初は0じゃなくて1になるんじゃないの?? forの中は特別?
++$jがどのタイミングで実行されると思ってんの?
818 :
nobodyさん :2009/08/26(水) 04:32:29 ID:8mfIJWwV
>>817 ちょっとかんがえてみたけど
文法はおかしいけど、もしかしてこういう感じのこと??
for($j=0;$j<5;)
{
echo $j."<br>";
++$j
}
そうです
820 :
nobodyさん :2009/08/26(水) 05:04:50 ID:8mfIJWwV
ありがとうございました
821 :
nobodyさん :2009/08/26(水) 13:58:45 ID:6H4tMTv1
ど忘れしたので教えて <input type="text" value={$text}> のようにテキストボックスにあらかじめ文字列を表示しようとしてるんだけど、 $textの半角スペースなんかをエンコードするのってどうやるんだっけ
htmlspecialchars
823 :
nobodyさん :2009/08/26(水) 14:06:45 ID:6H4tMTv1
>>822 ありがとう!やってみたけど、やはり途中に半角スペースがあるとそれ以降が表示されない。
他にも何かあるんだっけ?
urlencode
825 :
nobodyさん :2009/08/26(水) 14:10:24 ID:6H4tMTv1
>>824 こんどは半角スペースが「+」に化けちゃった…
htmlspecialchars と組み合わせてもだめだ…だれか助けて
826 :
nobodyさん :2009/08/26(水) 14:13:09 ID:jmEq8MiJ
それHTMLの問題だろwwww value={$text} ↓ value="{$text}" で囲ってやれよwww
827 :
nobodyさん :2009/08/26(水) 14:17:49 ID:6H4tMTv1
829 :
nobodyさん :2009/08/26(水) 14:24:04 ID:6H4tMTv1
すみません、PHP(PHP4)でCSVのデータの読み込みなんですが 読み込むCVSファイルは株価のデータです。こんな感じのです。 | 日 付 | 始値 | 高値 | 安値 | 終値 | | 2009-7-1 | 100.0 | 150.0 | 50.0 | 120.0 | | 2009-7-2 | 120.0 | 130.0 | 70.0 | 90.0 | | 2009-7-3 | 90.0 | 150.0 | 50.0 | 120.0 | : : CSVファイルを読み込んで、MYsqlでデータを保存します。 データベースはkabu テーブルはそれぞれopen,high,low,close です。 下らない質問なのは承知ですが、まったくわかりませんorz よろしくお願いします。
>>830 IDだして。
っていうかいくらなんでも丸投げ過ぎるw
何がしたいのかを具体的に書いてくれよ(CSVのデータをDBに入れたいのはわかるが)
あとテーブルが4つにわかれているの?列じゃなくて?
>>831 830じゃないけどガタガタうるせえぞボケ
答えられないくせに調子に乗るな!
学校の宿題でしょ
なんじゃこりゃwwwほんとに学校の宿題みたいなかんじだなw
どこのスレにも狂犬みたいなやつがいるな。
>>833-836 答えられない癖に煽りは一人前wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
きめえwwwwwwwwwwwwww
838 :
830 :2009/08/26(水) 15:25:13 ID:6QIN4yeN
すみません、sageてはいけないんですね。 丸投げすぎてすみませんorz テーブルはそれぞれ分かれています。日付=torokubi が抜けてました。 日付はtorokubiに 始値はopenに・・といった具合です。すみませんがよろしくお願いします。
ここは丸投げスレじゃなくて質問スレなのでお間違えないように
とんでもない基地外がやってきたな...。
>>839 素直に僕は<?php echo "Hello World!!";?>しか書けない初心者ですって言えよ(笑)
どうせお前は回答者になれるほど知識無いんだろ(笑)
844 :
830 :2009/08/26(水) 15:32:28 ID:6QIN4yeN
あ、あと何がしたいかっていうとですね もともと最新値は自分で入力していくんですが、過去分を証券会社からDLしてきて、 それを表示する&(間違いとかあれば)修正したり出来るページを作りたいのです。 新規に入力できたり、DBにあるデータを表示するPHPのページは出来てるんですが アップロードのとこがわかりませんorz
830っていい奴だね 誰か答えてみろよ
おれが回答してやる。 phpでプログラム書いて読み込むんだ
質問してる人が ああいう人に文句言えばいいとおもうんだけどね。 //DB接続略 ファイルアップロードしてファイルに保存部略 $sql = "LOAD DATA INFILE 'example.csv' INTO TABLE kabu (torokubi,open,high,low,close)FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES "; @mysql_query($sql);
なんで俺がそんな事言われるんだ? おまえ実は質問者だろ。
>>830 >>847 がloaddataでの完璧な例を出してくれているので書くことが無いw
で、質問とは別の話なんだが、そのテーブル構成だと銘柄が判らないぞ?
まさか銘柄毎にテーブルを作るとか考えているわけではないよな?
無駄レス増やさなくていいからテンプレ守れないのは放置しとけな あと質問者も煽られたからって荒らさないでID出さないほうで聞いて来い
852 :
nobodyさん :2009/08/26(水) 15:56:21 ID:jmEq8MiJ
くだらない質問以前に質問になってない 何がしたいの?
853 :
830 :2009/08/26(水) 16:01:13 ID:6QIN4yeN
>>847 さん
ありがとうございます、試してみます。
そんなたった1行でできるとは、、、感服です。
>>850 銘柄はいまのところ固定してるんで大丈夫ではありました。
が、実は本当はいります。作り忘れてでしたorz
その他のみなさんもありがとうございました。
糞な質問でスレ消費してすみませんでした。
>>853 >データベースはkabu
>テーブルはそれぞれopen,high,low,close です。
テーブルがkabuで列がopen,high,low,closeの間違いだよね?
それなら
>>847 さんの例で平気だけど。
こういう時はDBのテーブル構成も明記しておいたほうがいいよ。
おまじないだよ
857 :
nobodyさん :2009/08/26(水) 18:23:09 ID:4ml6a4mF
php5.3とphp6どっちから始めてらいいのか教えろ
5.3です
859 :
sage :2009/08/26(水) 19:31:41 ID:???
下記のファイルの権限を変更したくて -rwxrwxrwx 1 apache apache 4852374 8月 26 19:29 hogehoge 下記のPHPを実行したんですが変更されません。 <?php chown("hogehoge", root); ?> 構文間違ってます?
861 :
sage :2009/08/26(水) 19:48:55 ID:???
>>860 <?php
$dir = "/var/www/html/";
$path = $dir . "hogehoge";
$username = "root";
chown($path, $username);
?>
これでもダメだった。
もうお手上げ。
>>858 じゃあ5.3使うとするか
説明 bool chown ( string $filename , mixed $user ) ファイルfilename の所有者を(名前または番号で指定した) ユーザuser に変更しようと試みます。 スーパーユーザのみがファイルの所有者を変更できます。 注意: この関数では、 リモートファイル を使用することはできません。これは、処理されるファイルがサーバのファイルシステムによりアクセスできる必要があるためです。 注意: セーフモード が有効の場合、PHP は操作を行うファイル/ディレクトリが実行するスクリプトと同じ UID (所有者)を有しているかどうかを確認します。
864 :
nobodyさん :2009/08/26(水) 19:54:50 ID:eFQ12b2O
なんでもいいから実用できる軽量テンプレートエンジンがあったら教えろ
865 :
sage :2009/08/26(水) 20:06:20 ID:???
867 :
nobodyさん :2009/08/26(水) 20:13:27 ID:eFQ12b2O
なんで俺がそのスレで聞きに行かないといけないんだバカ
>>1 はちゃんと読んだぞ
じゃあSmarty はい終了
>>867 >・ 質問者として、態度をわきまえること。
どう考えてもこれ読んでないだろ。
870 :
nobodyさん :2009/08/26(水) 21:06:28 ID:eFQ12b2O
敬語で質問しろと書いてないだろボケ
871 :
sage :2009/08/26(水) 21:10:00 ID:???
敬語で質問しろとは書いてないけど態度はわきまえてない
872 :
sage :2009/08/26(水) 21:30:51 ID:???
夏の終わりにはこういうの増えるね 学校を前にすると不安になるからなのかね
873 :
nobodyさん :2009/08/26(水) 22:15:36 ID:eFQ12b2O
きめえ
874 :
 ̄ ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ :2009/08/26(水) 22:29:35 ID:1j0SUHbG
.__________ || // // | || / ̄ ̄ ̄ ̄\ . | / ̄ ̄ ̄ ̄\ || ( 人____) | ( ) || |ミ/ ー◎-◎-)| (ヽミ | || (6 ゜(_ _) )|. ( 6) | || __| ∴ ノ 3 )| (∴ \____ノ_ || (_/.\_____ノ | >--(っ___□__) || / ( )) ))ヽ| ( )) |三| ヾ . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ||========[]===|) |_|| | ̄ ̄ ̄ ̄ ̄| (_)\|三三三三三| (:::::::::::::::::::::y:::::::::ノ)\ |:::::::::::::::::::::|:::::::::| |
またかわいそうな子供がいるのか。
876 :
nobodyさん :2009/08/26(水) 23:11:51 ID:eFQ12b2O
はいはい てめえらの知識不足ってやつね あとsmartyは軽量ではないからな、無知は痛いね(苦笑)
>>876 >【その他諸注意】
>・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
キチガイ涙目w
pear くらいならいいんじゃない? ただのライブラリでしょ。 標準からは一歩下がったところだけど、いまはもう デファクトスタンダードになっていると覆う。
pearなんていまだに動かない鯖もあるぞ
んなあほな 実態はただのPHPファイルだよ
javascriptのライブラリみたいなものか
そういえば最近仕事でhtmlテンプレートっていうテンプレートを使ってるシステムの手直ししたな 軽くて小さくて単純ってのはわかるが、故に難しかった 後、うどん屋とか焼肉屋とか、そんな感じの名前のフリーのシステムを使ってたのもあったなぁ 軽くて小さくて簡単なのはわかるけど、マイナーで深い使い方が出来ない分、意外と苦労した
>>880 レンタルサーバーでも、自分でディレクトリ入れてincludeすればそれで動くこと多いよ
885 :
nobodyさん :2009/08/27(木) 01:43:48 ID:eQsuAF/T
PHP4と5はどっちがいいの?
今なら6
887 :
nobodyさん :2009/08/27(木) 02:02:52 ID:eQsuAF/T
いやいや6なんてないでしょ? オブジェクト的なのが変わっただけ?
存在するにはする開発段階だけど PHPサイドはもう4は使うなとアナウンスしてるので5にしときな
889 :
nobodyさん :2009/08/27(木) 02:13:48 ID:eQsuAF/T
thx 5って分家的な感じだと思ってた
893 :
nobodyさん :2009/08/27(木) 11:59:29 ID:AzGLOn1y
なんで画像で質問すんの? ここにコード書けよ バカなの?
お前らkandaMAXって知ってる?
897 :
nobodyさん :2009/08/27(木) 12:28:28 ID:AzGLOn1y
>>894 すいません、コード抜き出すと300行ぐらいになるので
このようにした方がわかりやすいと思いました。
ちょっと投稿レベル低すぎるようなのでくだスレの方に
書き込みたいと思います、ありがとうございました。
899 :
nobodyさん :2009/08/27(木) 12:43:12 ID:AzGLOn1y
何度もすいません、
ちょっと過疎ってるようなので
こちらに再度書き込ませて頂きたいと思います。
http://www.pachiweb.com/pachiweb/pachiweb.html ↑掲示板のように
http://www.pachiweb.com/updir/data/2222.jpg ↑ログをhtml出力したいと思い
http://www.pachiweb.com/updir/data/1111.jpg ↑このような構文を考えました。
ログには
$threadno,$responseno,$last,$now,$name,$email,$sub,$model,$com,$host,$pass,$ext,$W,$H,$tim,$chk,\n
このようになっており$lastはスレッドの最終書き込み判定です。
そして、上記構文で実行したところ処理が永久ループし始めました。
もうちょっとシンプルで頭の良いやり方などありましたら
教えて頂けませんでしょうか?
まじでコードは書けよ 画像に映ってるものをそのまま書けばいいだろ
すいません、紹介頂いたサイトの他に 検索などして見回ってきたのですが今一イメージが掴めません。 言葉だけでも結構なので上記構文を元にお教え頂けると幸いです。 効率よいログ自体の変更例もお教え頂けるとありがたいです。
指摘する人に、画像みて文字を打ってもらう気ですか? 面倒だから回答もらえないんだよ。
>>903-
>>904 すいません
>>902 書きこんだ直後から
txt上げれるアップローダー探したりしてました。
>>905 段の表示や画像表示だったりのある程度の共通部分は、別functionに。
908 :
sage :2009/08/27(木) 13:36:50 ID:???
なぜわざわざうpろだ使うのか意味がわからない リンク先たどるの面倒だろ 何度もいうが普通に書け
>>907 そうしたいと思います、
アドバイスありがとうございます。
>>908 過去2chでコード書いた時に
改行制限やらtab要素消去ですごく苦労したので
今回のようにさせてもらいました。
>>905 でも駄目でしょうか?
>>899 一度CSVをスレッドごと,レスごとに連想配列に入れてから
forかforeachで回して表示した方がいいんじゃない?
ページはページング処理したいんだろうから多分別の処理になると思うけど
910だけどごめんあんまコード読んでなかった 要は処理部と表示部を分けたほうがいいよということ そのほうがデバッグもしやすい
>>910 まさに今同じ事を考えていました・・・・
やはりその肯定を最初にやらないと駄目ですよね。
前述した処理でそれが出来ていると思っていたのですが
多分まったく出来てないですよね。
実は今回何故このようにしたかといいますと
futaba.phpと言う掲示板は
スレッド番号とスレッド内のレス番号を改行で区切ったログと
そのスレッド番号がついた書き込みログの2つに分けたphpだったので
それを1つにまとめたいと思ったのが原因でした。
1つにすると処理速度大幅に遅くなったりするのでしょうか。
皆様、一度
>>910 さんの言うとおりの方法でやってみます、
ちょっと帰り遅くなりますがアドバイス頂ければ
また返信させていただきます。
本当にありがとうございました。
913 :
nobodyさん :2009/08/27(木) 14:13:00 ID:MqB1vJcx
おいカスども今日も来てやったぞありがたく思え トラックバック送信ライブラリを教えろ
>>905 241行目のページング処理のループ、$i使わない方がいいんじゃね
今は一番外のループ(7行目)が1回しか回らないし問題なさそうだけど
916 :
nobodyさん :2009/08/27(木) 15:07:11 ID:MqB1vJcx
917 :
nobodyさん :2009/08/27(木) 16:59:31 ID:4gKJtMw/
おいてめえら今日2度目の質問だぞ、気合い入れてよく聞けや php5.3から実装された新機能の解説をしているサイトを教えろ
モバイルでexcelファイルをダウンロードさせたいんだけど 以下の状況で困ってるので知恵を貸して! xlsファイルに直リンすると softbank(911T)はexcelファイルとしてダウンロード>表示ができた au「表示できないファイルです」 docomo(N904i)端末はバイナリがそのまま文字として出力された あとobjectタグとかもあるっぽいけど docomoだとダメみたいなので auとdocomoでのダウンロードのさせかたを教えてほしい ゆくゆくはoffice系のファイルを全部ダウンロードできるようにしたいけど とりあえず httpd.confに AddType application/vnd.ms-excel .xls を設定してある
あ、 上のはphpの関連性がないけど 今テストとしてxlsに直リンしてて PHPで書いた内部パスひっぱってダウンロードさせるスクリプトを使いたいので まずは生ファイルでという段階です ということでここでの質問をお許しください・・
スレタイ嫁
922 :
919 :2009/08/27(木) 17:48:24 ID:GXwqUg2e
モバイルはわからんから間違ってるかもしらんけど <?php header('Content-type: application/download'); header('Content-Disposition: filename="filename.xls"'); ?>
>>923 ありがとうございます
Webのほうでもきいてみます!
925 :
nobodyさん :2009/08/27(木) 18:47:49 ID:BfJOagLT
phpスクリプトの中にperlスクリプトを書くことができますか?
できるよ
どうやって書くんですか?動きますか?
PECL-Perl
なぜIDを隠すの?
質問者じゃないから
931 :
nobodyさん :2009/08/27(木) 23:17:09 ID:qnE7rLil
______ ,;i|||||||||||||||||||||||||||||||ii;、 _/ /||||||||||||||||||||||||||||||||||||||ii;、 \ / ̄ ̄\||||||||||||||||||||||||||||||||||||ii;゙ヽ, / '" ̄ヽ ヽ!!|||||||||||||||| ||||||||||!!"ヘ < ロマンティックageるよ ヽ ゙!!!|||||||||||| |||||||!! iヽ── / |||l ゙゙ヽ、ll,,‐''''"" | ヽ|||||||||ロマンティックageるよ |||l ____ ゙l __ \||||||||| ||!' /ヽ、 o゙>┴<"o /\ |'" ̄| ホントの勇気 見せてくれたら \ / |ミミヽ──‐'"ノ≡- ゙'──''彡| |、 | |  ̄| |ミミミ/" ̄ 、,,/|l ̄"'''ヽ彡|| |、/ / ロマンティックageるよ ヽ、l| |ミミミ| |、────フヽ |彡l| |/ /_ \/|l |ミミミ| \_/ ̄ ̄フ_/ |彡|l/  ̄/ ロマンティックageるよ \ ノ l|ミミミ| \二二、_/ |彡| フ  ̄\ l|ミミミ|  ̄ ̄ ̄ |メ/ \トキメク胸に キラキラ光った | \ ヽ\ミヽ  ̄ ̄"' |/ / / \ヽ、ヾ''''ヽ、_____// /_夢をageるよ / ヽ ゙ヽ─、──────'/|  ̄/ . / ゙\ \ / / \__ ───'''" ̄ ̄ ゙゙̄ヽ、__,,/,-'''" ̄ ゙''─
932 :
nobodyさん :2009/08/28(金) 10:25:35 ID:9RiD+7YO
PHP.INIに日本語のコメント付けても大丈夫ですか?
933 :
nobodyさん :2009/08/28(金) 10:32:11 ID:9RiD+7YO
5.2.10ですけど、あ、なんかコメントと改行のみの業を全部消したら175行に収まったんですけどこんなに少なかったんです
なぜ消したし
消しちゃったらまずいですかね? コメント消したのはすぐ目的の個所をいじりやすかったからなんです
コメントなんだから消しても平気
検索使えよ
938 :
nobodyさん :2009/08/28(金) 11:01:53 ID:9RiD+7YO
毎回設定帰るたびに検索→修正ってめんどくさくないですか?
939 :
nobodyさん :2009/08/28(金) 11:05:20 ID:0tCfU1Pn
俺はEclipseに、php.iniをxml形式で設定できるように修正してる
>>938 175行あったら1画面に収まらないから、結局目的の箇所を探すわけだろ?
それなら検索するのと手間は変わらないと思うけど?
あとそんなに頻繁に設定変える必要があるのか?
そしてその設定項目はphp.iniじゃないと設定できない項目なのか?
頻繁に変えるなら、.htaccessとかini_setじゃ駄目なの?
/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
>>932 php-5.3.0/Zend/zend_ini_scanner.l
<INITIAL,ST_VALUE,ST_RAW>{TABS_AND_SPACES}*[;][^\r\n]*{NEWLINE} { /* Comment */
<INITIAL>{TABS_AND_SPACES}*[#][^\r\n]*{NEWLINE} { /* #Comment */
ということで問題ない
>>940 言いたい気持ちはわかるが
コメント消すくらいでそんなに目くじらたてることもなかろう。
ini_setが便利なのは確か。
>>943 言葉が悪かったか、スマン。
別に目くじらたてたわけじゃないよ。
目くじら立てるっていうか本人のことを思いやってアドバイスしてるんだけど まぁ別に本人がいいっていうならいいんじゃね
今時一画面でおさまらない奴なんているの?w
>>946 24インチのフルHDのディスプレイを縦にして使ってるけど175行も表示できない・・・
ini_setが便利とかどんだけ池沼なんだよ 設定弄って再起動したほうが早いだろ
949 :
nobodyさん :2009/08/28(金) 14:28:11 ID:IryiXPVo
$keyword = "ああああ"; $treelog = file(TREEFILE); $log = file(LOGFILE); $threadcount = count($treelog);//スレッド数をカウント for($i=0; $i<$threadcount; $i++){ $writing = explode(",", $treelog[$i]); $writingcount = count($writing); for($j=0; $j<$writingcount; $j++){ list($no,$now,$name,$email,$sub,$model,$com,$host,$pwd,$ext,$w,$h,$time,$chk) = explode(",", $writing[$j]); if(mb_ereg_match($keyword,$com)){ $hit = TRUE; } } if($hit == TRUE){ $hitthreadline .= "$i\n"; $hit = FALSE; } } echo "$hitthreadline";
はじめまして。
携帯で見るページで↓のようなコードでPOST渡しの情報をezwebでやりとりしようとすると、var_dump($_POST)が空になるのですが…どこがわるいのやらわからない。
GETメソッドにするとちゃんとFORMの中身が渡ってるのですがGETにはURL長制限があるので…いい方法ないでしょうか
<html>
<head>
<title>post.php</title>
</head>
<body>
<?php
echo "POSTs:<br>";
var_dump($_POST);
echo "Requests:<br>";
var_dump($_REQUEST);
?>
<form method="POST" action="
http://hoge.hoge/~hoge/post.php " >
<textarea name="message" raws=8 cols=12 >post </textarea>
<input type="hidden" value="test" />
<input type="submit" />
</form>
</body>
</html>
951 :
950 :2009/08/28(金) 14:35:09 ID:FUKcT0P8
まずい、
>>950 sageちゃいました、すいません
953 :
nobodyさん :2009/08/28(金) 14:40:02 ID:IryiXPVo
TREEFILEはスレッド順に並んだログ番号ファイルで 1,3,4\n だとLOGFILEの記事番号1番がスレッド記事、3&4番がレス記事になります。 記事内のコメントにキーワード文字が含まれてる場合、 そのスレッドツリー丸ごと1行分を$hitthreadlineに 該当したスレッド分格納したいのですが どうも上記プログラムを実行すると$hitthreadlineに 何も挿入されておりません。 ログの方にはキーワードを含まれた分があるのですが・・・・ 何かおかしいところあるでしょうか?
954 :
nobodyさん :2009/08/28(金) 14:41:47 ID:IryiXPVo
明らかにおかしかった部分は書き直しましたがまだ先程と動作変わりません。
文章は
>>953 です。
$keyword = "ああああ";
$treelog = file(TREEFILE);
$log = file(LOGFILE);
$threadcount = count($treelog);//スレッド数をカウント
for($i=0; $i<$threadcount; $i++){
$writing = explode(",", $treelog[$i]);
$writingcount = count($writing);
for($j=0; $j<$writingcount; $j++){
$rrrr = $writing[$j];
list($no,$now,$name,$email,$sub,$model,$com,$host,$pwd,$ext,$w,$h,$time,$chk) = explode(",", $log[$rrrr]);
if(mb_ereg_match($keyword,$com)){
$hit = TRUE;
}
}
if($hit == TRUE){
$hitthreadline .= "$i\n";
$hit = FALSE;
}
}
echo "$hitthreadline";
1行ごとに値をチェックしてみ
>>954 そんなコードじゃコピペしてすぐ試せないだろクズが!
define使わないで書けやできそこない
957 :
nobodyさん :2009/08/28(金) 14:50:40 ID:IryiXPVo
>>955 やってみます、ありがとうございます。
>>956 昨日と同じ方ぽいのですが
外部ロダにあげるなやらちょっと無茶すぎやしませんか。
昨日言われたとおりにここにわざわざ書き込んだのに。
結局ログ自分で用意しないといけないから
defineも糞もないと思うんですが。
◆質問後の注意 ・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。 ・解決しなくても回答をもらった場合はお礼を言うこと。 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。) ヌルーしとけー
>>957 $treelog = file(TREEFILE);
$log = file(LOGFILE);
$treelog = file(TREEFILE);
$log = file(LOGFILE);
$treelog = file(TREEFILE);
$log = file(LOGFILE);
$treelog = file(TREEFILE);
$log = file(LOGFILE);
$treelog = file(TREEFILE);
$log = file(LOGFILE);
$treelog = file(TREEFILE);
$log = file(LOGFILE);
$treelog = file(TREEFILE);
$log = file(LOGFILE);
960 :
nobodyさん :2009/08/28(金) 15:04:57 ID:IryiXPVo
$treelog = file("./treefile.txt"); $log = file("./logfile.log"); みたいに書きなおせ氏ね
・ 質問者として、態度をわきまえること。
>>957 >結局ログ自分で用意しないといけないからdefineも糞もないと思うんですが。
日本語でおk
お前が用意しろよ
コピペして動かないだろバカなの?
・ 回答者として、態度をわきまえること。
残念だけどここは抽象的なことを抽象的に返す場所で 具体的な答えを求めてもかえって来ないよ わからんから
ID:IryiXPVoスルー推奨
>>954 本題と関係ないんだけど、
$log[$rrrr]ってことはログ番号=ログファイル内での行番号ってこと?
ログファイルに(バグとか手修正で)意図しない行が追加/削除される
だけで破綻するんじゃないか?
DB使えば?
971 :
954 :2009/08/28(金) 15:54:25 ID:IryiXPVo
データベース覚えるとまた時間かかるので とりあえず基礎技術だけ覚えるために ログからの書き出しで行こうと思いました。 ファイル読む過程中ロックかけても駄目でしょうか?
972 :
954 :2009/08/28(金) 15:56:35 ID:IryiXPVo
>>970 ああああを含む書き込み番号を後で出力するために
変数に格納したいのです。
973 :
954 :2009/08/28(金) 16:01:07 ID:IryiXPVo
あげたphpの8行目の書き方間違えてるようですね・・・・ どうなおしたらいいんだろう。
8行目間違えてるってなんで?
>>972 <?php
$keyword = "ああああ";
$log = file("img.log");
$hit = array();
foreach ($log as $value) {
$tmp = explode(",", $value);
if (preg_match("/^".$keyword."$/", $tmp[6])) {
$hit[] = $tmp[0];
}
}
var_dump($hit);
?>
こういうこと?
976 :
954 :2009/08/28(金) 16:18:52 ID:IryiXPVo
>>974 1行ずつ出力したら思った行動と違う結果が出てきたんです。
ちょっとその部分見つけた後いじりすぎてどこが間違ってたか
具体的に説明できないのですが。
>>975 記事部分だとそうなのですが
欲しいのはツリー部分の該当列番号なんです。
その9番記事が格納されている
ツリーログの0含めて3番目が出力されるのが正解だと思います。
説明足らずですいません。
>>976 <?
header("content-type:text/plain;charset=euc-jp"); $keyword = "ああああ";
$treelog = file("./tree.log");
foreach(file("./img.log") as $line){
$tmp = explode(",", $line);
$log[$tmp[0]] = $tmp;
}
$threadcount = count($treelog);//スレッド数をカウント
for($i=0; $i<$threadcount; $i++){
$writing = explode(",", $treelog[$i]);
$writingcount = count($writing);
for($j=0; $j<$writingcount; $j++){
$rrrr = trim($writing[$j]);
if(mb_ereg_match($keyword,$log[$rrrr][6])){
$hit = TRUE;
}
}
if($hit == TRUE){
$hitthreadline .= $i;
$hit = FALSE;
}
}
echo "$hitthreadline";
?>
こんな感じか?
できるだけそのまま書いてみた。
978 :
977 :2009/08/28(金) 16:22:32 ID:???
>>977 header("content-type:text/plain;charset=euc-jp");
は無視してちょ...。
979 :
954 :2009/08/28(金) 16:25:49 ID:IryiXPVo
>>977 そうです、その動作です。
間違ってると思ってた8行目の動作はあっておりました、すいませんでした。
ちょっと回答ログ見直してどこがおかしかったか見直してみます。
980 :
954 :2009/08/28(金) 16:28:02 ID:IryiXPVo
肝心のお礼忘れておりました、 本当にありがとうございました。 これで前進できそうです。
981 :
954 :2009/08/28(金) 16:48:59 ID:IryiXPVo
申し訳ありませんが最後にもう一つ教えて下さい。 $rrrr = trim($writing[$j]); ここで空白が入ってうまくいってなかったようなのですが $writing = explode(",", $treelog[$i]);//1スレッド分の記事番号を$writingに格納 ここで配列に格納したはずなのになぜ空白が入る余地があるのでしょうか?
982 :
954 :2009/08/28(金) 16:50:11 ID:IryiXPVo
$rrrr = $writing[$j];修正前 $rrrr = trim($writing[$j]);修正していただいた後 補足を
>>982 空白?については判らないけど、
trimなしでうまくいかなかったのは、fileで読み込むと改行コードも入るからだよ。
たとえば、1行目の「18」は実際には「18<改行コード>」になっていた。
$log[$rrrr]は、$log[18]ではなく$log[18<改行コード>]を取得しようとしたが、そんな要素はないので。
それと$logのキーの問題の2箇所がまずかった。
__ _____ r―‐┐┌――┐ _ / ∠___, |______ | /_/7 / 7 厂| | く\ || l ___ | | | _/ 〈_ L/ [_| ヽ」┌─┘└─┐ | |___| | ____| | | 口 口 | /Z_冂_ 〈\.└─┐┌┐│ l ___ | | | | 口 口 l〈_,r┐┌┘ \/__| L_」 |_ | |___| | | | ̄ ̄ ̄ ̄ |┌ー┐|┌ ┘└┐ |__ ___| l ___ | | | || ||└ ┐┌┘ / 〉 / \ | |___| | | ヽ____/| || || | | / / //\ \__ l______| ヽ_____ノ |.」 [__| |_.」 く_/ く_/ \_ノ _ _ _ _ | | __| |__ | | __| |__ | | |__ __| | | |__ __| | | __| |__ | | | | __ | | |__ __| | | | | └─‐┘ | | _ ___| |_ | | _ / / l ヽ__/ | /┌┐ _ \ l ヽ__/ | / / |ヽ___ \__/ ヽ、二__ノ ヽ/ \__/ ∠_/ `ー――'
俺がスレ建てるから待ってろ
>>986 コピペしたままはろうとすると専ブラじゃ制限にかかるようにみえるが
きっちり32ラインになるようにテンプレ作られてるんだよ
>過去スレ、関連スレ、FAQなどは
>>2-10 辺り
これを抜かすのは関心しないな
どうせ削るなら誰も使ってない質問用テンプレ消せばよかったのに
989 :
954 :2009/08/28(金) 17:15:34 ID:IryiXPVo
ご説明ありがとうございます、 お礼にスレ立てしようとしたんですがp2だと ちょっとスレ立て項目見当たらないので 少しお待ちください、検索続けてみます。
991 :
954 :2009/08/28(金) 17:16:54 ID:IryiXPVo
ああ、立ってた。
>過去スレ、関連スレ、FAQなどは
>>2-10 辺り
別にこんなの見ないしどうでもいいに一票入れとく
姉妹スレDAT落ちじゃん
えー・・・ 過去・関連スレはともかく 関連リンクやFAQは重要じゃないか
その一文自体は要らないだろ
いる
>質問者はまず
>>1 を良く読むこと(必須!)
>次スレは
>>980 が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
だけだと
>>1 にしか目がいかない
普通、質問する前に過去スレ過去ログを調べるのが当たり前だから不要
| 1.文字コードは何を使えばいいの? | →1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。 今ならもう UTF-8 のみでいいのでは
>>998 そりゃお前の普通だろw
1000GET
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。