【PHP】下らねぇ質問はここに書き込みやがれ Part19
・part17よりテンプレ化 extractは極力使わないほうがいいと思います。 例えば、 hoge.php?_SESSION[user_pw]=hogehoge って形で送られてきたとします。これを extract($_GET) しちゃうと、$_SESSION['user_pw']の値が、 "hogehoge"に変更されてしまいます。 もし事前にユーザのパスワードを、$_SESSION['user_pw']に 保持してたとしたら、勝手に書き換えられてしまうことになります。 それを避けるために extract($_GET, EXTR_SKIP) ってやって上書きを避けたとしても、 このままでは変数の初期化を忘れる危険性があります。 extract($_GET, EXTR_PREFIX_ALL, "get") と、接頭辞をつけるのが一番安全な気はしますが、 それなら最初から $hoge = $_GET['hoge']; ってやるのと手間が変わらないと思いますし、可読性も増します。 確かにextractするのは楽だと思いますけど。
乙
前スレ1000、舐めてるなw
SQLインジェクションとは 全く心配は要りません。 昔と違い今は法律ができたおかげで安心して脆弱なプログラムが使えるらしいです。
PHPプログラマの心得その1 PHPに求められるものは1に開発の速さ、2に開発コストの安さです。 決してエラーチェックやセキュリティ対策を頑張ってはいけません。 それはコードの冗長化や複雑化を招き、テスト期間の長期化も招きます。 そのような堅牢なプログラムはJavaやC♯といった高性能言語に任せればいいのです。
前スレからの続き。 漏れの会社はデフォではチェックしないが 別料金でSQLインジェクションなどの対策オプションを作って依頼者にはちゃんとやってる。 XSS対策: +1000円 SQLインジェクション対策: 1500円 CSRF対策: +4000円 CSSXSS対策: 30000円 CSSXSSはWebアプリではなくInternetExporerの脆弱性であり対応が困難なので高価になっている。
・・・それは安すぎじゃないか?
11 :
nobodyさん :2006/04/09(日) 01:53:04 ID:qYTyFCRs
>>9 SQLインジェクション対策って、具体的になにしてるの?
外部から渡される値をSQLに埋める時にエスケープしてればそもそも何の心配もいらないと思うんだけど、
わざわざオプションにするような“対策”ってどんなの?
>>11 むしろ「エスケープ外せば1000円値引きできますよ」とかいうオプションにしか見えないw
>>10 mysql_escape_stringやhtmlspecialcharsをかますかどうかなんて
開発コストからしたら500円もしないもののような気がするが。
>>13 それを噛ますかどうか交渉する時間があるなら、最初からやった方が無駄が無いよな。
というか、エスケープなんてのは空気のようなもんで、あって当たり前だと思ってたよ。
エスケープしてなかったら入力にかなりの制限が付くはずだけど、エスケープしない人たちはその辺どうしてるのかな?
一言「運用でカバー」
>>14 交渉自体は営業や担当窓口でやるものだから無駄とか関係ないんじゃ?
で、料金一覧表に最初から明記してあって、発注時に選べばいいだけになってる気がする。
>>16 >>9 のオプション全部入れたって4万もしないようなもんだろ?
それをわざわざオプションを設けて作り分けるってのも、そもそも無駄な気がするけどなぁ
あヤベ、うっかり対策入りにしちまった、外さないと・・・ なんてことになったら目も当てられない
しかし、わざわざする“対策”の内容は興味あるな。
まさか単なるエスケープの有無じゃないよな?
大してデカい仕事やってるヤツいないんだな。 普通は、開発終了後は業務委託契約に切り替えて、 恒久的にバグなどの補填や、セキュリティバグなどの保証とする。 だから、もしそのセキュリティバグから何かの情報が漏れて、経済的負担が出れば、 受託したこっちにもいくらかの負担が発生する。 会社であれば、負担としては小さいかもしれないが、会社の信用が落ちる。 個人だったら、その負担だけでもう一生借金地獄もありうる。 それを極力無くす為に当然SQLインジェクションとか、XSSやらは実装は当然だろ。 100とかそんぐらいのしょぼい仕事してないで、 もうちょっと大きいクライアントとってくれば?井の中の蛙サン達。
一体どのレスに対してのレスなんだ。
PHPおもすれー 最近PHPばっかりだよ。もうintとか型を忘れそうだ・・・
RSSが更新されたらメールで知らせてくれるスクリプト公開してる ところありませんかあ?
>>9 はどう見ても釣りだろ。お前ら簡単に釣られ過ぎ。
プログラマとかオタクは本当に世間知らずが多いな。
3年くらい営業の仕事でもやってこいって感じだ。
>>24 > 3年くらい営業の仕事でもやってこいって感じだ。
> 3年くらい営業の仕事でもやってこいって感じだ。
> 3年くらい営業の仕事でもやってこいって感じだ。
コーディングが出来ないから営業に回されちゃったんですか^^;
かわいそうですね(´・ω・`)
26 :
9 :2006/04/09(日) 03:43:23 ID:???
出力部分をまとめとけばいいじゃない
個人でやっているならそれもありだろうけど、そのコストに 1000円や1500円の代価しかつかない、付けられないってもなんだ かなぁ。
>>27 例えば、$error という変数にはプログラム側でのエラーメッセージ(タグ含む)が入ってるかも知れんし、
全ての変数をエスケープ処理していいわけはない。
そして、前の段階でチェックをすれば、チェック漏れが生じる可能性があるため、
「出力前」の時点でエスケープ処理をするのが一番確実かと。
print "名前: $name<br />年齢: $age"; の例だと、 h ("名前: $name"); echo ("<br />"); h ("年齢: $age"); これのがチェック漏れはおきないんじゃ
うちは function disp_xxxx($data) { $data = array_may('htmlspecialchars', $data); ?> 名前: $d[name]<br /> 年齢: $d[age]<br /> <? みたいな。HTMLのとこは実際は別ファイルだけど。 テンプレートライブラリ使ってることも似たような感じじゃないの? いまどき、print "年齢: $name<br />"なんつーコードは書かんだろ。 > $error という変数にはプログラム側でのエラーメッセージ(タグ含む)が入ってるかも知れん まぁ、エラー表示とかシステム表示系の関数はまた独自のルールで作るもんだよな。 それ以外の通常のHTML表示に関しては、HTMLを書いてる部分(デザイナーが編集してる部分)以外で 変なタグ入れられても困るので変数にタグ入れるのは絶対禁止にしてる。
あ、$d[name]じゃなくて$data[name]だったか。
33 :
nobodyさん :2006/04/09(日) 05:40:16 ID:8VHURzhD
>>31-32 興味ある。
いまいちよくわからんだけど、
$data[name] って何?
35 :
34 :2006/04/09(日) 05:52:04 ID:???
ようするに、予め $data をエスケープしたやつを $d['data'] のように配列に変換しちゃうってことかなるほどねー。 それだと確かに、 print "名前: $d['name']<br />年齢: $d['age']"; とかける。
>>33 考え方の違いが結構ありそうだなぁ。
俺は "名前: ", $name とか"名前" . $name ってのは、関数を通す必要が
あるとかの場合以外は極力使わないようにしてる。(関数使う場合も可能な限り事前変換)
出力内容が . とか , とかで大量に分断されてると、その文中にさらに , . " ' を含む場合に
ミスがあっても一目で判断することが至難の業になるからね。
>>31 の?>HTML<?php 形式ってのは実際には別ファイルのHTMLをincludeで読み込んでるから
微妙に違う話だったりもするんだけど、ちっこいプログラムなんかでは?>HTML<?phpも使う。
理由は対応エディタなら識別してHTMLタグを色分け表示してくれたり、
<DIV>→</DIV>などの閉じタグ間で括弧とかと同様に一発ジャンプできるようになるから。
つーかさ、クラック対策とか以前に入力されたものをエスケープもしないで出力しちゃうっていうのは、使用上の大きな制限が付くわけだろ? コードが綺麗とか汚い云々言う前に、きちんと動くものを作らなくちゃって思わないの? たかだか < とか > とか " とか入力されただけで表示や機能が破綻してしまうわけだよ? マニュアルにそういう入力で画面が崩れるのは仕様ですとか書いちゃうわけ? プロがやる仕事として恥ずかしいとか思わない? ちなみにおれは、画面表示HTMLは別ファイルにしておいて、そこでエスケープやら埋め込みやらするよ。 こんなかんじ。 (コード hoge.php) $keyword=ほにゃらら; $records=検索($keyword); include 'hoge.tpl'; (別ファイル hoge.tpl) <form> <input type="text" name="keyword" value="<?=esc1($keyword);?>"><br /> <input type="submit" name="search" value="検索"><br /> </form> 検索結果<br /> <? if(empty($records)) { ?> 該当レコードはありません<br /> <? } else { ?> <table> <tr><td>名前</td><td>年齢</td></tr> <? foreach($records as $r) { ?> <tr><td><?=esc2($r['name']);?></td><td><?=esc2($r['age']);?></td></tr> <? } ?> </table> <? } ?>
SmartyとかMojaviで、PHPファイル名に「class」という文字列を 挟むのを良く見るのですが、どんな意味があるのでしょうか? (例えば、Smarty.class.phpとかController.class.phpとか) そんな命名規約ってありましたっけ?
SmartyやMojaviを作った人の趣味じゃねーの?
php覚えれば2chみたいな掲示板作れますか?
はい
42 :
nobodyさん :2006/04/09(日) 11:41:43 ID:2atGm5L3
セッションの為の文字列を生成しようと思っているのですが、 一般的にハッシュが使われるのはなぜでしょうか? mt_randを使おうと思っているのですが、何か問題があるのでしょうか?
推測が不可能(に近い)って意味じゃ対して変わらんかも知れんが、 mt_randの方は RAND_MAXの制限を受けるし、 セッションの方は md5(128bits)かSHA-1(160bits)になるから、 まぁ強度が違うって感じかと。
>>42 セッションのための文字列?? セッションIDのこと?
それはPHPが勝手に発行してくれるんでは・・・
[notice] Parent: child process exited with status 3221225477 -- Restarting. [notice] Parent: Created child process 5420 [notice] Child 5420: Child process is running [notice] Child 5420: Acquired the start mutex. [notice] Child 5420: Starting 250 worker threads. Apacheがこのようなエラーを吐いて強制終了してしまうのですが、 PHPコード上、どのような不具合が生じているのでしょうか? パースエラー等が出るわけでもなく、一度は正常に表示されて、 リロードするとこのようなエラーが発生することが多いです。 OSはWinXPです。
46 :
nobodyさん :2006/04/09(日) 14:52:11 ID:LktfeTrO
ファイルのアップローダを作っているのですが POSTで受け渡し print $_FILES["file"]["tmp_name"]; にてjpegならimage/pjpegと表示されるのですが bmpだけ何故か空になってしまいます。 apache2を使っているのですが、設定によるものなのでしょうか?
>>46 まず
$_FILES["file"]["tmp_name"]
ではなく
$_FILES["file"]["type"];
じゃないのか?
それはそうとMIME型なんてブラウザが吐くあいまいなものと
オレは認識しているのだが…ちがうのかな?
>>46 ブラウザが送ってくるContent-Typeを代入しているだけ。
bmpの時に送られてないだけじゃねーの?
当然詐称される可能性があるので、mime_content_type() (こいつは中身(つーか先頭部分だけ)を調べる)か、
getimagesize()なんかで、それが正しいかどうかチェックした方がよい。
49 :
46 :2006/04/09(日) 15:45:47 ID:???
>>46 >>47 すいません。print $_FILES["file"]["tmp_name"]; は書き間違いです^^;
なるほど、理解できました!
ありがとうございました!
>>45 PHPかApacheかどっちかは不明だけど、メモリアクセス違反とかメモリリークとか
そういった内部的な致命的エラーが発生してる確率が高い。
それ、全然くだらん質問じゃないと思う。
同種の話がいくつかML等に転がってるけど
・解決しなかった
か
・ApacheやHPのバージョンを変えたら何故か直った
のどっちかくらいしか見当たらない。
>[notice] Parent: child process exited with status 3221225477 -- Restarting Apacheに詳しい人なら3221225477 = 0xc0000005から何か追えるかもね とりあえず質問する場所はここじゃないと思われ
>>51 ApacheMLでもそのエラーからは何も回答が出せてなかったよ
array_key_existsは連想配列には対応していないのでしょうか? 断層が深い配列がヒットしなくて困っています。
てか、多次元配列(のようなもの)には対応してないんじゃまいか? 次元数が不定なら再帰呼び出しで潜っていくのが吉かと。
>>53 連想配列には普通に使える。2次元以上の深さは無理。
なんでそれを一緒に語る?
ifの条件式で if (0 <= $num < 10) { ・・・ } こういう書き方できないんですか?エラーでてしまいます。 if ($num >= 0 && $num < 10) { ・・・ } これならうまくいくんですが。
"0xFFFFF"という形式のストリングを 実際に16進数の0xFFFFFFという値に変換するにはどうやればよいのでしょうか。 宜しくお願いします。
>>58 hexdec()
マニュアルくらい常備したら?
>>59 ありがとうございます。
型の変換パートと、文字列パートばっかり探してました。
mathにあるなんて思いもしませんでした。
「進数変換」って言葉知ってる?
62 :
nobodyさん :2006/04/09(日) 19:40:47 ID:yKOq7PT+
MySQLなどとの連携にすぐれているといわれてますが これがあると具体的にどのように役にたつのでしょうか? phpだけでは掲示板とか作れませんか?
データベースが無くてもつくれます。
>>63 より大規模で高性能なものを作るときに、高速で安定したものが作れます。
個人サイトのちっこい掲示板くらいなら別に無くてもいいです。
67 :
42 :2006/04/09(日) 21:18:39 ID:2atGm5L3
>>43 RAND_MNAXの制限を受ける点については一文字ずつ生成すれば良いと思うのですが、
元々考えていたtiger192,4でのセッション文字列生成より明らかに遅い(五倍ほど)のが気になります。
for($i = 0; $i <=32; $i++) { $hash .= chr(mt_rand(62, 126)); }というコード(同じ192ビット)でベンチマークを取ってみたのですが。。
出来ればchrを\xにして、forを使わないようにすればもう少し早くなりそうなんですが。自分ではこれが限界です。
どなたか上のコード添削していただけると嬉しいです。
乱数生成であれば専用の関数を使った方が早いように思えるのですが、ハッシュの方が適しているのでしょうか?
それとも適切なコードを書けばそれより早い結果を得られるのでしょうか?どなたかご教示していただけると嬉しいです。
>>44 PHPの機能は使わず自作する場合です。PHPではハッシュを使ってるみたいですね。
>>45 Warningエラーの行はない?Noticeだけでは落ちないと思うのだが
2chが未だにSQLを採用しないのにはどういうわけがあるんだろ
SQL(つーかデータベース)を使うメリットがあるならそっちの方が知りたいね。
73 :
nobodyさん :2006/04/09(日) 22:18:52 ID:qYTyFCRs
>>67 完全な乱数を、ダブらないことを保証して作るのは少し面倒だったりしない?
完全な乱数だなんて、そんなパンドラの箱を・・・
>>73 重複を許さないのであれば、それは乱数発生ではなくてシャッフルになるだろ
76 :
42 :2006/04/09(日) 22:44:08 ID:???
>>73 ご返信ありがとうございます。完全に均等である(事を目指している)が故に、ハッシュを使うのも乱数を使うのもコリジョンの確率は同程度だったと記憶しております。
先程のコードを検討してみたところループで馬鹿みたいにロスをしていたので、現在二度mt_randを使って生成するように頑張ってます。
素直にハッシュ使えば良いんですが、どうしてももやもやするので。。
>>70 単純でミニマムな要素を組み合わせて大規模にした構成の方が結果的に高速だから。
ここまででかくなると普通にDBにしても性能は出ない。
凝ったDBを構築するくらいなら生datを専ブラに拾わせる今の形態の方がずっとシンプルで性能がいい。
>>42 現在使用中の他と重複しない一意の文字列を生成するのに
1番手っ取り早くてリソースも食わなくて高速だからでは。
逆にもっといい手法ってあるの?と聞きたい。
色々書いてる1桁ずつ乱数使って…とかいう話は「バカ?」としか思えない。
普段から常用するセッションIDの生成にそんなリソース食う方法使えるわけないでしょ。
79 :
42 :2006/04/09(日) 23:12:45 ID:2atGm5L3
>>78 素人考だとハッシュの生成(同一性も確認できる均等に分配される文字列)より、乱数の生成(均等に分配される文字列)の方が早いような気がするのですが、
もしよろしければなぜハッシュの方が早いのか教えていただけないでしょうか?気になります。。
80 :
nobodyさん :2006/04/09(日) 23:25:38 ID:aTeqKq3o
前スレ988です。 前スレ990さんいますか? javascriptでやる方法は検討していたのですが、分かりませんでした。 小窓からjavascriptを使って、メインウインドウのselectの内容(mysqlに 新規に追加した項目)を更新したいです。 使用する関数や具体的なコードのヒントが書かれたページなど ご存知でしたら教えてください。 よろしくお願いします。
81 :
前スレ990 :2006/04/09(日) 23:27:26 ID:???
83 :
82 :2006/04/09(日) 23:34:05 ID:???
あ、小窓を開くのね。
じゃあ Ajax なんていらないね。
>>81 が正解だと思う。
>>80 JavaScriptの基礎的テク。
その辺の初心者向けサンプル集にも書かれてるんじゃない?レベル。
会社がただのhtmlとcssでwebサイト作るだけからphpとDB使った仕事も受けるようになってから、勉強しながらこなした仕事の中には全くセキュリティ対策してないのもあるや。アヒャヒャ
>>31 array_mapだよね?
array_mapで、POST、GET、SESSION、COOKIEもしくは$_REQUESTにまとめて掛けちゃうのがやっぱり定番なんですかね?
その他、エラー処理なんかどうしてますか?>エラーとする文字列の検出
例えばあきらかに悪意のある文字列が含まれてる時とか・・・
漏れは、そういうときは、もう別画面に飛ばして、全部、自分に$_REQUESTの内容をメールで飛ばすって感じ。
個別に「○○欄に○○が含まれています」みたいなエラー処理(エラー告知)は、マンドクサ
顧客が記入するフォームはめんどくさいけど、項目数たかが知れてるから力技でなんとかしてる。
>>33 漏れはたいていこう書く
echo "名前: {$name}<br />年齢: {$age}";
これが一番可読性よくない?
>>前スレ993
POSTした検索条件をセッションに入れておいたうえでページングとか?
>>85 $_POST全部エスケープとかはしないなぁ。
必要なのはあくまでSQLに入れるデータとHTMLに吐き出すデータでしょ?
だからSQL用の関数・メソッドと表示用の関数・メソッドでそれぞれ
受け渡したデータのみ変換かけてる。
>>76 予め文字列連番を数億個生成しておいて、
都度食いつぶしていけば?
>>79 単純な、ハッシュ値の算出vs1回の乱数ならそりゃ乱数の方が速いだろうけど、
今やろうとしてるのは30〜50桁を桁数分だけ毎回乱数取得だろ?
そんなのどうやってもハッシュほど速くなんて計算できないだろう。
91 :
42 :2006/04/10(月) 01:17:38 ID:EZQH4hCw
>>86 返信ありがとうございます。この実行時間差で悩んでるので、それはちょっと、、です。
>>90 forのところが悪いですか。。一度で算出しようにも桁数が大きくなりすぎてorzです。
いくつかに分ければ出来るかなぁ、と試行錯誤してますがスキル不足で出来ません><
もしよろしければコードを、、と甘えてみるテスト。
なんだこいつ うぜえ
>>91 > もしよろしければコードを、、と甘えてみるテスト。
だからハッシュでやれって。無理だから。
何のためのハッシュだと思ってんのよ。
スキルも無いくせに「乱数の方が速いはずだ」とかいいかげんなことぬかしてんじゃねぇ。
94 :
42 :2006/04/10(月) 01:47:28 ID:???
ごめんなさい。非常に申し訳ないのですがベンチマークで致命的で初歩的なミスを犯していました。 普通にMTでの生成が早かったです。お騒がせいたしました。
釣りウザ
質問させてもらいます Webサイトを作っているのですが ページの一番下段に、コピーライトなどの文を入れています。 今までは一々、1ページ枚にHTMLで記述していたのですが それだと、その文(コピーライト等)に変更があった場合全て書き直しが必要になるので PHPを使い、その部分を読み込もうと思いました。 ですが、実際にやってみると そのコピーライトの部分を読み込む際に require('./under.php'); とやると、同位のディレクトリからは問題なく読み込めるのですが その下位のディレクトリになると require('./../under.php'); 等としていかなければならず、ディレクトリ構成に変更があった場合は 結局書き直しが必要になってしまいます。 こういう場合は、皆様はどのようにして 上記のようなことを実現しているのでしょうか? すいませんが、教えていただけると幸いです。 どうかよろしくお願いいたします
日本語でおk
>>96 1.フルパスで書く
2.$_SERVER['DOCUMENT_ROOT']からのパスにする
3.includeパスを設定する
好み+TPOでご自由に
みなさんありがとうございました。 フレームワークのEthnaを使っていたのですが、その設定部分に 'log_facility' => 'user', とするとこの現象が起きていたようで、結局この部分を書き換えてとりあえず スクリプト自体は動くようになりました。 また、PEARをinclude_onceする部分をコメントアウトするとことでも Apacheの強制終了が無くなりました(当然Fatal Errorでスクリプト自体は動きませんが)。 根本的な原因はわかりませんでしたが、PEARとEthnaのLogger周辺が原因となっていたようです。
>>96 98の続き。
4.その程度のことを自分で解決できない場合、
コンピュータのセンスが無さ過ぎのでプログラミングは諦める。
>>31 可読性が増すのでその方法を採用しようと思うのですが、
幾つか質問があります。
array_may という関数を使っているようですが、これはどのような処理のユーザ定義関数でしょうか?
104 :
102 :2006/04/10(月) 08:44:10 ID:???
>>103 ありがとうございます。
幾つか質問があります、と言いましたがあまり質問しまくるのも良く無いので
続きは自分で調査、研究してみます。
>>104 一応言っとくと、
>>31 はあちこち書き間違ってるのでそのまま鵜呑みにしないのが吉。
このスレが一番面白いな。
> の引用符をテキスト文に加えたいのですが、 ぱっと思いついた方法は file()で各行を配列に加えて、 各要素に> を加えて、再度結合です。 もっと簡単な方法あったらきぼんぬです。
108 :
80 :2006/04/10(月) 13:30:27 ID:qYnFdAMk
81〜84レスありがとうございます。 javascript質問スレにいったのですが、あまり人がいないようで解決できていません。 onchangeとかonfocusでやるっぽいのですが、 どうやってリロードせずに新しいレコードをmysqlから引っ張るかが分からないです。 スレ違いだとは思いますが、ヒントをもらえるとうれしいです。
こんなのどう? $text = Preg_Replace("/(.*\n|.+)/",">$1",$text);
110 :
109 :2006/04/10(月) 13:31:51 ID:???
改行コードを改行コード+>に置換
113 :
109 :2006/04/10(月) 13:44:37 ID:???
>>112 ん?どうおかしい?
0文字以上+改行か、1文字以上の行の先頭に > を付け足すようにしたつもりだけど。
.*\n だけだと $text の最後にも無条件で改行が付いちゃうし、
.* だけだと空行の先頭に改行が付かないからこんな感じに落ち着いたんだけど。
× .* だけだと空行の先頭に改行が付かないからこんな感じに落ち着いたんだけど。 ○ .+ だけだと空行の先頭に改行が付かないからこんな感じに落ち着いたんだけど。
116 :
109 :2006/04/10(月) 14:01:44 ID:???
説明がメタメタでしたね・・・ スレ汚しとは思いつつも、気になるので書き直します。 .* だけだと $text の最後に無条件で > が付いてしまうから .*\n にしたんだけど、 これだと $text の最後の行が改行で終わってないとその行に > が付かないから .*+ も付けてみた が正しいです。
117 :
107 :2006/04/10(月) 14:03:05 ID:???
正規表現の行頭
^
121 :
109 :2006/04/10(月) 14:24:45 ID:???
>>120 $text は複数行で構成されているつもりだったので、
シングルラインモードならそれ付けたらうまく動かないし、
マルチラインモードでは ^ はあっても無くても同じ動作になります。
122 :
108 :2006/04/10(月) 14:38:17 ID:qYnFdAMk
>115さん レスありがとうございます。 amazonでもオススメだった、mdnのjavascriptビジュアルリファレンスを買いました。 やりたいこととしては、 投稿フォームの真ん中あたりまで記入すると、カテゴリーのプルダウンが 出てくるん出すけど、そのプルダウンの下に「新規カテゴリーを登録」という ボタンがあって、それを押すと小窓が開きます。 小窓には登録済みのカテゴリーのリストが出ていて、新規登録用の inputがあって、カテゴリーの削除なんかもここでできます。 登録が完了して、小窓を閉じて、再びメインウインドウに戻ったときに カテゴリーのプルダウンをクリックすると、さっき小窓で登録した カテゴリーがリストに載っているという状態にしたいのです。 カテゴリーはカテゴリー名しか入っていないテーブルで管理されていて、 新規投稿フォーム(メインウインドウ)が開かれたときに select category from categorytableみたいに呼び出されます。 小窓で新規登録した後に、リロードすれば反映させられますが、 カテゴリー選択以前に記入していた各inputの内容もクリアされてしまいます。 この場合でも、115さんの方法で解決できますでしょうか?
123 :
nobodyさん :2006/04/10(月) 15:15:48 ID:T3nuwwG3
教えてください。 $data = @file($file); //50行 for($i = 0; $i<10; $i++){ //最新10件表示 list($A,$B) = explode("<>", $data[$i]); echo "<p>$A $B</p>"; } こんな感じになってて、$dataには通し番号が入っていません。 最初に行数を数えて、 50 49 48 ・・・と言う風に新しい方に大きな番号を振っていくにはどうしたらいいでしょうか?
>>122 できるよ。
小窓から登録なり削除をしたとき、submit するわけでしょ。
その応答ページに、メインウィンドウのフォームオブジェクトを書き換える JavaScript を埋めてやって、
処理完了後に小窓を閉じればいい。
メインウィンドウをリロードする必要なんて無い。
>>123 count($data) で件数が取れるよ
その例で言えば 50 が返ってくる
126 :
123 :2006/04/10(月) 15:43:02 ID:???
>>125 そんなことは分かってるんですー。タイミングが分からないんですー。。
って思ったんですけど、言われて改めて考えたら分かりました!
$no = count($data) - $i;
ってすれば良かったんですね!$x-1とかやって悩んでました。
ありがとうございました。
うざ
そんなことは分かってるんですー。
そんなことは分かってるんですー。
130 :
108 :2006/04/10(月) 16:41:02 ID:qYnFdAMk
124さん ありがとうございます。本当に感謝です。 板違いにもかかわらず、親切に答えてくださって助かります。 応答ページというのは、「登録が完了しました。」とか出るページでしょうか? 自分のコードではそこでinsert intoの処理をしています。 それとメインウィンドウのフォームオブジェクトを書き換える際に必要な 構文とかが具体的に分かれば教えて欲しいです。 それが分かればネットの情報とリファレンスを使って書いてみます。 よろしくお願いします。
>>130 opener
options[n].text
options[n].value
こんだけあれば十分でしょ
>>130 必要な値を子から親にPOSTかGETで渡してリロードさせればいいんじゃないの?
というか構文とか教えたらネットの情報とリファレンスで出きるなら、
自分で調べるか諦めて業者にだしたら?その方が早い予感
>>132 元々の話が、リロードさせると入力途中のフォームの内容が失われるって話で、
JavaScriptでselectの内容だけ書き換えたいって質問。
会社で、希望者へ独自メルマガ配信をやってるんだけど、 一部の登録者のサーバーでたまにスパムだと誤認されて 届かなくなり、その人から「メルマガが届いてないぞゴルァ!」って 怒られるんだけど、これってこちらではどうしようもないよねぇ? 「おたくの会社のサーバー管理者に相談してね」って言うしかないよね?
135 :
134 :2006/04/10(月) 19:11:14 ID:???
ちなみにある登録者宛のメルマガがエラー戻ってきたときに 付加されていたメッセージはこれ↓ Remote host said: 450 Recognized as SPAM. Please set your server address in DNS. Till then!
>>135 見覚えのある目欄だけど、配信鯖の逆引きを設定すれば?
138 :
134 :2006/04/10(月) 19:16:51 ID:???
>>136 あ・・・・・・・今、気が付いたんだけど・・・・・・・・
こっちが使ってるサーバーが実はXREAなんだよね・・・・
そういえばXREAはここ数日、大騒動になってるんだったっけか。。。
ウチは独ドメだから関係ないと思っていたけど、この騒動と関係ありそうだな。。。
139 :
134 :2006/04/10(月) 19:19:35 ID:???
>>137 すいません、逆引きって自分で設定できるんでしょうか・・・??
>>138 届いたり届かなかったりするならXREAがどうとかじゃないと思われる
おそらく届かないユーザーにaolだとかaolだとかaolだとかあとaolとか
のユーザーはいないか?
>>139 曖昧だが、IP管理元に言わないと駄目だった気がする
そして別途費用がかかった気がする
142 :
134 :2006/04/10(月) 19:27:43 ID:???
>>140 日によって届いたり届かなかったりする登録者もいるし、
毎回必ず届かない登録者もいます。
そしてaolは見たことがありません。登録者のドメインはいろいろです。
143 :
134 :2006/04/10(月) 19:29:21 ID:???
>>134 そりゃそうだろ。無理矢理送信できたらスパムだって簡単に大量に受信させられるってことだし。
145 :
134 :2006/04/10(月) 19:32:15 ID:???
>>144 え? ちょっと意味がよく分からないのですが、
何を指して「無理矢理」なのでしょうか??
ちゃんと受信者からはメルマガ送信許可をもらっています。
>>140 いま、xrea.comドメインがREGISTRAR-HOLD食らってるから
DNS鯖によってはどっち向きにも引けないのよ。
だから、aolとかaolとかaolとかだと蹴られるだろうし、
先方さんが「逆引きできないMTAとは話さない」設定でも蹴られると思う。
>>139 >>134 がカ)デジロックの中の人なら、ns[1-3].value-domain.comの設定をごにょごにょ。
ていうか、いくつか前のスレで「1万人の会員にメルマガを…」って言ってた人とは別?
XREAでどんくらいの数を撒いてるのか、ちょっと気になる。
>>146 >REGISTRAR-HOLD食らってるから
いま調べたら「Status: Active」だったYO。
148 :
108 :2006/04/10(月) 20:56:32 ID:qYnFdAMk
>>148 難易度は高くないよ。スクリプトもそんなに長くならないはず。
おれだったら、メインウィンドウに JavaScript の関数を作って、そいつにフォームの select に値を設定させるようにするかな。
たとえば function setup(a) みたいな関数を作っておいて、小窓の「登録が完了しました」画面から opener.setup(a) で呼び出す。
小窓から渡す a は、Array('選択肢1', '選択肢2', '選択肢3', ...) みたいに配列にしてさ。
ようするに、PHP は小窓の完了画面の HTML にこんな風に出力する
<html>
<body onLoad="opener.setup(Array('選択肢1', '選択肢2', '選択肢3'));">
登録が完了しました
</body>
</html>
メインウィンドウに実装する setup の中身は自分で考えてみて
150 :
nobodyさん :2006/04/10(月) 21:29:34 ID:ZFW0IoNM
151 :
149 :2006/04/10(月) 21:45:45 ID:???
× <body onLoad="opener.setup(Array('選択肢1', '選択肢2', '選択肢3'));"> ○ <body onLoad="opener.setup(new Array('選択肢1', '選択肢2', '選択肢3'));"> ただ、new Array は引数が 1個の場合には 2個以上の場合と機能が違って使いづらいこともあるから、 小窓からの呼び出しは <body onLoad="opener.setup('選択肢1', '選択肢2', '選択肢3');"> にして、メインウィンドウの関数は function setup() { var i; for(i = 0; i < argments.length; i++) { argments[i] をごにょごにょ } } みたいにするとか。
>>150 まず、インターネット上で、ドメインなどを例として挙げる時は、
example.com、example.net、example.orgなりを使う。
RFC2606で規定されているから、まずはそれを覚えろ。
で、ログがあるなら、そのログをコピペしてみれ。
153 :
108 :2006/04/10(月) 22:49:43 ID:qYnFdAMk
149さん なんて親切なんだ!泣きそうなくらい感謝します。 ちょっと検証します。結果は明日また書きます。 ありがとうございました。
なんだかんだでお前ら優しいな。 惚れたぜ
155 :
150 :2006/04/10(月) 23:59:28 ID:ZFW0IoNM
>152
決まりごとを知らずに失礼しました。
あらためて質問します。
作成中のサイトは
http://example.com/のようにアクセスすることでトップページへ飛びます 。
その飛び先のデフォルトとして.htaccess内でDirectoryIndex index.phpとして
phpがコールされるようにしています。
念のためダミーでindex.htmlを作ってありますが、METAタグのrefreshで
http://example.com/をコールするようにしています 。
ここで問題なのですが、サーバの解析ログをみたところ次のようになっていました。
23:01 stop.example.com index.php ←おそらくサーバによるプロセス強制終了
23:01 user.example.net index.php
23:01 user.example.net index.php
23:01 user.example.net index.php
中 略
23:00 user.example.net index.php
23:00 user.example.net index.php
23:00 user.example.net index.php ← 実際にアクセスした時間
http://example.com/の呼び出しは1度だけです 。
この場合どのような原因が考えられますか?
っていうかPHPと関係無いんじゃねぇの?
158 :
nobodyさん :2006/04/11(火) 01:45:57 ID:Vmfip3pd
すいません質問です magic_quotes on sjisで書いてます。 文字列をPOSTすると「表」とか文字化けするのでstripslashes使ってるんですが、 ブラウザに出力する場合はこれでOKなのに、 MYSQLに送ろうとすると後ろのタグまで格納されておかしくなっちゃいます stripslashesをはずしてMYSQLに送ると正常に動くのですが、何か納得いきません (例:格納前の文字列は確かに「予\定」なのに、DBには「予定」で入ってます。) この辺詳しい人いたら教えてください。
>>158 DBはEUCになってるんじゃないの?
それにSJISのコードを無理やり格納しようとするもんだから、\ 記号がエスケープ記号として有効に働いちゃってるとか。
160 :
158 :2006/04/11(火) 02:12:01 ID:Vmfip3pd
>159 いやDBはSJISなんです それで自分で書いときながら何ですが、タグまで格納されると言うのがミソかなと 何で「予定」が「嵐・></TD></TR><TR><TD></TD><TD><SELECT、、」 みたいなとんでもない文字列になっちゃうの?
1. HTML 上の文字コード(ブラウザが送信に使用するのは一般的にコレ) 2. (設定があれば)PHPによる文字コード自動変換 3. スクリプトによる文字コード変換 4. (環境次第では)MySQL の文字コード自動変換(SQL による INSERT/UPDATE 時) 5. (環境次第では)MySQL の文字コード自動変換(SQL による SELECT 時) 6. HTML として表示する際の HTTP ヘッダと meta 要素による Content-Type の文字コード どれかがおかしい
ENVチェッカーを作りたいのですが そういう関係の定義済み変数が載っているサイトはありませんか?
>>158 本当にDBはSJISになってるか?
MySQLのiniファイルをC:の直下に置いてみろ
MySQLはデフォルトの場所にiniファイルを置いてると読み込みに行かないことがあるぞ?
>>158 >magic_quotes on
1秒でも早くoffにしろ。
>sjisで書いてます。
5秒以内にEUCにしろ。
>>158 とりあえず
stripslashesした文字列をMySQLに投げるときはmysql_real_escape_stringとかしとくが吉
\は文字コード関係なくエスケープの必要あり。SJISは漢字に\が含まれるからいまいち
166 :
nobodyさん :2006/04/11(火) 07:17:53 ID:h7+HNAKj
phpmyadminでmysql管理したいのに、config.inc.php?入ってないじゃん。 しかも公式の説明では、自分で作れ。とか。知るか。 もう誰か教えれ。
正直eucもださいからutf-8にしてほしい
170 :
通訳 :2006/04/11(火) 10:05:36 ID:???
>>145 spamフィルタリングしているものを、フィルタを無視して(=無理やり)
送信できるなら、spamメールセンダーだってやってる。
javascriptスレ違いウゼーとおもいつつ、 ajax全盛の今、PHP使いでもjavascriptは必須だなと思ってスルー
Ajaxなんて標準規格が無くブラウザの仕様に依存するようなもん使う気になれない。 もし使うなら対応ブラウザ以外でも正常に表示できるような等価な内容のページも作ってね。
>>164 今時なんでEUCなんてUnixOSと特定の言語に依存した文字コードを使うんだ?
UTF-8を使えば、OS、言語に依存しないのに。
174 :
171 :2006/04/11(火) 10:42:19 ID:???
まあ、サイトの目的によっては向いてないのかもな。 俺が今手を掛けてるのは単なる俺の金稼ぎ目的のサイトだから、 利用できる大半の奴が便利に利用できれば無問題。
175 :
172 :2006/04/11(火) 10:51:47 ID:???
>>174 そういうサイトなら無問題だね。
政府機関のサイトとかUnixヲタ向けページではAjax版しか提供しないってのはやるべきじゃないけどね。
漏れのサイトでそれやったら、
Lynxで表示できないページなんて許せないです(><)
って言われます。
>>173 UTF-8だと日本語に3バイト使うからねぇ。
単純計算で日本語部分のサイズが5割増になるわけですよ。
じゃUTF-16か?っていうと現時点での普及状況や、全範囲の文字に2バイト使うことなど考えるとソースコード肥大化が心配でちょっと微妙。
それじゃとりあえずSJISかEUCでいいや、という話になるじゃないですか。
どうせ今時のPHPはマルチバイトも問題なくスキャンしてくれるわけだし。
・・・といいつつ俺自身はUTF-8派だったりする orz
177 :
173 :2006/04/11(火) 11:38:32 ID:???
>>176 日本語に3バイト使うと何か問題起こる?
今の時代、巨大なポータル(Yahoo!)レベルで採用してもコスト上問題無いと思うけど。
ソースの容量の全体(HTMLタグ、インデント、画像、Flash、JavaScript、CSS)の中で
文字が占める割合ってそこまで多く無いと思うんだがな。
DBの容量くらいしかきにならんよなw
phpでユーザの偏差値を出したいのですが、 そういった関数を配布しているページをご存知な方はいらっしゃいますか?
>>177 気にならないなら気にしなければいいだけだよ。
例えば2chのログを丸ごとUTF-8に変えたら容量が大変なことになるでしょ。
文字情報が中心なサイトで容量に何らかの制限があるなら気になってもおかしくないと思うけど。
もちろん気にならなくてもおかしくないし。
つーか俺は気にならないからUTF-8使ってるっつーの。
>>181 いや、高いだろ。
プログラミングをするという時点で偏差値的にはかなり高くなるはず。
日本全国の国民を対象に数学のテストを行い、
phpユーザの偏差値の平均を出したとしよう。
そうしたら、65ぐらいにはなるな。
えらい高いなw
>>182 まともにプログラミングできない人が選ぶ言語がPHPだってことを忘れてるな?
>>184 Webプログにおいては生産性が最も高い言語だろ
まともにプログラミングできる人でもphpを選ぶ
187 :
179 :2006/04/11(火) 12:11:47 ID:???
>>185 pearにあったとは感激です。
ありがとうございます。
>>186 99%のまともにできない人と1%のまともにできる人の集合で
偏差値がどこまで上がると思ってるんだ?
PHPは底辺ユーザの人数が恐ろしくでかいことを忘れてるな?
まー、php-users MLとか見てると「こないだまで農業やってた50歳です。 日本語も満足に話せませんが教えてください」みたいのがごろごろしてるしな…
>>188 母集団は国民全体だぞ。
年齢層の限定をしただけで数学のテストを行った際の偏差値は一気に向上する。
例えば、16才〜35才の偏差値を出せばそれだけで60は軽く超えるだろう。
世の中には数学なんて一切関係ないような職業は山ほどある
底辺言語であってもプログラミングをやっている人に限定すれば数学の偏差値はかなり高くなることが予想される
>>189 ごろごろはしてねーよ
そんなのそれこそ一部だろ
なんかPHPに夢見てる人が1人いるな
つーか、質問の趣旨からあきらかに外れて盛り上がるなよ。
>>181 が一番偏差値が低く、それに絡む奴はもっと低い。
>>172 おれは隠しフレームにフォーム作って、そこでサーバとのやりとりして Ajax みたいなことやったことあるよ。
ただ、隠しフレームってのいまいち使いづらいんだよね。
何かいい方法あるかな?
>>181 にはかなりワロタw
こういうギャグが思いつく時点で偏差値はかなり高いと思われる
195 :
152 :2006/04/11(火) 12:49:59 ID:eIuCYO6J
>>157 index.phpの中ではLocationなどは使っていないです。
403エラー時の飛び先設定はトップの.htaccessでは記述してませんが
トップより下の階層のフォルダでは確かに.htaccessに403エラー時の飛び先を書いています。
でもこれはトップのフォルダには関係しないですよね?
それで一応パーミッションも見直してみましたが変化ありませんでした。
自分も無限ループしています。誰か助けて・・・
196 :
155 :2006/04/11(火) 12:51:00 ID:???
↑番号間違えました。 152じゃなくて155です。
>>193 Flash使えばいいじゃん。
Ajaxなんて生産性も対応ブラウザもFlashを下回るのに使う意味あるの?
Flash Player が使える環境は全体の 97.7% だが、JavaScript が使える環境は全体の 95%以下。
そして、Ajaxアプリケーションが動作する環境だと、93%ぐらいまで下がるんじゃないだろうか。
AjaxでできることでFlashでできないことなんてある?
例えば、Googleマップなんて普通にFlashで作れるよ。
>>192 「1番」低いやつに絡む奴がもっと低い…
素晴らしい!これほど偏差値の低そうな回答がかつてあっただろうかwww
やっぱPHPやってるやつってバカばっかじゃねーの?
Flashなんて時代遅れ 今はFlexの時代
各自自分の巣に帰ってください! >< ここはphpのしかも質問スレです
>>202 ここはphpのしかも「下らねぇ」質問スレです
>>197 Flash で UI 作ることを本気で考えたことがあるんだけど、
ファイルのアップロードができなかったりして、
なかなか難しいのよね
205 :
197 :2006/04/11(火) 15:39:53 ID:???
>>204 ファイルのアップロードか
それは盲点だった
206 :
179 :2006/04/11(火) 15:48:06 ID:???
皆さんありがとうございます。 偏差値のために新たな拡張モジュールをインストールするのも面倒ですので、 自力で偏差値の算出関数を作っちゃいました。 教えて頂いた情報は今後の参考にします。 // 偏差値の算出 // $allPoint ・・・ それぞれの参加者の得点を入れた配列 // $point ・・・ 偏差値を出したい参加者の得点 function u_DeviationValue($allPoint, $point) { $average = array_sum($allPoint) / count($allPoint); // 平均値 $molecule = 0; // 標準偏差の公式の分子の初期化 foreach ($allPoint as $number) { $molecule += pow($number - $aberage, 2); } $standardDeviation = $molecule / count($allPoint); // 標準偏差 $DeviationValue = (10 * ($point - $average) / $standardDeviation) + 50; // 偏差値 return $DeviationValue; }
>>206 標準偏差求めるループの中の pow は掛け算に置き換えるとたいてい速くなるよ。
$molecule += pow($number - $aberage, 2);
↓
$d = $number - $aberage;
$molecule += $d * $d;
>>206 別にそれでもいいけど、標準偏差を効率的に計算するアルゴリズム高校で習わなかったの?
フォームのチェックボックス(複数)から送るnameってみんなどんな感じにしてる? 配列にしてる?してない? してるなら name="a[]" name="a[]" name="a[]" とする?それともキーを指定する? name="a[0]" name="a[1]" name="a[2]" 配列にしないなら name="a1" name="a2" て感じ?一般的にはみんなどうなの?
210 :
206 :2006/04/11(火) 16:43:59 ID:???
>>207 ありがとうございます。
2-3割早くなりました。
>>208 速度に困ったら調べてみます。
>>209 用途によるんじゃない?
単純に選択されたものの一覧だけ欲しければ a[] で、
何らかのキーと対応付けた一覧が欲しければ a[xxx] でかな。
a1、a2 なんかは JavaScript と組み合わせるときに使ったりする。
JavaScript は a[] みたいな name のフォームオブジェクトを簡単には参照できないから。
>>211 俺はJavaScriptを併用するときはIDで別名つけてる
>>206 その関数、もしループの中で何度も呼び出すような使い方をしてるなら
標準偏差を求める部分と
偏差値を求める部分で別の関数にした方がいいと思う。
>>211 なるほど。自分はいつもa[]しか使ってなかったので、みんなどうしてるのかなと思いまして。参考になります。
215 :
206 :2006/04/11(火) 17:44:56 ID:???
>>213 ループから200回ぐらい呼び出す処理ですが、全体でも処理時間は数十ミリ秒だったので気にしてませんでした。
確かに無駄なので別の関数にしときます。
216 :
nobodyさん :2006/04/11(火) 19:33:01 ID:3spEuCl2
cronからPHPを定期実行させたいのですが、 下記のようなエラーがでます。 Fatal error: Call to undefined function: pg_connect() pgsql.so のモジュールははいっており 同じスクリプトをWeb上からは問題なく実行されます。 何が原因なのでしょうか?
php.iniの参照場所が違うと思われ。
指定された文字がある行を探す?場合はどのようにすればいいのでしょうか? たとえば 0<>aaa<>aaa<>aaa 1<>bbb<>bbb<>bbb と言う感じで1が含まれてる行だけ配列に入れたりする事は可能でしょうか?
>>218 素直にループで一行ごとに判定するってのは?
220 :
216 :2006/04/11(火) 20:05:53 ID:???
>>217 ありがとうございます。
すいません!もう少し詳しくお教えてください!
13Mくらいのファイルを一分に一回くらい読み込んだりし、五分に一回くらい書き込んだりしてます。 これで容量がさらに倍(26M)くらいに増えそうなんですが。DBにした方がいいでしょうか?
残念ながらDBはハードディスクとのやり取りを高速化するためのものではありません。
224 :
216 :2006/04/11(火) 22:01:06 ID:???
ありがとうございました! 自己解決しました。
トラックバックの仕掛けがわからない。他人のを読んでも全くワカラン。 なんかわかりやすい解説してるサイト無い?
blogのスレで訊け
227 :
nobodyさん :2006/04/12(水) 02:37:04 ID:8N7Yz7+/
やりたい事は、
メール受信(from:
[email protected] )
↓
内容を変更(Subject,本文)、SQLorテキストファイルに書き込み
↓
あらかじめ登録されたメールアドレスに転送(to:
[email protected] )
サブアドレスを無料供与するかわりに、広告を入れるようなサービスです。
メールサーバーには転送済みデータは残したくないのですが、他の形で保存しておきたいのです。
これを1万人ぐらいの登録されたユーザー相手にしたいのですが、PerlとPHPしか書けません><
PHPやCGIでメールサーバーに接続するのって負荷が大きいですよねぇ。。
cronで定期的に呼び出すのは無理かなぁと。。
MLソフトで似たような事ができるものってありますかね?
>>227 まずはコンピュータよりも日本語の勉強からやったほうがいい。
そして、そんなレベルの質問をしてるようでは、1万人も相手にした
サービスを提供するのは(危なっかしくて)不可能だから諦めろ。
>>227 その程度の認識で1万人ものユーザを相手にサービスなんて
社会の大迷惑以外の何物でもないので頼むからやめてください
メールが保存される転送サービスなんて( ;´Д`)いやぁぁぁぁぁー!
メール転送サービスでメールの内容を勝手に保存するのって、 法律的にはOKなのかね??
232 :
nobodyさん :2006/04/12(水) 07:34:49 ID:ZC3dGFkj
>>231 個人的に利用してなければ保存していた方が逆にいいだろ。
何かあったら使えるし
>>227 小学校3年生くらいからやり直してください
234 :
227とは別人 :2006/04/12(水) 09:05:22 ID:wIeov7As
>>225 更新通知系pingには
・トラックバックping
・RPC ping
の2種類があることを認識した上で、
それぞれについて調べるといいよ。
一部のブログは、両方まぜてpingといったりトラックバックといったりしてるからね。
236 :
234 :2006/04/12(水) 10:13:25 ID:???
下記な感じでできました。 php4.2.3 のCGI版で定数STDINが使えないんではまりました ------------------------------------- print getStdinput(); function getStdinput() { $stdin = ""; $fp = fopen("php://stdin", "r"); while(($line = fgets($fp))) { $stdin .= $line; } fclose($fp); return $stdin; } -------------------------------------
fileやfile_get_contentsでwebページ内容もって来れるのは わかったんですが、ヘッダを読む方法はありますか? header()でのヘッダ「送信」の話ではないです
>>237 array get_headers ( string url [, int format] )
// PHP5
>>238 おぉ…file関係とは別途でphp5ならストレートなのがあったんですね。
ありがとうございます
>>232 「個人的」な考えはどうでもよくて、「法律的」にどうなのか、と。
>>234 パイプでメールを渡して、該当スクリプトを起動。
>>240 メールの「保存」が法律的には問題あるわけがない。
勿論「守秘義務」はあるけどな。
利害関係人が持ってても法的な効力はないけどなー
>>240 phpスクリプト側で・・って書いてあるじゃん
246 :
227 :2006/04/12(水) 17:12:40 ID:8N7Yz7+/
そのようなソフトはないって事でしょうかねぇ。 2chで聞くのが無謀なのかなぁ。 本当に知りたい情報が2chで得られたためしがない。 誰でも簡単にgoogleで調べられるような事しかレスがこない。。。
>>246 自分じゃ調べられなくて困り果てて2chに来たくせに、
期待した回答が得られないと分かった途端にそういう逆ギレした態度を
とってるようじゃ、永遠に誰も教えてくれないよ。
あと、とにかく日本語がおかしいのを直しなさいよ。
誰も答えてくれないのは、質問の文章がおかしいのも一因だと思うぜ。
>>246 他人の情報や経験がタダだと思ってるバカは1秒でも早く氏んだほうがいいよ。
この世で最も価値があるのは車でも家でもダイヤでもなくて、情報だぜ。
それが分からずに調子コイた戯言をぬかしてるお前は一生底辺で終わる。
250 :
227 :2006/04/12(水) 17:28:09 ID:8N7Yz7+/
>>247 そうですね。該当スレが見つからなかったもので。すいません。
それと、メール保存は違法ではないかとか、保存されるのは嫌だとかいう意見がありましたが、
メールサービスを提供した時点で、メールボックスにはメールデータは保存されます。
保存場所を移したいだけです。もちろん悪用するわけではありません。
なぜ保存場所を移したいのかというと、Webメールサービスに近いものも提供したいからです。
しかし、メールボックスの容量も制限したいです。制限値を超えた時の処理なんですが、受信拒否となっては困ります。
古いものから自動的に削除されていくような容量制限が出来れば、特に保存場所を移す必要もありません。
環境はqmail+vpopmail+ezmlm+mysqlでメールサーバーは動かしてます。
ソースが読めれば簡単なんでしょうが。。。
251 :
227 :2006/04/12(水) 17:32:33 ID:8N7Yz7+/
>>248 、249
偉そうな物言いで申し訳ありませんが、事実ではないですか?
私の経験ではそうでした。
>>251 情報が得られないとわかったなら何も言わずに立ち去れ。
いちいち捨て台詞を吐くのは非常に失礼。
事実かどうかなんていうお前の主観は発言が許される理由にならない。
>>248-249 の口調もほめられたものじゃないが内容は完全に同意。
253 :
227 :2006/04/12(水) 17:55:11 ID:8N7Yz7+/
わかんないんだったら、自分たちもレスしなきゃいいのに。 小学生からやり直せとか、日本語勉強しろとか言われるために書き込みしたわけじゃない。 こいつらが人に言えるほど語学力と知識があるとは到底思えませんがね。 謙虚になれという事はそういう事かい? 人を失礼だと思う前に自分も失礼ではないかと考えてみたらいかがでしょうか。 なんて不毛な掲示板だ。
255 :
nobodyさん :2006/04/12(水) 18:11:41 ID:LsBK61rA
>>253 キミにはその仕事を請けるスキルが無いんだから、他に回すなり業者に発注するなりしなよ。
せめてここの回答やgoogle先生の結果で何とかできる程度のアタマが無いとさ。
つーか、SQL書ける?
書けるならその案件程度のテーブル設計くらいできるよね?
だったら、何が疑問?
256 :
227 :2006/04/12(水) 18:26:46 ID:8N7Yz7+/
>>255 おっしゃるとおり、スキルはありません。外注も考えています。
ただ、そういうソフトがあれば教えてもらいたかったのです。
SQLは書けます。
vpopmailはSQLにメール毎ぶちこめましたっけ?
ユーザー管理にしかSQLは使っていませんが。
そんなことASP.NETならちょこっとコード書くだけでできるのにな
258 :
227 :2006/04/12(水) 18:37:35 ID:8N7Yz7+/
>>257 PHPやperlで書くなら実現できます。
ただ、メール転送だけはMTUに任せたいのです。
さぁ、益々下らなくなってまいりました。
なんだってー! すごいなPHP&Perl
普段だったら気にならない個所なのに、こういう流れだから メール転送を任されて戸惑ってるMTUやRWINの図が浮かぶ。
fopenの時に、ファイルが存在しなければ ファイルを作成したいのですが そういう場合はどうしたらいいですか?
空気が読めない奴って当然の如く去り際も心得て無いよな
>>262 'w'ならデフォルトで新規作成される。
'r'でファイルが存在しなかった場合に新規作成したいならtouch($file);とか書けばいい。
>>258 というか、ここはPHPで書くための質問スレなんだけど。
PHPで書かないための質問は他所で。
典型的な初心者にワラタ
267 :
nobodyさん :2006/04/12(水) 20:24:31 ID:fK671VOd
227はイタイな 答えられないのに文句だけ言う奴もウザイけど
268 :
nobodyさん :2006/04/12(水) 20:37:47 ID:zZpSpaHD
>>268 input_filterて関数が無いってメッセージ出てるやん。
リンク先に
>でぃあばぁ(管理者) at 2005-11-13 (日) 20:05
>func.phpからinput_filterとanchor_replaceをコピーしてくれば動きます。ただし何のチェックもしていないので、
>一つ間違うと無限ループです 一応 RewriteOptions MaxRedirects=1 で避けていますが、正直全くお勧めできません。
とあるが、理解可能?
270 :
nobodyさん :2006/04/12(水) 20:57:48 ID:zZpSpaHD
>>269 うーん、よくわかりません…
でぃあばあ氏は、このようにスラッシュを補完しているのですが、もっと効率的な方法とかあるんでしょうか?
>>270 効率とか関係なく、func.phpからinput_filter()をコピペしてきてないから動かないだけだろ。
272 :
262 :2006/04/12(水) 21:30:17 ID:???
>>264 ありがとうございます
$file = './dat/env.dat';
if( ! file_exists( $file)) touch( $file);
こう書いてみたのですが、うまく動きません
根本的に間違っているのでしょうか?
273 :
nobodyさん :2006/04/12(水) 21:35:33 ID:zZpSpaHD
>>273 少しは、ソースの中で行われていることを
一つずつ追ってみようって気にはならないのか?
275 :
nobodyさん :2006/04/12(水) 21:51:23 ID:zZpSpaHD
>>274 すみません、PHPやApache設定に関しては全くの無知なので・・・
「RewriteRule ^.+$ slash.php?$0 [L]」これが原因でInternal Server Errorになるのでしょうか。
>>273 エラーが出るたびにこのスレで質問するのは迷惑だよ。
まず自分で調べて考えてみようね
277 :
nobodyさん :2006/04/12(水) 21:59:09 ID:zZpSpaHD
ξ
>>272 ./dat/ ←のディレクトリのパーミッションは707あたりになってる?
279 :
262 :2006/04/12(水) 22:27:29 ID:???
>>278 ありがとうございます
ご指摘のとおりパーミッションの問題でした。
.datを777にしたら問題なくさくせいされました
お手数をおかけして申し訳ありませんでした
280 :
nobodyさん :2006/04/12(水) 22:35:28 ID:KG2NZf4e
BASIC認証を利用しているのですが ダイアログが出てきた時に デフォルトでIDが表示されているように 出来ませんでしょうか? (PASSを入力するだけの状態) よろしくお願いします。
>>280 標準のダイアログにID文字列を勝手に入れるのは無理じゃないかな。
やるなら、HTMLのFORMでIDとパスを受け付けるようにするとか
JavaScriptのダイアログで受け付けるようにするとかにしないと。
くっそおおおおおおおおおお 俺のソースは汚いぞおおおおおおおおおおおおお
preg_replaceの使い方で質問です。 $main_text = 同一ファイル内ヒアドキュメント、内容はHTML(htmlのタグ含む) $words = '1111111111'で区切られた単語とURLが1行1レコードのファイルをfile()で拾って来た配列 で、foreach($words as $line){ list($word[],$url[]) = explode('1111111111',$line); } として$word、$urlをprint_r()して中に期待した配列が入っていることを確認しました。 その次に $replacement = "<a href=" . $url . " target=_blank>" . $word . "</a>"; $main_text = preg_replace($word,$replacement,$main_text); とすると Warning: Unknown modifier '?' in /パス/test.php on line 410 Warning: Unknown modifier '?' in /パス/test.php on line 410 と2回エラーが表示されました。$wordと$urlの要素が2個になっていたのでそこが関係していると思うのですが…。 またpregをeregに変えるとエラーを吐かなくなりますが配列で置換できないようで要求をみたせませんでした。 何かアドバイスくださいまし
>>284 $word が正規表現として解釈されることを前提に、適切にエスケープしたり書式を整えたりしてる?
$word の中身をここにコピペしてみたら?
一行のコードを複数行に分けて書きたい場合はどうしたらいいのでしょうか? 解像度が低いPCで書いているのですが、どうしてもよみづらくて・・。
>>284 $word[] = "/ABC/sUi";
$word[] = "/DEF/sUi";
$replacement[] = "えーびーしー";
$replacement[] = "でぃーえふ自慰";
$main_text = preg_replace($word,$replacement,$main_text);
ってこんな風に使うんじゃなかったっけ
>>286 「ここ、スペースあってもなくてもいいよね?」と感じる個所で改行
289 :
284 :2006/04/13(木) 02:22:12 ID:???
レスありがとうございます
とりあえずprint_rの結果をば
Array
(
[0] => テスト
[1] => テスト2
)
Array
(
[0] =>
http://www.exsample.jp/1 [1] =>
http://www.exsample.jp/2 )
ファイルは全てEUCです。
ブラウザのエンコードをeuc以外にしたら化けたので文字コードはおk、
エンコーディングが必要な文字列は(今はテストデータだからですが)無いようでした。
>>287 ごめんなさい、提示していただいたサンプルとの違いが読み取れなかったのですが…。添字も数字になりますから一緒ですか?
>>284 > $replacement = "<a href=" . $url . " target=_blank>" . $word . "</a>";
それって「<a href="Array" target=_blank>Array</a>」にならんか?
配列をそのまま文字列として連結ってどういう意味よ
> $main_text = preg_replace($word,$replacement,$main_text);
$wordが配列なら$replacementも配列にせんと。
>>289 $replacementもprint_rしとけ
292 :
287 :2006/04/13(木) 02:32:32 ID:???
293 :
284 :2006/04/13(木) 02:32:34 ID:???
>>291 …$replacementが
<a href=Array target=_blank>Array</a>
になってしまっていました。
これでは目的が達成できないとおもいつつとりあえず
preg_replaceのエラー吐いているのだけでも何とかしようと思い
$main_text = preg_replace($word,$url,$main_text);
としてみましたが上記と全く同じエラーを吐きました…。
ちょっと試しに
>>287 さんのコードをまんま試してきます。
と思ったら
>>290 さん、その通りでした
orz
>>293 エラーになってるのは$wordの中身が /〜/ 形式になってないせいじゃなかろか。
295 :
284 :2006/04/13(木) 02:48:19 ID:???
>>294 ご指摘の通りでした。
$word = "/ABC/";
$replacement = "/
http:/ ";
として通りました。
後は配列となっているURLをどうaタグにするか、考えてみます。
ありがとうございました。
全然関係ないですが皆さん遅い時間まで起きますね。
差し支えなければ、今何なさっているか晒してもらってもいいデスカ?
296 :
287 :2006/04/13(木) 02:56:09 ID:???
>>295 俺なら
foreach($words as $line){
の処理の中で
"<a href=" . $url . " target=_blank>" . $word . "</a>";
を配列に突っ込むかな。
TV見てる
ベース弾きつつネット もう寝る
$abc = "a,b,c"; を $abc2[0] = "a"; $abc2[1] = "b"; $abc2[2] = "c"; にするにはどうすればいいでしょうか? 指定文字で分割する関数があったと思うのですが、 公式マニュアルみてもちょっとわかりませんでした。 いつも逆引きリファレンス本使ってるんですが、無いと死にますね・・・
299と似てますが、改行だけの行を境目に文字列を分けて配列に格納するのって どうすればいいですか?
Mon, 10 Apr 2006 18:18:53 を一気に 2006-04-10 18:18:53 に変更するような簡単な方法きぼんぬ
>>301 explode("\n\n", 〜
preg_split('/([\r\n]|\r\n){2,}/', 〜
とかかな
>>302 date('Y-m-d H:i:s', strtotime('Mon, 10 Apr 2006 18:18:53'))
305 :
303 :2006/04/13(木) 13:09:41 ID:???
ごめん。正規表現のほう間違い。 これじゃ\r\n1つでも区切っちまうわ
文字数の表示制限って出来るのでしょうか? 例えば、$textに入っている文字数が200文字だとして 一覧に表示する時は20文字しか表示しないなど
専用のかんすうありまっせ
日本語環境なら mb_strimwidth()
mb_strimwidth($text,0,20,'(以下略)'); mb_strimwidth($text,0,20,'...'); などなど
310 :
306 :2006/04/13(木) 14:30:07 ID:???
自己流ゴリゴリコーディングから脱皮したいので綺麗とかPHPらしいとか 言われるような読むのにオススメなソースコード教えてください。
313 :
nobodyさん :2006/04/14(金) 01:47:26 ID:AD++CmCG
一定時間ごとにスクリプトを起動させたいのですが どのように書けばいいのでしょうか。 学生なのですがよくわからないので教えてください。
314 :
nobodyさん :2006/04/14(金) 01:58:34 ID:aAV+eb7H
PHPの基礎を自分でも作りながら勉強できる チュートリアルのようなサイトご存知ないですか? マンモス本を読み出して1部チャプター3で早くもくじけそうです・・・。
レッツPHPのぁぷろだ、うpされて1週間後に自動的に削除されるような改造って出来ますか?
>>313 cronかスクリプトで永久ループしながらsleep
学生だから知らないちゅー言い訳はヤメレ
>>314 根性入れろや
>>315 出来ますか?じゃなくて
やってみてわからないことを質問する>強く推奨
>>315 スクリプト起動時にファイルの日付をチェックして1週間以上前のものを削除する
opendir
whileでループ
readdir
filemtimeかstat
unlink
ループ終了
closedir
大量にファイルがあり、1週間アクセスが無かった後の アクセスって無茶苦茶重くなりそうだな 上手くやれば回避できそうだが、そこまで知ったこっちゃないか
ファイルが大量にあるのかどうかも分からんし、 その辺はシステムの性格に応じてチューニングでよかろ
それこそcronなりで定期的に処理すればよくね
phpなんか使わなくてもfindコマンドでできるでしょ。そのほうが速いし。
>>320-321 まあそれだとLinux板行けということになるし、PHPでの処理方法を聞きたいのかもしれんし
323 :
nobodyさん :2006/04/14(金) 14:35:43 ID:9w4nbvJu
定数に以下のようにして値を設定しようと思っているのですが
セキュリティー的に問題があるのでしょうか?
define('HTTP_SERVER', '
http:// '.$_SERVER[HTTP_HOST]);
その後どう利用するかだろう
>>323 定数の定義だけじゃセキュリティ上の問題は無い。
'HTTP_HOST' は、「現在のリクエストに Host: ヘッダが もしあればその内容。」となる。
ユーザから送られてきた値だから信頼はできねーぞ。
この意味分かるな。
Apacheのデフォルト設定だと、どんなHostヘッダでも受け付ける。
バーチャルホスト上のホストなら不正なホスト名だとサーバが受け付けないこともあるが
それを信用してはならない。
326 :
nobodyさん :2006/04/14(金) 15:12:40 ID:9w4nbvJu
>>324 画像のリンクなどのURLフルパスとして利用したかっただけなので
問題ないようですね
>>325 了解しました。
ありがとうございます
>>326 URLフルパス??そんなのに使える内容か?それ。
>>326 お前、325の言ってる意味わかってないだろ
>>326 設定した定数(HTTP_SERVER)を、そのままSQLに突っ込んだりすると危険
($_SERVER[HTTP_HOST] にSQLインジェクションされる文字列とか入ってり)
結局は
>>324 の言うとおり、使い方次第
っGoogle検索「サニタイズ」
画像リンクとかってようするに毎回のHTML表示だろ? 困るのってその変なホスト名をよこしてきたユーザ本人だけでは。
>>322 PHPのCLI版で書いてcronで定期実行がスレに合ってるかな・・
シェルスクリプトでいいならそれでいい気もするけど
>>331 単純に考えてそうでも将来的にそれを利用した攻撃方法が発見されないとも言い切れないんだし、
htmlspecialcharsを通すべき。
334 :
326 :2006/04/14(金) 16:21:41 ID:???
335 :
333 :2006/04/14(金) 16:22:17 ID:???
危険性のある変数だけエスケープするのでは無く、 エスケープしてはならない理由があり、かつ、安全性が確認できている変数のみエスケープしないというポリシーのが安全。
// HTMLタグの無効化 function h($value) { return htmlspecialchars($value); } こんな関数作ったらどうです? 変数を h( と ) で囲むのはたいした手間じゃないでしょ。 高木浩光流のセキュリティ対策ブログでも読んでみたらどうかな
337 :
326 :2006/04/14(金) 16:25:00 ID:???
>>333 ご指摘の通りですね。
盲点でした。
htmlspecialcharsは通すようにします。
338 :
326 :2006/04/14(金) 16:32:28 ID:???
>>336 ついでなので以下のようにしておきました。
// HTMLタグの無効化
function h($value) {
return trim(htmlspecialchars($value));
}
339 :
nobodyです :2006/04/14(金) 17:25:47 ID:NgSqFnSx
if(error){ die(require_once('error.html')); } これは、何か問題が出てきますか?
>>339 if(error)って、もし error という定数が真なら if文 を実行するということだけど、それであってる?
変数じゃなくて定数ならいい。
あと、定数は一般的なコーディングルール、慣習では全て大文字で書き、単語をアンダースコアで区切る。
これは様々なC系言語やJavaでも同じ。(ただし必ず従わなければならない訳ではないが、それを配布するなら
従っている方が他の人が見やすい)
これは、pearコーディングルールでも同じ
http://itbtech.itboost.co.jp/man/php_man/pear.standards.constants.html 例: DB_ERROR_MESSAGE
変数は小文字で初めて単語の区切りを大文字にする。
ちなみに、
if ($error) {
die(require_once('error.html'));
}
は、
$error or die(require_once('error.html')); と書く人もいる。
ただし、比較演算子の用途外利用なのであまりおすすめできない。
(ただ、使うことでコーディングがすっきりするときは使う)
戻り値の比較をしない分、if文の方が早いと思われる。
341 :
340 :2006/04/14(金) 18:28:11 ID:???
みすった。 require_once は関数では無く制御構文なので pearコーディングルールと慣習によれば関数コールと区別するために、 require_once('error.html'); じゃなくて、 require_once "error.html"; と書くべきだな。
サニタイズでググったら論争で読むの疲れた
何でも検索結果を一番上から読めばいいってもんじゃないぞ。 せっかくGoogle先生が内容も少し表示してくれてるんだから、
344 :
nobodyさん :2006/04/14(金) 20:57:11 ID:Vr96m26a
HTTP_Requestについての質問ですが、 echo $req->getResponseBody(); これではlocationで転送(?)された先を表示することができないんですが、 できるようにするにはどうすればいいでしょうか。
プロにしかできない
俺はできる
347 :
nobodyさん :2006/04/14(金) 22:31:00 ID:29AM62vM
くだらない質問します。 if文の条件で、「$hogeがあれば」みたいにすることはよくあると思うのですが、 ( isset ($hoge)) { ( $hoge != "") { if ($hoge) { (strlen($hoge) != 0) { などなど、似て非なるものが沢山ありますが、 これはどういう基準で使い分けているのでしょうか?
>>347 自分がどういう意味を持たせるか、によるんじゃないかな。
$hoge という変数の存在自体を調べる意図があるなら isset だし、
$hoge の中身について評価する意図があるならそれ相応の判定式だし。
ただ気をつけなくちゃいけないのは、$hoge=="" みたいな判定式。
これは、$hoge が "" のときだけじゃなくて、0 のときや false のときにも成立しちゃう。
本当に "" であるかを判断したいならば、strlen($hoge)==0 や、$hoge==="" を使う。
strlen($hoge)==0 は、$hoge が未定義か "" か false の時に成立して、0 の時には成立しない。
$hoge==="" は、$hoge が存在してその中身が "" の時だけ成立する。
関数の中でも、0 と false どっちも返す可能性があるものがあるから、そういう判定の時にも気をつけて。
ex) strpos
349 :
nobodyさん :2006/04/14(金) 23:25:17 ID:dko7defd
>>344 俺も串作るときこれがわからなくて断念した
どうやるんだ
>>347 > ( isset ($hoge)) {
その変数が定義されているかどうか。
1度も代入してない、unset()した場合、NULLを代入した場合にのみelse条件になる。
主に初期背低が存在しない、特定のsubmitボタンが押されたか、などの存在チェックに使う。
> ($hoge) {
真として評価できる値が入ってるかどうか。
1度も代入していない、unset()した、NULL、FALSE、0、"0"、""、array()のいずれかが
代入された場合にelse条件になる。
一般的な数値チェック、論理チェックなどに用いられる。
たまに、文字列の有無を判定しようとしてこれを使って「0」を入力されたときにバグってるバカがいる。
> ( $hoge != "") {
> (strlen($hoge) != 0) {
文字列として空っぽかどうか。
1度も代入していない、unset()した、NULL、FALSE、""、array()のいずれかが代入された場合に
else条件になる。
FORMデータの入力有無など文字列の存在チェックにはこれを用いる。
351 :
347 :2006/04/15(土) 00:44:06 ID:mBWU3p7T
>348 350 すばらしい回答ありがとうございます。 人間リファレンスのようですね。 else条件のバリエーションをみるとなんとなく分かってきますね。 自分はなんとなくな理由でissetを多用してる気がします。 逆にstrlenはあまり使ってませんでした。 いずれもしっかりとした根拠なく使っていたので、これからは 意味合いをよく考えて適材適所な感じでいきたいです。 ありがとうございまいsた。
352 :
347 :2006/04/15(土) 00:49:45 ID:???
sage忘れたorz >348 350 もう一度言いますがすばらしい回答ありがとうございます。 人間リファレンスのようですね。 else条件のバリエーションをみるとなんとなく分かってきますね。 自分はなんとなくな理由でissetを多用してる気がします。 逆にstrlenはあまり使ってませんでした。 いずれもしっかりとした根拠なく使っていたので、これからは 意味合いをよく考えて適材適所な感じでいきたいです。 ありがとうございまいsた。
353 :
287 :2006/04/15(土) 00:59:45 ID:???
>>352 そのレスの意味がわからない。
何故2回も。
もしかして未だに「sage」って書けば下がるとでも思ってるのか?
age
355 :
339 :2006/04/15(土) 01:15:29 ID:???
>>340-341 いろいろ問題があったようですね。
コーディングルール今度読み漁って見ます
ご丁寧にありがとうございました
>>344 これはgetResponseHeadでいいんじゃないの
だめだろ
socketでやらなきゃ。
10件あるデータを2列5行にして表示したいのですが、 どのように設定して、折り返したらよいかわかりません。 どこか参考になるサイトなどはご存じないでしょうか?
プログラムを「設定して」とか書いてる時点で根本的に間違ってるとオモ
>>359 お前さん、そこを考えるのがプログラミングの醍醐味じゃないか〜
363 :
314 :2006/04/15(土) 07:02:43 ID:???
>>316 気合入れてマンモス本、
自分で打ちながら最初からやり直してます。
また何かあったら教えてください。
>>362 無料で同じものがあるのに違法かもしれない有料レンタルに金払うやつは見る目がないって事で。
>>344 自分で処理して飛ばすしかないのでは
$a=file_get_contents('
http://example.net/ ');
なら自動で処理してくれるんだけどなあ・・・
いちいち個別に対応するのが面倒だったので
いじって手抜き処理加えちゃったけど
>>362 ライセンスはGNU GPL。
金を取るのもレンタルするのもOK。
掲示板にトリップ機能をつけたいのですが、どのような方法で行えばよいでしょうか?
>>367 入力された値をmd5とかにかけて、上5桁を取る、とかじゃダメ?
正規表現で一致しているか調べたいんですが、 対象の文字列が.などを含んでいて、かつエンコーディングを変更したい場合、 エスケープしてからエンコーディングしたものをeregするのか それともエンコーディングしてからエスケープしたものをeregするのか どっちが正しいのでしょうか? 考えてたらぱにくってきました・・・おいらはあふぉです orz
>>369 基本はエンコーディングしてからエスケープ。
でないと無関係な部分(漢字の後ろ1バイトに含まれる正規表現文字など)まで
エスケープされてまともに比較できなくなる場合がある。
file_get_contentsでUser-Agent等のヘッダを送ることはできないものか
372 :
nobodyさん :2006/04/15(土) 16:06:05 ID:FisXV/Qr
rawurlencode()で、スラッシュ(/)はエンコードしたくないのですが、そのような指定は できるのでしょうか?
まだ初めて二週間 ヘルプでキーワード検索すれば大概の場合自分のやりたい事が実現可能かどうかわかるので、アルゴリズムの基礎を学んだ方が効率良い事に気がつきますた プログラムっておもすろいですね
quotemeta()の逆の関数ないですかね
376 :
372 :2006/04/15(土) 16:44:33 ID:FisXV/Qr
自己解決しました。 str_replace()で'%2F'を'/'に置換したんです。ありがとうございました。
377 :
375 :2006/04/15(土) 16:52:52 ID:???
レスおせーなあ おまえら素人が必死に考えてる間にyahooで自己解決。
>>375 んなもん探さなくても5秒で自分で作れるだろうが
379 :
nobodyさん :2006/04/15(土) 17:03:07 ID:FisXV/Qr
ワラタ
ID ヲ ダシテシマッタ...
382 :
nobodyさん :2006/04/15(土) 17:39:13 ID:1qLGoaV/
どうもPHP初心者なんですが 入力された文字が全角カタカナかどうかの判別の方法がわかりません。 半角英字は↓でできました。 if ($ename != "" && !ereg("^[a-zA-Z \']+$", $ename)) { $error['ename'] = "<font color=\"red\"> 半角英字で入力してください。</font>"; } その要領で全角カタカナでやったのですが、全部引っ掛かる状態になります。 if ($fname != "" && !mb_ereg("^[ァ-ヶ]+$", $fname)) { $error['fname'] = "<font color=\"red\"> 全角カタカナで入力してください。</font>"; } $fnameの中に全角カタカナを入れています。
google初心者か
384 :
nobodyさん :2006/04/15(土) 17:57:37 ID:1qLGoaV/
mbstringのせいかなと思いphpinfoをだしてみたのですが、こんなかんじです。 mbstring Multibyte Support enabled Multibyte string engine libmbfl Multibyte (japanese) regex support enabled Multibyte regex (oniguruma) version 3.7.1
385 :
nobodyさん :2006/04/15(土) 17:58:16 ID:1qLGoaV/
mbstring.detect_order no value no value mbstring.encoding_translation Off Off mbstring.func_overload 0 0 mbstring.http_input pass pass mbstring.http_output pass pass mbstring.internal_encoding ISO-8859-1 no value mbstring.language neutral neutral mbstring.substitute_character no value no value
386 :
nobodyさん :2006/04/15(土) 22:12:07 ID:269HnUWO
$a に入っている数値が15だとして、 $a に入ってる数値が 18未満だったら・・・というif文を作りたいのですが if($a == "15 <= 0") というのは不可能でしょうか? 不可能でしたら方法を教えていただけないでしょうか。
>>386 そこのあたりはどの言語やっても基本の部分なんだから
PHPの超初心者本とかかって勉強しとけよ
基本的な構文はC、Java、etc・・・ほとんど共通だ
>>385 > mbstring.internal_encoding ISO-8859-1 no value
これをSJISに設定
>>386 ひょっとして
if(0 <= $a && $a < 18)
っていう条件が書きたいって話?
392 :
386 :2006/04/16(日) 09:39:55 ID:???
>>391 あ、それが一番近いかもしれません。
0より大きくて18より小さい。
ありがとうございます。
>>387 よく考えてみるとそうですね。ありがとうございます。
>>388 その方がシンプルみたいですね。
参考になります。
>>389 二つの条件を一度にやるのがよくわかりませんでした。
勉強不足ですいません。
>>392 PHPの勉強不足って感じでなくてさ、日本語覚えたての3歳児って感じ
他の言語もやったことなくPHPから始めたんだろうけど
394 :
nobodyさん :2006/04/16(日) 12:20:28 ID:U9is4hyD
phpをはじめて半年くらいになります。 phpとmysqlで在庫管理システムみたいのを作ったのですが、 脆弱性というか、セキュリティ的なものは一切考えていません。 画像ファイルのアップロードをするときに、拡張子がjpgじゃないとダメとか、 10240バイト以下じゃないとダメとか、 あとhtmlspecialcharsとか書いたりしてますが、 そもそも何が危ないのかわかってません。 いくらわかってなくても、最低限これだけはやっとけみたいのは ありますか?
>>394 あくまで「最低限」ってことならサイズ制限とファイル名をそのまま使わなきゃ
それで十分じゃないかって気がする。
真面目にやるなら画像形式のバイナリチェックが欲しいところ。
拡張子の判定はほとんど意味ない。htmlspecialcharsはどこでやってんだ?
397 :
nobodyさん :2006/04/16(日) 15:49:40 ID:nblpYMkq
$result = mysql_query($sql); $rows = mysql_num_rows($result); if ( $rows < 0 ) error(); 何かで参考にして上記のようにエラー処理をしてたんだけど もしかして↓のようにすれば mysql_num_rows って必要ないですか? $result = mysql_query($sql) or error();
>>397 num_rowsはエラーチェックじゃなく「データが1件以上あるかどうか」を判別している。
399 :
398 :2006/04/16(日) 15:56:13 ID:???
補足。それとは別にSQLの実行の成否を確認することは必要で、 それをやってるのが >$result = mysql_query($sql) or error(); よって >上記のようにエラー処理をしてたんだけど という前述コードは 「エラー処理を一切していない」
$rows = mysql_num_rows($result); if ( $rows < 0 ) error(); おまけにこれなに?mysql_num_rows()って「0以上の数値」か「FALSE」しか返さないんじゃなかったか? マイナスの場合なんてありえないだろ。何のチェックにもなってなくないか?
401 :
397 :2006/04/16(日) 16:25:50 ID:???
まぁ、なんだ、 ・SQLそのものがおかしくて失敗 -> mysql_queryの返り値を適切に処理 or error()でやってるのはこの部分(まぁ適切かどうかは疑問だが) ・(mysql_num_rowsだからselectしてると仮定して、)select結果が一つもなかった時の処理 こいつは正確にはエラーでは無い。結果が0個の時とそれ以外の時とで 表示の仕方を変えたい時に使うことが多い。
>>401 > if ( $rows < 0 ) error();
この条件と
> if ( $rows > 0 ) { }
この条件は全然一致してないだろ
>>401 お前、意味も分からずにただ命令を並べてるだろう
405 :
397 :2006/04/16(日) 16:54:32 ID:???
パソヲタ・・・?
407 :
nobodyさん :2006/04/16(日) 17:31:15 ID:ifz+1Zn4
ユーザーエージェントで、KDDIというUAを取得かつSN33というUAを取得した場合、W41Sとし、それいがいはWとするってどうやるの? KDDIのUAを取得したあとに、またif(preg_match〜ってするの?
408 :
397 :2006/04/16(日) 17:39:38 ID:nblpYMkq
409 :
404 :2006/04/16(日) 17:43:40 ID:???
>>407 if(preg_match('/(KDDI)-(\w+)/', $_SERVER['HTTP_USER_AGENT'], $match)) {
$ua = $match[1];
}
>>407 失敗。
if(preg_match('/KDDI-(\w+)/', $_SERVER['HTTP_USER_AGENT'], $match)) {
$ua = ($match[1] == 'SN33')? "W41A": "W";
}
次回テンプレ案 PHPプログラミングに関するくだらねぇ質問用スレです。 ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。 ここは "下らない質問でもして構わないスレ" であってそれを歓迎するスレではありません。 自分のしてる質問が下らない質問だということをわきまえ、謙虚になりましょう。 下らない質問をしてるんだから当然のように罵詈雑言も浴びせられるだろうが 全て甘んじて受けましょう。そうすればひょっとすると回答をしてもらえるかもしれません。
PHPでオブジェクト指向チックにコーディングしてる奴っているか〜?
それはプログラム全体を、って意味か? クラスくらいは普通に使うが。
・絞込検索 ・第三者が自由に書き込めるレビューの設置 ・レビューと併せた投票システムの設置 上記の三つを作成したいのですが、 全くの初心者ですのでphpを勉強するのにお勧めの教本があれば教えて頂きたいです。 宜しくお願いします。
.phpファイルの何行目〜何行目の先頭に#をつける。 という処理はできないでしょうか?
>>419 よければヒントをいただけないでしょうか。
>>418 ※ file()関数
※ for文、もしくはwhile文
上の二つが大ヒントだ!!
まぁ、ほかのやり方は山ほどあるけどね
>>421 file()で配列に読み込んで
forで[0]に#を入れる処理を繰り返しという感じですかね?
>>422 そこまで考えたんなら自分でやって試してみ
>>423 ありがとうございます。
やってみます。
425 :
nobodyさん :2006/04/16(日) 22:11:36 ID:U9is4hyD
あるサイトの問い合わせフォームのソースをみたところ、 checkboxのnameがcheck[]となっていました。 checkboxは10項目くらいあるんですけど、全部check[]です。 これはその後どうやってばらばらに受け取るんですか? チェックボックスはラジオボタンとちがって、複数の値が送れる(?)ので メールフォームとかで、チェックされたものだけを出力したいのですが、 いまいちうまくいきません。
$_GET['check']をvar_dumpなりしてみりゃすぐ分かるだろ。
427 :
394 :2006/04/16(日) 22:20:16 ID:U9is4hyD
>395 レスどうもです。 拡張子は意味無いんですか。勉強になります。 ファイル名はdate関数とかでリネームしてます。 てゆうかなんでそのままのファイル名は危険なんですかね? htmlspecialcharsは普通にinput textをdbに入れる前に使います。 textareaの文章とかにも使います。これも意味ないですかね? >396 その本は気になっていて、ちょっと読んだのですが、 難しそうで自分にはまだ早いかなと思ってしまいました。 もう一回読んでみます。
429 :
425 :2006/04/16(日) 22:24:23 ID:U9is4hyD
>426 var_dampって初めて知りました。print_fとは違うんですか? 配列に格納されていたとしても、入っているもの(チェックされたもの)だけを 判別して、取り出すにはどうすればいいですかね?
>>427 ああ、アップロード以外に文字列データもあるってことね >htmlspecialchars
それなら分かる。
しかし、普通はhtmlspecialcharsはHTML出力時に使うものであってDBに入れるときに使うもんじゃないぞ。
DBに入れるときはmysql_escape_stringしとかなきゃダメだろ。
拡張子はいくらでも嘘を書けるから、むしろ1度削除して自前で判定した拡張子を付加してやった方がいい。
>>429 元々チェックボックスってチェックされたものしか送信されないような…。
後はそれぞれのvalueの内容を見て振り分けてるんじゃないの。
432 :
nobodyさん :2006/04/16(日) 22:53:40 ID:42+ATyOF
XAMPP2.1をインスコしたんですが、PHPがうまく動作しません PHPinfo()は動くんだけど echoさえ動きません。。。orz PHP Version 4.4.1-pl1です。。 もう、インストール&アンイストールを4回くりかえしてます。 php.iniの設定は以下の通りです。 mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none extension=php_mbstring.dll
> echoさえ動きません。。。orz もっとくやしく
434 :
nobodyさん :2006/04/16(日) 23:12:53 ID:ifz+1Zn4
PHP&MySQLの携帯対応のノーマル掲示板の(・∀・)イイ!スクリプトない?
>>432 そんなんありえるのか?
phpinfo()を確認したときのソースとechoを確認したときのソース見してみ
>>432 動かないって何も表示されないのか?それともエラー吐かれるのか?
そこんトコ白黒ハッキリさせようぜ兄弟!!
438 :
nobodyさん :2006/04/17(月) 00:28:08 ID:ivoWdWE5
439 :
nobodyさん :2006/04/17(月) 00:53:31 ID:qfnqXSjS
>>435 >>437 すいません
解決しました。
PHP.iniの設定をmbstring.internal_encoding = SJISにしたら直りました。
下らねぇ質問で失礼しました
確認作業でいきなり日本語使うなよ…
なぁ〜に?namazuモジュールのライセンス問題ってさ・・ 誰か、該当者やちゃってくれない?
今更だけど
>>418 は、単にスクリプトの一部分を一括でコメントアウトしたかっただけではないのだろうか?
444 :
nobodyさん :2006/04/17(月) 12:48:59 ID:Z/1jQgco
/* 〜 */ でいいだろ。ってことでしょ。
442のどこを解釈するとそうなるのかわからんw
446 :
nobodyさん :2006/04/17(月) 13:59:46 ID:rTnmXweP
すみません、PHPのインストールについて質問です。 PHPでGDライブラリを使いたいので、必要なライブラリをインストールしたのですが 何度やってもFreeTypeを使えるようになりません。(phpinfo()で見てもFreeType Supportが有効にならない) GD SupportやJPG/PNG Supportは有効になっていてグラフィックス関連の関数も使えるのですが・・・ OSはRedHat9、PHPやGD等のライブラリは全てソースからインストールしています。 ○挑戦中のバージョン PHP4.4.2.tar.gz gd-2.0.33.tar.gz libpng-1.2.8.tar.gz jpegsrc.v6b.tar.gz freetype-2.1.10.tar.gz zlib1.2.3.tar.gz PHPでGD+FreeType環境を構築された方いらしたら、./conigureのオプション指定方法やライブラリのバージョン等を教えていただけないでしょうか?
>>405 また他人を騙るアホが出てきたな
質問者は語られたくなかったらID付けましょう
ageればID付きます。
って言うのをテンプレ化キボン
それでも本人性の確認は出来ないけどね
>>446 まずは自分のconfigure晒しなさいな
>>444 行の途中に /* 〜 */ があったらエラーになるよ
451 :
nobodyさん :2006/04/17(月) 15:00:29 ID:wNvi8T9B
質問します。 僕はmysqlのサーバ名とか「パスワードとかを、db.iniというファイルにまとめて書いておいて、phpで呼び出すときにrequire_once("db.ini")とやって、 mysql_connect($dbserver, $dbuser, $dbpass);とかやっています。 このdb.iniは普通にphpのファイル群と一緒にアップロードしていますが、 こういうのって危険なんでしょうか? これは別のフォルダに入れてhtaccessとかで認証かけたりしたほうがいいのでしょうか?
pathが流出したら危険だわな。 外からは見れないところにおくか、拡張子phpとかにして、 見られても生では見えないようにしておかなきゃダメ。
「でも」とか「等」が読み取れない人って時々いるよな
つーかこのネタもういいだろw
>>446 distcleanしてないだけちゃうんか
外部のサーバーにあるファイルを取得したいのですが、 proxyを経由してfile_get_contentsすることはできますか? できるとしたら、どうすればいいでしょうか。
459 :
451 :2006/04/17(月) 16:49:12 ID:???
460 :
451 :2006/04/17(月) 16:50:21 ID:wNvi8T9B
>458 レスありがとうございます。 ファイルを直接指定するとばっちり中身が見えます。 ディレクトリ内の一覧も正格に表示されます。 どうすればいいでしょうか?
461 :
451 :2006/04/17(月) 16:51:45 ID:wNvi8T9B
あれ?451は僕です。解決してないです。 よろしくお願いします。
463 :
451 :2006/04/17(月) 16:59:29 ID:wNvi8T9B
>452 見逃してました。どうもです。 一般的というか、こういうときはだいたいこうするみたいな セオリー的なことが聞きたいです。よろしくおねがいします。
こんにちわ!!!!!! phpでWINMXみたいのををつくりたいんですができますか?
467 :
465 :2006/04/17(月) 17:24:43 ID:???
>>466 いま私が質問しているんですけど?
他の質問は私の質問が解決してからにしてもらえませんかぁ??
>>465 やろうと思えば出来るかもしれません。頑張ってください。
以上
--------------解決-----------------------------------
>>466 さん他の方、質疑応答どうぞ。
470 :
nobodyです :2006/04/17(月) 18:14:21 ID:AOutErUa
---------------------------------- file.php -------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<title>無題</title>
</head>
<body>
<form action="file.php" method="POST" enctype="multipart/form-data" name="file" id="file">
<input name="csv" type="file" size="60" /><br />
<input name="" value="追加" type="submit" />
</form>
<?
if(isset($_FILES['csv']['tmp_name'])){
$handle = fopen($_FILES['csv']['tmp_name'], "r");
echo "ファイルの内容<br>";
if ($handle) {
while (true) {
echo mb_convert_encoding(fgets($handle, 8192),"EUC-JP","Shift_JIS") . "<br>";
if(feof($handle)) break;
}
fclose($handle);
}
?>
471 :
nobodyです :2006/04/17(月) 18:15:24 ID:AOutErUa
<table border="1" cellpadding="3" cellspacing="0" bordercolor="#000000"> <? $handle = fopen($_FILES['csv']['tmp_name'], "r"); echo $_FILES['csv']['tmp_name'] . "をオープン<br>"; if ($handle) { $arr = array(); while (true) { $arr = fgetcsv($handle, 8192); if($arr[0]=="") break; echo '<tr>'; foreach($arr as $value){ echo '<td>' . mb_convert_encoding($value,"EUC-JP","Shift_JIS") . '</td>'; } echo "</tr>\n"; if(feof($handle)) break; } fclose($handle); } } ?> </table> </body> </html> ---------------------------------------------------------------------------------------- 上記プログラムで、Excelで出力したCSVを読み込みたいのですがLinux環境ですと漢字が入ったCSVが読めません。 テキストエディタで漢字の部分を「"」で囲むと正常に動くのですが・・・ ちなみに、windows版のPHPだと「"」がなくても読み込めました。 Linux環境で読み込む良い方法はありませんでしょうか?
fgetcsvの代わりに手でごりごり書きましょう。
473 :
470 :2006/04/17(月) 18:23:32 ID:AOutErUa
POSTされた値などに、仮にnl2brする場合ってどうやるのがいいですか? $num = count($post); for($i=0;$i<$num;$i++) $post[$i] = nl2br($post[$i]); $_POST = array_map('func_nl2br', $_POST); function func_nl2br($post) { }
475 :
474 :2006/04/17(月) 19:04:56 ID:qA+rYU42
途中で送信してしまいました。 $_POST = array_map('func_nl2br', $_POST); function func_nl2br($value) { $value = nl2br($value); } 他に良い方法がありましたら宜しくお願いします。
>>475 $_POST = array_map('nl2br', $_POST);
でよくね?
(;゚Д゚) マジデ?
478 :
466 :2006/04/17(月) 20:38:00 ID:???
結局webのphpマニュアルでpdfのように印刷できるのはないの?
お前さんが提示したURLの中にリンクがあるわけだが
こんにちは。今年に入ってPC弄り始めたケンタです(^^) 先週、HTMLという言語(?)の勉強をはじめました! 気づいたらスルスル頭に入っていくというか、どういうものか理解できてしまった! 勢いでWEBサイトを作って公開しました〜>_< それで、僕が借りてるサーバはHTMLのソースに広告タグを付加してページを 出力するようになってるんですが、そこにJavaScriptが使われていたので今日勉強しはじめました。 すると・・・もうJavaScriptがだいたいどういうものか理解できてしまった!というかWEBがだいたい どういうものか分かった!んで、今PHP書いてます!もちろんこれはJavaScriptと違ってサーバ側で 動くのでブラクラにはあまり関係ありませんね(笑) ぶっちゃけプログラミングってかなり簡単。。基礎さえ分かれば関数調べるだけじゃん。。
481 :
(^^) :2006/04/17(月) 22:04:17 ID:???
芸のナイ奴はコピペしかできない
>>480 おまえは中2のケンタ以下だな。ホント恥ずかしいよ。
485 :
466 :2006/04/18(火) 00:29:05 ID:???
レーザプリンタなんておまえ、ハイテクなモノ持ってるじゃんw
>>485 ただ、公式のchm形式のドキュメントは本家のスタッフが
「手動」(恐らく)で生成してるので、普通のオンラインドキュメントの
バージョンに追従しきれてない(若干古い)ので、それには注意しとくこと。
あと生成時に文字化けが混入したりすることが昔は結構あった。
前に「需要があるのなら私家版を公開しましょうか」という人がいたが
余り要望がなかったせいか、今のところそういう動きはない(と思った)
488 :
nobodyさん :2006/04/18(火) 01:53:16 ID:ufbV+k46
PATH_INFOの中に%2Fが入っていると404になるんですけど、 どうしてでしょうか?
>>488 urldecodeされるから
%252Fにしろ
490 :
nobodyさん :2006/04/18(火) 10:43:26 ID:Cv/nzOIg
PHPの習作にと日記を作っております。 formからPOSTされたデータの各最後尾に、 余分な空白キャラ(タブかも・・・)がくっついてきていて困っています。 一応データ展開時にrtrimすることで、余分キャラがない状態にはできるのですが、 余分キャラがついてこないようなPOSTの方法、 または余分キャラを発生させないログの作り方などの ヒントをいただければと思う次第です・・・。 ログの作り方は $writeDat = $number."\t".$post['title']."\t".$post['honbun']."\t".$post['hi']."\t".$post['ji']."\t".$post['cat']."\t".$image."\n"; 展開は $lines = file($setting['logfile']); for ($i=0; $i<count($lines); $i++) { $dat = explode("\t", $lines[$i]); list($number,$title,$honbun,$hi,$ji,$cat,$image) = $dat; $cat = rtrim($cat); // なぜかトリムが必要・・・ } こんな感じです。よろしくお願いいたします。
491 :
nobodyさん :2006/04/18(火) 10:48:16 ID:lmSkCOac
めちゃくちゃなPHPソースを制御構造とかに則して フォーマットしてくれるソフトってありませんか? if ($a == true) { print "OK"; } ↓ if ($a == true) { print "OK"; } みたいな感じで
さらにIEのXML表示のように、制御構文単位で折りたためるEditorキボン
>>490 PHPというより、入力FORMでのHTMLの書き方に問題があると思うけどね。
495 :
490 :2006/04/18(火) 12:50:33 ID:???
>>494 氏
レスありがとうございます。
フォームを書いている部分のソースを晒してみます。
function putForm($ua,$setting,$cate) {
echo '<div class="titlebox"><h2 class="diarytitle_2">admin mode</h2></div>';
echo '<form enctype="multipart/form-data" action="admin.php" method="post">';
echo 'title <input type="text" size="60" name="title"><br>';
echo 'category<select name="cat">';
echo '<option value="">--</option>';
while (list($key, $val) = each($cate)) {echo "<option value=$key>$cate[$key]</option>";}
echo '</select><br>';
echo '<textarea rows="6" cols="60" name="honbun"></textarea><br>';
echo '<input type="file" name="uploadfile"><br>';
echo '<input type="hidden" name="action" value="write">';
echo '<input type="submit" value="write">';
echo '</form>';
}
(原因を削除してしまうのを回避するために、関数部分まるごとコピペしました)
>>490 ログデータを作るところは、implode使ったほうが見通し良くないか?
497 :
446 :2006/04/18(火) 13:19:13 ID:QNgm/uEx
>>456 さんの言うとおり全てdist clean してmakeし直したら上手くいきました。
どうみても素人です。本当にありがとうございました。
498 :
490 :2006/04/18(火) 13:54:39 ID:???
>>496 氏
ご意見ありがとうございます。
implodeを使うと、formのhiddenで渡している値なども、
まとめてログに格納されてしまうので・・・
あ。
POSTされた内容を$postに丸投げ($post = $_POST)しているから、
そんなことになるのですね。
$post[]の内容を整理して、implodeで見通し良くログを作成したいと思います。
ありがとうございました。
>>495 > while (list($key, $val) = each($cate)) {echo "<option value=$key>$cate[$key]</option>";}
この$cateはどこでどういう風に作ってるんだ?
そこでゴミ入れちゃってるんじゃないかと思うんだが
500 :
490 :2006/04/18(火) 15:01:51 ID:???
>>499 氏
> この$cateはどこでどういう風に作ってるんだ?
別ファイルにて$cateの設定をしております。
$cate => カテゴリーの意 です。
$cate = Array (
'news' => 'おしらせ',
'music' => '音楽',
'baseball' => '野球',
'game' => 'ゲーム',
'yota' => 'ヨタ話',
'test' => 'テスト'
)
こんな感じです。趣味がバレて(*‘ω‘ *)ィャンですが。
501 :
nobodyさん :2006/04/18(火) 15:10:49 ID:ksf2FOYQ
PHP Version 4.4.1-pl1 xamppにて環境を構築しています ファイルのアップロードをPHPで実現しようとscriptを組みましたがファイル名によっては正常にアップロードされない場合があります。 アップロード前に適当な長い文字にリネームすると正常に動作するのですが、これは私の綴りに誤りがあるからなのでしょうか。 web上でphp scriptを配布されている方のscriptも走らせて見たのですが全く同じ現象で、どこが悪いのかさっぱりです。 何かバグや仕様などあるのでしょうか?
>>501 うpできないファイル名の例を挙げてみたら?
503 :
501 :2006/04/18(火) 15:19:11 ID:ksf2FOYQ
>>502 レス有難う御座います。
そしてすいません。
肝心な部分が抜けていました。
FILE_003.jpgが通らず、200601071530000.jpgは問題無し
前者をリネームし00aerasfsaf5.jpgにしてみましたが通らずといった感じです。
$upfile_name = $_FILES["image"]["name"];
$upfile = $_FILES["image"]["tmp_name"];
$path = dirname($_SERVER[PATH_TRANSLATED]).IMG_DIR;
if (file_exists($upfile)) {
$dest = $path.$upfile_name;
move_uploaded_file($upfile, $dest);
$ext = substr($upfile_name,-4);
rename ($dest,$path.date("20ymdhis").$ext);
$imgname = date("20ymdhis").$ext;
echo $size = getimagesize($path.$imgname);
$W = $size[0];
$H = $size[1];
504 :
nobodyさん :2006/04/18(火) 15:21:28 ID:ksf2FOYQ
アップロード処理の一部はこんな感じで書きました。 原因があるとしたら、ファイル名処理が怪しいですかね。 ケツから三行目にechoとか入ってますが、なんちゃってデバッグでちゃんと取得できているか試してた名残です(汗
>>504 以下で同じ駄目だというファイル名で実験したが普通に動いているぞ?
<?php
$upfile_name = $_FILES["image"]["name"];
$upfile = $_FILES["image"]["tmp_name"];
$path = dirname($_SERVER[PATH_TRANSLATED]).'/upfile/';
if (file_exists($upfile)) {
$dest = $path.$upfile_name;
move_uploaded_file($upfile, $dest);
$ext = substr($upfile_name,-4);
rename ($dest,$path.date("20ymdhis").$ext);
$imgname = date("20ymdhis").$ext;
echo $size = getimagesize($path.$imgname);
$W = $size[0];
$H = $size[1];
}
?>
<html>
<head>
<title>テストたぼけたれ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor="#FFFFFF">
<form action="./0.php" method="post" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" value="送信">
</form>
</body>
</html>
>>504 FILE_003.jpgのファイルサイズがやたらに大きいとかじゃないのか?
ファイルサイズ制限かタイムアウトだろうな。
508 :
501 :2006/04/18(火) 16:39:57 ID:???
たくさんのレス有難う御座います。 仰るとおりファイルサイズ制限によるものでした。 PHPマニュアルから関数を調べてサンプルコードをコピペした際、隠し要素のMAX_FILE_SIZEをそのままにしていたのが原因でした。 初歩的なミスで申し訳ないです。 テンパってると簡単なミスにも気づかないものですね........
>>490 $imageの後ろにゴミが付くのなら分かるが(これだと改行コードが付くだろう)
$catの方に付くってのはわからんなー
510 :
490 :2006/04/18(火) 16:59:31 ID:???
>>509 氏
レスありがとうございます。
当面は「ゴミ付データをrtrimする」という場当たり対処で乗り切りますです。
・・・目覚めは悪いですが、現状の自分のスキル不足だと割り切ります。
これから勉強していくうちに、解決策も思いつくかもしれませんし(つД`)
レスをいただいた諸氏へ感謝(。・ω・。)ゞ
if( 入力チェック ) $err['name'] = 'エラーメッセージ'; if( 入力チェック ) $err['tel'] = 'エラーメッセージ'; if( 入力チェック ) $err['address'] = 'エラーメッセージ'; のような入力チェックを作ったとして、 表示側を下みたいにした時、 <?= $err['name'] ?> <input type="text" name="name"><br> <?= $err['tel'] ?> <input type="text" name="tel"><br> <?= $err['address'] ?> <input type="text" name="address"><br> error_reportingの設定によってUndefinedが出るんだけど、 error_reporting関数か.htaccessを使って設定を変えるのと、 表示側を <? if( isset($err['name']) ){ echo $err['name']; } ?> とするのとどっちがいいんだろう?
512 :
nobodyさん :2006/04/18(火) 18:42:51 ID:FgrLDE8s
514 :
nobodyさん :2006/04/18(火) 20:31:20 ID:0MA4uQo3
文字コードの質問です。 phpのファイルはエディタの設定をシフトJISにしています。ヘッダのcharsetはshift-jisです。phpmyadminの最初のページで、languageをjapanese(ja-sjis)にしています。php.iniのmbstringの項目ではmbstring.internal_encoding = SJISになっています。 以上が全て同じなら、文字コード的に問題無いでしょうか?作ったシステムは今のところ正常に動いています。 それと、なんだかんだいってEUC-jpでつくるのがベストみたいな話を聞いたのですが、なぜでしょうか? よろしくお願いします。
515 :
nobodyさん :2006/04/18(火) 21:24:39 ID:ezAkcLQV
Apache 1.3.34+php 4.3.10で質問です 指定したディレクトリで指定した拡張子のMIME typeが何と設定されてるか httpd.confやら.htacccessやら調べて取得してくれる関数ってありませんか
>>514 「なんだかんだでEUC-JP」の理由が理解できないうちは、
なんだかんだでEUC-JPにしとくといいと思うよ。
EUC以外のエンコードを採用するのに確固たる理由や確信が持てるように
なったら、それにすれば良いとです。
>>514 PHPで構築したサイトを1年以上運営していますが
Shift_JISで特に問題を感じたことはありません。
518 :
470 :2006/04/19(水) 00:05:26 ID:???
519 :
nobodyさん :2006/04/19(水) 00:16:42 ID:47s4d2RM
アップローダーを作っているのですが、日本語の入ったファイルをアップできません。 というか、2byte文字が入っていると$_FILES['upfile']['name'];でファイル名が収得できません。 拡張子のみが返ってきます。 英数字のみのファイルはアップロード出来るので、2byte文字が原因だとは思うんですがどうすればいいのでしょうか? $filename = $_FILES['upfile']['name']; $enctype = mb_detect_encoding($filename); $filename = mb_convert_encoding($filename,"EUC-JP","enctype"); if (move_uploaded_file($_FILES['upfile']['tmp_name'],$updir.$filename) == FALSE){ print("アップロードに失敗しました。"); }else { print( $filename . "アップロードしました。"); }
例外を使おうと思ってんだけど、どういった場合に使うか迷う。 たとえばDBとコネクトするごとにtryしたほうがいいのか クエリを発行するごとにtryしたほうがいいのか・・・ 皆さんは例外結構使ってまつか?
521 :
514 :2006/04/19(水) 01:05:36 ID:3WMC/UyZ
>517 レスありがとうです。 SJISとかのデメリットってなんですかねぇ? たまにUTF8を激しく推奨みたいのも見かけますし、 なにがいいのかわからないです。 自分的にはSJISが好きなのですが、予期せぬ\マークがでたりしますが、htmlspecialcharsとかstripslashesをやると消えるので、 あまり不具合も感じません。 具体的なお話がきけると有り難いです。 よろしくお願いします。
ちゃんとわかってればいいですよ。 DBへ値を保存するときにはちゃんと文字コードを意識しなければだめ。 最近はサーバ環境がユニコードのためか、viでそのまま文字が読めることに UTF-8はいいなと感じてる。 携帯はSJISがいいでしょ?
>>521 大抵サーバがEUCだからEUCでスクリプト書いておくと何か問題があったときにviとかで直接見られる。
サーバ上にあるスクリプトを直接見ることで、何者かの手によって勝手に改変されてないかわかる。
・・・てことより、バグ見っけたらサーバ上のスクリプトをコッソリ直すってコトの方が多いなw
だからEUCで書いてた方が楽なときが多い。
全てのサーバがnkfとか入れてるわけじゃないからね。特に海外のレンタルサーバなんて・・・
まぁコメントとか日本語使わなきゃいいんだけど、日本語のコメントなきゃサッパリ分からないしー
>>521 mb_** みたいなライブラリが使えない状況だと、EUC の方が圧倒的にコーディングが楽だよ。
SJIS は、文字列を途中から評価しようとしたとき、そのバイトが2バイト文字の一部なのか、そしてそれが何バイト目なのかがすんなり判断できない。
あと環境によっては、2バイト文字の一部に \ を含むものがあるというのがネックになる。
ヘタするとスクリプトのパースすら失敗するしね。
できるだけどこでも動くものを作ろうと思うと、SJIS よりも EUC の方が苦労しないと思う。
PHPでDB(PostgreSQL)使うときにbeginて使えてる? なんかちゃんと動いてんのかわかんねー DBへの書き込み自体はうまく行ってるみたいだし pg_query( 'begin' )だけで問題ないよね?
>>525 INSERT して ROLLBACK してみりゃいいじゃん。
あ、なるほどねー サンクスコ
528 :
nobodyさん :2006/04/19(水) 03:51:04 ID:sslsiAd8
すごいくだらない質問ですが答えていただけたら嬉しいです。 PHPでオンラインテストを作る課題を出されました。 mySQLでtest、question、answerが含まれたテーブルを作ったんですが、このテーブル1つだけで テストを選んだら複数の問題が表示される 1つの問題に3つの答えが表示される 3つのうち1つだけが正解 というスクリプトは書けるでしょうか?
529 :
nobodyさん :2006/04/19(水) 04:08:09 ID:enTaLLyd
Functionの引数とglobal、使い分けがわからん。 こういう場合は引数で渡して、こういう場合はglobal宣言っていう例ない?
>>528 書けなくはないけど、効率悪いか、問題のメンテナンスに難がある。
・テストに対して問題は1対多
・問題に対して選択肢は1対多(ただし3つ固定)
てことを考えると、テストと問題は別テーブル、回答は本来別テーブルだけど、
パフォーマンスに難があれば問題に含めても良い。
…全然PHP関係ないね。DB板向け。
531 :
528 :2006/04/19(水) 04:32:32 ID:sslsiAd8
>>530 最高でもテーブルは2つまでとのことなので、テーブルを2つ作り、テストのみ、問題と回答1、回答2、回答3というようにしたらいいでしょうか?
正解の回答も回答4などとして加えてスクリプトで、選んだ回答が回答4のとき、などと書いて正解を確かめるんでしょうか?
最初DB板で似たような質問したのですが普通にスルーされまして・・・(;´Д`)
PHPのスクリプトの問題なのかと思いこちらで質問させていただきました。
533 :
528 :2006/04/19(水) 04:51:23 ID:sslsiAd8
>>532 分かりました。
どうもすいませんでした。
>>511 使う変数は前もって定義しておく
$err['name'] = "";
$err['tel'] = "";
$err['address'] = "";
>>519 ファイル名の最後が表とかで終わってるんじゃない
htmlの出力をshift jis以外にするしかないと思う
客からSJISで書けって言われるんだよ……
じゃあSJISでセキュリティリスク無くかける技術を身につけろ
>>536 へぇ、こんなSQLインジェクションのテクニックがあったんだね。
今までSJISを避けてきたけど、SJIS使わされるハメになったら穴だらけになるところだった。
危ない危ない
>>537 SJISにこだわる理由を聞け、理由を。
っていうかそんな客なんか切るか、もしくは
「セキュリティ強度が低下しますけどいいんですね?
または強度を維持したいなら見積もり額アップしますけど」
って言えよ。
SJISじゃないとたまにブラウザがcharset指定してても無視して文字化けするときがある IE5の時代はよくあった
>>541 それは出力時にSJISにすればいいだけじゃない。
内部処理までSJISにするこたぁない
>>542 スクリプトチェックするときメモ帳で開けないジャンw
メモ帳て
そもそもPHPはInternalEncでSJIS対応してねーだろ?
>>546 日本語でちゃんとコメント入れておいてくれなきゃ、判んないじゃんw
>>535 ありがとうございます。
表で終わっていると駄目なんですね・・・。
知らなかった。。
>>549 途中にあっても駄目
ディレクトリの区切り記号"\"と判定されるから
表などであって他にもある
結論はシフトジスは使わない
552 :
nobodyさん :2006/04/19(水) 12:13:34 ID:FFPzklJQ
$log = "example.log"; if (!file_exists($log)){ $logが見つからなかったらパーミッション666で$logを自動生成する } といったことをやりたいのですが、 fopenを使った場合、ログファイルなのでパーミッションを666にしたいのですが、 パーミッションが644になってしまい(Xrea使ってます)、 ディレクリの権限を変更しないと(707や777等)作成されませんでした。 なんかいい関数とか方法ありませんでしょうか? functionで作れるような腕はもっておりませんorz
>>550 ハァ??
PHPで動作しないと思われる文字エンコーディングの例を以下に示します。
JIS, SJIS, ISO-2022-JP, BIG-5
これらのエンコーディングで書かれたPHPスクリプトは、特に符号化された文字列がスクリプトで記述子やリテラルに使用される場合には、動作しない可能性がありますが、
入力されるHTTPクエリに関してmbstringの透過的なエンコーディングフィルタを設定することでこれらのエンコーディングをほとんど使用しないようにすることができます。
注意:
SJIS, BIG5, CP936, CP949, GB18030 は、読者がパーサ/コンパイラ、文字エンコーディングと文字エンコーディングの問題点について精通していない限り内部エンコーディングとして使用するべきではありません。
>>555 デフォでは使えないということは、対応してないというわけではない。
(デフォで対応してないのはmb系全般そうだけど)
そこの説明は「非推奨。使用する場合は注意すること」っていう説明。
>>536 SJIS使ってるときにエスケープでaddslashesなんて使う方が悪い気がするけど。
mysql_escape_string使ってれば全角文字をちゃんと認識してエスケープできる。
>>558 だから{
>知識が浅いヤツはシフトJISなんか使っちゃダメ。
>>536 うん。もっとそのことを早めに解ってれば良かったんだけどね。
俺の場合はもう後の祭り状態だな。
562 :
nobodyさん :2006/04/19(水) 14:51:21 ID:yEjSiGYT
phpスクリプトをがんがん書いている方に質問です。 使っているキーボードは日本語配列ですか、それとも英語配列ですか? 双方のメリット、デメリットと合わせて教えて下さい。
>>562 日本語
メリット ここは日本で私は日本人だから
デメリット 特に無し
個人的にはそんなものよりキーを押したときの硬さなどが気になる…
長時間やっても疲れないのが一番!!
>>562 どっちでもたいした影響は無いんじゃないの?
要は慣れなんだし。
565 :
563 :2006/04/19(水) 14:59:56 ID:???
あ!ローマ字ってことね
>>565 いや、たぶん元の考えで合ってる。日本語106だとか英語101だとか。
phpに限らず余計なキーの無い英語キーボードが好き
109から変換・無変換・カタひらを取っ払った変則106をどっか出してくれないかなあ
system()とかの出力を変数に代入するには どうすればよかとでしょうか?
>>562 日本語配列のメリット:慣れてると打ちやすい デメリット:慣れてないと打ちにくい
英語配列のメリット:慣れてると打ちやすい デメリット:慣れてないと打ちにくい
>>569 $env = system("...");
572 :
nobody :2006/04/19(水) 18:05:49 ID:k/ExYNcl
PHPから半角カナを使った検索をしたいのですが、 半角カナ文字のみ条件だと文字化けします。 A.php(「検索」を押すとB.phpが実行) <input type=text name="hankaku_kana"> <input type=text name="zenkaku_kana"> <input type="button" value="検索"> B.php $sql = "select * from Table where col = *"; if(hankaku_kana != NULL) $sql = $sql."and col = hankaku_kaa"; if(zenkaku_kana != NULL) $sql = $sql."and col = zenkaku_kana"; このとき、zenkaku_kanaに全角文字が入っていると 検索できるんですが、 半角文字だけだと文字化けします。 どうしたらできますか?
しまった オレsjisで作ったコトある・・・しかも商用orz
UTF-8 >> EUC-JP >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Shift_JIS よく分からないなら、UTF-8 使っとけ。 EUC-JPに比べてUTF-8を使うメリット ・最近のUnix/Linux系OSではUTF-8が標準であることが多い ・国際標準なのでどの言語でも利用できる ・Windows/Macでも内部コードとして使われてきている
>>573 超大手商用サイトでもShift_JIS使ってるとこなんていくらでもあるよ
当たり前な日本語になるが、問題なければ問題ない
UTF-8推奨ってのは同意するけど、スクリプトを配布して共用鯖で使う場合では別の問題がある。 ・UTF-8は日本語が3バイト(EUC-JPはほぼ2バイト)だから容量制限にひっかかる(DBが5MBの某鯖とか) ・Winのメモ帳などでいじるとBOMがついて誤作動する ただ ・DBの文字コードとスクリプトの文字コードは同じほうが効率が良い ・SQLiteはUTF-8/16推奨
577 :
572 :2006/04/19(水) 18:51:40 ID:k/ExYNcl
鯖がEUC、DBがSJISでやりたいんですが、難しいですか?
全然
DB SJISは正気とは思えない。
箱庭諸島方式でいけよ 内部がEUCで出力はSJIS つかUTF-8とかならともかく日本語環境でなんでEUCを内部コードに使うのかわからん
SJISとEUCとどっちか2択、なら正規表現で全角そのまま書いてもこけないEUCが楽だから。
582 :
nobodyさん :2006/04/19(水) 20:08:41 ID:yEjSiGYT
すいません、サーバに文字コードってあるんですか?DBの文字コードとは別なんですか? サーバの文字コードとDBの文字コードとスクリプトの3つを気にしなきゃいけないのですか?
>>582 サーバの文字コードとDBの文字コードとスクリプト内部処理の文字コードと
HTML出力の文字コードの全てを「UTF-8」にすれば完璧です。
それ以外の心配はいりません。
584 :
nobodyさん :2006/04/19(水) 20:27:20 ID:lD0hd5jB
配列の配列($myArray[$i][$j])の値の合計値を求めたいのですが $myArray_sum = array_sum($myArray) これでは値が0になってしまいorz 配列自体に数値が入っているのは確認しました。 配列の配列 array_sum/二次元配列 array_sum/等 でググったんですけど分かりませんでした。ど うやったらいいでしょうか? よろしくおながいします。 PHP Version 4.3.9
585 :
nobodyさん :2006/04/19(水) 20:28:17 ID:yEjSiGYT
サーバの文字コードっていうのはapachの文字コードってことですか? レンタルサーバでも変更できますか?
>>584 $myArray_sum = 0;
foreach($myArray as $a) $myArray_sum += array_sum($a);
かなぁ
もっと簡単な方法ってあるのかな。
ほんとくだらんくてすみません。 掲示板のようなもので、データを書き込んだら なぜか「ソ」のあとに\が付くんですが、なぜでしょう。 カタカナを確かめるとソ以外の後ろには付きません。 htmlspecialcharsと、str_replaceで、改行、キャリッジリターンを<br>で変換する処理をしたあと、 ログに書き込んでいます。ログに書き込まれた時点で\が付いてるので表示の問題ではないようです。 お願いします。
589 :
587 :2006/04/19(水) 20:51:57 ID:???
ごめんなさい、magic_quotes_gpcの影響のようです
>>585 OS自体の文字コード。
WindowsはShift_JISで変更不可。
Fedora Core (Linux) なら UTF-8 が標準。(設定で変更可)
かんたんに言えばこんなかんじだ。
>>583 ついでに携帯専用サイトの文字コードもUTF-8にしとけば?w
>>591 ん、ケータイ用サイトの文字コードもUTF-8にしているよ。
auとtu-ka、WILLCOMは全機種UTF-8対応でしょ。
(ゲートウェイで変換されるから旧機種でも問題無い)
たしかDoCoMoもよっぽど古い機種じゃなけりゃ問題ないとおもう。
たぶんアクセス解析すりゃ98%以上がUTF-8対応じゃないの?
>>574 > EUC-JPに比べてUTF-8を使うメリット
> ・最近のUnix/Linux系OSではUTF-8が標準であることが多い
「多い」ってことは全部じゃない?
> ・Windows/Macでも内部コードとして使われてきている
「きている」ってことはやっぱ全部じゃない?
594 :
584 :2006/04/19(水) 20:59:35 ID:lD0hd5jB
>>586 ありがとうございました。
数もそう多くないんで処理できれば問題なかったんで。
加算代入の存在忘れてました。
> 「多い」ってことは全部じゃない? 全部では無い。 ただ、EUC-JPよりは利用率が圧倒的に高い。 > 「きている」ってことはやっぱ全部じゃない? 全部では無い。 WinはShift_JISの箇所が一番おおいしな。 EUCはUnix用のコードだからWinの内部コードではないっしょ。
>>576 容量制限の問題はたしかにあるな。
> Winのメモ帳などでいじるとBOMがついて誤作動する
そもそも、EUCだとWinのメモ帳じゃ弄れないよね。
>>596 そもそもスクリプトやらを弄るならエディタぐらい揃えろと
598 :
580 :2006/04/19(水) 21:19:24 ID:???
ごめ、最後のとこSJIS
>>592 ドコモはFOMAだけ。
公式サイトはXHTMLでないなら審査通過しないよ。
>>599 XHTMLと文字コードは関係無いわけだが。
あとMOVAでWeb巡回する人なんてそんないないだろ。
2円/1パケット=128バイト もぼったくられるでしょ。
1MBで2048円にもなる。
パケ死対策としてUTF-8にしてMOVAは弾いた方が親切だなw
>>600 公式嫁。
HTMLはSJIS、XHTMLはSJISかUTF8と書いてある。
つーか、わざわざイリーガルなことをせず素直に一般的な方法を選べよ。余計な事をして後悔したくなければな。
>>603 DoCoMoにもお前みたいのがいるんだろう
俺は絶対メールアドレスの@より前の文字例にはドットを使わない。 いくら大丈夫だからって気持悪い。
クラスの勉強中に書きのようなコードを書いたんですが。 Warning: Invalid argument supplied for foreach() と怒られます。 -------------------------------------------------- <?php include('mainmenu.inc'); $page = new mainmenu(HOME); $array = array('HOME' => 'home.php','SERVICES' => 'service.php','PORTFOLIO' => 'portfolio.php','CONTACT' => 'contact.php'); $page->ex = $array; $output = $page->mainmenu('HOME'); print $output; ?> --------------------------------------------------
607 :
606 :2006/04/20(木) 04:01:33 ID:Rr5Gf5oo
mainmenu.inc -------------------------------------------------- <?php class mainmenu { function mainmenu($atpage) { $print .= '<table align="center" width="360" cellpadding="0" cellspacing="5">'; foreach($this->ex as $key => $val) { $print .= ahref("$val","$key","$atpage"); } return $print; } } function ahref($link,$name,$atpage) { if($name != $atpage) { return "<td><h2><center><a href=$link>$name</a></h2></td>"; } else { return "<td><h2><center>$name</h2></td>"; } } ?> -------------------------------------------------- 正直試行錯誤しながら適当に書いたのですが、エラーの理由が分かりません。 表示をちゃんと出来ているのでエラーを黙らせるだけでもいいのですが・・。
>>607 class mainmenu の中に var $ex; って定義したらどう?
609 :
606 :2006/04/20(木) 04:09:36 ID:Rr5Gf5oo
>>608 さん早速の返答ありがとうございます。
class mainmenu
{
var $ex;
function mainmenu($atpage)
{
といった感じで、他の変数も宣言してみましたが変わりませんでした・・。
>>609 あーわかった。
new した時点でコンストラクタが実行されるのに、その時点ではまだ ex に値が入ってないからだね。
611 :
nobodyさん :2006/04/20(木) 05:48:34 ID:5qR+ryMI
<?
$html = implode('', file('
http://hoge.com/ '));
print $html;
?>
これを、ローカルで実行すると「問題が発生したため、Apache HTTP Server
を終了します。 」とでるが、XREAにアップして実行するとエラーになりません。
ローカルでエラーにならない方法知ってる方、いらっしゃいますか?
612 :
nobodyさん :2006/04/20(木) 05:56:37 ID:A22L6gzy
一定時間ごとに起動するスクリプトは どのように書けばいいのでしょうか。 誰か教えてくれませんか。
>>612 意図がよくわからない。応答返さずに定期的にアクティブになるならsleepだけど、意味ないわな。
一定時間ごとに応答が欲しいなら、ブラウザにRefresh指定しなさいな。
615 :
nobodyさん :2006/04/20(木) 06:42:41 ID:5qR+ryMI
>>613 php.ini の設定は次のようになっています。
; Whether to allow the treatment of URLs (like
http:// or
ftp:// ) as files.
allow_url_fopen = On
ちなみにOSはWindowsXPです。
616 :
nobodyさん :2006/04/20(木) 07:15:59 ID:A22L6gzy
>613 cronとは初めて聞いたのですが、どのようなものなのですか。 書き方を知ろうと思いググってみたのですが、 どう書いたらよいのか分からなくて。 良かったら、教えていただけませんか。
617 :
nobodyさん :2006/04/20(木) 07:37:21 ID:A22L6gzy
php.iniじゃなくって phpinfo();で確認ってことじゃないの?
>>615 ちなみにマニュアルは読んだ?
>>注意: PHP 4.3未満のWindows版PHPは次の関数については リモートファイルアクセスをサポートしてません: include(), include_once(), require(), require_once(),
>> そして参照LVIII, イメージ関数(image)拡張によるimagecreatefromXXX関数。
はどう?
確認するのはphpinfo()で表示されるRegistered PHP Streamsにhttpがあるかどうか。
#関係ないけど最初の implode('',file('...'))はfile_get_contentsのほうがいいかなっと
>>616 OS書いてないからわかんないけど、cronは定期的に自動実行するUNIX系のツール
phpのスクリプトを設定した時間がきたら動かすってことだな。
ぐぐればわんさか出てくる。WinならVectorでもいけばそういうツールあると思うけど。
619 :
613 :2006/04/20(木) 08:05:34 ID:???
>>558 お前、
>>536 で提示されてるリンク先をよく読んだか??
読んでもまだ意味がよく分からないようなら相当ヤバイので、
エンコード云々に限らず、Webプログラム開発自体を止めたほうがいいよ。
FedoraCore3/Apache1.3.33/PHP4.3.11をインストールしました。 Apacheは ./configure --prefix=/usr/local/apache --enable-module=so PHPは ./configure --without-mysql --enable-mbstring --with-apxs=/usr/local/apache/bin/apxs --prefix=/usr/local/php4 でインストールしました。 Apacheを起動し、<?php phpinfo(); ?>を書いたファイルにアクセスしたところ、php.iniのパスは/usr/local/php4/libでした。 ところが、/usr/local/php4/lib/にphp.ini-recommended⇒php.iniとして配置し、Apacheを再起動しても設定が反映されません。 何か作業に見落としがあるのでしょうか?
>>618 マニュアルは読みました。
PHP Version は 4.4.2 です。
Registered PHP Streams はphp, http, ftp, compress.zlib で
httpはあります。
>>622 Win版のバグ。
使いたかったらdev版使うか4.4.1使え
>>623 4.4.1使ったら解決しました。ありがとう!
>>621 なぜ今さらFedoraCore3??
もう5まで出てるんだが、今さら3を使うメリットってあるのかな?
626 :
nobodyさん :2006/04/20(木) 13:30:31 ID:X9ueaSfE
こんにちわ。phpのfile_get_contentsについてですが、
サーバーA には $_POST["id"]でidを受信
サーバーB には file_get_contetnsプログラムをおきます。
以下、全てサーバーBにプログラムをおきまして、サーバーAに対し
file_get_contents("
http://www.hoge.com?id=3 ");
をする事により、引数の id 3 をデータベースに登録したいのです。
しかし、サーバーBのレンタルサーバーによっては
file_get_contents("
http://www.hoge.com?id=3 ");
をしても id 3 がデータベースに登録されない場合があります。
どうすればどのサーバーBでも
file_get_contents("
http://www.hoge.com?id=3 ");
をすれば登録することができるでしょうか。
ご存知の方いらっしゃいましたら、ご教授下さい。宜しくお願いします。
627 :
606 :2006/04/20(木) 13:33:55 ID:???
>>610 出来ました、ありがとうございます!
クラス名とコンストラクタ名を同じにしていたのが混乱の原因だったようです。
ちなみに「クラス名と」と書こうとすると、「クラスメイト」と変換されるのもオブジェクト指向だからこそだなと思いました。
>>626 その登録されないサーバで、情報を得られてる事は確認した?
エラーは出てないの?
629 :
nobodyさん :2006/04/20(木) 13:41:16 ID:X9ueaSfE
>>628 ]
レスありがとうございます。
ページ自体は表示されるのですが、
?id=3 の ?以降の文字列が全く無視されてしまいます。
引数を送りたいだけなので require や include で試しても
うまく取得してくれませんでした。
630 :
621 :2006/04/20(木) 13:45:26 ID:???
>>625 たまたま手元に3があったのと、問題発生時の情報が新しいOSに比べて多く見つかること。あとは3がさほど昔のOSだとは思っていないことですね。
>>629 ところでPOSTとGETの違いは認識できてる?
633 :
nobodyさん :2006/04/20(木) 14:30:38 ID:X9ueaSfE
自己解決しても結果を書いてくれるとみんな助かるしスッキリするんだけどなぁ・・ ファイル名まで書かないとダメだったんだろうか
メールをmysqlに流し込もうとしてるんですが、
たまに次のようなエラーがでます。
Check the manual that corresponds to your MySQL server version for the right syntax to use near 'hogehoge hoge' <
[email protected] >', 'RE: hogehoge
<>か'あたりをエスケープしなきゃいけない感じでしょうか?
ただ、できれば<>をそのままデータベースに入れたいなと思ってます。
mysql_escape_string 通せばいいって話じゃなくて?
まあそれだけの話。 名称・アドレス併記の際のクォートが引っかかってるんだろ。
>>635 の作ったスクリプトは脆弱性だらけだと見た。
DB上のデータを元に、ある入力フォーム上のプルダウンメニューを作りたいのですが フォーム自体は、あるボタンが押された時にjavascript(つまりはDHTML?)で表示させています このjavascriptを外部の***.jsとした場合、HEAD部で***.jsのかわりに***.phpとする感じで フォームの要素を動的にしたいんですが上手くいきません 行数が少なければhtml内部に書いて事なきを得るんですが・・・ どなたかヒントだけでいいのでお願いします(TT
動的にしたいデータだけ、非同期で取得させる。 それがAjax
>>639 なんか勘違いしてるみたいだけど、javascriptはブラウザで、phpはサーバで動作するものですよ。
>>639 <script src="PHPファイル"></script>
じゃなく
<?php require_once("PHPファイル"); ?>
にして、
外部PHPファイルで
<script>
JavaScriptコード
</script>
という内容にするのはダメ?
644 :
nobodyさん :2006/04/20(木) 22:16:17 ID:ryIl/Q77
文字コードがらみで質問します。 MAMPというソフトを使ってローカル開発環境をつくりました。 MAMP付属のphpmyadminでdbを覗くと、 ちゃんと日本語表示できているんですが、 自前のスクリプトで呼び出すと文字化けします。 MAMPはutf8がいいみたいなんですけど、 自分のコードはeucです。 でもphpmyadminできちんと表示できたということは、 設定次第では自分のスクリプトでもちゃんと表示できるんでしょうか? phpmyadminはlangageがutfで接続照会順序はujisでテーブルを作りました。
>>634 単にホスト名と?との間に/が抜けてただけじゃない?
>>644 php.iniで
mbstring.http_output = UTF-8
647 :
644 :2006/04/20(木) 22:34:03 ID:ryIl/Q77
>646 レスありがとうございます。 なんかだめっぽいです。 現状でもphpmyadminは文字化けしないので、 そういう設定ファイルの類ではないもので解決しそうなのですが わからないです。 どうして同じブラウザから同じデータベースを読み込んで 片方は文字化けするんですかね? phpmyadminのソースをみたらcharsetがutf8だったので phpのスクリプトが書いてあるファイルのcharsetを 同じくutfにしたけどだめでした。
>>647 ひょっとしてデータベースのデータ以外にも何か日本語を表示させているのか?
それがソース上でEUCで書かれているならUTF-8にコード変換して出力させないとダメだ。
phpmyadminは出力内容を全部UTF-8にしてるから文字化けしない。
お前のは恐らくHTMLの中にUTF-8とEUCが混在してるんだろう。
ちなみに
> phpのスクリプトが書いてあるファイルのcharsetを
> 同じくutfにしたけどだめでした。
これは具体的にどうやったのかを説明しろ。ちゃんとheader()を使ったのか?
> そういう設定ファイルの類ではないもので解決しそうなのですが
設定ファイルで解決した方が簡単だろうと思ってそっちを提示しただけ。
header()で解決するならそれでもいいよ。
>>644 SQL発行の一番最初に
set names ujis
650 :
644 :2006/04/20(木) 23:02:21 ID:ryIl/Q77
>648 親切な回答ありがとうございます。 データベースのデータ以外にもphpのスクリプトと一緒にかかれた html文と日本語を表示しています。 そのphpファイルはエディタでeucのファイルにして、 meta contentのcharsetもeucにしました。 phpmyadminの正しく日本語表示されてるページは ブラウザのソースを見るってやったらmetaのcontentのcharsetがutfだったので、 自分のスクリプトもdbを読み込んでくるページで同じようにutf-8と書いたのですが これは全然変換とかしてないんですよね? その他文字コードを指定しなきゃいけないようなところは みんなeucにしています。 自分のスクリプトは簡単な登録フォームみたいのですが、 最後にinsert intoというクエリを発行するところで mysql_query($sql = set names ujis); とやると、phpmyadminで見たときに文字化けしないで登録されます。 ぎゃくにこれをutf-8とかにすると、phpmyadmindでも文字化けします。
>>650 スクリプトのコードは別にEUCでも構わないが、
出力はせめて統一しろよ…
ややこしいというならスクリプトも全部UTF-8にしる!
>>650 > 自分のスクリプトもdbを読み込んでくるページで同じようにutf-8と書いたのですが
> これは全然変換とかしてないんですよね?
charsetの指定は「このページの文字コードはこれ」とブラウザに教えるものであって変換ではない。
HTMLの中身がEUCなのにUTF-8とか嘘ついたら化けるの当たり前だろう。
どうしてもソースをEUCにした上でソース中にHTMLも一緒に書きたいというなら
selectして取得してきたデータをmb_convert_encoding()でEUCに変換して出せ。
逆にソースコード中のHTML表示を1度変数に格納しといてUTF-8に変換する手もあるが面倒。
でも1番簡単な方法は、ソース中に直にHTMLを書くのをやめて、
UTF-8で書いたHTMLをrequireで読み込んで出力する方法だと思う。
653 :
644 :2006/04/20(木) 23:19:54 ID:ryIl/Q77
>649 どうもです。いま試してみます。 >651 わかってなくてスミマセン。 スクリプトのコードというのはエディタで指定するもので、 出力というのはcharset=utfとかそういうのですよね?
654 :
nobodyさん :2006/04/20(木) 23:25:46 ID:6nVXOU85
RFC1738エンコードを実現したいのですが、URL以外の文字例をエンコードするのに rawurlencode()は使わないほうが良いのでしょうか?
655 :
644 :2006/04/20(木) 23:26:51 ID:ryIl/Q77
>652 詳しい説明でたすかります。 自分のコードは簡単にいうとこうやって書いてます。 <head> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <head> <html> <?php $hoge = aaa; ?> <p><?= $hoge ?></p> </html> もしくは表示したいhtml全体を$bodyとかに .= で詰め込んでって 最後にprint $bodyとかです。 これを書くときにエディタで設定(?)をeucにしてます。
>>655 > <p><?= mb_convert_encoding($hoge, "EUC-JP", "UTF-8") ?></p>
とかやれば直らないか?
>>653 > スクリプトのコードというのはエディタで指定するもので、
それはその通り。
> 出力というのはcharset=utfとかそういうのですよね?
違う。
内部コードはutf-8、外部にはてきとーなのにしとけ 内部コードeucでやるやつは時代遅れの要らない子
659 :
654 :2006/04/21(金) 00:09:26 ID:2Wlm0Z2o
660 :
nobodyさん :2006/04/21(金) 00:10:04 ID:xjsHzaEw
Parse error: parse error, unexpected '@' in このエラーって、どういう意味?
661 :
名無し募集中。。。 :2006/04/21(金) 00:16:31 ID:IwWXiYO9
662 :
nobodyさん :2006/04/21(金) 00:19:16 ID:xjsHzaEw
全角空白の場合にも'@'が出る場合があるでよ。 おいらは普段は全角空白なんて使わないから出した事がないけど。
665 :
nobodyさん :2006/04/21(金) 00:24:11 ID:xjsHzaEw
667 :
654 :2006/04/21(金) 00:28:40 ID:2Wlm0Z2o
>>666 rawurlencode ("あいうえお")
でもこれってURLをエンコードする関数ですよね?
>>667 そもそもURL以外をURIエンコードしたいと思った理由はなに?その理由によるのでは。
目的が分からんのにダメとか言えんよ。
phpで全角数字を半角数字に変換するマルチバイト関数は無いでしょうか? 3→3 2→2 こんな感じの処理です。
671 :
654 :2006/04/21(金) 00:38:17 ID:2Wlm0Z2o
>>668 フォームに入力された文字をPHPで簡単にエンコードしたいのです。
今までは専用のソフトウェアをインストールして行っていたのですが…
>>671 だったら別にrawurlencodeでも構わないのでは。
100ページぐらいのwebサイトがあるんですけど、 全部のページでsession_start();してるんですけど、 サーバの負荷たかいですか?
675 :
nobodyさん :2006/04/21(金) 01:51:43 ID:MBv/PjUM
メールサーバからメールの受信を確認して読み込むような スクリプトの書き方を教えて下さい。
676 :
644 :2006/04/21(金) 02:41:38 ID:j0KwlCv2
みなさんレスありがとうございます。 >649 すごいです。set names ujisをdbから読んでくるページに書いたら とりあえず全部ちゃんと表示されました。 >657 「出力」がやっぱりいまいちわかりません。 php.iniで設定するやつですか? >658 色々調べたのですが、utf-8はもう実質標準ぽいですね。 ところで気になっていたのですが、 内部コードというのはどこで指定するのですか? 外部はcharset=Shift-jisとかいうやつですか?
>>644 お前はまずブラウザの挙動から勉強しる。
完全に間違った思い込みで考えている部分がある。
>>676 出力は設定するものじゃない。作るもの。
680 :
675 :2006/04/21(金) 03:18:35 ID:MBv/PjUM
ヒントでもいいのでお願いします。 プログラムの流れでもいいのでよろしくお願いします。
>>677 思い込みというか、設定・指定さえしとけば何でも自動的に切り替わってくれるもの、
と勘違いしてる節がある。
>>679 その複数のtest.gifってのは全部同じ内容?
だったらPHPプログラムでいちいち何とかするより、
サーバー側で全部シンボリックリンクしてやるのが早い
683 :
679 :2006/04/21(金) 03:28:34 ID:???
>>682 そうです。全く同じファイルです。ただ、内容が変わっていると言うだけで。
(タイトル画像を変更とか)
ジンボリックリンクですね。調べてみます。ありがとうございました。
>>680 POP3サーバーに接続
USER、PASSを順に送信
LISTを送信して一覧取得
受信メールがあればRETRを送信して読み込み
QUITを送信して接続終了
>>681 >>644 はエンコードについては思いっきり浅い知識しかないみたいだ。
っていうか、まず「バイナリとは何か・テキストとは何か」って辺りから
説明しないと根本的に理解してくれないんじゃない?
687 :
644 :2006/04/21(金) 11:31:57 ID:5+Hakngk
みなさん詳しいレスをつけてくれて本当にありがとうございます。 博識すぎて情けないです。 特に「出力は作るもの」という概念は目から鱗です。調べてみます。 いままでhtmlだけで何かを表示させていたときは、 とりあえず、meta content charset=を指定すれば文字化けしませんでした。 これを記述しなくても、IEなんかはかってにsjisにしていたようですし、 他のブラウザも文字判別(自動)みたいな設定があって、 特に意識する必要がなかったと思います。 phpを書くようになってから、ファイル自体にエディタで文字コードを 指定することがあると知って、何の為にやるのか??だったのですが meta content charset=で指定したものと同じにしていました。 エディタによっては、これをバラバラにするとアラートが出ました。 問題はmysqlを絡めてからで、my.cnfやphp.ini、それから phpmyadminなど、至るところに文字コードを指定してくれと言われて 正直目的が分からず閉口しています。 いろんなページをぐぐったのですが、 よく言及されているのはやはり「内部コード」「出力」です。 なにか体系的にまとめられているページなど 参考になりそうなものがあったら教えて頂きたいです。 まずはセオリー的に簡単に言っちゃえばここはこうするのがベターみたいな ものがあるらな、併せて教えて頂けると助かります。 よろしくお願いします。
688 :
nobodyさん :2006/04/21(金) 11:32:38 ID:5+Hakngk
×博識 ○薄識 すいません
まあ644は姿勢は謙虚だし、努力する気持ちもあるみたいだから 頑張れば伸びるよ。少し体系的に学ぶといいよ。
>>687 あのさ、キミ深く勘違いしてるから念のため繰り返し言うけどさ、
このエンコードの件は、別にPHPとかMySQLとか関係ないからね。
HTMLだけだってソースのエンコードと出力指定(charset)は合わせなきゃいけないし。
キミはメールソフトはアウトルック・エクスプレスか?
だったら、受信したメールを「表示」→「エンコード」で手動で別のエンコードにしてみてごらんよ。
あるいは、Yahooのページのソース(EUCで書かれてる)をWin付属のメモ帳(SJIS専用)で開いてごらんよ。
そしたらうっすら何か分かってくるだろう。
簡単な「まとめページ」みたいなので一発で楽して覚えようとしないで、コツコツ勉強したまえ。
692 :
691 :2006/04/21(金) 12:11:43 ID:???
>>691 だけど、●補足説明●
>別にPHPとかMySQLとか関係ない
「関係ない」って書くとまた別の誤解をしそうなので、
「PHPとかMySQLとかのせいじゃない」に変更しようかな。
PHPの質問とはあまり関係ないけれど、聞くとこが見つからなかったので、 ここの人ならわかると思うのでちょっと付き合ってください。 BlogとかでRSSがついてるのありますよね? あれってBlogの記事ををRSSに格納して、RSSからBlogの文章を出力しているのですか? それともBlogの記事をhtml(php,cgi etc)とRSSに同時に出力しているのでしょうか? RSS(Atom)系のスレあったら教えてください。
694 :
693 :2006/04/21(金) 12:31:12 ID:???
ややこしくてすみません。 簡潔に言うと、RSSはリーダーでも読めるようにオマケでついているのか、 システム全体に影響与えるような重役を担っているのかのどちらだろう? ということです。
695 :
644 :2006/04/21(金) 12:41:13 ID:5+Hakngk
>689 恐縮です。がんばります。 >691 具体的な指示、参考になります。ありがとうございます。 ダウンロードしたヤフーのソースファイルをいじってみたのですが、 確かにエディタの機能として指定できる文字コードとhead部分に書く charsetをバラバラにすると化けます。 コードを記述したときの指定と、表示するときの指定(headのcharset)は 合わせないとまずいという事ですね。 この感じでいくと、dbに登録される(された)ときの文字コード(mysqlの中の文字コード?)と僕が書いた、dbの内容を引っ張ってきて表示したい ページのcharsetが違う事がいけない気がしますが この考え方はあっていますでしょうか? あと、687さんは出力指定(charset)とかかれていますが、 657の人は出力はcharsetではないと書いていて、謎です。
>>694 まずRSSが果たす役割を勉強した方がいいよ。
で、なぜブログにRSSが付いているのかを考える。
そこまでは完全にスレ違いなので、それ以降に考えが及んだときにまたお越し下さい。
697 :
644 :2006/04/21(金) 13:51:20 ID:5+Hakngk
あーやばいです。なんとなく分かっちゃいました。 レンタルサーバのmysql(sjisで入ってる)をエクスポート したのを自分のローカル環境(utf)にインポートする作業をやったんですけど、 どこをどうするとどうなるみたいのが見えてきました。 エクスポートでダウンロードしたファイルをエディタで開いたら 当然のようにsjisだったのでutfにして保存し直して mysqlにutfでインポートしました。phpmyadminの表示も正常。 それを文字セットutfでcharsetもutfの状態で表示させました。 このままでは化けるんですが、これは環境依存ぽいのです。 最後はやはりset names utf8のクエリを打ちました。 どうもこのset namesは最強っぽい気がします。 取り急ぎ報告します。いままでアドバイス下さったかた、 最後までつきあって下さった691さん、ほんとうにありがとう。
まあそれだけじゃ何の解決にもなってないんだが、1つずつ学ぶしかないな。 設定できる・しなきゃならないのは、 ・Mysql上で設定する、格納データの文字コード。 ・PHPスクリプトを編集するエディター上で設定する、PHPスクリプトの文字コード ・PHPエンジンに教えてあげる、スクリプト本体の文字コード(PHP.iniでもスクリプト内でも指定可) ・PHPスクリプト内で指定する、Mysqlにアクセスする際の文字コード ・PHPスクリプト内で指定する、HTTP出力の際の文字コード ・ブラウザー・Webサーバーに教えてあげる、HTTPヘッダーで指定するHTMLの文字コード ・ブラウザーに教えるために出力するHTML内で指定する、HTMLの文字コード 少なくともこれらの区別・統一をきちんと図ってそれぞれ指定しなきゃダメだよ。 わかんなきゃ全部UTF-8に統一しとけ。
700 :
644 :2006/04/21(金) 14:28:23 ID:5+Hakngk
>699 素晴らしいです。感謝します。 ・Mysql上で設定する、格納データの文字コード。 これはmy.iniで設定するものでしょうか? [mysqld] default_character_set=utf8 とか。 これに従ってmysqlに登録されたデータの文字コードが決まるんですよね? ・PHPスクリプトを編集するエディター上で設定する、PHPスクリプトの文字コード これは分かります。スクリプト自体の文字コードですね。 ・PHPエンジンに教えてあげる、スクリプト本体の文字コード(PHP.iniでもスクリプト内でも指定可) これは、,mb_convert_stringsの類ですかね。php.iniにもmb_string系の指定が結構ありますよね。 ・PHPスクリプト内で指定する、Mysqlにアクセスする際の文字コード これは、select文を打つときというか、コネクトするときに指定? ・PHPスクリプト内で指定する、HTTP出力の際の文字コード これはechoとかするときにphpエンジンが何の文字コードを吐くかってことかな? このへんはかなり分からないです。 ・ブラウザー・Webサーバーに教えてあげる、HTTPヘッダーで指定するHTMLの文字コード ・ブラウザーに教えるために出力するHTML内で指定する、HTMLの文字コード これは別物なんですか?特に後者はhtml文を書いているだけでも関係してきそうですが、意識したことがありません。 自分の理解はまだまだこの程度です。情けないです。 推測の範囲で申し訳ないのですが、結構省略しちゃうことがあると 思うんですけど、特別に指定しなかった場合は最終的にどこに依存するの でしょうか?
だんだんとウザク感じてきたのは私だけでしょうか…
ここはphp通信教育スレですか?
703 :
644 :2006/04/21(金) 14:52:20 ID:5+Hakngk
>701 702 すいません。自分ばっかりかいて申し訳ないっす。 なんか極論的にはset names = utf8があればOKだしなければだめ的な 雰囲気になってきました。 MAMPだからかな。
704 :
639 :2006/04/21(金) 16:02:39 ID:???
>>641-643 ををを・・・単純だけどこれで切り分け出来ますね、まったく思いつきませんでした(泣
これで逃げたいと思いますありがとうございました
ajaxも考えたんですが、この箇所だけにxml吐き出してブラウザ毎に接続アレコレしてっとなると・・・
ちょっと微妙な感じだったのでウダウダしてました。
いやその前に使ったことすら無いのですが
>>704 別にXMLで吐き出さなくてもいいじゃんw
707 :
675 :2006/04/21(金) 16:54:47 ID:MBv/PjUM
>684 今少しずつ作っているのですが POP3サーバに接続して、特定のメールアカウントの分だけ取得したい場合は LISTにアカウントを書いておけば良いでしょうか?
USER,PASSってアカウントの指定じゃないのか???
709 :
675 :2006/04/21(金) 17:27:25 ID:MBv/PjUM
>708 あ・・・
711 :
nobodyさん :2006/04/21(金) 17:57:10 ID:KwFOTHkh
PHPでユニコード文字を取得するにはどうやればいいんですか? あ=> E3041 という結果が欲しいのですが
>>711 文字列を取得したいのか数値を取得したいのか知らないけど、bin2hex、ord、sprintfから好きなのえらんで。
yamada,521 aoki,32 takahashi,6013 …というような形式のファイルdata.txtがあり、 それをそれぞれの数値の部分でソートしたいのですが、どのような方法がありますでしょうか? $lines = file('data.txt'); と配列にしましたが、その先が分かりません。 よろしくお願いします。
714 :
nobodyさん :2006/04/21(金) 21:20:33 ID:q11WDkz8
メールサーバにある添付ファイルを取得するにはどうすればよいのでしょうか
>>714 メール本文を読み込んでマルチパートを分解してデコードしてファイルに保存
>>713 explode+array_multisort
>>713 カレーを作りたいんです。
お鍋に水を入れましたが、その先が判りません。
と言っている様な物だ。
もう少し自分で頑張れ。
ヒント:つ「配列廻してさらに配列生成」
>>716 array_multisortは配列の1次元目でしか(配列の関係を崩さず)ソートできない。
この場合には、usort関数を使う必要があるだろう。
>>714 無理。そんなのできたら携帯用あぷろだとか出来てる。
>>719 …なんか釣られてる気がしないでもないが
foreach($lines as $line) {
list(, $key[]) = explode(",", $line);
}
array_multisort($key, $lines);
print_r($lines);
結果
Array
(
[0] => aoki,32
[1] => yamada,521
[2] => takahashi,6013
)
これでいいんだろ?あほですか?
720 名前:nobodyさん[sage] 投稿日:2006/04/21(金) 21:57:38 ID:???
>>714 無理。そんなのできたら携帯用あぷろだとか出来てる。
722:nobodyさん :2006/04/21(金) 22:05:06 ID:??? [sage]
720 名前:nobodyさん[sage] 投稿日:2006/04/21(金) 21:57:38 ID:???
>>714 無理。そんなのできたら携帯用あぷろだとか出来てる。
723:nobodyさん :2006/04/21(金) 22:16:31 ID:??? [sage]
722:nobodyさん :2006/04/21(金) 22:05:06 ID:??? [sage]
720 名前:nobodyさん[sage] 投稿日:2006/04/21(金) 21:57:38 ID:???
>>714 無理。そんなのできたら携帯用あぷろだとか出来てる。
次は
>>719 によるスマートなusort関数HowToの実演です
726 :
nobodyさん :2006/04/21(金) 22:57:53 ID:q11WDkz8
携帯でphp開発をするという試みで 試験的にセキュリティ無視でfwrite()とフォームを使ってスクリプトを書いたら***.phpで保存するといったプログラムを組んだのですが、 Warning: Unknown(): SAFE MODE Restriction in effect. The script whose gid is 1000 is not allowed to access というエラーを吐いてくるのですが どう対処したらよいでしょうか
728 :
727 :2006/04/21(金) 23:04:45 ID:???
>>727 は完成してうpしたスクリプトにアクセスしたときに出るエラーです
729 :
727 :2006/04/21(金) 23:07:44 ID:???
検索したらどうやら所有者が apache となってアクセスできないみたいですね 対処は無理なのか・・・・
730 :
nobodyさん :2006/04/21(金) 23:07:45 ID:xjsHzaEw
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /xxx/xxx/xxx on line 221 これって、どういうエラー? ちなみに221行目は、$tag .= "<form action=\"$_SERVER['PHP_SELF']\" method=\"post\">"; なんだけど・・・
せめてIDくらい変わるまで待つなり隠すなりしろよ どっちにしろ無駄だけど
>>729 セキュリティ的にやばすぎるから無理だろ
URL拾われただけでその鯖あぼーんやで
XSS対策についてなんですが 具体的にはユーザー情報を格納したcookiesを発行なんかしちゃうと ほかのサイトでも読み出しできてしまう ということなんでしょうか? でもそしたらどうやってログインして、複数のページを渡り歩けるようにすればいいんでしょうか・・・・
>>733 まず、最近話題のCSSXSSとCSSは全くの別物なので勘違いしないように。
XSSはphpでの出力時に、危険性のある全ての変数(ユーザ入力の値など)を全てhtmlspecialcharsでエスケープすれば防げる。
以上。
735 :
733 :2006/04/22(土) 00:57:45 ID:???
>>734 ありがとうございます
クロスサイトスクリプティングに関しての質問でした
CSSとかくと混同するのでXSSと書くとか書かないとかまでググって来ました
タグを入れられるようにして拡張性をと考えていましたが、
便利の裏には様々な問題があるんですね・・・
( ゚ Д゚)・・
>>720 レッツPHPの写メールBBSが大昔からやってるよ
738 :
nobodyさん :2006/04/22(土) 16:13:48 ID:8MNYgK3y
$a = 5 / 3; //計算式 があったとして、答えの二文字目までを表示させる事は可能でしょうか? その場合どうすればよろしいでしょうか? 5/3の答えは1.666666・・・と続いていくので 2文字目、つまり 1.6まで表示させたいのです。
741 :
nobodyさん :2006/04/22(土) 17:19:10 ID:he2KK3wF
HTMLのEMBEDタグでtest.phpを読み出した場合に、 test.phpにPOSTでデータを渡せますか? (すれ違いでしたらすみません。。)
742 :
nobodyさん :2006/04/22(土) 17:20:36 ID:kQFmUDLJ
生年月日を分解して配列に代入したいです。例えば $birth=2006年4月22日 というデータが入っているとします。これを $birth1=2006 $birth2=4 $birth3=22 という風に分解して各変数に入れるにはどうしたらいいのでしょうか?
743 :
nobodyさん :2006/04/22(土) 17:26:19 ID:3kTedSI2
rawurlencode ($_POST["data"]) これでエンコードしてみるものの、「"」「'」「\」といった記号をエンコードすると それぞれ「%5c%22」(\")「%5c%27」(\')「%5c%5C」(\\)となってしまいます。 つまりエスケープされている訳ですが、こういった記号をエスケープさせないように するにはどうしたら良いでしょうか?バックスラッシュ(\)までエンコードされて困っております。 宜しくお願いします。
>>742 $birth = "2006年4月22日";
$birth1 = mb_substr( $birth, 0, 4 );
$birth2 = mb_substr( $birth, 6, 1 );
$birth3 = mb_substr( $birth, 8, 2 );
// これで目的は達成できるが、月が2桁だったりするとだめぽ
$birth = "2006年4月22日";
list( $birth1, $birth2 ) = explode( '年', $birth );
list( $birth2, $birth3 ) = explode( '月', $birth2 );
list( $birth3, $birth4 ) = explode( '日', $birth3 );
// これだ!
745 :
742 :2006/04/22(土) 18:24:54 ID:???
>>744 出来ました!こういう使い方があるんですね・・。
よくわかっていないので、関数を調べながら理解出来るようにします。
ありがとうございました。
746 :
743 :2006/04/22(土) 18:27:38 ID:3kTedSI2
自己解決、stripslashes()という関数があった('A')
>>741 POSTデータを渡そうと思えば出来るけど面倒だと思われ。
クエリでいいじゃん。。
>>742 今更だけど
$birth = '2006年4月22日';
preg_match('/^(\d+)年(\d+)月(\d+)日$/',$birth,$matches);
list($birth1,$birth2,$birth3) = array($matches[1],$matches[2],$matches[3]);
ってのもあり
750 :
741 :2006/04/22(土) 19:05:13 ID:he2KK3wF
>>746 > POSTデータを渡そうと思えば出来るけど面倒だと思われ。
POSTで渡す方法を教えていただけないでしょうか?
#GETも考えたのですが、渡すデータが大きく無理でした。。
> クエリでいいじゃん。。
すみません、この場合のクエリがわかりません。。。
(データベースのクエリ?じゃないですよね。。)
751 :
nobodyさん :2006/04/22(土) 19:13:13 ID:UThkpkc+
<form>
752 :
nobodyさん :2006/04/22(土) 19:40:49 ID:1mp5s2wD
rawurlencode()、rawurldecode()において「あいうえお」をエンコードしたのですが、 Shift_JIS → %82%a0%82%a2%82%a4%82%a6%82%a8 EUC-JP → %a4%a2%a4%a4%a4%a6%a4%a8%a4%aa UTF-8 → %e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a これらのように、文字コードによって違いますよね? この文字コードを指定してエンコーディングする方法は無いでしょうか?
特定のアカウント以外からのメールは拒否したいと思います。 送信者のメールアドレスは$fromの中に格納されます。 $write = false;で書き込みが中断されます。 //このアカウントからのみ受信 $carrier = array('docomo.ne.jp','ezweb.ne.jp','pdx.ne.jp'); //キャリア限定処理 追記部分 if(!in_array('$from',$carrier){ $write = false; } これだと駄目ぽみたいです。ご意見ください。
だめじゃない
>>752 何がやりたくて何ができないの?
特に問題ないようだけど。
>>753 $host = substr(strstr($from, '@'), 1);
if(!in_array($host, $carrier){
・・・ってこと?
757 :
753 :2006/04/22(土) 20:55:44 ID:???
画面が真っ白になっちゃうんです。 記載ミスによるものかと何度も見ましたが違うようです。 あきらめて寝ます。おやすみなさい。
758 :
753 :2006/04/22(土) 21:37:57 ID:???
やっぱり思いっきり記載ミスでした。 一人でバカ騒ぎしてもうしわけないです。
759 :
752 :2006/04/22(土) 22:02:27 ID:1mp5s2wD
>>755 じゃあ例えば、変数$strに $_POST["data"]の値を代入。
エンドユーザはそれぞれ「Shift_JIS」、「EUC-JP」、「UTF-8」といった文字コードを選択し、エンコードすることが出来ます。
出力結果はこれらの文字コードによって違います↓
Shift_JIS → %82%a0%82%a2%82%a4%82%a6%82%a8
EUC-JP → %a4%a2%a4%a4%a4%a6%a4%a8%a4%aa
UTF-8 → %e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a
mb_convert_encoding()で$_POST["data"]をエンコードするのかなー…?orz
何か良い方法を知っていたら教えてください。
760 :
752 :2006/04/22(土) 22:08:05 ID:1mp5s2wD
>>760 1.ます普通にPOSTやらなんやらで入力されてデータを受け取る(このときに文字コードは何でエンコードするかも!)
2.で受け取った値をエンコードする
3.エンコードしたデータを表示する
こうじゃない?
762 :
752 :2006/04/22(土) 23:40:44 ID:1mp5s2wD
>>761 …うーん、(1)で文字コードを変換するための関数は一応調べはみたんだけど
mb_convert_encoding()でいいのかなぁ?
でもなんかちょっと違う気ガス。
764 :
761 :2006/04/23(日) 02:17:22 ID:???
>>762 何で違うと思ったんだ?理由があるのか?
そもそもお前自分で俺の出した提案でコーディングしてみたのか?
答えだけ教えてもらおうと思うな馬鹿
ちなみにmb_convert_encoding()でOKだクソ野郎
デフォルトでは使えないようになってるけどな
そこまで教えられんよググレカレー
765 :
752 :2006/04/23(日) 07:13:43 ID:B54Vaitl
すみません、実はこの質問をする前にmb_convert_encoding()でコーディングしてみたのですが、 (rawurlencode(mb_convert_encoding($_POST["data"], "Shift_JIS")) とやっても「あいうえお」が「%3F%3F%3F%81%91%3F%3F%3F%3F%3F%81N」のようになってしまいます(「???¢?????¨」に文字化けする) mb_convert_encoding()の使い方が間違ってるんだろうか
>>765 >「あいうえお」が「%3F%3F%3F%81%91%3F%3F%3F%3F%3F%81N」のようになってしまいます(「???¢?????¨」に文字化けする)
よく分からん。どっちになってるんだ?
>>765 まるごと書いてやるから、よく読めよ。
(サンプルなのでセキュリティは全く意識していないので注意)
<?php
header('Content-type: text/html; charset=Shift_JIS');
$encList = array('sjis', 'euc-jp', 'utf-8');
if ($_POST) {
$data = @$_POST['data']; // sjisで書いてあると想定
$enc = (int) @$_POST['enc'];
if (!isset($encList[$enc])) throw "(・∀・)";
echo rawurlencode(mb_convert_encoding($data, $encList[$enc], 'sjis'));
die();
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<textarea name="data"></textarea>
<select name="enc">
<?php foreach ($encList as $enc => $encName) { ?>
<option value="<?php echo $enc ?>"><?php echo $encName ?>
<?php } ?>
</select>
</form>
768 :
767 :2006/04/23(日) 07:50:14 ID:???
submitわすれてた <input type="submit" />
お前の優しさに乾杯
ただ・・・ただ俺なら変数名には大文字は使わないぜ(・∀・)
771 :
767 :2006/04/23(日) 07:54:35 ID:???
>>770 スマソ。不慣れだったので間違えた。
$enc_listとか$enc_nameって名前にするほうがpear標準だったっけ
いや、変数名には基本的に大文字は使わないものじゃないか? 知らない奴も居るだろうからまとめてみよう。勘違いがあったら教えてちょうだい 変数名:全て小文字。単語の区切りは「_」 例[ hoge_hoge ] 定数名:全て大文字 例[ HOGE ] 関数名:基本的に小文字だが、単語の区切りは大文字 例[ hogeHoge ]
Javaのコーディング規約では変数名も関数名(というかメソッド名)と同じで単語の区切りは大文字だから、その癖でそのままやってしまった。
pearのコーディング標準では変数名の単語の区切り方に関しては触れてないっぽいね。それ以外は
>>772 の通りだけど。
pearの他にもphpのコーディング規約みたいなのあったっけ?
コーディング規約って言うか、プログラマとしてのデファクトスタンダードじゃね?
>>772 が
>>774 ちゃんとSELECTしかできない権限とかにしてあるのかなぁ
これかなりヤバイ香りが漂ってるが。
おい
>>774 、七氏だろ お前SQLインジェクションやってみて報告しる!
隠しテーブルとか出てきそうw
780 :
752 :2006/04/23(日) 14:56:53 ID:B54Vaitl
>>767 とってもありがとう。
書き方とか参考にします。
最近PHPに取り組み始めた超初心者です。理解できない演算子があるので教えてください “->”なんですけど これって $A=1+2 $B=$A この場合 $B=$A->1+2 こんな感じ?
>>781 -> はクラスを使った時に、クラスの変数や関数を使うためのもの。
クラスって何?って場合は、マニュアルを参照のこと。
>>782 ありがとうございます。
->なんですけど、これはPHP5〜から使えるのでしょうか?
それともPHP4の最新バージョンでも標準で使えるのでしょうか?
4でも使える $this->testとかね
>>784 ありがとうございました。
精進します。
赤マンモスで勉強してんだけど、宴会サーバーの所が読みにくいので、 さっさと読むだけにして、青マンモスに進んでも良いでしょうか?
こういうのって出来るのでしょうか? 特定のディレクトリ/hogeから画像(.jpg)の名称を取得して、指定サイズで 一覧表示するという。 登録しているファイル名を出力するのはわかるのですが、画像のファイル名自体を 取得して〜というのは可能なのか?っと疑問に思いまして。(単に出来ないのですが・・・
glob('*.jpg')
文字コード、日本に限っていえば Shift_JIS(sjis-win) EUC-JP(eucjp-win) iso-2022-jp(jis…だけど厳格にはすこしちがう) utf-8 について、徹底的に学びましょう
790 :
787 :2006/04/23(日) 18:18:13 ID:???
>>788 凄い!!出来ました!!所持リファレンスにも載っていない関数でしたが、
以下のようなソースで思い通りに出来ました。
<?php
$img_list=glob('./photo/*.jpg');
$count=count($img_list);
for($i=0;$i<$count;$i++){
print"<img src=\"$img_list[$i]\" width=100 height=80>";
}
?>
ありがとうございました。
foreach最強
793 :
nobodyさん :2006/04/23(日) 18:37:13 ID:T/zlG2dE
794 :
nobodyさん :2006/04/23(日) 18:46:06 ID:m0Rs4MP5
strlen(file_get_contents('URI'));
ありがとうございますできました
phpでお金持ちになりたいんですけどどうすればいいですか
>>794 URIって何の略??
$actって変数がどこにも定義されてもないし、スーパグローバル変数でもないから そんな変数ありませんよって言われてるだけじゃないの? ってか、値が無いのに何で比較してるんだろ?
$act = "envset";
>>800 レッツPHPは過去の遺物だ。
今は参考にするべきではない
レッツのスクリプトは$_GET['hoge']を使わずにextract($_GET)して$hogeとして使う方向だから 該当個所は多そう。
perlのガン細胞 KENT PHPのガン細胞 レッツ
extractの使い方がいまいち分からない俺は負け組み
>>772 変数名は間違い。
区切りに_は使わない。
例: anApple
定数名の区切りは「_」
詳しくはPearコーディングルール見ろ
あと関数名の最初は大文字
808 :
807 :2006/04/23(日) 21:50:22 ID:???
809 :
nobodyさん :2006/04/23(日) 22:43:05 ID:WZpCLvOA
new DOMDocument("1.0","EUC_JP"); したオブジェクトに要素をappendし、 saveXML しても、何も取得できません。 DOMDocumentでは euc-jpを使えないのでしょうか?
メールを受信したら、 受信メールの取得と、こちらで用意したメッセージをそのアドレス宛に送信 これを自動化するのを実現したいのですが ROMっていたら、同じような例が載っていたので読んでいましたが その際にサーバの負荷は高くなってしまうのでしょうか? CRONで一定時間で起動させる方法も良いかとは思いますが スクリプトだけで実行するのは出来ないものでしょうか? また、受信したメールアドレスをエンコードして 送信メールの本文にURLとして、hoge.com/test%40fuga.jpのように載せてみたいのですが mb_encode_mimeheader()を使って良いしょうか。 良い方法をご存知の方、ご教授お願いします
>>810 環境によって方法はさまざまなわけで、
自分の環境さらさなきゃ明快な回答は得られまい。
mb_encode_mimeheader()はmimeheaderをencodeするのだ。判るかな?
812 :
810 :2006/04/24(月) 00:12:18 ID:???
>>811 もうちょっとわかりやすく説明してください。
>812 勝手に人を名乗って書き込みするな
814 :
nobodyさん :2006/04/24(月) 00:18:23 ID:MxIb/Ds6
使い始めて二日目厨です(;´д`) MySQL + PHP つかってます。 商品マスタと商品データの2つのテーブルがあって、双方にレコードを追加します。 $sql1='insert into 商品マスタ......'; mysql_query($sql1); $sql2='insert into 商品データ....'; mysql_query($sql1); としたいのですが、商品データに、追加したばかりの商品マスタのpkyをセットしたいのですが、 どうすればいいでしょう??双方のテーブルのpkyはauto increment です。 追加したばかりのレコードを取得して変数に入れるようなものや、 pkyだけ先に知るとか…そんなんあれば良いんですが アドバイスもらえるとありがたいです。
二日目でgoogleも使わずここか
>>813 煽られるのが嫌なら適当なトリップを付けるか、メール欄を空白にしてIDを表示して
書き込むようにしなさい。
818 :
nobodyさん :2006/04/24(月) 00:33:46 ID:MxIb/Ds6
820 :
nobodyさん :2006/04/24(月) 00:46:40 ID:MxIb/Ds6
ちがいますが…orz とりあえずBカップです
Bカップ??
池沼だろ
すっげぇ下らない質問なんだけど 質問1. Windows上(apache)でPHP動かしたい場合は あるいはプロバイダの鯖上でPHPを埋め込みたい場合、 Windows Binariesってのをダウソすればいいんですかね? 質問2. Perlのが優れてる点って何?
requireとincludeの違いって、何なのでしょうか。 マニュアルを読んだのですが何度読んでもよく理解できませんでした。 誰か分かりやすく解説してもらえませんか。
すみません、早朝から質問なのですが AAA.php BBB.php というファイルがあって AAA.phpの処理後にBBB.phpをそのまま起動させたいときは どう命令したらいいですか?
>>825 読み込めなかったら中止にするか読み込めなくてもそのまま。
>>748 俺ならこうする
$birth = '2006年4月22日';
list($birth1,$birth2,$birth3) = sscanf($birth, "%d年%d月%d日");
>>826 include or Location
sscanf()なんてあったんだね
サーバーにPHPがインストールされているのか、 されていないのか、って どうやって調べるんですか?
>>831 俺はコマンドラインでphp -vって叩いて確認してる。
会員式のログイン・ログアウトサイトを作っています。 SESSIONを使ってログインし、ログアウトする時はunset($_SESSION['name']); などとしているのですが、たまにログアウトしきれない時があります。(ページが残る) 完全にセッションの内容を消去するには、どのように書けばいいのでしょうか?
>>831 phpinfoを使うってのはアリじゃない?
Webページ丸ごと読込んでデータとして扱う方法ないですか?
>>837 方法あるよ
右クリック→ソースの表示→全て選択→コピー
をしてPHPの変数(引数)に代入してファイル保存してFTPアップロード。
リアルタイムにどこかのサイトを読み込み表示したいのなら
上記の作業を素早くやり続ければOK
コツとしては、全て選択は[Ctrl+A]、コピー[Ctrl+C]、貼り付け[Ctrl+V] を駆使する
バッククオートの中に変数を入れるためにはどう記述すればいいでしょうか? 例 $hoge = `ls -l $dir`;
>>839 バッククォートで括らない
ってか、何故バッククォート?
842 :
837 :2006/04/24(月) 18:15:36 ID:???
>>838 ありがとうございました!(,;:´゚;∀;゚, )
>>843 俺だったら、date()の結果をif()で比較演算子を用いて比較し、header()でLocationを
生成して飛ばすかな。
847 :
844 :2006/04/24(月) 18:58:33 ID:???
飛ばすって…リンクは飛びませんけど? それはユーザエージェントの動作を言ってるんじゃん… それならdate()の結果をそのまま出力すればよかと。
いくつかパターンはあるものの phpスクリプトの書き始めに<?phpで始まり?>で書き終わるものだと思っていましたが 最近見たスクリプトで、<?phpでの書き出しはあったのに ?>が無いものがありました。 私には理解ができなかったのですが、正常に動作していましたし、 以上も発見されませんでした。 これは、どういうことなのでしょうか? 必ずしも<?phpで始まったものが、?>で終わる必要はないということなのでしょうか?
いくつかパターンはあるものの phpスクリプトの書き始めに<?phpで始まり?>で書き終わるものだと思っていましたが 最近見たスクリプトで、<?phpでの書き出しはあったのに ?>が無いものがありました。 私には理解ができなかったのですが、正常に動作していましたし、 以上も発見されませんでした。 これは、どういうことなのでしょうか? 必ずしも<?phpで始まったものが、?>で終わる必要はないということなのでしょうか?
>>849 マニュアルによると、
「ファイル終端におけるPHPブロックの終了タグはオプション(任意)です」ってことだ。
でも気持悪いな。
漏れは、 #!/usr/local/bin/php header("Content-Type: text/html"); print <<<EOF <!DOCTYPE 〜> <html lang="ja"> EOF; exit; こう書くけどな。
>>852 それはそれでOKなんじゃないかなと思いますよ。
ただ、
<?php
〜
で終わっていて、何だかすっきりしないし
これでいいのか?!って思ったので聞いてみました。
>850 そうなんですね! 親切に調べてくれてありがとうございました。
855 :
nobodyさん :2006/04/24(月) 23:38:00 ID:UzNg/65t
ブログの静的ページを作ろうと思いPHPを勉強してるんですが、わからない事がでてきました。 PHPで出てきた結果をHTMLとして出力できないでしょうか? 例えば <?PHP $x=100; ?> 静的ブログが<?PHP echo $x ?>回ぐらいつくりたいよ〜<br> みたいなPHPがあって、それを実行したら HTMLファイルにそのまま 静的ブログが100回ぐらいつくりたいよ〜<br> と出力したいのですが、むりでしょうか?
>>855 意味がわからん。
「<br>」をそのまま出力したいってこと?
「HTMLとして(ブラウザに)出力」なのか、「HTMLファイルに(書き出す)」なのか良く分からんが、 htmlファイルに書き込みたいのなら、 「出力制御関数」と「出力制御関数」あたりを使えば楽なんじゃないかな。 <?php ob_start(); ?> <?PHP $x=100; ?> 静的ブログが<?PHP echo $x ?>回ぐらいつくりたいよ〜<br> <?php $a = ob_get_contents(); $fp = fopen("a.html","a"); fwrite($fp,$a); fclose($fp); ?>
858 :
nobodyさん :2006/04/24(月) 23:59:47 ID:UzNg/65t
>>856 <br>に限ったことではないのですが
例えば「make.php」が
<?PHP $x=100; ?>
静的ブログが<?PHP echo $x ?>回ぐらいつくりたいよ〜<br>
で
「index.html」に出力を出して、内容が
静的ブログが100回ぐらいつくりたいよ〜<br>
見たいな感じにならないかなぁ〜って思って。
動的PHPから静的HTMLを作ってほしいんです。
860 :
nobodyさん :2006/04/25(火) 00:08:36 ID:33LQjSvo
>>857 ありがとうございます!!
解決しました!!
PHPスクリプトで携帯宛にメールを送る時の エンコーディング(文字コード?)の種類を教えてもらえませんか?
キャリアごとに違うのでは? たしか、EUCではなかった様な気がするゾナもし
メールなんだからjisでいいんじゃまいか? だめだったの?
配列に数字が入っています。 array(1, 2, 3, 4); それらを一つずつ足していきたいのですが、方法が分かりません。 やりたいことは1+2+3+4ということです。 どういう関数を使えばいいか教えて下さい。
>>864 お前・・・それは関数どうの以前の問題ジャマイカ・・・?
とりあえず配列の要素数(上の例では4つだな)を何とか取得する。
で、配列の一番左、もしくは右から順に足していくんだ!
$array = array(1, 2, 3, 4); $sum = 0; foreach ($array as $num) $sum += $num;
$array = array(1, 2, 3, 4); $sum = array_sum($array);
RSSが更新されたらメール送信するようなスクリプトって作れますか?
>>869 「一定時間毎にRSSの更新をチェックして
更新されていたらメール送信する」
であれば可能。
>>869 「RSSを更新する際にメールを送信する」
でも可能。
レスありがとうございます。
>>870 どのような関数でどんな流れでするのでしょうか?
>>871 受信側なので、それはちょっと…
>>872 pearつかってRSSのURL GETして、XMLパースして、
時間チェックして、前回のチェック時時より新しければ
必要に応じたメールを送信。
Last-Modified吐いてくれたらいいのにね。
876 :
nobodyさん :2006/04/25(火) 20:11:19 ID:YuLHBMcs
→ 全空白 を置換したく、 $file = str_replace(" ","", $file); でやってみたのですがうまくいきません、 ほかに方法ありませんか?
&heart;
DBからデータ持ってくるときに、いちいち tryするのか?もまえらは ちなみにphp4のひとは無視してくだちい。
>>870 これってページにアクセスしなくてもできるの?どうやって?
あぼーん
883 :
ぬる :2006/04/25(火) 22:37:49 ID:???
884 :
nobodyさん :2006/04/25(火) 22:38:25 ID:S1Of8zqn
885 :
nobodyさん :2006/04/25(火) 22:50:19 ID:1JYLmc+t
host
$_SERVER[HTTP_HOST] ぐらいしかひとまず思いつかん
>>873-874 ありがとうございます。とりあえず更新しているかどうかのチェックと、XML_RSSの使い方はわかったんですが、
いちいちページにアクセスしないでスクリプトを開始させる方法はありませんかね?
毎回アクセスするならあまり意味が…
php cliで書くとか 前はcron で wgetするなんて事もしていたな・・
PHPの正規表現で 「検索: 17件中1〜10件を表示」 の「17」だけを取りたいんですが何てかけばおkなの?
cronでphpを起動ってよく聞くけど具体的な書き方が載ってるサイトがない
>>892 そりゃcronって時間指定の他はコマンドラインでプログラム実行するのと
そのまま同じに書くだけだもの。
そんなのに具体的解説を求めるのは
「先生!マウスでクリックって何のことか分かりません!」
と言うのと同じくらい厨な話かと。
まさかcronの使い方教えろって言ってるわけじゃないよな・・
896 :
612 :2006/04/26(水) 04:07:26 ID:gSi6TGNs
前回の質問の続きなのですが、 例えば <?php phpinfo(); ?> というスクリプトがあるとして、このスクリプトに直接手を加えて1分ごとに1回起動させるためには どう手を加えたら良いのでしょうか?
sleep cron等を使ったほうがいいと思う スクリプト動きっぱなしは負荷高そうじゃない?
>>897 sleepだとmax_execution_time で終了(デフォは30秒)
>>887 定期実行の方法くらい学べよ。
スクリプト系言語の基本だろ。
なんだcron厨ばかりか。 お前らWindows環境でタスクスケジューラでもつかったらどうだ。
>>900 タスクスケジューラが移植されてから考える。
つかWindowsでもatはあるよな。
いや確かに普段使ってるけど
>>896 つ[ */1 * * * * php phpinfo.php ]
$hogeにある文字列が入っていたら、○○を出力 っていうのがしたいのですが、IFで出来ると思うのですが、どうもうまくいきません・・。 文字の比較?かなにかだと思うのですが・・。アドバイス願います。
ちょっとちがうか。ま、strposと組み合わせてうまいことやれ。
907 :
904 :2006/04/26(水) 11:54:02 ID:???
>>906 これで出来ました!ありがとうございました。
<?
if(strpos($hoge,"test")){
echo"これはテストです";
}else{
echo"これはテストではありません";
}
?>
>>904 if(strstr($hoge, 'ある文字列')) echo '○○';
>>907 それだと$hogeがtestで始まる場合に動かない
>>908 注意: もし特定の haystack に needle があるかどうかを調べるだけの場合、 より早く少ないメモリを使用する strpos() を代わりに使用してください。
>>907 if(strpos($hoge,"test") !== false)
文字列が含まれているか確認するだけなら if(strpos($hoge,"test") !== false)をつかったほうがよさそうだな 正規表現なくてもpreg_match使ってた
いや基本ですよ
連想配列で、 $a["nurupo"]=4; とする場合は分かったんですが $b="nurupo"; $a[$b]=4; とするとエラーになるんですが、どうやったら使えますか? ほんとにしょうもない質問ですが、連想配列でぐぐっても、答えになるサイトが見つからなかったんで よろしくおねがいします。
917 :
nobodyさん :2006/04/26(水) 19:00:35 ID:gSi6TGNs
test.txtから先頭の1行のみを読み込むには $handle = @fopen("test.txt", "r"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle); echo $buffer; } fclose($handle); をどうすれば良いですか?
919 :
nobodyさん :2006/04/26(水) 19:54:43 ID:gSi6TGNs
それは あぼーん ですよ
スクリプトの一番最後の ?> がエラーになることってあるんですか。 実際にエラーになってるんですが、何ですかコレ。
構文的に見てまだ後に何かが続く筈なのに ?> で終わらされた場合には、PHPの中の人も怒るってもんだ。
>>920 サンプル
<?php
$a = "aaaa;
echo $a;
exit;
?>
>>917 $handle = @fopen("test.txt", "r");
if ($handle) {
//while (!feof($handle)) {
$buffer = fgets($handle);
echo $buffer;
//}
fclose($handle);
}
ファイルの中身を0にする(消す)には普通にwで読み込めば0バイトになりますか?
925 :
nobodyさん :2006/04/26(水) 20:58:59 ID:gSi6TGNs
>>923 ありがとうございました。やってみます!
>>924 fopenした時点で0になるので読み込めない。
/home/hoge/test.phpで、 <? include=("/home/hoge/hoge.php"); ?> としたとき、hoge.php内で [/home/hoge/test.php] もしくは、test.phpのアドレスを 取得するにはどうすれば良いでしょうか。 よろしくお願いします。
何してるかしらんけど、文句言ってこないか?
>>927 前に調べたときにはわからなかったけどdebug_backtrace()に入ってた。
930 :
nobodyさん :2006/04/26(水) 22:52:57 ID:bUyltefP
fsockopenとかで送信するHTTPリクエストについて詳しく解説してるサイトご存知ですか?
filemtimeって同じサーバーのものしか取得できない
Last-Modifiedとかで相手鯖のヘッダみるとか
ミスった・・・ filemtimeってローカルのファイルのものしか取得できないんですか?URLをぶち込んでもエラーになるんですが・・・
ローカルしか取得できないよ
初めて聞いた
>>927 $_SERVER['SCRIPT_NAME'] か $_SERVER['PHP_SELF'] 辺り?
>>914 そのままコピペして実行してみたがエラーにはならんかったよ。
どんなエラーが出たって言うのさ。
$aa[] = "http;//******"; $aa[] = "http;//*****"; $aa[] = "http;//****"; ってな感じで配列に組み込まれたサイトが更新したかどうかを次々確認するにはどうすればいいでしょうか? このスレ読んでcron使って定期的に走らせる方法はわかりましたが、 配列をまだよく理解できてないせいかスクリプト自体がうまくいきません。 データベースは無しの方向で・・・
>>938 そんな知識レベルで外部アクセスするプログラムは書いちゃダメ。
十中八九、その更新をチェックされるサイトに迷惑がかかる。
(実際、あちこちでその手の素人作成ロボットが多大な迷惑をかけてる)
その種のWindowsアプリはWWWCとか色々あるんだからそれ使いなさい。
みんな、相手先に迷惑をかけないように色々考えて作ってるんだから。
素人が気軽に考えてそんなツール作っちゃダメ。
>>940 まずは、何をもって「サイトが更新」されているかを判断するか
考えてる?それによってどうすべきかが変わると思うけどね。
HTTPヘッダのIf-Modified-Sinceで前回の更新日送って 304が帰ってきたら更新なし、それい以外だと更新あり だから相手鯖のヘッダだけで更新したかしてないかわかるから データまでは取得しなくていい といってもPHPでheader関数使ってるとこじゃ使えなさそうだけど
940ではないけど
>>944 「前回の更新時間」は複数サイトチェックするならデータベース使うしかない?
ファイルをそれぞれ作るわけにもいかないし
>>945 cronが1時間周期なら、1時間(5分)以内に更新したサイト
というやり方もあり。信頼性はかわるが実用レベルでは
何とでもなるだろ。
948 :
944 :2006/04/27(木) 12:37:30 ID:???
>>945 946がいってるように一定周期ならその間に更新があるか判定すればいいけど
不定期ならDBとかに保存しないと駄目と思う
>>947 画像だけを更新チェックってこと?
なら
>>944 のIf-Modified-Sinceでできるよ
949 :
944 :2006/04/27(木) 12:39:46 ID:???
あぁページ内の画像が更新ってことか すべてのページ内リンクを解析してチェックしないとできないと思う
>>944 WWWCとか見てみれば分かるが、
HEADで更新日時を確認するのと、
ページのサイズ変化を確認するのと、
GETでページ全体を比較するのと、
HTMLタグを除去した状態で内容を比較するのと、
正規表現で特定の範囲だけ比較するのと、
という感じで色々サイトごとに設定できるようになってて
それだけ手を考えないとちゃんと更新をチェックできない場合があるね。
広告挿入の処理に引っかかって軒並み更新にされちゃうサイトとかあったり。
HTMLから内包する画像から何から一切合財を一括で取得して tarで固めてMD5ハッシュ値比較保存 ってのはどうだ? HTMLの構文解析やらアドタグの排除やら面倒な事山積みだけど。
>>952 1サイトのチェックだけで10分とかかかりそうだw
そこを短時間で一気に行くとサイト側が負荷かかりすぎで死ぬし。
こういう処理で、平気で10とか並列でアクセスかけるバカが多くて困る。
$last = getlastmod; if(今の時間>$last>今の時間-3600) じゃだめなの?
$name = $_POST['name']; setcookie("namecookie", $name, time()+3600*24*30); とし、 html側は<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <input type="text" size="10" value="<?php echo $_COOKIE["namecookie"]; ?>"> <input type="submit" value="test"> </form> といった感じにして、cookieの挙動を見てみたのですが、 1.名前を入れて送信→名前はセットされない→2.別の名前を入れて送信→ 1回目の名前がセットされる→3.そのまま(1回目の名前がセットされているので)送信→ 2回目の名前がセットされる→4.そのまま(2回目の名前がセットされているので)送信→ 1回目の名前がセットされる・・・以後ループ。 といった感じになります。 cookieを使うのははじめてなのですが、これは正常な動作なのでしょうか? 1回目を送信した時点で、1回目の名前がセットされている状態がいいのですが、 何か方法はありませんでしょうか?
957 :
956 :2006/04/27(木) 16:44:38 ID:???
すみません。ちょっと訂正です。 <input type="text" size="10" value="<?php echo $_COOKIE["namecookie"]; ?>"> ↓ <input type="text" size="10" name="name" value="<?php echo $_COOKIE["namecookie"]; ?>">
>>956 $name = $_POST['name'];
if (empty($_COOKIE['namecookie'])) {
$_COOKIE['namecookie'] = $name;
}
>>956 それで正常。
1回目を入れたい場合は、「クッキーがあればそれを表示。無ければPOSTの内容を表示」
という風に条件をつけて表示させるか、PHPで表示せずにJavaScriptで表示させる。
>>956 そりゃサーバがクッキー受け取るのは、アクセス時だし、
ブラウザーがクッキー保存するのはアクセスした後なんだから当たり前。
961 :
956 :2006/04/27(木) 17:57:14 ID:???
>>958-960 皆さんレスどうもありがとうございました。
自分の書きかたが悪いのかな?と思いまして。
正常ということなら一安心です。
さっそく958さんのコードを使用させていただきます。
ログの書き込みについて質問なんですが、 fopen("log", "a");だと最新ログが下にきてしまいます。 PHPマニュアルのfopen()で使用可能な modeのリストを見ましたが、 a以外にログに簡単に書き込めそうなのはありませんでした。 aとwを足して2でわったような、 書き出し用のみでオープン。ファイルポインタをファイルの先頭に置く。 ファイルサイズは0にしない。 といったことはできませんか? rsortを使えば、表示の時には最新のが上にきましたが、 ログに書き込む時点で、最新のをファイルの先頭に書き込むようなことがしたいです。 どうかアドバイスお願いします。
普通にr+では?
>>962 ファイルを逆にするという手もある。
array_reverse
965 :
962 :2006/04/27(木) 20:00:22 ID:???
>>963 r+でやってみたんですが、なぜか90バイトぐらいしかログが残らなくて・・・
自分で関数作るのがベストなんでしょうがそんな力もなくorz
ファイルの書き込みはファイルポインタの位置からデータを書いていくだけなので、 以前のデータは破壊されますがなにか?
なんで前に書き込みたいのかが分からん。
>>962 $data = file_get_contents("ファイル名");
$data = "書き込みたい文字\n".$data;
$fp = fopen("ファイル名", 'w');
fwrite($fp, $data);
fclose($fp);
こんなんじゃだめ?
969 :
962 :2006/04/27(木) 20:42:29 ID:???
>>964 調べてやってみましたが、ログが全部Arrayに…
やり方が悪かったんでしょうか。
>>966 そうですよね…
>>967 チャットのサンプルをいじってまして、
表示部分がJavaScriptで行われているようで、
JavaScript側でソートすればいいのでしょうが、
触ったことがなく、PHP側でどうにかしようと思った次第です。
>>968 試してみたところ、見事最新ログが上にきました。
どうもありがとうございます。
しかし仕組みがわからない…もっと勉強してまいります。
そもそもファイルの内容を読み込まずに
ファイルの先頭に追記(挿入)する事は不可能
それを踏まえてアルゴリズムを考えるべし
>>964 に1票
>>968 一応flockも考慮していただけると・・・
$log = file($logfile); $log = array_reverse($log); これだけでファイルが逆さに表示できる。
972 :
962 :2006/04/27(木) 20:58:29 ID:???
>>970-971 勉強になります。どうもありがとうございます。
勉強不足なのは痛感しました。
アルゴリズムの勉強もしたいと思います。
ここ回答者も初心者しかいないな
<?_?>
ページの**行目を読み込む、みたいなことができる関数ってありますか?
977 :
975 :2006/04/27(木) 21:26:30 ID:???
というか例えば 12345 abcdef klmnop と記述されたテキストファイルがあったとして、それぞれの値をひっぱってくるにはどうしたらいいんでしょうか?
>>977 $data = file('テキストファイル');
print $data[0]; //12345
print $data[1]; //abcdef
print $data[2]; //klmnop
rssって更新されたら確実にサイズ変わるだろ 広告とかもないし、サイズ比較だけでいい気がするけど
RSSの話だったの?
普通はそうするだろ
確実なの?
985 :
nobodyさん :2006/04/27(木) 22:32:07 ID:+MA+gFEM
mcrypt暗号化関数での質問なのですが マニュアルに 「これらの定数は、この拡張モジュールで定義されており、この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロードされるかのどちらかの場合のみ使用可能です。」 と書いてあったのですが、これを実行時に動的に使うには、どのような設定が必要なのでしょうか? 例えば、同じディレクトリにphp.iniファイルを作って、その中で動作指定をするのですか? 全く分からなくてテンパってます。どうか教えてください!!
988 :
nobodyさん :2006/04/28(金) 00:23:21 ID:K94bFNHB
くだらない質問なのですが、 僕の書いたphpのシステムのurlで、たとえば hogehoge.com/list.php?id=3 みたいのがあるんですけど、 故意に?以降の部分を消して表示させると、 エラーコードがいっぱい吐き出されます。 同じように世の中の有名なサイトで同じようにパラメータの部分を 消して表示させた場合は、エラーコードとかは出ません。 こういう状況を回避するための一般的な対策としては どのようなものがあるのでしょうか?
isset()
>>988 if($_SERVER['HTTP_QUERY_STRING'] == '') exit("<html>OK</html>");
991 :
nobodyさん :2006/04/28(金) 01:28:29 ID:Na6jyHe3
>986 >987 ありがとうございました! 自分なりに調べて使えるようになりたいと思います。 あと、.htaccessのように任意のディレクトリにファイルとして配置できて CRONのような定期実行の命令をしたいのですが、 何か方法をご存知ではありませんか? 出来るだけ人に頼らず自分で調べて作りたいのですが、 マニュアルを見ても、ググっても分からなかったので、ヒントだけ貰えませんでしょうか? お願いします!
>>991 >あと、.htaccessのように任意のディレクトリにファイルとして配置できて
>CRONのような定期実行の命令をしたいのですが、
何をしたいのかさっぱり
cronではダメな理由を書いたほうが分かりやすそう
994 :
nobodyさん :2006/04/28(金) 04:01:08 ID:Na6jyHe3
>992 CRONを使いたいのですが、レンサバの仕様で使えないのです。 定期実行をしたいのですが、もともと無いのなら、作れないだろうか。 というのが、思い立った理由です。 分かりにくいですかね? >993 本当は、CRONを使いたいのです。 ただ前述の通りの理由により、CRONが使えないので、 CRONのような制御が出来るものを.htaccessのようにディレクトリに配置するような形で 使えたらいいなと思い、ここに書き込みました。 何か、方法を知ってある方がいらっしゃったら、ご教授願いたいです。
.htaccess「のようなもの」をディレクトリに置くだけでcron代わりになるんだったら 鯖選びでcronが使えるかどうかなんて見ない。 cronが使える安鯖か自分のPCにあるブツ(cronでもタスクスケジューラでも)から wgetでも叩かせれば、定期的にスクリプトが走るよ。
996 :
nobodyさん :2006/04/28(金) 04:14:55 ID:ICV8N6RN
>>994 ちょっとお金出して良いレン鯖にするか、自宅鯖でも建てたほうがいいような・・
そして・・
1000だったら立派なphpプログラマになれる!!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。