【PHP】下らねぇ質問はここに書き込みやがれ 26
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。
まず読め→【PHP マニュアル】
http://www.php.net/manual/ja/ PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレは
>>2-10 関連スレは
>>4-10 FAQは
>>6-10 辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【簡易FAQ】
1.文字コードは何を使えばいいの?
→1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
→ Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
→ cronかタスクスケジューラを使え。
7.extractって危険なの?
→変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
→ .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
10. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
→ echoはコンマ区切りで書けるけど関数ではない。printは関数。パフォーマンスは気にするな
15. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
→ C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
→19.を参照
21. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
おっぱい括弧にワラタ
10 :
nobodyさん :2006/08/07(月) 16:53:13 ID:2T37Evsi
すいません 自分が頭悪いだけなんですが 2つのUNIXタイムの差を求めて 300秒なら 300 これを、00:05:00 のように 時:分:秒にしたいんです date() を使ってもうまくできませんでした・・・
12 :
nobodyさん :2006/08/07(月) 18:24:32 ID:T/kEZdoT
gethostbyname("nifty.com"); ↑これが変換できないんですが どうやったらIPに変換できますか?
>>12 変換されないんならサーバーで禁止してるんだろ
14 :
nobodyさん :2006/08/07(月) 18:44:22 ID:T/kEZdoT
$addr=gethostbyname($host); $ipaddr=sprintf("%u.%u.%u.%u",unpack("C*",$addr)); ↑PHPに書き直すとどうなるんですか?
>>14 $ip_adde = gethostbyname($hostname);
gethostbyname("nifty.com"); ↑これを変換するために CGI だと $addr=gethostbyname($host); $ipaddr=sprintf("%u.%u.%u.%u",unpack("C*",$addr)); と書いてあるから PHPに書き直すとどうなるのでしょうか?
18 :
10 :2006/08/07(月) 19:32:10 ID:???
10ですがだれか教えて下さい・・・ 頭悪くてすみません・・・
>>17 その C G I は普通はPerlと呼ばれているものの事だとして…
まずはその C G I で書かれている事が何を意味するのかを考えてみよう。
どういう処理をしているのか理解できたら、
今度は自分で同じ処理をするPHPの書き方を色々考えてみよう。
分からない時にはマニュアルを読むのもお勧めだよ☆
それで、どうしても上手く動かない時は
具体的にどう作ったらダメだったのかを添えてもう一度ここで聞いてみよう。
それじゃ、頑張ってね〜☆
>>18 date()は時差が入るからむしろややこしくなるな。
多分おまいが引っかかってるのは2桁表示にするところだと思うからヒントをあげよう。
echo sprintf("%02d:%02d:%02d", $hour, $min, $sec);
>>10 UNIXタイム形式ならstrtotime関数使ってTIMESTAMPを比較すれば良いだろうが
>>17 俺が
>>16 に書いたのが見えないのか?
PHPマニュアルぐらい読めよバカが。
だって夏だし
23>んなことをきいてんじゃねぇよバカが
26 :
nobodyさん :2006/08/07(月) 20:20:33 ID:ReHevUYM
文字列の20060807を日付型に変換するにはどの関数を使えばいいですか?
日付型なんてない
あれ?そだったんですか Mysqlにdate型ってあったから入れるのに変換しないといけないと思ってた てことはdate型には直接文字列が入ります?
やってみればいいんじゃないの?
SELECTしてfetchしたものをvar_dump()してみれば分かる
>>28 MySQLのデータ型とPHPのデータ型は別物だ
あ、入ったぽいです。 初歩的な質問すみませんでした。
32だけ読むとなんかエロいな
34 :
前スレ967 :2006/08/07(月) 21:28:16 ID:muOt4GfJ
>>968 誘導どうもです。
自作フレームワークに HTML テンプレートを組み込んでいるので。
Smarty 用に書き換えるのも面倒で……
>>969 え、やはり閉鎖してたんですか。
どこかで再配布してないかな……
>>22 質問を取り違えてるよ。
>>10 はすでにUNIX秒同士で差分を求めてて、
その秒数を時:分:秒の形式に変換できないと言ってる。
…昔は中学で勉強する内容だったんだけどな。これ。
>>25 いやおまえ、そういうことを聞いてるだろう。
>25 gethostbyname("nifty.com"); これを一回実行してみろハゲ
>37 間違えた gethostbyname("nifty.com"); これを一回実行してみろハゲ
40 :
前スレ982 :2006/08/07(月) 22:40:47 ID:???
>>1 さん乙です。
前スレ982なんですが、もう一つ質問させてください。
結局、ディレクトリの中から目的のファイル名にアクセスする事と、
ファイルの中から目的の文字列を検索する事は、
処理速度として差はないのでしょうか?
ディレクトリの中から目的のファイルを探しだし、その中から目的の文字列を検索する
>>40 ヒャークマーミーピートゥーパァー♪
゜ *
☆ノハヽ ゜
+ ノノ*゜∀゜)つ
。 と / 。
〜 ⊂ / +
(_/
>>40 いや、それは大分違うと思うぞ。
前スレで「差がない」と言われてたのは、ファイルの中から目的の文字列を探す場合でも、
結局は最初にまずその文字列の入ったファイルにアクセスしなきゃいけないわけで、
ってことはファイルにアクセスした時点で、ディレクトリの中からファイルを探すのと
同じだけの時間がすでにかかっちゃってるわけよ。
1)3.logにアクセスする処理
if(file_exists("3.log") $data = file("3.log");
2)3番のデータが入ってるデータファイルを開く
$fp = fopen("data.log", "r"); $line = fgets($fp);
↑ここまででほぼ同じ処理時間
で、後者ではさらにファイルの中から文字列を探す処理を「+α」でやんなきゃいけない分、
圧倒的に遅いのね。
44 :
前スレ982 :2006/08/07(月) 23:02:44 ID:???
>>41 前スレで頂いた回答の事ですよね。それについては理解できました。
では、単純にディレクトリの中から目的のファイル名にアクセスする事と、
ファイルの中から目的の文字列を検索する事を比べた場合はどうなんでしょうか?
ファイルの中から目的の文字列を検索する際の、ファイルを開くまでの処理は省いて考えた場合です。
>>43 ただし、この処理がほぼ同等の速度になるのはディレクトリの中のファイル数が
極端に多いわけじゃない場合までで、これが異常に多くなると遅くなる。
ただ、遅くなると言っても、PHPで書いたプログラムがファイルを1行1行探すよりは
ずっと高速な処理なので、よっぽどバカみたいにファイル数が増えない限りは
ファイルの中を探すよりはまだ速いと思うよ。
ファイル検索が遅くなるほど数があれば、1個のデータファイルにした場合も
行数がめちゃくちゃでかくなるからね。これはもうとんでもなく遅い。
多分、PHPで探すくらいならshellでgrepでも呼び出した方がまだ速い。
46 :
45 :2006/08/07(月) 23:07:13 ID:???
あ。リロードすればよかった。
>>44 >>45 がほぼその回答になると思う。
PHPのファイル処理なんて大して速くないので、OSがやってくれる
ディレクトリ(iノード)の検索の方がずっと早いです。
数が少なければ大した差じゃないけど、増えれば増えるほどその差は広がる一方かと。
47 :
前スレ982 :2006/08/07(月) 23:12:37 ID:???
>>46 >
>>45 がほぼその回答になると思う。
あ、ちょうどなりました(笑
同等ではなく、ファイル名検索の方が早いんですね。
大変参考になりました。回答してくれたみなさんありがとうございました。
>>47 ただ、ファイル数が1000を超えるようになってくると、iノードの処理も複雑になってくるので
頑張ればファイルの中身を探す方が逆転できる余地も出てくると思う。
もっとも、普通に頭から1行ずつ舐めてって行頭の数字を判別して〜なんてやり方じゃ
絶対に勝てないと思うけどね。
PHPの質問とは若干ズレてるが、結構意義のある内容になったな。 というか今まで鯖任せでそこまで考えることがあまりなくなってたから初心にかえった気分だ。
$dir = @scandir('/path') で存在しないディレクトリを開くと Warningがでちゃうんだけど、 これって仕方ないの? 仕方なくないとしたらどういう原因が考えられるの?
51 :
49 :2006/08/08(火) 01:10:39 ID:qLlWPezk
OS : fedoracore3 PHP : 5.0.4 HTTP : Apache2.0 です。
>>49 > 今まで鯖任せでそこまで考えることがあまりなくなってた
今でも初心者のままってことだよ
iノードってb木でしょ?複雑になるって何?
>>39 echo gethostbyname("nifty.com"); // nifty.com
echo gethostbyname("www.nifty.com"); // 202.248.239.42
>>54 ファイル名エントリーはB木だけどinodeは固定長リストのリンク。
数が多くなると拡張inodeリストのリンク数が増えて検索が遅くなる。
57 :
nobodyさん :2006/08/08(火) 08:00:28 ID:vPDdJKnB
PHPを見やすく、効率良く書きたいのですが、PHPのプログラミング・スタイル(コーディング・スタイル?)を勉強するには 他人のスクリプトを見て勉強するのが良いのでしょうか? どこかにコーディングマニュアルらしきものがあった気がするのですが 見つけることが出来ませんでした。マニュアルの言語はなるべく日本語希望。
59 :
nobodyさん :2006/08/08(火) 08:25:22 ID:vPDdJKnB
>>58 ああ、それです。
PEARにあったのですね。ありがと
ts=3 sw=3でexpandtabしない阿呆は俺だけでいい
63 :
nobodyさん :2006/08/08(火) 09:12:13 ID:vPDdJKnB
>>50 仕様
もしscandir($dir_name)で$dir_nameが正しくディレクトリであったとしても、オープン出来なければ異常事態。
$dir_nameが存在しないならオープンできることはありえないから常に異常事態。
要するにfile_exists関数でディレクトリの存在確認したのが前提ということ。
>>50 エラー抑止可能。5.1.4、5.0.5@debianで確認
66 :
nobodyさん :2006/08/08(火) 09:38:49 ID:5ybA5K11
すみません、質問です。 /etc/resolv.confの設定を誤って、SSHでの接続が出来なくなってしまいました。 現在アクセスできる方法はApacheモジュールのPHPだけです。 そこで、wwwで実行してるPHPをセキュリティーホールに関係なくrootになれるアカウントにsuして、そのアカウントからrootになることを考えています。 rootになった後はPHPのfputsで編集しようと思っていますが、PHPの実行ユーザーの変更が分かりません。。 system関数でsuを発行しても、次のパスワードの入力が出来ないので‥ サーバーではSSHとApacheしか動いていません。しかし、SSHに接続できるのは、今現在localhostしかいない状態です。。(/etc/hosts)
>>66 たとえそれが PHP で出来たとして、その PHP ファイルをどうやってサーバに置くのか?
68 :
nobodyさん :2006/08/08(火) 09:59:24 ID:5ybA5K11
>>67 FTPがあります。FTPでの接続はできるんです。
多分、PHPでは無理 expect コマンドをシェルから実行すれば、同じようなことができると思う
>>68 > サーバーではSSHとApacheしか動いていません。
うそつき。
1点差キタ━━( `≧´)´〜`)`↓´]・ ゥ・)彡´ー`)´金`)ムΘラ)^亮^ )っ´∀`)ア,_ゝレ)ヽ゚∀゚]っ━━!!!
>>69 --with-expect 付きで make した PHP なら expect も使えます。
expect コマンドが使えるなら expect なスクリプトを用意して PHP から
system すれば良い。
73 :
nobodyさん :2006/08/08(火) 10:15:39 ID:5ybA5K11
expectはコマンド自体入ってないです。。 rootになるにはsuしかだめなのですが‥ FTPでrootになる方法もないし、、 PHPでSSHにつなぐ方法はありますか? PHPで、localhostのSSHに接続->su root->/etc/resolv.confに>>でやろうと思ったのですが‥
>>66 > /etc/resolv.confの設定を誤って、SSHでの接続が出来なくなってしまいました。
これ、どういうエラーが出るの?
どういう設定してるか分からないけど、IP アドレス指定で試してみた?
75 :
nobodyさん :2006/08/08(火) 10:23:27 ID:5ybA5K11
SSHでタイムアウトしてしまう状況です。。
>>71 落ち着け! 高校野球の実況板はここじゃない。
あと、簡単なのは Ruby で expect するか、かなぁ。Ruby が使えればね。 Perl で expect も出来るけど、Expect.pm がないことがあるだろうし。
78 :
nobodyさん :2006/08/08(火) 10:54:10 ID:5/p7Z87X
>>78 何らかのDBインターフェースが使えるのなら、それのバインド機能を使うほうがいい。
>>66 それPHPの質問か?
よくわからんけどPCが壊れたなら、新しいの買ってこればいいんじゃね?
それか修理に出したほうが早いだろ
>>80 PHP の質問かと言われれば微妙だが、壊れているのとは違う。
で、結局どうなったのかな? Ruby があるなら、さくっと出来るけどなぁ。
>>78 > addslashes()はしたほうがいいのかなぁ?
何のためにstripslashes()までやってると思ってるんだお前。
array_merge すると添字番号が0からになってしまうようなのですが、これを回避する方法は ないでしょうか? $a = array(); $b[1] = 1; $a = array_merge($a,$b); print_r($a);
>>84 そういう使い方も出来たのですね
ありがとうございます
86 :
nobodyさん :2006/08/08(火) 18:50:03 ID:CQRoL3Un
htmlspecialcharsで、改行タグはそのまま残しておきたいのですが、どうすればいいですか?
無理
str_replace で、改行タグをあらかじめ任意の文字列に書き換え、 htmlspecialchars 後に改行タグに戻す
<a href="../test/read.cgi/hogehoge/適当な数値/適当な数値" target="_blank">
>>72 </a>
これを
>>72 に置き換えたいのですが、どのようにすれば良いのでしょうか?
90 :
nobodyさん :2006/08/08(火) 19:14:47 ID:4QDp9Gx3
RSSの生成をしてみようとFeedCreator.class.phpをDLしてみました。
ttp://www.bitfolge.de/rsscreator-en.html 上記URLにサンプルも提示されているので基本的なことはすぐできたんですが
自分なりのアレンジをしようと思うといまいち使い勝手がわかりません。
出力の文字コードをデフォルトのlatin-1からUTF-8にしたいと思い
呼び出し側(自作スクリプト)で指定を試みたんですがうまく反映されません。
逆にソースコード中のその部分を書き換えることでUTF-8で出力できたんですが、
これはそういう使い方でいいんでしょうか?
もし真っ当な指定の仕方が他にあるようでしたらおしえてください。
現在のところUniversalFeedCreatorクラスを用い、createFeedメソッドで出力しようとしています。
お願いします。
91 :
90 :2006/08/08(火) 19:34:44 ID:???
すいませんちょっとわかりにくかったので追記します。 >>ソースコード中のその部分を書き換えることで と書いたのは、もとのクラスファイルのことです(FeedCreator.class.php)
92 :
89 :2006/08/08(火) 19:40:57 ID:???
『<a』で始まって『_blank">』で終わる部分を消したいんです
94 :
89 :2006/08/08(火) 20:19:13 ID:???
すみません、説明不足です。 正規表現を使ったやり方が知りたいんです。
正規表現を勉強すればいいんじゃね?
>>92 正規表現が分からないなら、strpos使って位置を調べてsubstr_replaceで置換すれば?
その程度のことなら別に正規表現すら要らん。
コピペすればすぐ終わるようなバカ親切な回答を期待してるんだろうさ
99 :
89 :2006/08/09(水) 00:05:28 ID:???
すみません、 $comm = preg_replace("/~<a[ \t\n\r\fa-zA-Z0-9_\"=]+blank\">$/", "", $comm); これじゃうまくいかなくて・・・
先頭の「〜」はなんだろう /<a[^>]+blank">/ とかでどうだろうか
$str = preg_replace("/>>\d{1|2|3}/","<a href=#\\1>\\1</a>",$str); 俺も適当なの試してみた。 アンカにリンクを貼ろうと思ったんだがうまくいかなすwww 正規表現ってむずいな
preg_replace("/>>[0-9]+/","【ここがわからない】",$str); これの0-9の文字って取得できるの?
>>103 ごめ、すっかり忘れてた
preg_replace("/>>(\d{1|2|3|4})+/","<a href=\"#log\\1\">>>\\1</a>"$str);
こうできたのは良いが、\\1に数値が1文字しか入らないのはなぜだろ・・・
>>99 ~ と $ の意図が分からんが、それを除外しても駄目。
なぜなら「blank」の部分が a-z にマッチするから。
だから、最短一致をさせないといけない。
ごめ、 preg_replace("/>>(\d{1|2|3|4})+/","<a href=\"#log\\1\">>>\\1</a>",$str); ね
>>106 なんだ? (\d{1|2|3|4})+ って? (\d{1,4}) のこと? 最後の + が意味不明。
>>106 {1|2|3|4}って意味わからんぞ。何をしようとしている?
で、(\d+)と、+の部分もカッコに含めないと数字全桁は取れないだろ。
109 :
nobodyさん :2006/08/09(水) 01:36:59 ID:XkNwEDtZ
http://masago.kir.jp/php20040103.php の
<?php
$image = imagecreate(200, 200);
$black = imagecolorallocate($image, 0, 0, 0);
imagepng($image);
imagedestroy($image);
?>
で画像表示が出来ません。文字化けみたいになってる。
4.3.11でGDできることは確認。。
誰か助けてください。
>>109 header('Content-Type: image/png');
>109 ブラウザで文字化けしてるってことか? どんなレスポンス返してるのか全部見てみなよ content-typeがtext/htmlになってるだけじゃないの?
>>109 ここのサイトってどういう設定にしてるんだ??
<?php
の次の行に
header("Content-type: image/png");
って足せば動かない?
113 :
112 :2006/08/09(水) 01:45:14 ID:???
は?
>>114 言ってる意味が分からんぞ
分からないことは恥ずかしいことじゃない。お前の考えを正直にぶちまけてみろ
>>118 自分で試行錯誤するってことをしないのはなぜ?
index.php?hogehoge=test#5 $_GET['hogehoge']にtestを格納して <a name="5"></a>に飛ぶ予定だったんですが、 $_GET['hogehoge']にtest#5が入ってしまいます。 どのようにすれば $_GET['hogehoge']にtestを格納し、 <a name="5"></a>に飛ぶことができるのでしょうか
list($_GET['homegome'],$anchor)=explode('#',$_GET['hogehoge']);
>>122 手元の PHP 4.4.2 では $_GET['hogehoge'] に # 以降は含まれていなかったが。
>>118 文字列の末尾が .jpg .jpeg .png .gif のときはIMGタグに、それ以外のときはAタグに変換、がお手軽。
厳密にやるならそれぞれソケットでHEADアクセスして、返ってきたレスポンスのContent-Typeを判定。
127 :
nobodyさん :2006/08/09(水) 08:28:07 ID:jiSDaPkk
$name = '名無しさん'; $name = isset ($_POST['name']) || $_POST['name'] !== '' ? $_POST['name'] : $name; terniary条件文でこのように書くのはダメなのでしょうか? 論理演算子でどちらかがTRUEなら、最初の式がTRUEになるはずなのですが… $_POST の値が空 ('') だと$nameが$nameに代入されません...
128 :
nobodyさん :2006/08/09(水) 08:30:54 ID:jiSDaPkk
訂正: 正: $_POST['name'] の値が空 ('') だと$nameの値(名無しさん)が$nameに代入されません... 誤: $_POST の値が空 ('') だと$nameが$nameに代入されません...
129 :
nobodyさん :2006/08/09(水) 09:19:05 ID:jiSDaPkk
すみません、つまらないミスでした。 論理演算子の '||' は、どちらかの式がTRUEの場合TRUEなのですから、これでは isset ($_POST['name'])がTRUEの場合、$_POST['name']が空でも$_POST['name']を$nameに代入してしまう…orz つまり、これは: $name = '名無しさん'; $name = isset ($_POST['name']) && $_POST['name'] !== '' ? $_POST['name'] : $name; でしたね。本当にスマソ
もぅ〜馬鹿ぁ
Javaのような最終変数(final)はPHPにはありませんか? もしないようなら同じようなことをするには defineを使うしかないのでしょうか?
>>131 ない
define で代用するしかない
133 :
軟式PHP :2006/08/09(水) 09:59:22 ID:???
>>131 俺も欲しいなぁとは思ってるんだけどないなぁ。
オブジェクト定数ってのならあるんだけど、多分想像してるのとは違うと思われ。
ランダムな英数字のみの書き込みを弾きたいのですが if($kakiko=="" || ereg("^([a-z])+$",$kakiko)) error("不正な文字列です"); これじゃだめなんですか? テストしてみましたがこの処理をスルーしてしまいます・・・。
135 :
131 :2006/08/09(水) 10:03:24 ID:???
>>132-133 どうもありがとうございます。
やはりないんですねorz
defineで代用することにします。
136 :
軟式PHP :2006/08/09(水) 10:05:10 ID:???
>>134 大文字・数字の判定がない。あとeregよりpregのほうがいいよ。
if( $kakiko == "" || preg_match('/^[0-9a-zA-Z]+$/',$kakiko) )
>>136 ありがとうございます
自分で英数字と言っておいて入れ忘れたのはなんともお恥ずかしい限りです。
で、試しにやってみたんですが・・・書き込み成功してしまいました・・・orz
何もおかしいところはないと思うのですが・・・なぜでしょうか・・・
138 :
軟式PHP :2006/08/09(水) 10:35:21 ID:???
>>137 kakikoという変数から察するに掲示板の書き込みの内容?
スペース・改行・タブ等が入っていたら上のじゃスルーされるよ。
タブ、改行、スペース対応版。記号入ってたら駄目だけど('A')あとは改造してくれ。
if( $kakiko == "" || preg_match('/^[0-9a-zA-Z\r\n\s\t]+$/',$kakiko) )
これって例によって strlen() == mb_strlen() を判定すれば一発、ってネタじゃないだろうな?
$foo = "フォー"; echo("{$foo}"); とやったらフォーが出力されますよね? では、 define("FOO","フォー");を echo("")という形を使ってフォーと出すにはどうしたらよいのでしょうか? echo FOO;でもちろんできますが、どうしても("")の中に入れたいんです。 変数と同じ要領で("{FOO}")をやってみたけどだめでした。 よろしくおねがいします。
141 :
軟式PHP :2006/08/09(水) 11:15:03 ID:???
よくわからんこだわりだけど、echo(FOO)やecho(FOO."文字文字"); とかじゃだめなん?
>>138 そうです掲示板です。
こういう場合空白とか改行についても入れないと駄目なんですね・・・。
勉強になりました。
しかしまたもスルーされてしまいました・・・orz
検索したりと色々試行錯誤していましたら
if(!preg_match("/[\x80-\xA0]/",$com)) { error("不正な文字列です"); }
これで自分の思い通りの結果になりました。
色々とご教示いただきありがとうございました。
143 :
140 :2006/08/09(水) 11:16:49 ID:???
>>141 実はDBの接続に使う予定なんです。
pg_connect("host=HOST");
といった感じに。
144 :
nobodyさん :2006/08/09(水) 11:31:37 ID:GlwbD+0Y
>>143 pg_connect("host=%s", HOST);
もしくは
$host = HOST;
pg_connect("host=${host}");
でいいと思うけど
145 :
140 :2006/08/09(水) 11:37:46 ID:???
>>144 どうもありがとうございます。
MySQLからの乗換えで、ずっと定数を使っていたので、
そのまま使えないかなーと思いまして。
上の方法で早速試してみたいと思います。
>>143 pg_connect("host=" . HOST);
でいいだろ
147 :
nobodyさん :2006/08/09(水) 12:09:56 ID:OFf4cMrj
改行コードの置き換えなのですが、次のようにするとWarningが出てしまいます: preg_replace(array("\r\n", "\r"), "\n". $str) Warning: preg_replace(): Empty regular expression 「正規表現が空」とはどういうことでしょうか? マニュアルを見るとパターンは配列もアリと書いてあるのですが。 よろしくおねがいします。
デリミタ
\r\n|\r
>>140 文字列クオートの中でのdefine展開はできない。
echo("〜" . FOO . "〜");
みたいに前後で連結するしかない。
>>147 preg系の正規表現は /〜/ をつけないと。
152 :
nobodyさん :2006/08/09(水) 12:33:50 ID:OFf4cMrj
>>148-149 preg_replace ("(\r\n|\r)", "\n", $str)
これでよろしいのでしょうか?
>>151 すみません、詳しく。
>>152 ちょっと上にpreg_matchの例があるだろうに・・・
すいません、本来Smartyスレで聞くべきなのかも知れないのですが、下らない質問だと思うのでこちらで質問させてください。 ■mySmarty.class.php include_once('Smarty/Smarty.class.php'); class mySmarty extends Smarty { function mySmarty() { $this->Smarty(); $this->template_dir = "./templates/"; $this->compile_dir = "./template_c/"; } } ■index.php include_once('mySmarty.class.php'); $smarty = new mySmarty(); $smarty->display( "index.tpl" ) で、index.phpにアクセスすると Parse error: parse error, unexpected '{', expecting '(' in 〜〜〜sample\mySmarty.class.php on line 8 と言ったエラーがでます。 何処がおかしいのでしょうか。 下らない質問だとは思うのですがよろしくお願い致します。。 あと、環境はwindowsXP PHP5.1.4 Smartyは2.6.14 です。
>>155 そのソース上には問題はない
しいて言うなら、
$smarty->dispya("index.tpl")
の文末に ; がないくらいだけど、エラーメッセージの内容からして
コピペミスだろうと思うから関係ないだろう
本当に、このソースでそのエラーが出ているのか
>>156 レスありがとうございます。。
原因解りました。
何ていうのか、もう完全に初歩的なミスでして、説明しづらいんですが、本来読むべきmySmarty.class.phpとスペルミスのmySmaty.class.phpと言うファイルが何故か2つありまして、
で、スペルミスの方は上記の通りソースは良いんですが、スペルミスしてない方(index.phpから読み込んでる方)は()が有りませんでした。
もうホントにお恥ずかしい話です。。
すみません。
お騒がせ致しました。。
>>147 それならstr_replaceで十分なのでは
159 :
nobodyさん :2006/08/09(水) 17:21:32 ID:OFf4cMrj
>>158 ごめん、最初から str_replace() でやるつもりだったんだけど
ミスって str が preg になってしまった…。
でもミスに気付けて良かったよ。ありがとう。
値のチェックで大文字と小文字を区別しないようにするには どう書いたらよいのでしょうか? たとえば、HOGEもhogeもHoGeもhoGEも同じHOGEとしてチェックする感じです。
161 :
(^ω^) :2006/08/09(水) 18:44:48 ID:???
String.toUpperCase
162 :
(^ω^) :2006/08/09(水) 18:46:30 ID:???
間違えた(^ω^;) strtoupperで比較 またはstricmp
>>162 おーこんなものがあったんですね。
どうもありがとうございます。
すいません、質問です。 simplexml_load_fileで読み込んだオブジェクトを functionの引数として指定したいんですが、上手くいきません。 試しに下記のように書いてみたのですが、どうも引数を渡せていないようです。 こういう時はどのようにして渡したらよいのでしょうか。 どなたかアドバイスなどよろしくお願いします。 $xml = simplexml_load_file("hoge.xml"); $item=$xml->item; item_construct($item); funciton item_construct($item){ $sword=$item->sword; (略) }
>>164 よくわからんがその関数で読みこんだオブジェクトは$xmlであって引数にしてる$itemではないのではないか?
166 :
109 :2006/08/09(水) 21:52:49 ID:XkNwEDtZ
亀レスすみません。
ありがとうございます。。
>>110 >>112 header("Content-type: image/png"); を書き足してみましたが
前と変わらず表示されませんでしたorz
<?php
header("Content-type: image/png");
$image = imagecreate(200, 200);
$bcolor = imagecolorallocate($image, 0, 0, 0);
imagepng($image);
imagecolordeallocate ($image,$bcolor);
imagedestroy($image);
?>
とやってみましたのですがorz
>>111 はいブラウザでサイト上で文字化けしてます。。
どうせブラウザのキャッシュだろうけど imagepngでファイルに出力してみて、正しい画像ならブラウザの問題
168 :
109 :2006/08/09(水) 22:01:31 ID:???
ブラウザはIE6でキャッシュも削除しますた・・
俺のIE6、Opera8.5では表示できた。 PHP5.1.4
>>168 先に改行とかBOMとか余計なもの出力してない?
>>164 funcitonはPHP8以降じゃないと使えないから。
>>166 それ動かしてるサーバーってレンタルスペース?
ひょっとして広告とか入ってるとこで、PHPでいくらheader出力しようと思っても無駄なとこだったりしない?
>>164 それは何年後に使えるようになるのですか?
174 :
109 :2006/08/09(水) 23:12:13 ID:XkNwEDtZ
>>170 はい余計なものは出力していないです。。
>>172 はいレンタルスペースです。下部にテキスト広告が入っています。。
header出力に関しての記載はないので管理者に聞いてみようと思います。
ちょっと他の所でも試してみます。。
何度もすみませんでした。
>>174 広告入ってるサーバーの多くではプログラムで画像出力とかできないよ。
その自動で動く広告挿入のプログラムが、出力内容をHTMLとして扱っちゃうので。
一部のサーバーでは自動的に広告OFFにするための仕組みを用意してるので(ディレクトリや拡張子の変更など)
それがあるなら使ってみることだ。
すいません、間違って?PHP part2スレで書き込んでしまったので、 もう一度こちらに書き込みさせていただきます。(マルチになって申し訳ありません) 399 名前:デフォルトの名無しさん[sage] 投稿日:2006/08/09(水) 23:17:17 こんなことを質問できる場がここしかないので、どうかご教授願いたいです。 実験でHTMLのテキストフィールドから直接SQL文を入力させてDB(MySQL)を操作したいんですが、、 例えばHTMLの入力フォームから select * from [テーブル名] where ID='06A00012' などと入力すると、phpで受け取った値は select * from [テーブル名] where ID=\'06A00012\' となってしまい、SQL文に余計なものがついてSQLの構文エラーとなってしまいます。 phpのstrtr関数で文字を置き換えようとしても上手くいきません。 (\をなんとか消しても、今度は "(ダブルコーテーション)に置き換わってしまいます。) どなたか、¥の消し方をご存知の方がいましたら、お願いします。。。
178 :
176 :2006/08/09(水) 23:41:17 ID:???
あ!!こ、これかもしれません、ちょっと調べてやってみます!涙
179 :
109 :2006/08/09(水) 23:53:52 ID:XkNwEDtZ
180 :
176 :2006/08/10(木) 00:18:11 ID:???
$inpo=get_magic_quotes_gps(); if($inpo==1){ $okki = stripslashes ($inpo); } print $okki. "マンセー"; ↓こんなスマートなやりかたもありました。 if (get_magic_quotes_gps()){ $comment = stripslashes ($comment); } 本当にありがとうございました。
$inpo=get_magic_quotes_gps(); gpc()←訂正 まだまだ、先は長そうだ。
182 :
nobodyさん :2006/08/10(木) 00:32:47 ID:9+xl79/r
php5で、ローカル側(自分が使っているPC)のファイルやディレクトリを ブラウザで表示したいんですけど、それが載っているサイトや 書籍ってありますか?例えば、ffftpの左半面のようなものを イメージしています。用途が幅広いので、どこかに公開されている と思うのですが・・・。どなたか、お教え下さい。
>>182 出来ない。PHP で何が出来るかを良く考えましょう。
>>183 いや、出来るんじゃないか?
まぁ、その表示したものを消したりとかってなると無理な部分があまりにも多い
だろうけど。
見るだけならある程度できそう
>>184 file:// でってこと? PHP 全然関係ないし。
普通にファイル一覧とって繰るじゃん?で、それにイメージくっ付けるってのは できるんじゃないか?
182を良く読んで。 Client側のファイル一覧どうやって取るんだってことだよ。
localhostで動かす場合の話じゃね
>>188 おもいっきり自分の(ローカルホスト)って書いとるじゃないか
191 :
nobodyさん :2006/08/10(木) 01:48:26 ID:DcRBPcvM
説明不足で、申し訳ない。 サーバ側から、クライアント側のディレクトリ構造を・・・という話です。 phpで、サーバにクライアントのファイルをアップロードするシステムが あるくらいだから、何とかできないものかと思ったのですが・・・。
>>191 PHP はサーバサイドで動くもの。知ってた?
>>191 そうなっちゃうとPHPだけじゃ無理だな〜
でも、その着眼点は良いんじゃない?今PHPでは実現不可能って分かったんだから
じゃあ、ほかの言語で代用しちゃえってなもんだ。
今ならpythonが熱いぞ!PHPみたいなスクリプト言語だがデスクトップアプリも作れる。
下手したらVBよりも簡単だしな
>>191 ファイルのアップロードはブラウザの機能。
しかもHTMLレベルじゃセキュリティ上アップロードはかなり制限されてる。
クライアントサイドでActiveX走らすとかそういった手しか無いだろうね。一言で言うと
>>183
>>191 クライアントがサーバなら出来るなw
お前のサーバからクライアント(サーバ)にリクエスト投げて、クライアントが
PHPとかでデータを取得してXMLなりなんなりでお前のサーバに結果を返す。
で、お前側サーバでそれをCSSで綺麗に整えれ幸せになれます。
>>191 無い。
アップロードはブラウザにファイルから送信データを生成させる仕組みが規定されてるが、
セキュリティ的に危険なためそれ以上のクライアントファイル操作は全て禁止が原則。
クライアント上で動くJavaScriptでも基本的にはクライアントのファイルには触れない。
回避手段があるとすればActiveXを使う手だろうね。パソコン側に半自動でプログラムを
ダウンロード・インストールさせ、それを実行するような仕組みが必要。PHPだけではどうしようもない。
ActiveXならがんばりゃオンラインウイルススキャンなんて仕組みも作れるのでかなり色々できる。
ただし、WEBの標準的な機能ではなくWindowsの機能を利用する形になるため、
使えるOSとブラウザが著しく制限される。
また、セキュリティ的に非常に危険な仕組みなので、クライアントの設定によっては拒否される。
PHPでウェブアプリを作ろうと思ってるんですが smartyというものは使った方がいいんでしょうか? PHPやってるならsmartyくらいは使えないとって感じなら勉強するつもりなんですが そうでもないなら回避しようかなと思ってるんですが
>>197 とりあえず不要。
やってくうちに必要性を感じたなら、それから導入すればいい。
>>197 Smartyみたいな汎用志向のテンプレート機能は
デザイナーとプログラマーが分業してる場合など
多人数で開発する際に大きな効果を発揮する。
逆に言うと、個人でやってる分には意義を見出しにくいものでもある。
(規模が大きくなってきたり、同じプログラムでデザインの差し替えを
多用するようになったりすると便利さを感じる場面も出てくると思うけど)
ってことで、とりあえずは無くてもいいものだと思う。
今後、プロになりたいと思ってるならスキルの1つとして覚えといてもいいけど。
便乗して質問ですが、 PerlのHTML::Templateのような、単純なテンプレートを知りませんか? Smartyほどの機能は不要なのですが。
>>200 簡単なテンプレなら自作が一番。
デザイン済みのHTMLソースに変数をはめこんで、
それをヒアドキュメントにして拡張子.phpにしてincludeすればいい。
>>198 ,199
回答サンクスです。
個人で好きにやってるだけなのでやめときます。
>>201 いくら単純と言っても、ループブロックくらいは扱えないと使い物にならない気がする。
204 :
nobodyさん :2006/08/10(木) 11:08:20 ID:ftKUYt4P
MySQLの質問スレってないんでしょうか? 見つからないので多目に見てください。 MySQLのフイールド「unko」に こんなのが入ってるとします(1行を1レコードとしてください) 1_123 10_376 4_432 11_543 5_982 これを 1_123 4_432 5_982 10_376 11_543 のようにソートしたいのですが order by unko だと、 1_123 10_376 11_543 4_432 5_982 となってしまいます。 設計から見直せと言われそうですが、なにかいい方法はありませんか?
イヤ、板違いだろ
>>204 >>1 > ・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
order by convert(substring(unko, 1, instr(unko, '_')), signed)
209 :
nobodyさん :2006/08/10(木) 11:56:07 ID:Zt0pUlM3
みなさんアレですか、やっぱりAssemblerやC/C++からプログラミングを始めて、業務上必要になった為PHPを覚えたって感じですか? いや、なんかスレの内容が随分レベル高いなぁーっと思いまして。 それと質問なんですが、ECサイトの構築を覚えたいとずっと考えていまして、言語はPHPに決めました。 PHPと組み合わせるDBで特に易しいもの等はあるんでしょうか? どれでも一緒ならPHP+MySQLで勉強を始めようと思っています。
>>210 > いや、なんかスレの内容が随分レベル高いなぁーっと思いまして。
いや…ちょー低いだろ…_| ̄|○
> PHPと組み合わせるDBで特に易しいもの等はあるんでしょうか?
MySQLは特に易しいよ。機能少なめでかつ高速で。あんまり悩む必要がない。
212 :
nobodyさん :2006/08/10(木) 12:33:05 ID:83OIGtyl
mb_send_mailをの送り先をドコモの携帯にしてフォームを送信しました。 すると、本文の最初に mime-version:1.0 content-type:text/plane;carset-ISO-2022-jp content-transfer-encoding: 7bit という文字列が付加されました。 これを取り除くにはどうしたらいいでしょうか? $to = 携帯のアドレス $subject = "タイトルです。"; $msg = "内容内容内容"; $header = "From: PCのアドレス"; みたいな感じになっています。上の文字列は内容内容内容の前に付いてしまいます。 携帯はdocomoでしか確認していませんが、mova、fomaとも同じ結果です。
>>212 関数へ渡してる部分も含めてもう少し全体を見せれ。
多分、どっかに余分な改行がある。
メールのヘッダーと本文は1行の空行で区切られてるが、
ヘッダーの途中に空行が余分に入ったことでヘッダー後半が
本文扱いになってしまってるわけだ。
最近classを勉強しています。 ソース中によくreturn文を使っているのを見るのですが、 どういうときに使っているのか、何をしているのかがよく理解できません。 マニュアルを見てもいまいちピンとこないのですが、 これはPHPを学ぶ上で必須となるものでしょうか?
PHPに限らず多くの言語の基本中の基本事項です クラス以前の問題
>>214 オブジェクト指向学ぶ前に言語構文覚えれ
>>214 絶対必須。
それ覚えるまでクラスなんていじるな。
>>214 classの前にまずfunctionを覚えましょう
219 :
nobodyさん :2006/08/10(木) 13:04:06 ID:83OIGtyl
>212さん レスありがとうございます。 試しに必要な部分だけ抜き出して実行してみましたが、結果は同じです。 <?php mb_language("ja"); mb_internal_encoding("SJIS"); $to = "携帯のアドレス"; $from = "PCのアドレス"; $subject = "お問い合わせがありました。\n"; $header = $from."\n"; $msg = $header."さんからお問い合わせがありました。"; mb_send_mail($to, $subject, $msg, $header); ?> どうでしょうか?
POSTで送ったURLの内容を表示させると文字化けする。 文字コードをEUCにすると他の文字が文字化けする。 どうすればいいの?
222 :
nobodyさん :2006/08/10(木) 13:10:35 ID:oKJYDnYF
>>219 mb_internal_encoding("SJIS");
これがまずいんじゃない?
たしか内部エンコードSJISは使えなかったはず。
UTF-8かEUC-JPでやるとうまくいくと思う。
224 :
214 :2006/08/10(木) 13:16:33 ID:???
>>215-218 厳しいご意見ありがとうございます。
頑張って理解できるように勉強してまいります。
リファレンスマニュアルには次のように書いてある PHPで動作しないと思われる文字エンコーディングの例を以下に示します。 JIS, SJIS, ISO-2022-JP, BIG-5 これらのエンコーディングで書かれたPHPスクリプトは、 特に符号化された文字列がスクリプトで記述子やリテラルに使用される場合には、 動作しない可能性がありますが、 入力されるHTTPクエリに関して mbstringの透過的なエンコーディングフィルタを 設定することでこれらのエンコーディングをほとんど使用しないようにすることが できます。 SJIS使いたければ、内部エンコードUTF-8とかにして出力時に自動変換がお勧め
>>222 -------- .htaccess --------
php_flag output_buffering On
php_value output_handler mb_output_handler
php_value default_charset UTF-8
php_flag mbstring.encoding_translation Off
php_value mbstring.http_input auto
php_value mbstring.http_input UTF-8,SJIS,EUC-JP,JIS,ASCII
php_value mbstring.substitute_character none
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_output UTF-8
php_value mbstring.language Japanese
---------------------------
出力をSJISにしたいときは
php_value mbstring.http_output SJIS
とする
229 :
nobodyさん :2006/08/10(木) 14:15:48 ID:83OIGtyl
>223,225,227さん レスありがとうございます。 教えて頂いた内容を試しましたが、だめっぽいですorz mb_internal_encoding("UTF8");としてみましたが、 あいかわらずヘッダー情報のようなものは出力されます。 \nはあまり関係が無いようでした。 以下のようエンコードをUTFにして各変数の中身を空っぽにして 送信したところ、そのいらないヘッダー情報だけが本文として送られてきてしましました。 <?php mb_language("ja"); mb_internal_encoding("UTF8"); $to = "携帯のアドレス"; $from = "PCのアドレス"; $subject = ""; $header = ""; $msg = $header.""; mb_send_mail($to, $subject, $msg, $header); ?> 上から2行のmb関数の行を削除して送信してみたら、 mime-version:1.0 content-type:text/plane;carset=utf8 content-transfer-encoding: base64 これの最後の行がbace64になったという以外、大きな変化はありませんでした。
230 :
nobodyさん :2006/08/10(木) 14:16:46 ID:83OIGtyl
$msg = ""; です。すみません。
認証の関係でサブスクライバIDを取得したいのですがuser_agentでは取得できませんでした(当然といわれれば当然ですが) どのような関数で取得できるでしょうか? 下らない質問で申し訳ありませんがお願い致します
232 :
nobodyさん :2006/08/10(木) 14:26:53 ID:83OIGtyl
>>229 <?php
mb_language("ja");
mb_internal_encoding("UTF8");
$to = "
[email protected] ";
$from = "
[email protected] ";
$subject = "てすとサブジェクト";
$header = "From: " . $from;
$msg = "本文";
mb_send_mail($to, $subject, $msg, $header);
?>
234 :
nobodyさん :2006/08/10(木) 14:37:03 ID:83OIGtyl
>>235 あるよはげ
$_SERVER['HTTP_X_UP_SUBNO']
>>231 サブスクライバIDって書いていることはAU限定だろうから
>>236 の方法か getenv() を使えばいいよ
つうか、サブスクライバIDって単語がわかっているのなら、それで検索かけたら 山ほど例が出そうな気がするが
240 :
hage :2006/08/10(木) 15:47:18 ID:GpwygKMQ
すみません。文字コード変換で、euc の"'" を utf-8の"'"に変換したいのですが、 どうしても"''"になってしまう。回避法ご存知のかたいらっしゃいます? $apo = mb_convert_encoding("'",'UTF-8','EUC-JP');
>>240 松田さん、手元の環境では再現できませんでした。
>>240 よく知らないんだが英数記号はどの文字コードでも一緒じゃないの
>>240 松田さん、こんにちは。
こちらの環境(php4.4.2)でも確認できませんでした。
そもそも、半角の ' に文字コードが関連するとも思えませんし。
244 :
nobodyさん :2006/08/10(木) 16:54:41 ID:kXNrpO55
PHPを使ってモバイルサイトから HTMLファイルを取得したいと思います。 ソケットオープン ↓ ヘッダー送信 ↓ データ受信 という流れになるんですが、 その際に、 ユーザーエージェントを携帯端末にしたいと思います。 たぶんheaderで指定する必要があるんだと思うんですが、 誰かサンプルソース持ってないでしょうか?
ini_set('user_agent', $user_agent);
246 :
hage :2006/08/10(木) 17:13:02 ID:GpwygKMQ
>>241 ,242,243
どうも、すみません。私の勘違いでした。前処理で、余計なことしてて
気づかなく、ハマッました^^;
松田・・・・かわいそうな子!
ちゃんとphp-usersでも解決報告したのはえらいぞ。松田。マルチの鑑だね。
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#checkbox 上記のページ(W3C勧告私的日本語訳)で、「1つのフォームで複数のチェックボックスが同じコントロール名を共有してよい。こうしたチェックボックスは、例えば、ユーザが1つのプロパティについて複数の値を選ぶことを許容する。」とありますが、
例えば以下のようなformを作って送信すると、
<input type="checkbox" name="q" value="1">
<input type="checkbox" name="q" value="2">
<input type="checkbox" name="q" value="3">
確かに「q=1&q=2&q=3」というリクエストが送信されます(IE、Firefoxともに確認済み)。しかし、これをサーバサイドでPHPで受け取って print_r($_POST) とかで表示すると、
Array
(
[q] => 3
)
のように q の値は 3 のみになっています。これはPHPの仕様がW3Cの勧告に即していないということでしょうか?
>>250 <input type="checkbox" name="q[]" value="1">
<input type="checkbox" name="q[]" value="2">
<input type="checkbox" name="q[]" value="3">
でお願いします。
その文面からだと確かにそのように読めるね。 一応こうならば何とか動くけど。 <input type="checkbox" name="q[]" value="1"> <input type="checkbox" name="q[]" value="2"> <input type="checkbox" name="q[]" value="3">
253 :
252 :2006/08/10(木) 22:19:59 ID:???
うは、遅かった。
それを動かそうとすると、QUERY_STRINGを取得して、自前で変換するしかないと思う
PHPで検索システムを作ってますが、1文字で検索するとたまに?になってしまいます。 なぜでしょうか?
>>256 文字コードの自動判別失敗と mbstring.substitute_character のせい
>>257 さんへ
文字コードはちゃんと判別してると思います。(たまに?になるだけですので)
mbstring.substitute_character はnone,long,12307と変更してみましたが
やはり1文字で検索するとたまに?になってしまいます。
>>258 1文字だと誤判別しやすいんだよ。
>>257 の言ってるのはそういう指摘だと思う。
文字コード自動判別にはある程度の字数がないと正確に判定できないのだ。
文字コード自動判別の順番変えるべし
261 :
164 :2006/08/11(金) 03:07:29 ID:???
>>171 すいません、そこはここで質問する時にキーを打ち間違えたんです。
「function」ですね、お恥ずかしい。
やりたいことはようはXMLで読み込んだオブジェクト?($xml->itemみたいな)
を引数にして関数に渡して、そっちで処理したい、ってことなんですが、
まだできません。
引き続きどなたかアドバイスなどいただけたらと。
>>261 試したことないのであてずっぽだけど、引数をリファレンスで渡してみたらどうよ?
$xmlを丸ごと渡すなら分かるけど、$xml->itemとかいう渡し方をした場合、
$xml->itemの中で$thisとして$xmlのメンバ変数を参照しようとしたとき
$itemしかコピーされてないと正常動作しようがないんじゃないか?って気がした。
usleep()で小さい数値を指定した場合に、環境によって待ち時間がバラバラなんですが、そういうものなんでしょうか? 間で処理が遅れる事があるだろうと思うので、少し増えたりするのはうなずけるんですが、 試してみたところ、ある環境では引数に指定した値のの約3倍ずつ待っていたり またある環境では引数に指定した値より待ち時間が少なかったりしました。 どなたかご存知でしたら教えてください。
>>264 <?php
$time1 = microtime();
usleep(3);
$time2 = microtime();
list($m1, $s1) = explode(" ", $time1);
list($m2, $s2) = explode(" ", $time2);
echo $m2 - $m1;
?>
これを繰り返したけど0.003〜0.01程度とばらばら(Win32, PHP5.1.4, Pentium D 930)
CPUのスペックや同時に動いているプロセスの数や種類などでかなり差が出るとは思われる
>>264 $time1 = microtime();
$time2 = microtime();
というふうに連続でやってもマイクロ秒付近の偏差はでるんだから、usleepのせいってわけじゃなくね?
usleepの精度とかってmanpage見た方がいいと思うんだな
>>267 The usleep() function suspends execution of the calling process for (at least) usec microseconds.
The sleep may be lengthened slightly by any system activity or by the time spent processing the call or by the granularity of system timers.
>>264 最低、引数の時間は止まるので少なくなることはない
下らない質問ですが $a = array(1,2,3,); この最後のカンマってあってもいいのでしょうか? echo count($a); とすると 4 になるかと思ったら 3 になりました。 マニュアルのどこかに載ってますでしょうか?
>>269 なくてもいい
マニュアルに載っていたかな
Cからの慣習なのかも
Cだとコンパイル通らんけどな
通るだろ
>>272 エラーでなかったよ
int main(void)
{
char a[] = {1, 2, 3, };
return 0;
}
276 :
234 :2006/08/11(金) 18:08:04 ID:Pasm0XSV
解決したので、ご報告しておきます。 mb_send_mail($to,subject,$msg,$header) これの$headerの中に"from:"って書いておかないと、 ヘッダー情報が本文におくられちゃうみたいです。 234でドコモの情報とか書きましたが、上の条件をみたして、携帯に送ったら 至って普通に受け取れました。 沢山レスくれたみなさん、お騒がせしました。
>>276 >>233 のレスのが正解だったわけだ。
言われるまで、$headerにFromアドレスをヘッダ識別子なしで
そのまま格納しちゃってることに気付かなかったよ…
>>275 $a = array(
1111111111111,
2222222222222,
3333333333333,
);
みたいに行単位で書く場合は最後にもコンマつけられたほうがいいんじゃない?
好みの問題
俺見たいに、最後だけ意識的に,を外すようにしてるやつもいれば、付けるやつもいるんだろう。 ただSQL文とかでそれやるとエラーだから、PHP使う上では出来るだけ意識的に外したほうが良いかもな。
推奨云々で言うなら最終行のカンマは無いのが正しい。 ただ、頻繁に配列内容の変更があるならむしろカンマをつけておいた方がメンテはしやすくなる。 これは if(式) 実行文; っていう1行しかない場合でも、保守性を考慮して if(式) { 実行文; } と必ず { } をつけるコーディングポリシーに通じる話だと思う。 その辺の兼ね合いを考慮したうえで、後は好みの問題だから好きにすればいい。
>>278 おいらは値の追加とか削除した際にも最後に,が残らないように
$a = array(
1111111111111
,2222222222222
,3333333333333
);
って書き方してるな。
コンマって言わないでカンマって言うようにしようよ。 なんかエロくて嫌です><
>>283 言われて初めて気付いた
俺はカンマ派(どうでもいい
285 :
nobodyさん :2006/08/11(金) 21:59:02 ID:256svcAI
すみません。教えてください。 java scriptで自身を500ms周期でリロードするHTMLを書き、 数時間走らせておくと、web serverが重くなります。 web server(httpd)を再起動すると元通り軽くなります。 httpdのconfig設定等でチューニング可能でしょうか? また、どこらへんを設定すればいいのでしょうか? 環境; OS Linux CENT-OS4.3 web server apach2 外部公開せずLAN内でのみ使用。クライアントは上記のアクセス1台のみ。 HTMLで記述 です。よろしくお願いします。
想像力豊かな思春期の方が居るコンマはここですか? そんな俺はPHPだけは必ず最後にコンマを付けちゃう派。楽すぎて幸せになれる。 他の言語もみんな同じようになればいいのに。
すいません、文字数がある範囲を超えるとその範囲までを切り取って、 「…続く」というのが付け足されるようにしたいんですが、 下のように書いたら、切り取った最後のところに「?」が追加されてしまいます。 マルチバイトの扱いがちゃんとできてないんでしょうけど、 どのように書くのがいいでしょうか?アドバイスよろしくおねがいします $byte= mb_strlen($str); if($byte>300){ $str=mb_substr($str,0,300)."…続く"; }
>>マルチバイトの扱いがちゃんとできてないんでしょうけど
>>288 たぶん mbstring.internal_encoding が正しく設定されていない。
それから一応常識だから言っとくけど、PHP(mbstring)で内部エンコーディングSJISは通用しない。
>>288 mb_strlenで$byteかよ。
やりたいのはmb_strimwidthじゃないの?
mb_strimwidth:「あああ…続く」「aaaaaa…続く」
288の方法:「あああ…続く」「aaa…続く」
あああぁぁ…いくぅっ
>>290 >>291 ありがとうございます。
mb_strlenがマルチバイトを2文字として計算してるようなので$byteとかいう変数名にしてしまいました。
ややこしかったですね。
あとphpinfoで調べてみたところmbstring.internal_encodingはno valueになってますね。
これのせいかな、ファイルは全部utf-8で作ってます。
自分のサーバーじゃないんので設定変えたりはできないんですが、
他になにか良い方法があればぜひ…
おれは0.3mmを「こんまさんみり」と読むから , は「かんま」と呼ぶようにしてる。 ま、どでもいい事ではある。
mb_internal_encoding('UTF-8');
「りみんさまんこ」
common カモン
>>286 元々はPerlが明確に「最後にカンマをつけてOK」を標榜しててPHPはそれを真似しただけ。
>>293 > mb_strlenがマルチバイトを2文字として計算してるようなので$byteとかいう変数名にしてしまいました。
この時点でmbが正常に動作してないことに気付け。
> 自分のサーバーじゃないんので設定変えたりはできないんですが、
> 他になにか良い方法があればぜひ…
プログラム中でinternal_encodingは設定できる。
mb_strlenの挙動もそうだけど、1度はmb系のリファレンスを読みましょう。
失礼します。PHP5です。 Win環境でライブラリ(特にGD2)の関数を使用すると ソースがshift-jisでなきゃうごかんのはphp.iniがおかしいのでしょうか? 激しく既出でしたらスルーしてください。
そんな不思議仕様は聞いたこと有りません。
>>295 >>299 ありがとうございます!
ini_set("mbstring.internal_encoding","utf-8");
でいけました
オレはマンコ派
phpってsetter、getter必要なんでしょうか? 連想配列でもいい気がするんですが、どうなんでしょうか。
getter setterと連想配列は全然違うわけだが
たとえば、Dto(vo) では、データのみを保持しますが、 この場合もJava同様getter, setterを作る方法がスマートなんでしょうか? 連想配列の方が楽な気がするんですよね。 どうなんだろう。
Javaでgetter、setterを使っていたのは何のためだったんだい?
そういう作成方法だからという理由でした。 getter、setterごとに制御を入れるってことも滅多になかったもので。 DBのカラム名、画面の部品名称が変わるたびに、変数やメソッドの名前が変更になるので すごい面倒だとJavaのときも感じていました。 実際、getter、setterを使っていて得したってことはなかったです。 痛い目にあっていないだけからかもしれませんが。
その疑問があるなら、むしろjavaのスレッドとかコミュニティに 勇気を出して聞いたほうがいいぞ とてつもなく、罵倒される可能性もあるが
>>309 ということは、309さんはgetter,setterを使っているんでしょうか。
連想配列があるPHPでも実装する利点ってどこにあるのでしょうか?
人がやれといえば、何でもやるのか? その辺を吟味し、自分なりの方法を確立していくのも プログラムを書いていく上で必要なことだと思うが。
>>311 いやたぶん自分なりの方法を確立すると大変なことになります。
だから、デザインパターンなんてものがあるんだし。
ここ人が少ないんですね。
レスが少なくてむなしいw
>>312 =304?
質問するなら
>>1 読んで、ID表示くらい守ってくれんかね。
private 定義がない PHP4においては、setter、getter の意味は 勧告程度しかない ようは、setter、getter が定義されていないプロパティに関しては 外部からアクセスするなというルール作りでしかない 一人で、作っているときはそれで問題ないかもしらないが、 複数人で使いまわす処理なんかを作ると、一時領域に使っている プロパティを勝手に書き換えられて、後の動作がうまく動かなく なるということは良く起こる これが一つの理由
もう一つは、setter、getter 経由でアクセスしていれば、仕様変更時に setter、getter 内の変更だけですむ可能性がある これらの理由は、連想配列があろうがなかろうが関係ない 別の使い方としては、連想配列へのアクセスのためのヘルパーメソッド として使う程度だろう
WebProg番1のスレ速度なわけだが
一人で、作っているときはそれで問題ないかもしらないが、 複数人で使いまわす処理なんかを作ると、一時領域に使っている プロパティを勝手に書き換えられて、後の動作がうまく動かなく なるということは良く起こる プロパティ(変数?)を勝手に書き換えられてってありますが、 privateにすれば勝手に書き換えられることはないですよね。 Java板で質問したところ、すごいきっちりとした納得できる内容の 返信をもらいましたので、追記します。
●Java板からの返信。回答者さんありがとうございます。 本来はカプセル化のためだし、 getterやsetterにいろいろ仕込む手法もあったのだけど、 最近の流れはそうではないよね。 でも当初の思想がそうだったために、各種開発ツールや ライブラリやカスタムタグがgetter/setterありきで設計されている。 ってとこが現実かな。 変数名とメソッド名を合わせて変更は、IDEが対応しているでしょ。 データを保持するだけの単純なJavaBeanは手書きするもんじゃないよ。 -- 個人的にすごい納得できる内容でした。
正直、その答えで納得できる人間がなぜ、今まで悩んでいたのかが 理解に苦しむ >privateにすれば勝手に書き換えられることはないですよね まあ、別に変更可能なメンバ変数は public で それ以外は private って使い方でもいいけど
httpsのページにPOSTで送信したいんですが そういう関数どこかにないですか?
標準の関数はない。PEARライブラリ使うか自作。
>>321 うまく作れないんですが
どこかにサンプルないですか?
自己解決しました
>>319 > 正直、その答えで納得できる人間がなぜ、今まで悩んでいたのかが
> 理解に苦しむ
おそらく単に
>>318 みたいな答が欲しかったってだけの話だろ。
特に「本来は〜だけど、当初の思想が〜」のように「仕方なく使わざるを得ないだけ」みたいな言葉を待っていたって感じ。
俺はsetterとgetterは依然カプセル化に重要な役割を果たしてると思うけどね。
たとえばあるプロパティをpublicにするとどんな値にでも変更し得るけど、setterが毎回呼び出されるなら不正なデータや範囲外のものをチェックしたり修正したりと、整合性をとるのが容易になる。
>>315 の「仕様変更時に一箇所の変更ですむ」、という話につながる。
setterだけでもプロパティに代入されるものの整合性を保つことはできるけど、そのプロパティをsetすることのほうが多いのかgetすることのほうが多いのかによって、setter/getterの処理の重さを調節することもできる。
まあ、そんなこと考えずにガムシャラに動くものを作れば良いっていう今時の風潮からすれば、俺の言ってることも古い考えってことになるのかねぇ?
>>324 みんなどこぞの解説書によくあいてあるようなことを言うが
ちなみに俺の実務経験上では、データのみを保持するオブジェクトDTOなどにsetter,getterごとに範囲チェック処理などを入れることはまずナイ。
エラーチェックはエラーチェックで別の処理で行っている。
Javaの基本概念として、setter,getter使っているってことがホトンドだろう。
場所によりけりだけど。
まずデザパタありき、まずgetter/setterありき、みたいな思考停止はダメだろ。 それらの方法論の良い悪いではなく、自分で取捨選択・応用する頭を持たなきゃ、プログラマーではなく、ただのタイピストだ。
>>325 DTOの内部でエラーチェックetcをしないのは、オブザーバパターンなりコントローラなり、より広い範囲での例外処理のほうが有用だからってだけでは?
似た処理はなるべく同じところに書いたり隠蔽したほうがいい(=カプセル化)ってのはどういうレベルで見ても一緒だし、setterの目的が基本概念として、っていうだけだったら、publicじゃダメな理由がなくなってくる。
実際のとこ、setterでチェックすることもまず無ければ、仕様変更をsetter/getterで吸収することもまず無くね? 全く無いとは言わないが、相当なレアケースだと思うんだよね。 前者はsetterでやるより入力段階などで処理した方がパフォーマンス上がるしエラー時処理の融通も利かせやすい。 ユーザからの入力処理以外でエラーチェックを行う必要性そのものがまず無いし。無闇に毎回チェックは無駄もいいとこ。 後者は現実問題として、仕様変更入った場合はsetter/getterのメソッド自体を組み直す羽目になるケースが多く、 結局呼び出し元も含めて修正せざるをえないことの方が多い。I/F仕様と中身の実装が食い違ってると後で混乱を招くし。 setter/getterで一括処置できるのは非常に些細なレベルの修正でしかなくて、そのためにメソッドを用意するのは手間の方が大きい。 結局、現時点でsetter/getterを使うメリットって「隣に座っているプログラマがまるで信用できない」場合くらいのもので、 それをコーディング規約やコードレビューやテストなどの事前のチェックでなく、実行時の処理でリアルタイムにチェックしようって 発想そのものが根本的に間違ってると俺は思うんだよな。プログラマの至らなさをユーザに不便として押し付けてるだけ。 大体、メソッドの使い方自体が間違ってるのを実行時に判定できたとして、それでどうフォローすんの?って感じ。 そんなレベルでこけてるってことはロジック全体も含めてそのプログラムは信用ならんわけで、まともに使い物にならんじゃん。 コアダンプみたいにデバッグ情報吐き出させるか、適当にごまかして動いてるように見せかけるか、そのくらいしかできないでしょ。 デバッグ中にはメリットもあると思うが、そんな動的チェックは納品時には外して欲しいもんだと俺は思うよ。 ひょっとすると中にはデバッグ用/納品用でsetter/getterを交換してるようなとこもあるかもしれんけど、まずやらんよね。 関数プロトタイプやデバッグシンボル付きコンパイルとかの仕組みに比べるとsetter/getterの考え方はイマイチだと俺は思うなー。
> それをコーディング規約やコードレビューやテストなどの事前のチェックでなく、実行時の処理でリアルタイムにチェックしようって > 発想そのものが根本的に間違ってると俺は思うんだよな。プログラマの至らなさをユーザに不便として押し付けてるだけ。 コーディングは下流工程だし。 いかに至らないプログラマを効率良く使えるかってのは問題じゃん。 昔GCを自動化しようって流れが出てきたときにも似たようなこと言う奴はいた。 メモリ管理くらいプログラマならできて当然、とか言ってね。 今やメモリ管理を自分でやることほどアホな作業はない罠。
>>329 getter/setterとGCの話は全然別問題だろ
>>329 それは思いっきり実行時の高度で複雑な処理の話だしなー。
高級言語開発がいいかアセンブラ開発がいいかという議論と同レベル。
OS通さずに低レベルI/FでファイルI/Oや画面表示しようとかいうのと一緒
setter/getterの論議は設計図通りに作れない手抜き工事者がそこらにうようよしてるから、
建物の安全対策は建築時には考えずに監視員雇って定期的に見張らせよう、って話じゃね?
昨今のビルやプールでのトラブル続出を見てるとこれも現実的な選択だろう、ってことだろ。
>それをコーディング規約やコードレビューやテストなどの事前のチェックでなく 別にいらないのなら、やらなくてもいいとは思うけど 現実的にそう主張して、仕事が上手くいっているのなら問題ないと思う
実際にメソッドI/Fを間違ってバグ出しまくってるやつって、おまいらの会社にどのくらいいるもんなの?
>メソッドI/Fを間違って ってどういう状況? 使い方が間違っているってこと?
あ、間違えた。setter/getterを用意しなかったらメンバ変数の扱い方を間違ったやつ、だね。
あんたらまだその話してたの。
うん。
simpleXMLで要素や属性を追加しようとして、 addChildとかを使用するつもりだったんですが、 自分のレン鯖のPHPは5.1.2でそれらのメソッドが使えないことに気づきました。 DOM/XMLの設定もenabledになってるようです。 できればsimpleXMLで実現したいんですが、 何か良い方法はあるでしょうか、どなたかアドバイスおねがいします。
PHPと関係ない技術討論はよそでやれ
この話ってPHPでクラス設計をやる場合にもsetter/getterでいくべきなのか?って話じゃなかったのか。
8割の住人がいい加減にしろと思っていると出ました
>>338 管理者に言えば対応してくれるかも知らん
344 :
nobodyさん :2006/08/13(日) 11:39:02 ID:6zieGLC5
DOMNodeクラスのappendChildメソッドのような、XMLの子要素群の末尾に子ノードを追加する処理では無く、子要素群の先頭に新規ノードを追加する処理はどう行えばいいのでしょうか。
foreach で 連想配列に格納されている 文字列に関連づいている要素( [ 'abc' ] など ) と、 数字に関連づいている要素( abc[1] など ) の数を別々にカウントしたり、取り出す方法ってないんでしょうか?
ループ内で条件分岐させてカウントしていけばいいんじゃない?
うーむ もっとすっきりした方法ないんですかね。。
>>347 取り出す方法を模索してもいいと思うけど
文字列と数字(内部的には全部文字列だが)のキーが混合になる
連想配列が本当に必要か、取得しやすい配列構成に変えるとか、
そっちを考えてすっきりさせた方がいいんじゃね
いや PHPでDBから取得すると自動的にそうなるんですよね。 便利だしなぁ
PDO関数使ってどっちかに固定しろ
>>349 DBならfetchの方法変えるだけで文字列・数字どっちで取るか固定できる
マニュアル嫁
情報後出しすんなよ
便利だしなぁ > 2つとれると便利だから使ってるってだけ fetchでかえられることぐらいしっとるわw
>>353 場面に応じた取捨選択も出来んヤツが知っとっても意味が無い
PHPから、HTMLレイアウトコードを吐き出すプログラムを作る場合、HTMLデータはどうやって保持してますか? それとも、PHPで吐き出すのはやらないんですかね。
HTMLレイアウコードってのがどういう特別なものなのかわからんが、 所詮テキストだろうから普通に出力すればいいべ
決まったレイアウトを吐き出す共通クラスが作りたいなと思って。 HTMLレイアウトコードを文字列としてPHPクラスに保持しておく場合、改行コード付にしなければ 吐き出した後のソースが汚くなるんですよね。毎回付加するのも見にくい(?)し。 やっぱり別ファイルにHTMLを書いて、それをincludeしてあげるクラスがいいのかな。 ある共通化されたテーブルレイアウトの中に値を書きたい場合は、開始用、終了用のメソッドを作って、 それぞれ別ファイルを作って・・・って面倒でなんか汚いですね。 HTMLのレイアウト情報の共通化ってどうやっているんだろう・・・・?
もの凄く不細工な感じがするのですがスマートに出来る関数はありますでしょうか? $uri = $_SERVER['REQUEST_URI']; echo substr($uri,$p+1,strlen($uri)-strrpos($uri,'/'))
>>359 そういうことです。smartyとか参考にすればいいんでしょうか?
いまいち何で悩んでるのか具体的にわからん 大枠のテンプレートとなるレイアウトページから 各ページで変化する個別のコンテンツ部分は includeなりなんなりで読み込むってのは割と常套なやり方だと思うが
>>360 素直にSmarty使えばいいと思う
ライブラリを書きたいというなら参考にすればいいだろうし
>>358 echo basename($_SERVER['REQUEST_URI']);
か?
1 <table ...> 2 <tr ...> 3 <td ...> 4 5 // ページごとにレイアウトを記述 6 7 </td> 8 </tr> 9 </table> 大雑把に書くと、1〜3行 が新テーブルの開始タグ、 7〜9が新テーブルの終了タグとして 使えたら便利だなぁって思ってます。 そうすると↓のように便利になるかなと。 1 <?PHP Layout::A( パラメータ(任意) ); ?> 2 3 // ページごとにレイアウトを記述 4 5 <?PHP Layout::_A(); ?> こういう共通化ってどうやってますか?
>>367 HTML的に見たらテーブルでレイアウトするテンプレートエンジンなんか存在価値無いだろう
>>367 ページのヘッダ・フッタのレイアウトの意味合いじゃなくて
テーブル単位(<table>〜</table>)でって意味合いで言ってるなら
それ全然便利じゃないぜごちゃごちゃするだけだ
そこは普通にtableタグ書きゃいい
調べたらカスタムタグっていうやつだった。
テーブルに限らずいろいろ定義して使えるようなものね。
>>368 存在価値ありましたね。
PHPで作っている人いたので流用させてもらうことにしました。
脊髄反射イクナイ
情報を後だしすんなっての
最初はテーブルのことしか言ってないくせに、勝ち誇って偉そうですねw
てかここ低レベルなやつ多すぎ 見てると萎えてくる
中学生がおおいからな
376 :
nobodyさん :2006/08/13(日) 22:13:08 ID:t3hDjrcl
PHP4をつかって、Json形式のデータをデコードしてパースしたいと思っています。
<?php
require_once('JSON.php');
$json = new Services_JSON();
$js1 = '[{"url":"
http://www.yahoo.co.jp/ ","title":"Yahoo Japan!"}]';
$js2 = '{"url":"
http://www.yahoo.co.jp/ ","title":"Yahoo Japan!"}';
$decoded = $json->decode($js1);
$hoge = $decoded->title;
print "title=".$hoge;
?>
と書いた場合に、$js2をパースした場合はうまく行きますが、$js1をパースした場合はうまくいきません。
"[]"が含まれているからだと思います。[]が含まれていてもうまくいく方法はありませんか?
377 :
376 :2006/08/13(日) 22:16:41 ID:t3hDjrcl
自己解決しました。
378 :
nobodyさん :2006/08/13(日) 23:36:15 ID:eyKLaI69
phpって 〜秒待つ みたいな関数ってないの? 処理後3秒待って他の処理したいときとかどうすればいいの
ムリ。素直にpython使え。
380 :
nobodyさん :2006/08/13(日) 23:39:45 ID:fTOpOca2
sleep()
どこが「素直」なのかと小一時間(ry
ワラ
レスアンカーすらまともに打てないレヴェルの君へ。 オマエモナー
385 :
383 :2006/08/14(月) 02:16:41 ID:???
>>385 正直あんたみたいに釣られてヒョイヒョイ出てくる輩がいるから余計にレベルが低くなる。
387 :
385 :2006/08/14(月) 02:38:40 ID:???
>>386 まぁ、そういうあんたもオレに釣られちゃってるけどな。今日は大漁。
いい加減ネタはネタでさっさと流せよ…
次の質問まだー?
mysql の4.0.26はon duplicate key updateって使えないの?
4.1からなのかー 替わりのSQL文だれか教えて
fopenのaモードの場合の動作、phpマニュアルの説明は間違ってますよね? >ファイルポインタをファイルの 終端に置きます 実際は、オープンした直後のファイルポインタは先頭ですよね。 ファイルポインタがが終端に置かれるのではなく、ファイルポインタがどこを指していても書き込みは終端から行われるという事でしょうか。
>>393 どっちでもいいような気はするけど、何か不都合があるの?
>>394 不都合というか、公式のマニュアルが、実際の動作と全く真逆の事を言うという事があるのかなぁと思いまして。
翻訳時に表現がややずれてしまったとかでしょうか?
>>396 あぁ、、なるほど。ftell()の方の問題でしたか。私もftell()で調べました。
納得です。
398 :
nobodyさん :2006/08/14(月) 11:54:53 ID:RvQDryMl
kaizoudo.txtが 01:640x480 02:800x600 03:960x600 04:1024x768 05:1600x1200 見たいな感じになってるんですが 番号と解像度を二次元配列に格納するのにうまいこといかないんですけど どのへんがマズイですかね? 以下ソースです $kaizoudo = array(); $fp = fopen('kaizoudo.txt', 'r'); for($k = 0;!feof($fp);$k++){ $line = chop(fgets($fp)); $temp = explode(":", $line); $kaizoudo[$k] = array($temp[0], $temp[1]); print "$kaizoudo[$k][0]:$kaizoudo[$k][1]<BR>"; } これを実行すると Array[0]:Array[1] みたいなのが出力されちゃいます
$kaizoudo[$k]の中には配列が入ってるよな? だから print "$kaizoudo[$k]";の結果表示は Array だ。 その後ろに[0]ってかいてあるよな? だから print "$kaizoudo[$k][0]";の結果表示は Array[0] だ。 これが今の状態。 つまりprintが一次元配列か二次元配列か分かってないのが原因。 {}で囲むと大丈夫だよ。
おっぱいかっこのことですねw
>>399 なるほど!
格納はちゃんとできてたんだけど表示がうまくいってなかったんですね。
分かりやすい解説ありがとうございました。
402 :
nobodyさん :2006/08/14(月) 12:24:56 ID:QXYq1pPL
Windows XP SP2 PHP 5.1.4 の環境で strtolower で誤変換が発生するみたいだが これってバグかな? <?php $str = '検索エンジン'; echo strtolower($str); // 「検索トンヘン」と表示される ?>
>>402 マルチバイト文字対応じゃない関数使えば当然
mb_strtolower使え
>>402 mb使うのがまず第一だけど、それ以前に文字コードの知識もなしでShift_JIS使っちゃダメだよ。
>>402 Shift_JISで「検索エンジン」はアスキーコードで以下のようになる。
140 159 141 245 131 71 131 147 131 87 131 147
でだな、途中の71と87はGとWのアスキーコードなんだよ。
その部分はアルファベットとして見られて、小文字に変換され、103(g)と119(w)になる。
140 159 141 245 131 103 131 147 131 119 131 147
という値が結果として返る。これはShift_JISで「検索トンヘン」となる
407 :
402 :2006/08/14(月) 12:49:08 ID:???
>>404 echo mb_strtolower($str, 'SJIS');
で出来ました。ありがとうです
>>405 精進します
おっぱい括弧といい、検索トンヘンといい、ここは実に愉快なスレですね。
フォームからREQUESTで値を取得するとき、 文字列の末尾に「表」という漢字があるとなぜか「\」が付加されてしまいます。 例えば、フォームに「あいうえお表」と打ったとすると、実際に取得する値は「あいうえお表\」となってしまうのです。 他の漢字やひらがな、カタカナ等では発生しないようです。 該当部分のソースはこのような感じです。 $title = $_REQUEST['title']; <input name="title" type="text" id="title" value="<?php echo $title; ?>" /> どのようにすればよいのか全く検討もつかず、こちらでお伺いした次第です。 何卒ご指南のほどをよろしくお願いいたします。 サーバー : IIS 5.1 PHP : 5.1.4
>>409 Magic Quate GPC を切って下さい。
>>409 安易にREQUESTを使わないで下さい
>>409 安易にShift_JISを使わないで下さい
413 :
409 :2006/08/14(月) 16:47:52 ID:EO88qrv9
先ほどはsageてしまい申し訳ありませんでした。
>>410 既知の問題だったのですね。
ありがとうございます。
>>411 そうですね。REQUESTは危険かもしれません。
変更したいと思います。
>>412 PHP等のスクリプトではやはりShift-JISは適さないのですね。
大人しくUnicodeかUTFにしてみます。
無知なもので、おかしなコーディングもあったようでしたが、見事解決することができました。
質問と関係のない部分まで指摘していただき非常に助かりました。
下らない質問に返答していただき、ありがとうございました。
web上からcgiプログラムを保存する方法はありませんでしょうか? iriaなどを使っても上手く保存できません。 ご教授願います。
プログラムって実行前のプログラムコードか?そりゃセキュリティホール突いてクラッキングしたいって話か?
久しぶりに聞いたIriaって
んーphpにかすってもいないしw サーバサイドで動くスクリプトがDLできたら俺は恥ずかしい思いをすることになる。 やめてくれ
418 :
414 :2006/08/14(月) 17:21:04 ID:???
>>415 やはりそういう事になるんですね。
諦めます。板汚し失礼しました。
そんな事されたら$oppaiとか$mankoとかいう変な変数名がばれてしまうじゃないかー
phpMyAdminでrootでは入れるのですけど自分で作ったユーザーで入ることができません。 rootで入って権限のところを見るとユーザーはちゃんと作成されていました。 何が原因なのでしょうか・・・
>>420 config.inc.phpのauth_type設定がっって程度の話じゃないの?
>>420 その自分で作ったDBユーザの権限に
見ようとしてるDBへの権限がないんじゃないの?
一定時間内の同一人物による連続投稿をはじくには、 IPアドレスを記録しておくのが良いでしょうか?
424 :
nobodyさん :2006/08/14(月) 20:10:38 ID:FIfhz0i4
あるPHPソースに、 <form action="./" method="POST"> とありました。手ものPHPの入門書には、<form action=のあとにはhoge.phpというふうに phpファイル名を指定していたのですが、 上記の<form action="./" method="POST">の場合は、どのファイルにPOSTされるのでしょうか? サーバOS:Windows2000 Webサーバ:Apache2 PHP:5.1.4 です。
index.php
426 :
424 :2006/08/14(月) 20:29:55 ID:???
残念ながら、そのディレクトリにはindex.phpはありませんでした。 その場合やはり、サーバの設定によるんですかね。
>>423 詳細な目的にもよるけど、IPアドレスによる判断はベターだろうね。
>>424 ブラウザ側は/で終わるURLに対してPOSTする。
GETで試せばURLに出るからすぐ分かる。FxのLiveHTTPHeaderでもいい。
受け取るのはApacheで設定したDirectoryIndex
だからindex.cgiかも知れないし、index.htmlかも知れない。
>>414 ホームページ丸ごとDLするソフトで出来たよ → Junshu
別にクラッキングじゃないしね
でもセキュリティかかってたらムリだよ
$a = "apple,orange,lemon"; $b = explode(",", $a); echo $b; としたとき、Arrayとでます。 結果として、appleorangelemonと出したいのですが、 echo $b[0].$b[1].$b[2]; の形式だと、配列の値が増えるに連れて大変になっていまいます。 もっとスムーズに書く方法はありませんでしょうか?
join
>>430 implodeですか。
explodeと同じものだと思い込んでいたので、見落としてました。
$b = implode("", $a)でいけそうですね。
どうもありがとうございます。
>>431 やるなら
$c = implode("", $b);
echo $c;
で、
>>429 でやりたかったことは
$b = str_replace(',', '', $a);
echo $b;
なんじゃないの?
>>432 $aの部分を配列にしました。
書き忘れててすみません。
$a = array("apple", "orange", "lemon");
$b = implode("", $a);
一応配列にいれたものを表示したかったので、
あんな感じのソースになりました。
file_get_contentsみたいに一つの変数にHTMLの内容が丸々入ってる場合 その変数から1行1行取り出すにはどうすればいいですか?
>>434 fopenしてfgets
fileで配列に格納
>>434 $lines = explode("\n", $file);
438 :
423 :2006/08/14(月) 22:54:57 ID:???
>>427 殿
ありがd
質問ついでに・・・・
この場合、IPアドレスとホストだと、どっち記録しておくのがよりベターでしょうか?
どっちも変わらないのでしょうか?
440 :
nobodyさん :2006/08/14(月) 22:59:09 ID:WuPf1wcI
Web作成板で誘導されたのでこっちへ来ました。 XHTML文書内でPHPを使う時のXML宣言のことなんですが、 <?="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"?> ↑こうやってやってみたのですが、最初の行に改行が入ってしまいます。 最初の行の改行を取り除くにはどうするべきでしょうか?
>>440 <?="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"?>
が書かれている前に改行が入ってるない?
違うなら、動作環境教えて
>>438 普通はIPアドレスを使うな。
ホスト名は無駄に長いし、サーバーによっては自動で逆引きできないし、
逆引きできたとしてもしない方が負荷は低いし。
>>440 BOM が付いてるから、じゃなかった? 最近似た話題があった。
444 :
423 :2006/08/14(月) 23:19:01 ID:???
レス早!!
>>442 殿
更に詳しくありがd <(_ _)>
445 :
440 :2006/08/15(火) 00:05:55 ID:???
447 :
446 :2006/08/15(火) 00:09:10 ID:???
使用→仕様
>>445 いや、だから、BOM を付けずに保存してみなよ。
どんなエディタを使っていても BOM を付けることは出来るよ。
ちょっとでも開発みたいなことするなら、自分のwindowsに環境作って試してから質問すれば? と禿しく思う
禿同
改造レベルでも、レンタルサーバーでいちいちテストされるのは迷惑だな。 無限ループでもさせたらどうするんだ。
CGIじゃないんだからset_time_limit(0)とかされない限りタイムアウトで終了するだけじゃ? 無限ループよりリソース食いまくりの方がこえー。
453 :
nobodyさん :2006/08/15(火) 07:29:31 ID:tOktgI2K
すみません、くだらな過ぎると思いますが・・・、 定数ってどういうときに使うんですか?変数じゃだめなんですか? 定数の機能(役割?)は変数の機能の一部・・・というか変数に包括されているように感じて。 マニュアルとか解説本を読み始めたばかりなんですが・・・。
機能的にはそのとおり。プログラムが実行してしまえば差はない。 ただし、コード中で「値を変えるな」もしくは「値には意味がある」といった意図を込める時に使う。 例えば途中で値が差し替えられてないことを前提にコードが読めるので読みやすくなる。
一時保存(tmpfile)した画像を表示したいのですが、 画像がtext形式になってしまいます。 画像として処理してくれる関数などありますでしょうか? スクリプト $fp = tmpfile(); fwrite($fp, $img); rewind($fp); $temp = fread($fp); <img src="<?php $temp ;?>">
456 :
453 :2006/08/15(火) 08:08:13 ID:???
>>454 レスどうもです。
定数は値が変わらないことを明示させるために使うんですね。
コードの読みやすさとかにまで意識が回りませんでした。
ありがとうございました。
457 :
nobodyさん :2006/08/15(火) 09:59:53 ID:OANfrr1E
MbString関連の質問です。 現在の設定は Multibyte Supportenabled Multibyte string enginelibmbfl HTTP input encoding translationenabled Multibyte (japanese) regex supportenabled Multibyte regex (oniguruma) version3.7.1 mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1. DirectiveLocal ValueMaster Value mbstring.detect_orderautoauto mbstring.encoding_translationOnOn mbstring.func_overload00 mbstring.http_inputSJISSJIS mbstring.http_outputSJISSJIS mbstring.internal_encodingEUC-JPEUC-JP mbstring.languageJapaneseJapanese mbstring.script_encodingno valueno value mbstring.strict_detectionOffOff mbstring.substitute_characterno valueno value といった感じで設定していて、MySQLはujisを使用してます。 この間まで、MySQLのデータを問題なく表示できたのですが、最近文字化けするようになりました。 おかしくなる前にMySQLを5.0.24にアップしたので、それが原因かもしれませんが・・・ もしご存知の方がいらっしゃったら教えてください 環境はMacOSX10.4.7 Apache2.2.2 PHP 5.1.4 MySQL 5.0.24 です。よろしくお願いいたします。
458 :
nobodyさん :2006/08/15(火) 10:00:22 ID:7B9Fe4ha
フォーム入力されたデータの、DBに入れる前の書式チェックで質問です。 ・ブラウザ上のJavascript ・submit後のPHP(Validateクラス等)のメソッド ・INSERT時のDBが履くエラー ↑の3つが主なチェックタイミングだと思うんですが、 2回目のPHPでのチェックを無くして、3つ目のDB登録時に戻ってくるエラーコードで ケース文で対処するのはセキュリティ上何か問題ありますか? PDO等の接続抽象オブジェクトのバインド変数使う前提ですが・・・
>>453 数字などを分かりやすくする場合
定義済みの定数はほとんどそう
LOCK_EXとかSEEK_SETとかよく使うけど実際の数字は知らないし
461 :
nobodyさん :2006/08/15(火) 11:07:13 ID:OANfrr1E
>>459 早速の回答ありがとうございます。
ただ、わたしは5.0.22からのアップデートなので、いわゆる4.1でのcharacter関連の変更とは関係ないと思います。
5.0.22に戻すのもちょっと嫌ですが。
PHPをCGIとして動作させている場合、 apache_request_headers() と同じことを実現するにはどうすればいいでしょうか? Apacheのモジュールとしてでしかこの関数は機能しないようです。 へるぷみー
>>462 $_SERVERとか$_ENV見れば大体分かると思うけど
>>455 HTMLから勉強しなおせ。
>>458 Javascript → ユーザビリティの向上
Validator → PHPスクリプトが期待するデータ形式かをチェックし、実行時エラーや想定外の動作を回避
他言語構文(SQL, HTMLなど)構築時 → 他言語での特殊文字を排除し、SQLインジェクションやXSSを回避
DBが吐くエラー → DBとの不整合をチェック
Webセキュリティに関する書籍はいくつか出ているので読んでおけ。
>>462 環境変数
466 :
462 :2006/08/15(火) 13:42:20 ID:???
<?php function emu_getallheaders() { foreach($_SERVER as $h=>$v) if(ereg('HTTP_(.+)',$h,$hp)) $headers[$hp[1]]=$v; return $headers; } ?> 本家でこれが書いてあるんですが、 全く同一の処理でしょうか? 某プログラムでこの関数を利用しても上手くヘッダーを取得できない ようです。 apache_request_headers って $_ENVも含みますか?
>>455 画像出力とHTMLを同じスクリプトで同時に吐けないよ。
ヘッダーが違うからね。
<img src="img.php?<?=$id;?>">
とかにしなさい。
468 :
462 :2006/08/15(火) 13:52:51 ID:???
ヘッダーのCONTENT_LENGTH: 部分を取得できていないようです
>>463 探したけどみつからんかったとです
>>461 どう考えても、PHPとは関係ない質問だろう
問題はMySQLのバージョンをあげたら発生したということは
十中八九、MySQLの問題だろう
まずは、
SHOW VLIABLES lilke 'char%'
で、文字コードセットがどうなっているか確かめる
それで、character_set_server がこっちの想定してない文字コードで
表示されているのなら
ALTER DATABASE で文字コードを再設定する
character_set_client などが違う場合は
SET NAMES などで文字コードを、PHPから接続するたびに再設定しなおす
>>469 関係ないといいながらおまいさんは相当優しい
ホレタ!
>>468 Content-Lengthはrequestじゃなくてresponseだろ
472 :
nobodyさん :2006/08/15(火) 17:41:13 ID:cZ5ZgBLv
質問させていただきます。 htmlのデザイン部分はcssで分けて管理しますよね。 phpでは、html部分にスクリプトを入れて、動的な処理ができますが デザイン部分のcssはそのままですよね。 そこで、phpでhtmlを動的に処理するように、cssをphpで動的に変化させたいと考えたので htmlの<link rel="stylesheet" type="text/css" href="../style.css">部分を <link rel="stylesheet" type="text/php" href="../style.php"> のように書き換えたのですが、cssとしての効果を発揮しません。 これはhtmlの仕様で、css部分をphpで処理することはできないのでしょうか? Apacheの設定を変えて、拡張子がcssでもphpとして処理するようにすれば良いのでしょうが レンタルスペースだとそれもできませんよね?
>>472 style.cssを生成すれば
若しくはhtml内にcssを書く。別ファイルにこだわる必要あるの
>>472 いや、CSSのContent-typeはtext/cssだから。
PHP側でheader('Content-type: text/css')吐かせれば問題無いし、linkタグも書き換えろよ。
もうちょっと勉強しろよ
>>473 ありがとうございます。
>style.cssを生成すれば
の意味が良くわからなかったので『php css 生成』で検索したところ
cssのphp化という記事がHITしまして、その方法で満足のいく結果を得ることができました。
別ファイルにこだわる理由としては、作ろうとしているページが30ページくらいになる予定で
その30ページのどのページも記事が違うだけで、デザインは同じにしたかったので
毎回、html内に書くのは面倒くさいなぁ
というだけです。
あとは、管理のしやすさでしょうか?
何はともあれ、
>>472 さんの『生成』という言葉が解決に結びつきました。
ありがとうございました。
>>476 具体的にどう解決したのか手法も書いてください。
同じ疑問を思ってる人のためにならんじゃないか。
まぁまぁ。
>>476 の内容で十分じゃないか。検索キーワードも書いてるんだし。
>>476 >別ファイルにこだわる理由としては、作ろうとしているページが30ページくらいになる予定で
>その30ページのどのページも記事が違うだけで、デザインは同じにしたかったので
普通に外部cssで良いじゃん?
480 :
nobodyさん :2006/08/15(火) 18:20:32 ID:D3BJyJj0
スレ違いかもしれませんが、 fopen(サイズが大きいファイル,"r"); fopen(サイズが小さいファイル,"r"); これって処理速度は変わるんですか?
変わらんよ
482 :
nobodyさん :2006/08/15(火) 18:57:49 ID:D3BJyJj0
>>481 開くファイルが大きかろうが、小さかろうがファイル用のバッファの大きさは変わらない、ファイルを開いた時に全てメモリに展開するわけではない という理解でいいんでしょうか?
>>482 そもそもファイルオープンという処理は、ファイルをファイルハンドルに結びつける処理に過ぎない。
484 :
472 :2006/08/15(火) 19:27:14 ID:???
>>474 精進いたします。
ご迷惑おかけしました。
>>477 ----- style.php の方の変更点 -----
拡張子をcss → php
ファイルの一番最初に
<?php header("Content-Type: text/css"); ?>
を追記
これで、このファイルは拡張子がphpなのでphpとして処理され
しかし、htmlからはcssとして解釈してもらえるみたいです。
-----example.phpの方の変更点-----
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="../style.css">
となっていたものを
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="../style.php">
と書き換えるだけです。
すべてのcssをphpに書き換えるわけではなく、あくまでもファイル指定する部分の拡張子だけをphpに直すとうまくいくみたいです。
>>479 普通の外部cssだとphpとして処理してもらえないので
example.php側からの処理を受け取って、cssを書き換えたかったのです。
程度の低い質問に付き合ってくださった方々ありがとうございました。
485 :
nobodyさん :2006/08/15(火) 19:40:18 ID:D3BJyJj0
>>483 バッファ(ストリームであってるかな?)は、いつ作られるんですか?
487 :
nobodyさん :2006/08/15(火) 20:31:05 ID:lK1TSrGk
ごめん457です。 文字化けの原因はmb_convert_encodingだった。 お騒がせいたしました。
488 :
nobodyさん :2006/08/15(火) 20:51:22 ID:D3BJyJj0
>>485 では、ストリームとはなんなんでしょうか?
連続した区切りのない入出力のこと
class B { function getB() { return "nullpo"; } } class A { var $elements = array(); function newElement() { $element[] = new B; } function getCurrentElement() { echo end($this->elements)->getB(); } } > end($this->elements)->getB(); こんな感じで配列にはいってる最終の要素のメソッドを呼び出したいんですが うまくいかないですー どこがおかしいかってのと どうやったらうまくいくかってのをどうかご教授ください
492 :
nobodyさん :2006/08/16(水) 01:05:43 ID:NkNMn0ad
質問させてください。 windowsXP SP2 apache2.0 PHP 5.1.4 という環境です。 アップローダーで、必ず画像とコメントを一緒に表示させたいのですが、どのようにしたらよいでしょうか。 つまり、画像のアドレスを開くと必ず、アップロード時のコメントとセットで表示するようにしたいのです。 以下のような形で試したのですが、画像ではなくバイナリが表示されてしまいます。 <HTML> <HEAD> <META http-equiv="Content-Style-Type" content="text/css"> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS"> <TITLE></TITLE> <body> こめんと<br /> <?PHP readfile("./files/1/1.jpg"); ?> </body> <HTML> ・flashでHTMLを読み込んで出力 ・javascriptで画像ファイルを読み込んで出力 必死扱いて他の方法を考えて探してみたのですが、やり方がわからずじまいでした。 どうかお力添えをして頂けないでしょうか。
>>491 Perlじゃあるまいし、関数の戻り値に直接->なんて演算子は使えないんじゃない?
function getCurrentElement()
{
$e = end($this->elements);
echo $e->getB();
}
でどうよ?
>>488 ストリームは概念。
データを出力する処理を連続して行う事が出来る相手が出力ストリーム
逆が入力ストリーム。
たとえばコンソールは文字出力を連続して行う事で文字列を表示できるわけだ。
ファイルの場合、ファイル名と位置を指定して読み書きが出来るが、
printで文字列を連続して出力するようなインターフェイスを間にはさむ事
によって、ストリームとして利用することも出来る。
というか、ファイルをストリームとして扱う仕組みを、だれかが作ってくれた
からそれが利用できる。そういうもの。
>>492 HTMLの基本として、HTML本文と写真は必ず別ファイルでないといけない。
同じプログラムでいっぺんに両方とも表示させようとしてもムリ
そもそもそのHTMLじゃIMGタグがどこにもないじゃんか。
<HTML>
<HEAD>
<META http-equiv="Content-Style-Type" content="text/css">
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<TITLE></TITLE>
<body>
こめんと<br />
<IMG SRC="別のPHPプログラム">
</body>
<HTML>
ってやって、その別のPHPプログラムで画像を出力させなきゃダメかと。
つーかこれ、
<IMG SRC="./files/1/1.jpg">
じゃダメなのか?
>493 やっぱそれしか方法がないんですね. どうもありがとうございました.
HTMLすら理解して無い人間がPHPをやろうとするってのが時代の流れなんだなぁ 悪い事だとは思わんが
>>497 出典は忘れてしまったが
“HTMLを取得してからプログラムの勉強に取り付け”と言って有名になった人が居たなあ。
実際、ハイパーテキストマークアップ言語はプログラム言語ではないし、何の関係があるんだろう……?
>>491 function newElement()
{
$this->element[] = new B;
}
>>495 過去ログ嫁。>455
500 :
495 :2006/08/16(水) 02:13:14 ID:???
if(hoge){ hogehoge } if(hoge) { hogehoge } どっち派?
俺も上
>>501 functionやclassならともかくifなら上。Cでもそう。
PEAR他PHPの主要開発系でも上推奨。
俺もfunctionとclassは後者。 C言語でも歴史的(というか習慣的?)な理由でそうなってる。
functionやclassでも俺は上だけど
if(hoge) { hogehoge } 見やすいのでこっち
508 :
492 :2006/08/16(水) 02:37:12 ID:???
>>494 仕組みの解説有り難うございます。
>>495 <IMG SRC="別のPHPプログラム">
こういう方法があったのですね。知りませんでした。
これを使おうと思います。
有り難う御座いました。
画像イメージアドレスへの直リンも防ぎたかったのです。
>>508 Content-Typeには気を付けてな。
うっかりするとセキュリティホールになりかねないし。
510 :
nobodyさん :2006/08/16(水) 03:07:20 ID:665idoIE
Shift_JISのWEBページから「〜」の値をスクリプト(UTF-8)に渡すとその時点で なぜかUnicodeの「〜(もう少し太くてぎざってるやつ」になってしまいます。 スクリプト自体はUTF-8で動いておりUTF-8のページから書き込んだ場合は正常に取得できます。 どういった原因が考えられますか?
>501 if (hoge){ }
ちなみに文字コードに関してはmb_convert_encodingで変換も試してみましたが駄目でした。
>>513-514 29chで見てきた。
ありがとう。
俺の選択が間違っていたとわかりますた。
周辺環境が Unicode 化されてきたからってのは分かりますが Unicode が抱えている諸問題をろくに知りもせずに 安易に UTF-8 を勧める人が最近多いと感じます。
Unicodeの諸問題が知られて無いのが気になるならここで広めてください。 最終的にEUC-JPがベストって事?
?から"♪"をとるのはわかるんだけど "♪"から?を得るにはどーすればいいですか?
?は & # 9 8 3 4 ; です
>>517 自分は結構書いてきたつもり。
「波ダッシュ問題」は文字コード変換が介在しなければ表に出てこない問題なので
UTF-8 で統一してれば問題なし、とでも思っているんでしょう。
自分は EUC-JP が無難だと思いますがね。
ただ、EUC-JP で統一出来ない事例(携帯向けなど)も多々あるので
どれが最適かってのは一概には言えないと思います。
521 :
nobodyさん :2006/08/16(水) 05:06:18 ID:GaCZ9Sq1
あれからぐぐってみたりいろいろしたんですが、 ストリームの理解ってこんな感じでいいんでしょうか? 可変幅のメモリ領域である(そもそも大きさという概念がない??) ストリームの開始位置がファイルポインタに記憶される ストリームから実際にファイルにフラッシュする作業は自動的に行ってくれる
>>521 様々なリソース(ファイル、文字列、バッファ、ネットワーク上のオブジェクト etc)に対して、
統一された手段で(主にシーケンシャルな)アクセスを提供するのがストリームという概念。
ま、理解出来るか知らんけどがんばれや。
セッションについて質問なのですが、 session.cookie_lifetimeを「0」に設定しているのに 時間が経つとセッションが切れてしまいます。 その時によってどれくらいの時間で切れるかはまちまちなのですが、 早いときには20分程度で切れてるようです。 セッションが切れる時間の長さから考えて、 session.gc_maxlifetime(値は1440)あたりが関係していそうな気もしますが、 session.cookie_lifetimeの設定(ブラウザ閉じるまで)はなぜ無視されちゃうのでしょうか・・・。
524 :
523 :2006/08/16(水) 08:12:26 ID:???
補足ですが、最後のアクセスから20分程度でセッションが切れる場合もあれば、 24時間経っても切れてない時もあります。
>520 UTF-8の問題って何?
>>523 ん?
session.cookie_lifetimeっていうのは
session id をcookieに保持しておく時間だったような。
でもって「0」は特殊な意味を持っていて、ブラウザ閉じる
とcookie破棄を意味するから、「0」を設定している限り
「ブラウザを閉じる=セッション切れる」を意味するはず
ですけど?
session.gc_maxlifetime は、 session id に結び付けられたセッションデータ を破棄するまでの時間だったかな ただ、その時間を経過すれば「必ず」破棄されるわけでは なかったような。gcなんとかって他に定義あるでしょ? そこでgcを行う確率を設定できたような
>>521 ストリームとは プログラミング
とかでぐぐった?
>>522 が書いてる通り
概念だから、まぁ、こんなもんか。ぐらいの理解で
いいんじゃないの。
ファイルからデータを読む。ってごくごく普通に言うけど、 実際には、HDDという機械の動きだから、1byte読むと命令 してもすぐには読めない。命令→待ち→データを受取る というような「制御」を行う必要がある。OSがストリームとか いう概念で、そのへんをうまくオブラートに包んでくれてる。 OSレベルで言うところのストリームってこんな感じかな
531 :
523 :2006/08/16(水) 09:34:15 ID:???
>>526 あ、分かりにくかったかもしれませんが、
>>523 、
>>524 の状況は全て「ブラウザは一切閉じない」状況です。
ずっとブラウザを開き続けているのに、ときどきセッションが切れてしまうんです。
>>527 gcの確率は1000分の1にしてあり、なおかつ、セッションを使って
同時にログインするユーザー数は2(まだテスト中なのでどちらも自分でログイン)しかないので、
ガーベッジコレクションの影響は無視できる程度、と私は解釈しているのですが・・・
>>523 session.cookie_lifetime=0
session.gc_maxlifetime=1440
session.gc_probability=1
session.gc_divisor=1000(確率1/1000)
で、ブラウザを開きっぱなしにしていると約20分程度で
セッションが切れる。ってことですね。
なんでだろ?
ブラウザのcookieの有効期限確認してみるとか
PHPデフォルトであるなら/tmpのセッションデータファイルの
タイムスタンプみてみるとか
あっ、PHP4.2.2以前でWindowsでFatとか条件がハマれば
早く切れるバグってのがあったぽいね
ん。。 LinuxとかならCronで/tmpを掃除してる処理が動いてたりして
セッションデータファイルが消えちまってるのか cookieが取得できねーのか そのあたりを切り分けろ
535 :
nobodyさん :2006/08/16(水) 10:34:55 ID:GaCZ9Sq1
レスありがとうございます。 ストリームは、概念であるという事は理解できました。 ストリームが具体的にどういうものになるかは、状況や環境よって、違うということですよね? でも、多くの場合、それはメモリ上のバッファのようなものでしょう?
536 :
nobodyさん :2006/08/16(水) 10:37:44 ID:GaCZ9Sq1
537 :
523 :2006/08/16(水) 11:22:32 ID:???
>>532 おっしゃる通りの設定です。PHPのバージョンは4.3.1です。
また、スクリプトが動いているのはLinuxで、クライアント側はXPです。
で、ブラウザ側になぜかCookieが見当たりません。他のサイトのCookieは確かにあるのですが、
自分が今問題にしている自サイトのCookieファイルが保存されていないようです。
でも実は以前にはセッションを開始すると確かにCookieがブラウザに保存されていたのですが、
あるタイミングから保存されなくなってしまいました。
おそらくクライアント側パソコンの「マシン名」を変更した時からだと思います。
しかし、Cookieファイルが見当たらないにも関わらず、「ieHTTPHeaders」を使って通信内容を確認してみますと、しっかり
「Cookie: test-session=6e24cc246481866c7d52f*********」といった感じで、セッションIDが正しく送信されています。
セッションの動作(ログインやログアウトなど)も期待通りの動作ですが、前述のように時々勝手にセッションが切れてしまうのが唯一の問題です。
もう何がなんだかワケがわかりません・・・。
>>535 変な理解に仕方だな
ストリームという概念を、実装するときにメモリを利用するけど
ストリーム=バッファ ではないよ
車を動かすのに、エンジンを使用するけど
「多くの場合、車はエンジンのようなものでしょうか?」
と聞いているようなものだ
539 :
523 :2006/08/16(水) 11:24:50 ID:???
>>533 cronでは掃除しておりません。
>>534 セッションが意図しないタイミングで切れてしまった時にsession.save_pathで指定されている
ディレクトリを確認してみましたところ、セッションデータファイル自体が
消えてしまっているようです。
>>532 その設定だと、アクセスがあるごとに1/1000の確率で
そのアクセスよりも20分以上前のセッションファイルが消去される。
アクセス数が少なければ消されにくい。
また、例えアクセス数が多くても、確率で動いているので運が悪ければいつまでたっても消されない。
>>537 期限が0のクッキーは保存されない。そういう仕様。
>>538 ストリームを実現するために、バッファが使われる事がある という事ですね?
ありがとうございました。
まず4.3.1というバグありまくりのからバージョンアップ汁
544 :
523 :2006/08/16(水) 13:37:07 ID:???
>>540 > そのアクセスよりも20分以上前のセッションファイル
これは「ファイル生成時刻が20分以上前の」セッション・ファイルのことだと解釈して良いのでしょうか?
> 期限が0のクッキーは保存されない
とのことですが、ではその場合ブラウザはどうやってセッションIDを(一時的にでも)保存し、どうやってサーバーに対して送信しているのでしょうか?
前述しましたように「ieHTTPHeaders」で確認しますと、たしかにセッションIDはローカルのどこかに記憶されているようです。
Cookieファイルが見当たらないのに値が保存されているということは、あとはメモリ上に確保されている?というくらいしか思いつきません。
545 :
523 :2006/08/16(水) 13:41:27 ID:???
>>542 >リロードしてるうちに普通にgc起動
私もその可能性くらいしか思いつかないのですが、
なにしろgcの確率が1/1000で、しかもアクセス回数は自分だけなので
せいぜい数十分の間に数回〜数十回程度です。
なのに、こうした数字の割には、頻繁にセッション切れが起こっている気がします。
それと、「session.gc_divisorはPHP 4.3.2以降」という記述がそのページに見当たらないのですが…??
念のため私の環境でphpinfoをやってみましたが、たしかに4.3.10でsession.gc_divisorの項目も存在しています。
546 :
523 :2006/08/16(水) 13:43:43 ID:???
>>543 実は鯖にPleskが入っておりまして、
なかなか怖くてPHPのバージョンアップに踏み切れません・・・
(Plesk自身がPHPで構築されているため、いろいろ依存関係とかあるらしいです)
どなたかPlesk環境でPHPのバージョンアップを経験された方いらっしゃいますでしょうか?
randで1〜20まで乱数を生成して、 10以下の場合は終了で、 11以上の時は10以下になるまで乱数の生成をやりなおし、 10以下になったところで終了し、 何回乱数を生成しなおしたかをカウントしたいのですが、 どのように書いたらいいのかわかりません・・・ $rand = rand(1, 20) if($rand <= 10) { echo "終了"; } elseif($rand >= 11) { ここでループの処理? } どなたかお助けくださいorz
function hoge($a, $b) { $rand = rand($a, $b); if ($rand <= 10) { echo $rand; } else { hoge($a, $b); } } 試行回数調べたいなら静的変数使うといい。
>>547 夏休みの宿題か?
while(1) {
// 乱数生成
// 何回生成したかカウントアップ
// 10以下だったらbreak;
}
>>548-549 どうもありがとうございます。
早速ソースを参考にさせていただきましたが、
まだ思ったとおりにいかないので、
このソースを元に試行錯誤してみたいと思います。
>夏休みの宿題か?
確率の計算のものがあって、どうしても計算しきれなかったので、
ずっともやもやしていて、シミュレーターでもつくって、
だいたいどのくらいの値か出してみようと思った次第ですorz
フォームから渡されたデータを 半角と全角の数字のみ 入力を受け付けるにはどうしたらいいでしょうか?
>>551 正規表現、もしくは条件分岐。普通は前者
[0-9][0-9]
553 :
nobodyさん :2006/08/16(水) 16:00:57 ID:oFrHrQOU
>>551 全角数字を半角数字に置換
後は数字かどうかのチェック(正規表現、is_なんたら関数、ctypeなんたら関数)
>>551 mb_ereg('[0-90-9]', $_POST['num']);
>>550 確率?
n回目に10以下が出る確率
1/2のn乗
てことか?これでPHPを使う意味がわからんw
実践したいってんだから止める理由も無いだろうに
数学板には「King」が居るからヤダ
いまだ! 600げっと!
561 :
550 :2006/08/16(水) 19:05:28 ID:???
>>556 いいえ。確率と一言でいったので誤解を招きましたが、
実際はもっと複雑な問題なんです。
上のほうのソースは部品として使うだけなので。
他の計算部は別に作ります。
既出かもしれませんが一応ググってみて見つけられなかったので質問です。 文字列変数が、マルチバイト文字を含んでいるかどうか、の判定ロジックで ベター、もしくはベストなものってどうやるんでしょうか? とりあえず思いつくのはstrlenとmb_strlenで値が違えばマルチバイト含む、 といった判定方法くらいなのですが…
>>562 このスレではその方法がベストじゃね?でFAになってるぽい
>>562 /[^ -~]/
これに引っかかるならマルチバイト含んでる。
文字コード依存なし。
>>563 レスどもです。
とりあえず様子みながらこの方法で行ってみます。
566 :
nobodyさん :2006/08/16(水) 19:31:37 ID:BwdVe+rW
xsasというWAMPパッケージで、php_openssl.dllとphp_curl.dllを「F:\XSAS_XCP\diskw\usr\local\PHP\extensions」へ 置いて、php.iniで;を消しました。 しかし、xsas起動時つまりApache起動時に「・・・モジュールが見つかりません」 となってしまいます。
>>564 はmb関数が無くても動くけど、正規表現だから少し重いね
>>566 php.iniのextension_dirがその
F:\XSAS_XCP\diskw\usr\local\PHP\extensions
になってる?
>>568 mb関数が1文字ずつ全半角を判定するのって正規表現より速いの?
>>564 それ、アポストロフィとかあると誤判定になる
>>571 なんで?ascii(コントロールコード以外)全部入ってるような気がするけど
どこできいたらいいかわからないのでここでききます PHP + MYSQLで膨大なデータベースから全文検索したいんですが text like "%検索語%" みたいにすると死ぬほど遅いです。 レンタルサーバー(XREA)を使っているのであまりいじれないんですが どうすれば高速化できますか?
textカラムもlike演算子もチューニングの厳しいネタだなぁ… 少なくともtextにindexは振ってあるんだよな?もちろん。 とりあえずここで聞くよりDB板の方がマシそうだけど… DB以外での解決方法を模索してるのか?
ひとまず質問者はsageてID出せ
じゃとりあえずsageます
>>575 回答者がマニュアル読ませんじゃねーよ
必要な情報がマニュアルにあるなら、お前が抜粋して書いとけ
579 :
nobodyさん :2006/08/16(水) 21:34:12 ID:ShnVBp2+
ハイハイageの間違いだよね
>回答者がマニュアル読ませんじゃねーよ ?
> 膨大なデータベースから全文検索 Web鯖と別に、高速なデータベース専用鯖を持つべきです
回答するときのマニュアルのリンクはったらいけないの???
いや、マニュアルのリンク貼るのは普通。
回答者にマニュアル読ませんじゃねーよ と言いたかったと思われ
585 :
nobodyさん :2006/08/17(木) 00:05:46 ID:lrPl7LqR
>>573 1.日本語は単語の区切りが無いのでなんとか分割したい
>形態素解析(Chasen、MeCabとか)して単語に分ける
2.MySQLの全文検索は日本語に対応していない
>1で解析した文を16進とかにして保存する。検索するときも文を
形態素解析して16進に変換してFullText検索する
連鯖ではいろいろな面でかなり辛そう。
参考サイト:
http://www.ironhearts.com/diary/archives/000868.html 連鯖だと全文検索したいフィールドをテキストに落とすことを考えて
テキスト全文検索(kakasiとかNamazuとか)で検索するてのが現実的かー
>>585 ヒップやウエストに理想もへったくれもあるか
データ型を調べる関数はありますか? 具体的には、ある値のデータ型が「int」かどうかを調べたいのですが…… よろしくです。
>>589 どうもありがとう。
マニュアルのどこを見てよいのか分からなかったであります。
「変数操作関数」だったのね。
必死に数学関数を見て探していた……orz
591 :
585 :2006/08/17(木) 00:47:33 ID:lrPl7LqR
>>587 理想ヒップは身長×0.53
理想ウエストは身長×0.38
らしいです。
>>585 のリンク先みたいに作れませんかね??
PHPで日付を表示してみたのですが 日本時間が表示されません。 海外の時間+9時間で合わせてみたのですが それでも時間が合いません。 分とかもずれてるんです サーバーの時計が合ってないのですか? どうすれば良いですか?困ってます 教えてください サーバーはアリゾナにあるらしいのですが ほんとかどうか知りません
>>591 ほれ
<?php
$t = $_GET["t"];
echo <<<EOT
<html><head><title>理想のぼでい</title></head><body>
<form action="/" method="GET">
身長<input type="text" size=4 name="t" value="{$t}"> <br>
<input type="submit" value="compute">
</form><br>
EOT;
if ($t != "") {
echo "身長".$t."cmのばやい<br>";
echo "トップバスト:".($t * 0.525)."cm<br>";
echo "アンダーバスト:".($t * 0.423)."cm<br>";
echo "二の腕:".($t * 0.15)."cm<br>";
echo "ウエスト:".($t * 0.38)."cm<br>";
echo "ヒップ:".($t * 0.535)."cm<br>";
echo "太もも:".($t * 0.30)."cm<br>";
echo "ふくらはぎ:".($t * 0.205)."cm<br>";
}
?>
あとは何とかしろ。つかここはそういう質問はだめだかんな。
自分で作ってわからないことを質問するってのがここの掟
>>591 <?php
$niceHip = $_POST['height']*0.53;
$niceWaist = $_POST['height']*0.38;
print "理想のヒップ={$niceHip}cm<br>";
print "理想のウェスト={$niceWaist}cm<br>";
?>
595 :
585 :2006/08/17(木) 01:12:26 ID:lrPl7LqR
>>593-594 はつながっているんですか??
・・・それにしてもすごいですね。
こんなにすぐ作れちゃうもんなんですね。
>>591 理想ヒップは160cmで84.8cmか…俺はもう少し大きい方が好みだなぁ。
パンチ3/5今どうしてるかな
>>592 サーバーの時計がずれてるんならサーバーの管理者に頼んで合わせてもらわんと。
>>593 bcmath 使わなくていいのか?!(・∀・)
>>585 計算系のものならJavaScriptのほうがいいだろ
こんなもんに誰が精交を求めるのか。
こんなもんに誰が精液を求めるのか に見えた
>>544 >前述しましたように「ieHTTPHeaders」で確認しますと、たしかにセッションIDはローカルのどこかに記憶されているようです。
>Cookieファイルが見当たらないのに値が保存されているということは、あとはメモリ上に確保されている?
亀レスであれなんだがおそらくその解釈で合ってると思う。
HTTP通信をキャプチャしたらCookieの項目があった=ローカルマシンのどこかにその値がある
・・・ということなので、ファイルが存在しないのならメモリにあるとしか考えられない。
php-bcmath
よくわからんが、1/3*3がきちんと1になるのか?
速度が犠牲になることをお忘れなく。
610 :
nobodyさん :2006/08/17(木) 16:13:29 ID:FtiwPZNr
>>593 を設置するには2つファイルが必要ですか??
>>608 それはできません
浮動小数点の誤差というのは
echo floor((0.1+0.7)*10);
が8ではなく7になるという現象
>>610 あのソースをコピーしてメモ帳とかのエディタに貼り付けて、
test.phpっていう名前で保存して、
サーバにアップロードして、test.phpにアクセスすればOK。
もちろんPHPが使えるサーバじゃないとだめ。
っていうかこのソースパースエラー出るよ。
613 :
nobodyさん :2006/08/17(木) 16:31:54 ID:FtiwPZNr
・・・やってみたんですが変になります。。。 パーミッションとかいじりますか??
614 :
PJP :2006/08/17(木) 16:38:31 ID:Ex5q979l
$logfile='1.log'; $lines = file($logfile); $countline=count($lines); これで$countlineが常に1になってしまいます。 データは以下のように保存しています。 $logdata='テスト'; $fp = fopen ($logfile, "w"); fputs ($fp, $logdata); for($i = 0; $i < $countline; $i++) fputs ($fp, $lines[$i]); fclose ($fp); 1.logのファイルの中にはテストが溜まっていってるのですがcount()がいつも1を返します。 ご教授いただければ幸いです。
>>613 どう変なのか書かないと状況もなんもわからんのだが
616 :
nobodyさん :2006/08/17(木) 16:55:03 ID:FtiwPZNr
>>616 拡張子はhtmlじゃなくてちゃんとphpにした?
あとサーバにphpが入ってないと使えないよ。
618 :
nobodyさん :2006/08/17(木) 17:02:50 ID:FtiwPZNr
はい。phpになってます。 infoseekの無料の奴なんですけど大丈夫ですか??
やれやれ
>>618 infoseekじゃPHPは使えないからJavaScriptかPerlで書くしかない。
これが噂に聞く夏厨か?
んもー、回答者だって酷いくらい「適当に」書いてあるんだよ。 それでも動くと言えば動くかも知れないが、実用性ゼロ。 しかも質問者も基礎の基礎をすっとばして…… なんでそんな他力本願なの?
623 :
614 :2006/08/17(木) 17:21:22 ID:Ex5q979l
count()がいつも1を返します。データはlogを開けると10回書き込みしたら10回分 テスト,テスト,テスト,・・・と10回分のデータが記憶されています。 これをfile()で呼び出しその要素をcount()で数えたら9もしくは10あたりを返すのじゃないのですか? いつもいくら書き込んでも要素数1を返します。
>>614 $logdataを書き込むとき最後に改行も書き込む
ファイルオープンは"w"より"wt"がベター
625 :
614 :2006/08/17(木) 17:27:01 ID:Ex5q979l
改行とは\nですか?
>>625 そうだよ
"wt"とテキストモードで開けばWindowsなら自動的に\r\nに変換して書き込まれる
読み込みも\r\nが\nに変換されて読み込まれる
Linuxではテキストモードもバイナリモードも関係ないからそのまま無変換で\nのまま読み書きされる
わからないうちはwで\nつけた方がいいかもね。まだいらない知識とみた。
>>623 の内容からするとfile()の動作を誤解してるんじゃないかと思うんだが
629 :
nobodyさん :2006/08/17(木) 17:37:16 ID:fBR2tTe/
質問です 動的なページで、そのページのURLを取得する関数ってありますか?
630 :
614 :2006/08/17(木) 17:42:46 ID:Ex5q979l
\nつけても要素増えませんでした。 file()って配列を返すんじゃないんですか?
$_SERVER['PHP_SELF'];
632 :
614 :2006/08/17(木) 17:52:37 ID:Ex5q979l
\nで解決しました。ありがとうございました。
634 :
nobodyさん :2006/08/17(木) 18:03:05 ID:fBR2tTe/
>>631 $_SERVER['PHP_SELF'];
でやってみました。
たとえば
aaa.php?key=%EF%BC%92%E3%81%A1%E3%82%83%E3%82%93%E3%81%AD%E3%82%8B
↑
だと
aaa.php
までしか取れないのですが
全部取得できる方法無いですか
マニュアルを読まない奴はだいっきらいだ
>>633 なんか見るからに穴だらけだし、
管理しきれないなら閉鎖すればいいじゃん。
わざわざここに来られてもどうにかできるもんじゃないしスレ違い。
荒らしたやつのIP調べて該当プロバイダに出せばいい。
637 :
634 :2006/08/17(木) 18:15:20 ID:fBR2tTe/
早く教えろ!!!
phpinfo() でも読んで、どうすれば全体取れるか考えろよ
いい回答が返ってこなくて質問者が荒らしになる瞬間
640 :
軟式PHP :2006/08/17(木) 18:30:49 ID:???
>>635 ゲドネタわろたw
>>634 落ち着け。638がいうようにphpinfo()を実行して凝視すれば答えがある。
641 :
634 :2006/08/17(木) 18:42:14 ID:DaHzwuB7
出来た!!! ありがとぅぅぅぅぅう
642 :
634 :2006/08/17(木) 21:31:43 ID:???
うぅぅ、やっぱり出来ませんでした><
643 :
634 :2006/08/17(木) 21:49:08 ID:???
なぁぁぁんだ、簡単ジャンっっ!!!
>>633 晒したのはここの住人じゃなくて「拓海」とかいうガキ
晒されたらすぐ荒らされるようなサイト運営に問題があるとしか思えないな
647 :
nobodyさん :2006/08/18(金) 01:51:06 ID:jkLvf1gx
>>621 夏だなぁ厨 【なつだなぁちゅう】
夏に暴れる人を放置ができず、とにかく「夏だなぁ」と言い出し、
それによってなぜか相手より優位に立ってると思い、
荒れの元となりスレ住民全体に迷惑をかける存在。
【特徴】
・とにかく文中に「夏だなぁ」を入れないと気がすまない
・スレの流れや空気を読めず、反応してしまう
・普通のスレ住人は夏厨を放置しているのに自分だけが過剰に反応してしまう
・夏厨に反応している時点で夏厨と同類であることに気づいていない
>>633 厨房の巣窟になっとるがな。成り済ましOKのヘボイ掲示板使ってるからだよ。
$Serial= $this->session->get('UserSerial') Ethnaで上記のような書き方でセッションに入ってるシリアルをとったりしてるんですが この「session」っていうのは変数?定数?関数?のどれになるんでしょうか?
変数
>>651 レスどうもです
$ありの変数とどう違うんでしょうか?
オブジェクトの中でユーザ定義した変数かそうでないかの違い
&$hoge みたいに、変数の前に&がついてるのってどういう意味?
リファレンス。
>>658 嫁ってこと?&とかで検索できないんだけど
「リファレンス」とわざわざ書いてあるのに記号で検索ですか
リファレンス本を読め、という勘違いでしょう。 正しくは「リファレンス本でリファレンスの章を読め」
663 :
nobodyさん :2006/08/18(金) 11:15:26 ID:/SUvBA3A
YahooやInfoseekの会員登録画面を作りたいのですが
(参考:
https://register.www.infoseek.co.jp/RegistConfirm.html 入力エラーの表示がすごく気に入っています
ページ構成方法もさることながら、エラー制御方法で悩んでいます
1)ID、Password、個人情報入力
↓
2)登録ボタン
↓
3)別htmlに、エラー表示が追加されている(1)のページを表示
↓
4)エラーなくなるまで繰り返し
↓
5)登録完了
どんな制御方法がいいのでしょうか
また参考になるサイトあればおながいしまつ
フィッシングでつか?
665 :
nobodyさん :2006/08/18(金) 11:24:32 ID:/SUvBA3A
>>664 そんなことはしません
データ登録システムのフロント部分で参考にしたかったのです
>>665 制御というか、こんなのは関数や構文の問題ではない。
お前にはプログラムは無理だ。あきらめろ。
667 :
nobodyさん :2006/08/18(金) 11:38:27 ID:/SUvBA3A
>>666 俺もそう思ったんだけどさ、実際に書こうとすると難しいのよ
クマっている
クマってるってなに? ふざけてるの?
669 :
666 :2006/08/18(金) 11:42:40 ID:???
>>667 最初に、POST内容のエラーチェックをして、
エラーがあるならその内容を上部にまず表示
(strErrorMessage等に書き溜めておいて、後でHTMLを書き出すときに該当箇所に書き出す)
そしてエラーがない項目をフォームにセットしたHTMLを書き出せばいいじゃないか。
1.初期処理 2.POST内容のエラーチェック 3.エラーがあるなら、エラー内容を表示した登録画面を書き出し終了。 4.エラーがないなら、登録処理(もしくは一旦確認画面を表示するか)
671 :
nobodyさん :2006/08/18(金) 11:48:34 ID:/SUvBA3A
>>669 いや、そこは問題ない
俺の質問が漠然としすぎたのが問題だった
・入力するテキストフォームの"すぐ下"に「文字数がオーバーしています」と
エラー表示させ、テキストフォームは空白(クリア)
・エラーでないテキストフォームは、入力済みになっている
JavaScriptを使うのはできるだけ回避したい(ブラウザ面倒だから)
>>671 それはいい仕様だと思うが、669が問題なくて、なぜそれができないんだ?
>>671 その通りの事をプログラムでするだけ…。
入力された値を、エラーのものは消す、エラーでないものは復帰させる。
エラーのものはエラーメッセージを表示する。
そんだけ。
if (strlen($message) > MAX_LEN){ echo "<input type=text name=message value=\"\" maxlength=".MAX_LEN."><br>\n"; echo "<font color=red>文字数がオーバーしています</font><br>\n"; } else { echo "<input type=text name=message value=\"".$message."\" maxlength=".MAX_LEN."><br>\n"; } エラー含有前提だが、こんな感じではだめなのか?
最近のフレームワークなら一瞬でできそうな処理だな
676 :
nobodyさん :2006/08/18(金) 12:05:16 ID:/SUvBA3A
みんなサンクス だが、そんなところは問題ないんだw って、俺、整理つかん 俺のソース見ると無限ループおこしている 一度、吊って頭冷やしてみる
DBに保存されてるテキスト(たとえば日記とか)を 表示させるときに、通常はhtmlspecialcharでエスケープしてます。 でも、一部の特殊文字(ハートなど)だけはエスケープせずに表示したいのですが、 これを実現するにはhtmlspecialcharをかけた後に、目的の特殊文字のコードだけを エスケープ前の状態に再変換するような関数を自作しておくしかないでしょうか?
お前、頭悪すぎだそりゃw
>>677 preg_replaceなんかを使って置換していくのがベストだと思うぞ
681 :
nobodyさん :2006/08/18(金) 12:47:27 ID:/SUvBA3A
>>678 すまんな。もう頭おかしくなっている
オシムと直志のせいで頭が整理つかん
ちと、仮のやつをこしらえてURLさらすんで暇になったら教えてくださいな
682 :
677 :2006/08/18(金) 12:53:11 ID:???
>>680 やはりそうですか。。。
地道に正規表現や置換関数などを使って、
任意の特殊文字だけをエスケープ前の状態に戻す関数を作ろうと思います。
入力値チェックで数字のみを使いたいのですが、 preg_match("/^[0-9]/", $hoge)でやった場合、 123gggなんかも123として扱ってしまいます。 どうかいたらいいのでしょうか?
>>684 いやぁ、特殊文字が一つや二つだけなら簡単ですけど、
全てに対応しようと思うと億劫ですよね。。。
納期間にあわなxふじk>< たすけtれwn
ちょっとこいつを見てくれ "一"と"龠"はもちろんいけるが "募"とか"集"とか漢字を判定できないんだ どう思う? if(ereg("[一-龠]",$name)){ echo "漢字だよ"; exit; }else{ echo "漢字じゃないよ"; exit; }
>>683 その程度なら、正規表現よりもis_int() とか is_numeric()使った方が良いと思う
>>688 でもmb_eregにしても反応しないんだ
どう思う?
691 :
nobodyさん :2006/08/18(金) 14:23:22 ID:xIt7iz8d
他のページ(NOT管理下)を取得して、そのページにある好きな文字列を自分が管理するページに表示したいのですが、 詳細が乗っているサイト若しくはやり方を教えて下さい 言語はperlのみ使えます
695 :
nobodyさん :2006/08/18(金) 14:30:57 ID:xIt7iz8d
>>693 え?w
違いますよ
翻訳サイトでページ翻訳ってあるじゃないですか
ああいうことがしたいんです
>>691 webサイト制作初心者板にいたやつだな。
なんでPHPのスレでPerlの質問をするんだハゲ。
698 :
nobodyさん :2006/08/18(金) 14:38:02 ID:xIt7iz8d
>>696-697 すいません、「下らねぇ質問はここに書き込みやがれ」しか見てませんでした^^;
>>683 年齢とか、個数とかの数値であれば、
$hoge = $hoge + 0;
とやって、強制的に数値にしてやるといい。
相対パス指定がうまくいきません。 main.php require "hoge/Calc.php" hoge/Calc.php require "lib.php" hoge/lib.php hoge/test.php require "Calc.php" hoge/フォルダ以下でひとつのシステムを作っています。動作確認のために hoge/test.php からCalc.phpを呼び出して利用した場合は動くのですが、 トップのmain.phpから相対パスで呼び出そうとすると、lib.phpの場所が 問題となって動きません。 実際にはhoge/Calc.phpはmain.phpだけではなく、いろんなフォルダのいろんな ファイルから呼び出されるのですが、どうパス指定してやればいいのでしょうか?
>>699 関係ないスレで質問したのにわざわざ答えてくれて本当にありがとうございます
そのページを参考にして頑張ってみたいと思います
では失礼いたしました
>>701 なるほど main.phpからみるとlibは同一フォルダでないからな。
絶対パスにしてはいけないの?
>>701 include_pathに/hogeを追加してやれば
どのファイルからでも/hogeからの相対パスで
/hoge内のファイルをロードできる
ユーザー入力されたテキストのうち、 URL部分だけをハイパーリンクにするにはどうしたらいいですか? いま考え付く方法は、 「httpから始まる文字列を、全角文字が現れるまで正規表現で抽出」 そしてその文字列にリンクを張る・・・という感じですが、 もっと良い実装方法などありますでしょうか? 専用の関数があると便利なのですが。
そのへんの掲示板のサンプルソース読めばパターンいっぱいあるだろうに。
そもそも「正規表現」で検索すればみつかるんじゃないの?
708 :
701 :2006/08/18(金) 15:16:39 ID:???
>>703-704 ありがとうございます。include_pathのほうはいじる権限持ってないので、
絶対パスでなんとかしてみます。
>>708 ini_setでソースから変えられるよ
ini_set('include_path', $path);
711 :
nobodyさん :2006/08/18(金) 15:24:29 ID:Whin3OBF
mkdir関数で新しくディレクトリを作ろうとしているのですが Warning: mkdir() [function.mkdir]: Permission denied in とerrorが出て作成できません。 PHPはこれです。 <?php mkdir ("hoge", 0705); ?> よろしくお願いします。
>>711 そのサーバはmkdir使えるのか?
とりあえずCGIで動かしてみ。
>>711 スクリプト自身があるディレクトリのパーミッションを707とかにしないとだめだろ
それとセーフモードはOffかい
714 :
nobodyさん :2006/08/18(金) 15:44:30 ID:Whin3OBF
>>712 xreaのs225なので使えます。
>>713 >スクリプト自身があるディレクトリのパーミッションを707とかにしないとだめだろ
707にしたらできました。ありがとうございました。
上にフォームについて引き続き質問です ようやく整理がついてきました chinpo.html上のフォーム入力を行い、【登録】ボタンを押す ↓ hoge.phpに飛び、各フォームのエラーチェックスクリプトが動く ↓ hoge.phpが表示されエラー箇所が明示される ↓ 修正後、【登録】ボタンを押す ↓ 正しければkakunin.htmに飛び確認画面が表示される もし間違いだったらどこへ飛べばいいのかな? hoge.phpに今いるわけで、新たにhogehoge.phpに飛ばせると無限にphpファイルが必要になる だから、再度、hoge.phpに飛ばせるべきなんだが、どのようなスクリプトを書けばいいのでしょう?
>>715 あきらかに力不足でしょ。
自己満足で作ってるなら別にいいけど、
何かのシステムに実装するとか、使うつもりならば、
登録した人が悲惨な目にあうのでやめてください。
>>715 まずは無限にphpファイル作ってみよう。自分で満足できる所まで
>>715 全て、hoge.phpでやってみては?
>>715 1ファイルでできるし、とりあえずフローから考えていくこった
if (POSTされたか?) {
if (エラーがあるか?) {
if (今入力画面?) {
確認画面表示
} else {
成功画面表示
}
}
入力画面表示(エラー表示)
}
入力画面表示
>>715 まず参考になるかわからんが、フォームに hiddenで現在のモードを入れておくことにする。
一番最初の登録を行う画面では、
<input type=hidden name=mode value=first>
を仕込んでおき、
登録しますか?の確認画面では、
<input type=hidden name=mode value=second>
とでもしておく。
そして、スクリプトの初期の段階で、
if ($mode == 'first'){
// エラーチェック処理
// エラーなら再度登録用画面を表示
// エラーがないなら確認画面を表示
} elseif ($mode == 'second'){
// 一応もう一度エラーチェックをする。 < ここは結構重要
// エラーなら登録用画面を表示
// エラーがないなら登録処理&登録できました画面を表示
}
こんな感じがよい。
みんな優しいな
725 :
723 :2006/08/18(金) 17:23:21 ID:???
すまん○。こっちの方がシュールだな。 // エラーチェック処理 // エラーなら再度登録用画面を表示して終了 if ($mode == 'first'){ // 確認画面を表示 } elseif ($mode == 'second'){ // 登録処理&登録できました画面を表示 }
シュールの使い方間違ってるよ。
727 :
nobodyさん :2006/08/18(金) 17:31:14 ID:/SUvBA3A
>>716-724 みんな優しい
ありがとう(泣
>>723 if ($mode == 'first'){
// エラーチェック処理 ←ここまでできています!!
// エラーなら再度登録用画面を表示 ←問題は、ここなんです!!
// エラーがないなら確認画面を表示
再度登録用画面には"header"で飛ばせばいいと思いますが、その際、
・エラーがでなかったテキストフォームには「入力データを残す」
・エラーがでたテキストフォームには「空白」にする
という処理を組み込ませたいのです
そうなると頭がふにゃふにゃになってしまっています
×シュール ○スマート
>>690 亀スマソ。文字コードがあってねーんだろうね。
なんか正規表現のコードを指定する関数があったけど忘れた。
mb_なんちゃら
このスレか前スレ、もしかしたら前々スレあたりに、ひらがなにマッチしない、みたいな質問と回答あるはず。
入力画面がhtmlなのがいけないのだよ
>>727 >再度登録用画面には"header"で飛ばせばいいと思いますが
そこが違うんだよ。
hoge.phpの中から、直接HTML文を書き出す。
ちょっと面倒だろうが地道に入力していけ。
工夫次第では、初期登録画面を書き出す(おそらくあなたは別HTMLファイルでやってるだろうけど)処理を
活用することができるが。
<input name="onamae" value="<?=$input["onamae"]?>"> 最初の入力画面では$inputは空に、エラーが出たら この中に入力した文字が入ってるようにする。 最後の確認画面は別のHTML用意した方が良いね。
ついでにヘッダーで飛ばしたいなら、セッションでも使わないと無理よ。
734 :
nobodyさん :2006/08/18(金) 17:44:52 ID:6myYxIuc
入力フォームなどから受け取ったデータが、複数行にわたる場合に その複数行のうち、3行目だけを抜き取るみたいな処理を行いたいのですが fgets()は、fopen()されたファイルしか処理できないんですね・・ なんとか、これでやろうと思えば、一回受け取ったデータをファイルに保存して それから、ファイル処理としてfgets()を使うなども考えたのですが、ずいぶん面倒と思いまして それで、今度はexplode()を使って、\nで区切って改行ごとに、配列に入れていって 必要な行だけを取り出そうと思ったのですが 改行を\nでは、判別してくれないんですかね・・ いろいろ考えているのですが、何か良い方法があったらアドバイスお願いします。
735 :
nobodyさん :2006/08/18(金) 17:46:33 ID:/SUvBA3A
>>730-731 なるほど、、、もっとも避けたかった方法が答えでしたか(涙
例えば
print("<h1>monster()</h1>");
print "<input type=\"submit\" value=\"2ch大好きだぜ\">";
print "<input type=\"submit\" value=\"でもVIPはな\">";
とな感じでprint使って1つのphpで表現する方法ですね
むー頑張ってみる
また質問します!!
みんなありがとう
736 :
nobodyさん :2006/08/18(金) 17:49:16 ID:/SUvBA3A
>>732 そうですね
一応MySQLにぶちこむので最終確認画面はphpファイルでいこうと思います!!
>>733 フォーム認証後の画面なのでセッションは貼っていますが
これ以上、複雑にするのは俺には無理のようです・・・
>>736 なんか出来るんだか出来ないんだかよくわからんやつだな。
739 :
nobodyさん :2006/08/18(金) 18:03:38 ID:/SUvBA3A
>>737 いかんせん、まわりに相談する人が誰もいない
最初はMySQL5.0に6000万レコードを書き込むスクリプトから開始し
次にMD5に変換させるスクリプトを走らせると、途中で地獄のdump吐くは
オシムが代表監督になるわ、直志が召集されるわ
MLはNifty時代から好きになれず
2chでいじめられながら頑張るのが大好きだ!!
これからもよろしくおながいしまつ
>>735 > print("<h1>monster()</h1>");
> print "<input type=\"submit\" value=\"2ch大好きだぜ\">";
> print "<input type=\"submit\" value=\"でもVIPはな\">";
> とな感じでprint使って1つのphpで表現する方法ですね
せめて
<?php
プログラム
?>
<h1>monster()</h1>
<input type="submit" value="2ch大好きだぜ">
<input type="submit" value="でもVIPはな<?php echo $変数 ?>">
みたいにPHPモード抜けて普通にHTML書こうよ。
しかしすでにセッション使ってて前の入力内容を復元させることが難しい、
ってやつも相当珍しい気がするんだが。
>>734 explodeで正解だよ。
ちょっと自分で書いたexplodeのとこ見せてみ。それ多分書き方間違ってるだけ。
742 :
nobodyさん :2006/08/18(金) 18:42:41 ID:IH/AT+iL
すいません、本質的にはPHPとは関係無いのですが、 適切なスレが見つかりませんでした。 PHPでAmazonのWebサービスを使ってプログラミングしているのですが、 Amazon API でBooks の情報を取得した時、 ItemAttributesが通常はオブジェクトなのですが、 まれに配列変数になってて、要素のAutherとかが、0から始まる配列変数になってる事がありますよね? つまり、var_dumpすると以下のようになっているはずのものが、 ["ItemAttributes"]=> &object(stdClass)(13) { ["Author"]=> string(16) "ほげ ほげお" 以下のようになっている。 ["ItemAttributes"]=> array(16) { [0]=> string(16) "ほげ ほげお" これを回避する方法があればお教え下さい。 0から始まる配列変数が全て、Autherなどのデータなら良いのですが、 間に本の種類(単行本)などが入っているので、もし回避出来ないのなら、本の種類全てをプログラムに入力して、 「本の種類の前はAuther、本の種類の後はCreator」というような事をしないとダメでしょうか? 環境など: PHP4.3.10 PearのSOAP(var0.9.4)ライブラリ Amazon ECS 4.0
743 :
734 :2006/08/18(金) 18:47:03 ID:???
>>738 ,
>>741 お二方アドバイスありがとうございました。
>>738 氏が示してくださった、
>$exploded = explode("\n",$words);
>と使っているので、\nで区切れないということはないはず。
という、ことからきっと区切りが、\nではないのだと思いはじめ、まずそこを調べたところ
私が改行だと思っていたものは、<br />でした。
\nの代わりに<br />としたところ満足のいく結果を得られました。
非常にくだらなく、低レベルな質問になってしまって失礼しました。
お騒がせ致しました。
>>742 クラス定義より前にセッションなりからデータを読み出しちゃってる、ってことはない?
マニュアルのセッションの辺りに説明があると思うけど、セッションを自動スタートで使うと
クラス定義の前に変数展開をしちゃうからクラスの形で定義できない問題とかがあるよ。
>>692 あなたが私をバカと言ってくれたおかげで事故解決できました^^
ありがとうございました^^
1.馬鹿だから諦めて解決ってことにした 2.悔しかったのでがんばって自分で調べた 後者ならお前は伸びる
与えられた日付が実在するかどうか(うるう年も含めて)を あまり重くない処理で判定するにはどうしたら良いでしょうか?? うるう年や、その月毎の日数などをその都度計算して、与えられた日付と比較する関数などを 作ることも考えましたが、どうにも効率が悪くてスマートじゃないと思ったもので・・・
749 :
nobodyさん :2006/08/18(金) 20:43:40 ID:EScfbsFP
>>749 確かにくだらない質問だがな、
ここは何かを探してくださいといったことはしていない。
自分で作るっていうなら話は別だが、
探してるっていうなら他のスレをあたりなさい。
>>749 自動でやるのならRSSがもっとも確実だろ
>>746 mb_internal_encoding("Shift_JIS");
mb_regex_encoding("Shift_JIS");
これ書いたらいけました^^
調べるのに2時間もかかりましたよ^^
>>748 うわ!!
リファレンス本も持ってるというのに、
そんな関数はハナっから無いと思い込んで見落としてました・・・。
ありがとうございます。
>>753 ちなみにmktime()も日付チェックの機能を備えてて、
不正な日時が入力されたら補正して返すから
入力 != 出力 で妥当性をチェック可能。
>>754 チェックするだけなら、checkdate() の方が速いけどね。
これを機にソースも読んでみたけど、checkdate() は大した事してないし。
mktime() は当然いろいろやってるが。
756 :
nobodyさん :2006/08/19(土) 01:44:00 ID:+xxPG0V/
socket_connect(socket_create(AF_INET, SOCK_DGRAM, SOL_UDP), $addr, 2050); で Warning: socket_connect() [function.socket-connect]: unable to connect [13]: Permission denied という接続時のエラーによりこの後のデータ送信ができないのですが、 このエラーの解決方法をご存知の方、教えてもらっていいですか?
757 :
nobodyさん :2006/08/19(土) 03:44:33 ID:01c3DaJf
すいません、基本的な疑問で今まで出来ないと思い込んでいたことを聞きたいんですが、 foreachで配列をループにかけている最中に、 今配列の中の何番目かということを知ることって出来ないんでしょうか? いままでそれを知る必要がある時は foreachじゃなくてforでループまわして現在の配列のナンバーを取得してたんですが、 もしかしてforeach中でもそれを簡単に知る方法があるんじゃないかと思ったので 質問してみます。 よろしくおねがいします
>>757 foreach($array as $key => $value) {
echo "$value は $key の位置にあります<br>"
}
連想配列で何番目なのかを知ろうと思ったら
$no = 0;
foreach($array as $key => $value) {
echo "$value は $no番目にあります<br>"
$no ++;
}
ってするしか無いと思う。
>>758 なるほど
ありがとうございます!
ただSimpleXMLで取得したオブジェクトに対しては
根本的に連想配列になっているのか、
使えないみたいですね
これはちょっと残念ですが、他についてはおかげさまで随分楽になりそうです
連想配列になってるもので何番目なのかを意識する必要ってあまり無いからな。
>>714 次の質問はmkdirで作ったディレクトリにファイルが作れませんだな
画像が存在するかどうか確認するにはどんな関数があるでしょうか? ユーザからわたってきた hoge.jpg というデータが存在するかしないかをチェックしたいのです。
>>762 そもそもユーザからどういう風に渡されたのさ
URLで渡されると仮定していただけると分かりやすいかと。 is_fileやfile_existsだとfalseが返されてしまいます
・URLで指定したファイルが本当に存在するか確認したい ・外部の鯖のURLなので、is_fileやfile_existは使えない事は確認済み ってことかい?
>>764 そういうのは普通「渡す」とは言わないけどな。
ま、file_exists()は自分のサーバー内のファイルを調べる関数だから当然だな。
んじゃfile()で読み込んでみれば?allow_url_openがOnの環境限定だけど。
ホントはHEADアクセスで確認する方が負荷かからなくていいんだけどお手軽でしょ。
$temp_file = md5_file($temp_file);
$temp_file はテンポラリに入っています。書き出す前です。
この様な段階でmd5_file する事は無理なのでしょうか?
現在は move_uploaded_file chmod で一度書き出し md5_file した後 unlink で消しています。
この様な面倒な方法以外の方法があればご教示ください。
>>762 前スレで上記の様な質問をした者ですがこれと同じ事?
>>767 >>762 はアップロードしてるわけじゃないから全然別。
他所のサーバに置いてある画像をURL有効チェックしたいだけらし。
チャット相手の女の子の顔をみるPHPはどう書けばいいですか?
LOCK_EX中でもfileは読み込めるのでfopen 'w' とかは注意 とか見たような気がするんですが、その場合、同様に配列に読み込みたい場合は fgetsを使うんでしょうか?
>>770 ごめん。日本語が解読できなかったorz
>>770 'w' を使いたい処理の場合も、 '+r' で開き、ファイルロックしてから、トランケイトして
ファイルサイズを0にし、ファイル先頭から書き出すのがもっともよいとされている。
これは、fopen を w で開いた直後、ロックの処理をする前にファイルサイズが0になってしまうため、
この間に別プロセスがファイルをreadすると、空のファイルを読んでしまうことになるからだ。
+r で開いてからロックすれば、この間はファイルのデータは保たれているため、
上記のようなデータの損失が発生することはない。
fopen 'w'したらファイルが空になるから r+とかa+使った方が無難ってだけじゃないの? あとバッファはset_file_bufferで0にしたほうがいいね fileは読み込むだけでファイルの更新自体はしないし関係ないと思うよ
あら、先にかかれてた?
>>774 まあ表示だけならデータが表示されないだけで問題なさそうかと思われるけど、
どうせだったらそんなことが起こらない方法で書いた方がいいに決まっている。
HTMLにデータ込みのフォームを書き出す処理の中でデータが抜けて、
そのままそのフォームを登録してしまう(必須でない項目が抜ける可能性)や、
rで読んでレコードを編集したあと、あらためて wで開いてレコードを書き出す、
その上に処理のロックをかけていない、などの Let's PHP みたいな不備のあるソースを書くと
データが消えてしまう恐れがあるね。
>>769 PHPじゃ無理だからJAVAにしとけ。
780 :
nobodyさん :2006/08/19(土) 11:49:35 ID:9NEEnAjJ
781 :
777 :2006/08/19(土) 11:56:01 ID:???
3レスしか釣れなかったか。 撒き餌がたらなかったらしい。
782 :
777 :2006/08/19(土) 11:56:39 ID:???
783 :
(^ω^) :2006/08/19(土) 11:59:26 ID:???
>>780 タグとして正しいか検査する。
たとえば、[a]と[/a]の数が同じかどうか。
>>780 どういう正規表現使ったんだ?
普通に [a] と [/a] ではさまれた文字列を<a>タグのhref属性に変えるような仕組みであればそんなおかしなことにならないはずだが。
>>780 たぶん、//を||で挟めば良いような・・・
787 :
nobodyさん :2006/08/19(土) 14:46:12 ID:kKZJT4No
教えてください。 1.shift-jisのファイルを用意する 2.print mb_convert_encoding( file_get_contents( そのファイル ) ,'EUC-JP'); こういうのを作ってブラウザで再読み込みを続けると、どういうわけか 入力もプログラムも全く変えてないのに、ちゃんと変換したり、しなかったりと動作が変わります。 これじゃ危なっかしくて怖いんですけど、こういうものなのですか? winXPとPHP 5.0.3 (cli) (built: Dec 15 2004 08:07:57)です。
>>787 そういうものです。
ヤフーのトップページでさえ、たまに文字化けして表示されることがあります。
ブラウザ側のバグでしょう。
>>787 >これじゃ危なっかしくて怖い
ブラウザに何か出力する前にきちんとヘッダを送信してやれボケ。
HTTPの知識もPHPの知識もロクに勉強もせず、危なっかしいのはお前のほうだチンカス。
791 :
780 :2006/08/19(土) 14:51:58 ID:9NEEnAjJ
たくさんレスありがとうございます。 正規表現はよくわからないので、str_replaceを使いました。 [a]があったら<a href="に置き換えて、[/a]があったら">〜〜</a>にしてとか、そんなしょぼい実装です。 783さんのような、検査のロジックを組み込みたいと思います。 ありがとうございました。
>>790 ほんとだってば。ヤフーもたまに文字化けしてることあるぜ。
>>789 ごめんなさい。でも私は女なので、それでいけばむしろマンカスです。
>>787 mb_convert_encodingの「変換前のエンコーディング」の引数もサボらず書けよウンコ野郎。
795 :
787 :2006/08/19(土) 14:59:16 ID:kKZJT4No
>788 いや、ソースを読むとソースが化けている(というか元のままだったり、変換されてたり)で。 ブラウザの問題はとりあえずないものとして。 >794 そこ…なのかな? それにしても、再実行ごとに毎回違った結果がでてくるものなのですか?
>>794 ありがとうございます。
でも、ウンコ野郎じゃなくてむしろ、ウンコ女郎です。
>>795 化けたときに、ブラウザのエンコードが何になってるか確認してみろ。
798 :
764 :2006/08/19(土) 15:09:12 ID:???
HEADアクセスってどういったものでしょうか? ググってみたのですが、分かりませんでした できれば負荷のかからない方法で検討したいです お願い致しますm(_ _)m
5.1.5がリリースされたのでうpデートするためにコンパイルすると下記でエラーがでました。 FAILED TEST SUMMARY --------------------------------------------------------------------- Bug #16069 [ext/iconv/tests/bug16069.phpt] iconv stream filter [ext/iconv/tests/iconv_stream_filter.phpt] #16069は「ミリバールミリバール(°Д°)」ていう文字が沢山入ってて何かEUC-JPのテスト?のようなファイルでした。 ググると同じファイルでfailedを出してるものが見つかりましたので特に気にする必要はないファイルでしょうか。 よろしくお願いします。 環境:FedoraCore3 PHP5.1.4→5.1.5へ変更中に発生
5.1.5ダウンロードしようと思ったんだけどミラーサーバ一覧に繋がらないんだよね・・・
mmmm
ext/iconv/tests/bug16069.phptに確かにあるね…ミリバール(°Д°) エラーは出なかったけど なぜギコ猫を使ったのかと小一時間(ry
もう5.1.5まででてるのか。 6まだー? PHP6の主な変更点 Javaと統一されますた。以降Javaをお使いください。
806 :
803 :2006/08/19(土) 16:00:02 ID:???
iconv関数を用いたエンコードのテストでしょうか? イマイチよくわかりませんがセットで >iconv stream filter [ext/iconv/tests/iconv_stream_filter.phpt] も失敗しているのでやや気になります。 試しにphpinfoを開くとiconv関数は「enabled」でした。 何が原因なのかソースを見た限り皆目検討がつきません。。。モナーではなくギコ猫なのが原因なのでしょうか。
simpleXMLのxpathを記入してphpを実行したら、
サーバーが見つからないとエラーが出るようになりました。
しかしローカルで実行するとエラーがでず、原因がわかりません。
$xml = simplexml_load_string($content);
$xml->registerXPathNamespace('aws', '
http://webservices.amazon.com/AWSECommerceService/2006-05-17 ');
$result = $xml->xpath('//aws:RequestId');
phpのバージョンはレンタルサーバーが5.1.4でローカルも5.1.4です。一体何が原因なんでしょうか?
>>798 $host = "example.com"
$uri = "/bar/foo.txt"
$header = "Host: ${host}\r\n";
$header .= "Connection: Close;\r\n\r\n";
$fp = fsockopen($host, 80, $errno, $errstr);
if (!$fp) {
exit;
}
fputs($fp, "HEAD ${uri} HTTP/1.1\r\n");
fputs($fp, $header);
while (!feof($fp)) {
echo fgets($fp, 128);
}
こんなの
セミコロンがいくつか抜けているや
>>808 なぜわざわざ難しい方法で説明するんだ?
811 :
nobodyさん :2006/08/19(土) 17:08:04 ID:+ytFUBf1
質問です。 fopen() でテキストファイルを作っていくプログラムを作りたいのですが、 htmlフォームからユーザーにテキストを入力させ、その内容をファイルに反映せさたいのです。 $fp = fopen("./test.txt","w"); fwrite($fp,"This is file write test.\n"); fclose($fp); ここまでは理解できるのですが、 問題はこれをどうやってhtmlフォームと連携させるのかということです。 どの当たりを勉強したらよいか解らず、苦戦しています。 解るかた、ヒントだけでも頂けたらと思います。 よろしくお願いします。
<form>と<input>
いきなりテキストファイルに出力するよりも いったん配列なりに入れて チェック入れろ
>>795 >そこ…なのかな?
人様のアドバイスを実行・確認もせずに批判するぐらいなら
質問なんかしないで自分で解決しろボケカス。
開発環境に関する質問です。 現在、クライアントPC(Windows)にDreamweaverをいれて、そこからFTPで ローカルの開発環境サーバー(linux)に直接 アクセスして開発しています。チェックは直接ブラウザからローカルIPを 叩いて確かめています。サービスが動いている本番サーバはまた別に存在します。 ただ、開発効率の悪さを実感しています。そこで eclipse+phpeclipse に開発環境を変えようと思っていますが クライアントPCにもphp+mysql+apacheをいれる必要があり、そうすると ローカルのlinuxサーバーの意味があまりありません。 できれば、テストサーバ側のファイルを直接いじりつつ デバック等もできればと思っていますが、こんな私に向いている 開発環境はなんでしょうか。 eclipse+phpeclipse+PHP/dbg というものもあるらしいですが。 # smarty+phpフレームワークも導入予定。 # バージョン管理はsubversion予定。
817 :
811 :2006/08/19(土) 17:42:37 ID:+ytFUBf1
ありがとうございました、$_POST ですね。
813を勉強してきます。
>>814 解らなければまた質問させてもらうかもしれません。
>>816 >>ローカルのlinuxサーバーの意味があまりありません。
んなことないでしょ、チームで開発するんだったら
担当部分を自分のPC内でまずコーディング・テストして
全員が利用するテストサーバで結合テストするのがいいんじゃないの
逆にテストサーバで直接いじってて他の人がテストしようとしたら
いじってたせいで動かない、とかで開発効率が悪くなってたりしない?
開発環境はソフト変えりゃいいってもんじゃない、やり方の問題と思う
819 :
nobodyさん :2006/08/19(土) 18:01:19 ID:yXlsOUGI
質問なのですが、PHPで顧客の登録など入力フォームの数が 多い場合TEXTのNAMEなどを簡単に管理できる方法ってありますでしょうか?? 皆さんはどのようにしていますか?ご教授お願い致します。
うちはフレームワークを使わない時は一覧のファイルを作って smartyを噛ませてジェネレートしてる。 フォーム、DBアクセス、詳細表示のページで同じ一覧のファイル を使うようにしとけばらくちん。 便利なツールやライブラリは他の人の解説に譲るます。
smarty使える? なんかメンドイだけであんまり使えるような気がしない
smartyはいろいろ詰め込みすぎてて・・・Flexyの方が好き
823 :
nobodyさん :2006/08/19(土) 19:40:53 ID:m4Ae+hcO
>>823 ん? そのページに書いてある === による厳密な比較では駄目なの?
if (is_int($x)) if (strlen($x))
827 :
nobodyさん :2006/08/19(土) 19:51:36 ID:ZWmQboUX
828 :
nobodyさん :2006/08/19(土) 20:04:45 ID:m4Ae+hcO
>>824 >>826 ありがとうございます。
要は""とNULL以外はTRUEを返すのを、簡単に表記したかったんです。
===を使うと
if (!($x === "" or $x === NULL)) {
こんな感じになって冗長かなぁと、、、
>>825 下のを使うと
if (strlen($x) != 0) {
こんな感じですか?
冗長でもなんでもないだろ
>>828 if (strlen($x) != 0)
if (strlen($x))
一緒、strlenの戻り値はint
ページを見た人のIPとホストを表示させるにはどうすればいいの?
832 :
831 :2006/08/19(土) 20:32:36 ID:h+QG0TQi
idわすれ
会員登録が必要なサイト作ってますが、 id を メルアドにするか 任意な文字列にするか迷ってます。 メルアドのほうが管理がらくだと思いますが、どちらが良いでしょうか。
>>833 ・任意の文字列
サイト側としては個人情報を入力させたりDBに持たなくても済む
ユーザ側としては登録はしやすいが忘れやすい
ID忘れちゃうとリマインダはメール送ってもらうしかない
・メールアドレス
ユーザ側としては忘れにくい
ただ信用できるかどうか微妙なサイトには入力したくない
個人情報を抱えるリスクは生じる(メリットもある)
ちょっとしたツール的なサイトなら文字列ID、
ECとかメールアドレス必要前提のサイトならメアドかなあ
下らない質問ですが・・・宜しければ意見を下さい。 setXXXやgetXXXなどのメソッド名はよく有りますが、 あるプロパティの値をtrueにする為のメソッド名はどのようにつけるべきだと思いますか? とりあえずsetXXX(true)としてますが、デフォルトがfalseのためそのメソッドを呼べばtrueになるようにしたいのです。 引数でtrueを渡さないとなると、やはりsetXXXでは変な気がします。 そのプロパティをpublicにすればいいのですが、今回の場合それは微妙な感じですので。
enableXXX とか
俺もenable/disableだな
842 :
770 :2006/08/19(土) 23:01:09 ID:???
843 :
839 :2006/08/19(土) 23:20:58 ID:???
enableXXX それです! なんでそれが頭に浮かばなかったのか・・・あぁ、やっぱり頭が悪い。 本当にありがとうです。
>>816 eclipse+phpeclipse+PHP/dbg+Samba+subversionでやってます。
一人自宅でだけど。
統合開発環境スレは無くなっちゃったのかな?
ファイルの更新日時を表示したいのですが ファイルの更新日時の取得ってどうやるんですか?
一般的にBBQってどんなPHPにも入れれるんでしょうか?
BBQってなに?
BBQはキャンプ地でやるもんであって、PHPでやるもんじゃないですねー。
851 :
nobodyさん :2006/08/20(日) 12:40:10 ID:O6c5lrE6
include,requireするとゴミが付きます test.php <?php echo "<!-- test -->\n"; ?> index.php <?php require('test.php'); ?> で、実行すると <!-- test --> と出力されるはずが ?<!-- test --> となってゴミが付いてしまいます レンタルサーバでもテスト環境でも結果は同じです バージョンはともに4.4.2
852 :
nobodyさん :2006/08/20(日) 12:51:23 ID:O6c5lrE6
質問になってかった(汗 実害は無いのですが、精神衛生上よろしくないので 回避する方法、間違い等あれば教えてください
853 :
(^ω^) :2006/08/20(日) 12:54:40 ID:???
ヒント: UTF-8 BOM UTF-8じゃなかったらごめんね
ビンゴです! べつの作業でツールの文字コード設定変えたままでした ありがとうございました
>>848 gethostbynameはコアに含まれるのでPHP的には使える。
ただし、サーバからniku.2ch.netに向かってのDNSポートが閉じていると当然使用不可能
BBQはDNSの仕組みを利用してぁゃしぃホストをチェックする 大抵の言語はDNSにアクセスできるでしょ? つまり言語に依存しないってこと
僕のちんこもぁゃしぃホストにアクセスされそうです
早くポートを閉じるんだ
859 :
nobodyさん :2006/08/20(日) 15:37:42 ID:SEQXzGDk
やばい!SQLインジェクションを利用してきた!
862 :
nobodyさん :2006/08/20(日) 17:55:18 ID:SEQXzGDk
セッキュス
PHPのクラスパスってどうなってるんでしょうか? hoge └hoge1 └foo1.php └hoge2 └foo2.php というフォルダの構成だとして、foo1.phpから foo2.phpに書かれたクラスを利用するには foo2.phpをfoo1.phpでrequireしないとだめでしょうか? php.iniでパス設定しないという前提で。
>>863 なんでそんな依存関係のあるクラスがhoge1とhoge2で分けられてるんだろ、という気がするが、
foo1をrequireするプログラムでfoo2もお約束としてrequireする、というのはダメか?
>>864 クラスのことが全然わかってないんですが、そもそも
PHPのクラスパスってどうなってるんでしょうか?
基本的にrequireしてからじゃないとクラス利用できない…なんてことは
ないようですし、php.iniのincludeで設定したパスのところに
置かないとクラスを読み込めないんでしょうか?
ほんとにくだらないレベルで申し訳ないですが、この辺説明した
書籍ってなかなかなくて…
>>865 いや、基本的にrequireしてからじゃないと
そのクラスは利用できないと思うが
>>866 え、まじすか。
フレームワークとかはphp.iniで定義してるから使えるだけですか。
そのフレームワークとやらも内部でrequireしている筈です。
>>868 ほー!
ちょっとわかった、ありがとう!
誰か「PHP on Rails」開発してくんないかな?
セッション変数って、セッションが切れるまでずっとメモリに記憶されてるの? それともプログラム中から呼び出すor書き込む等、必要に応じて その都度セッション・ファイルから読み出し・書き込みされて、 スクリプトの終了と共にメモリから解放されるの?
874 :
742 :2006/08/21(月) 10:34:33 ID:bnVaTE3o
>>744 返答ありがとうございます。またせっかく回答をして頂いたのに返事が遅くなって、申し訳ないです。
クラス定義より前にデータを読み出しているという状態が、どんな状態か
ちょっとよく分からないのですが、以下の状態が同じ配列に並列にならんでいます。
object(stdClass)(11) {
["ItemAttributes"]=> &object(stdClass)(13) { ["Author"]=> string(16) "ほげ ほげお"
(略)
["ItemAttributes"]=> array(16) { [0]=> string(16) "ほげ ほげお"
}
毎回同じ本のデータがこの状態になります。
しかし本家Amazonのページで同じ本を検索すると問題なく著者が表示されているので、
私の方に何か問題があると思えるのですが、見当も付きません。
875 :
715 :2006/08/21(月) 11:26:33 ID:Xr9Z9Klv
おはようございます 早速、金曜日の続きを以下のスクリプトで表現してみました 「確認画面」を押すと、別のphpファイルに飛ばしたいのですが、どうするのがベターなのでしょう? <?php $zz = $_POST['number1']; if(mb_strlen($zz) == 6){ $ab ="OK"; }else{ $ab ="英数字で6文字";} ?> <form method="post" action="test1.php"> <TABLE border="1"> <TBODY> <TR> <TD><INPUT size="6" type="text" maxlength="6" name="number1" value="<?php print($zz); ?>"> </TD> <TD> <?php print($ab); ?> </TD> </TR> </TBODY> </TABLE> <?php if(mb_strlen($ab) == 2 ){ print "<input type=\"submit\" value=\"確認画面\">"; }else{ print "<input type=\"submit\" value=\"登録\">"; } ?> </form>
>>875 if(mb_strlen($ab) == 2 ){
print "<input type=\"submit\" name=\"preview\" value=\"確認画面\">";
}else{
print "<input type=\"submit\" name=\"regist\" value=\"登録\">";
}
と区別可能な識別子を設定した上で
if(isset($_POST['preview'])) {
require("preview.php");
exit;
}
と指定された識別子があれば別のPHPファイルを読み込む。
877 :
715 :2006/08/21(月) 11:41:38 ID:Xr9Z9Klv
>>876 ありがとうございます!!
なるほど、nameで分けて、再度、IF文ですね
やってみまつ
他には 1.POSTされたデータをセッションなどに格納した上で、 header("Location: /preview.php?sessid=セッションID"); exit; とLocationヘッダで別ページに遷移する。 2.print "<input type=\"submit\" value=\"確認画面\" onclick=\"this.form.action='preview.php'\">"; として確認画面をクリック時にJavaScriptで遷移先を切り替える。 などもある。
879 :
715 :2006/08/21(月) 12:07:18 ID:???
自作したWebアプリを公開したい(オープンソース化…と言うのかな?)のですが、 どうしたらいいんでしょうか? 単純にソースコードを自分のサイトからDLできるようにしとけばいいのか、 それともsourceforgeみたいなところに登録(?)すべきなのか。 著作権などは維持しつつ、皆に無料で使ってもらうにはどういう方法がベストでしょうか。
どっちでも好きな方でいいんじゃないのか。 著作権についてはドキュメントで明示すればよし。
882 :
715 :2006/08/21(月) 13:20:52 ID:???
>>876 今回のところは、こうしました
<?php
if(mb_strlen($ab) == 2 ){
print "<input type=\"submit\" name=\"preview\" value=\"確認画面\">";
}else{
print "<input type=\"submit\" name=\"reverse\" value=\"登録\">";
}
if(isset($_POST['preview'])){
header("location:summer.php");
exit;
}
?>
次はCookieを使ってみます
>>882 確認画面って何を表示してるんだ??
送信された入力内容を表示してるんじゃないのか?
884 :
nobodyさん :2006/08/21(月) 14:15:14 ID:Dzmazm0+
脆弱なパスワードを検知する関数を作ったのですが、動作が変です。 function is_yowai_pass($str) { $regex = "(.{0,7}|[a-z]+|[A-Z]+|[0-9]+)"; if (ereg($regex,$str) == TRUE){ return TRUE; } else { return FALSE; } } if (is_yowai_pass($password) == TRUE){ echo "脆弱だよ"; } このとき、$passwordに「12345678」とか「abcdefgh」が入っていれば「脆弱だよ」と表示されて、 それはもちろん期待通りの動作なのですが、$passwordに「pass1234」など英数字を混ぜたものが 入っていても「脆弱だよ」が表示されてしまいます。英字と数字が混じっていれば 「脆弱だよ」と表示されないように作ったつもりなのですが、どこがおかしいのでしょうか??
>>884 正規表現に「^」と「$」をつけとかないと文字列全体をチェックできない。
今の状態だと「英字1文字」か「数字1文字」があれば必ず脆弱となる。
関数名にワラタ
887 :
軟式PHP :2006/08/21(月) 15:17:34 ID:???
yowai_passて。とてつもないセンスを感じるぜ。
>>884 天才的関数名だなw
関数名以外の変数名とかはしっかりしてるというか、上級者らしいのに
is_yowai_passとは・・・「分かっててやってる」天才にしか出来ない技だぜ。
マインドはびんびんつたわってくるからいいんじゃね?
function is_love_me( $my_konomi_type, $partner_konomi_type ) { if ($my_konomi_type === $partner_konomi_type) { return TRUE; } else { return FALSE; } }
>>890 $my_konomi_type === $partner_konomi_type だと、お互いに同じ性質を持つ人間でなければなりませんが。
893 :
715 :2006/08/21(月) 17:03:41 ID:???
セッションでの受け渡し版を書いてみたお //俺のような初心者は使うといいお test1.php ---------- <?php session_start(); $zz = $_POST['number1']; if(mb_strlen($zz) == 6){$ab ="OK";}else{$ab ="英数字で6文字";}?> <form method="post" action="test1.php"> <TABLE border="1"><TBODY><TR> <TD><INPUT size="6" type="text" maxlength="6" name="number1" value="<?php print($zz); ?>"></TD> <TD><?php print($ab); ?></TD></TR></TBODY></TABLE> <?php if(mb_strlen($ab) == 2 ){ print "<input type=\"submit\" name=\"preview\" value=\"確認画面\">"; }else{print "<input type=\"submit\" name=\"reverse\" value=\"登録\">";} if(isset($_POST['preview'])){ $_SESSION['zz'] = $zz; header('Location: test2.php'); exit;}?></form> test2.php ---------- <?php session_start(); if($_SESSION['zz']){ $zz = $_SESSION['zz']; print($zz); exit;} ?>
s
PHP5で、クラスに定義していない変数にアクセスできてしまうんですが、 どうにかならないんでしょうか? あと、メンバ変数に文字列を格納するときに . でつなぐ方法ってないんでしょうか。 PHP4が最悪だったので、5に移行したけど、やっぱあいまいすぎるこの言語・・・・泣
>>895 __set() __get() で定義してください
文字列は普通に . で連結できる
windowsヘルプ形式のマニュアル落としたけど使えないです。 なんも表示されない。 なぜだかかわかる方いたますか?
>>895 perl よりかはマシって言う程度だからな
こういうスクリプト言語ではユニットテストがかなり重要
C++とかなら、コンパイラが出すエラーをユニットテストで見つける
ほかない
>>890 function is_love_me( $my_value, $partner_konomi_type )
{
if ($my_value === $partner_konomi_type) {
return TRUE;
} else {
return FALSE;
}
}
だろうが。
>>900 そうなんですか。
別のミラーとかから落としても駄目でした。
もう、ユーザー会のサイトの前文検索使わせてもらおうと思います。
>>896 ありがとうございます。
__set, __getで制御できるようですが、PHPの通常のエラーのように発生させたかったため
うまい方法が見つかりませんでした。
あとメンバの初期値設定時に、 . を使って文字列をつなぐとエラーがでてしまいます。
マニュアルにはphp4 ではムリと書いてあるけど、5については何も書いてないんだよなぁ・・・・
ムリならムリと5もかいてほしい・・・・
MySQLのコマンドプロンプトではちゃんとINSERTできるのに、その文をそのままコピーしてPHPで mysql_queryしようとするとなぜが成功しません。 select文は成功しました。 どこが原因なんでしょうか?
ユニットテストって何?? 何の必要があるの? 普通にブラウザでアクセスしてスクリプト走らせてデバッグするのと何が違うの?
ブラウザとかではなくて、デバッグする単位の違いだと思うよ。 プロジェクトによってその単位とか、テストの方法もろもろ変わってしまうけど、 単体テスト⇒結合テストと行うことで、バグの発見をしやすくするんだと思う。 通常単体テストでは、1画面を1つの単位としてテストを行うと思うけど(自分の経験では) そのときは、ブラウザを使おうが、デバッガを使おうが、単体テストだよ
>>903 本当にまんま同じSQLを発行しているかPHPでデバッグプリントして味噌
でも分からなければ問題無い範囲でここに貼りなされ
>>906 すいません。いまちょっといろいろためして見たら日本語が入ったらダメなことに気づきました。
文字セットの問題だとは思うのですが、php.iniをいじったら直るのかな。。。
>>904 たいていは、メソッド一つづつ、成功と失敗をする条件を与えて
期待通りに動くかテストする方法
早期にバグを見つけて、その処理の精度を高める
いきなり結合テストから始めると、バグが見つかったときに
解決をするのが時間かかったり、めったに出ない条件によって
引き起こされるバグを見落としたりする
>>907 MySQLと日本語はかなり、バージョンによって問題がでるから
気をつけたほうが良い
>>905 う〜ん、、、おっしゃっている意味がよく分かりません。
俺が普段行っているデバッグ作業は、「単体テスト」というのを繰り返して、
結果的に「結合テスト」というものになっているんでしょうか・・・。
>>908 メ、メソッド・・・・
あの、実はOOP理解できないのでクラスとか全く使ってないんだけど、
それでもユニットテストというのは必要?&有効?
>>909 PHPでサーバーに接続した直後に
mysql_query("SET NAMES SJIS");
と、やったら表示されるようになりました。
(参考)
http://tag.oops.jp/wordpress/archives/5 おっしゃる通り、PHPとMySQLはバージョンによって設定がかなり異なってきますね。
むやみに新しいバージョンを入れるのは控えたほうがいいかもしれません。
てか、設定に何分無駄な時間を費やしたんだよ俺ww
>>910 まず設計時点で機能を細かく分けてシンプルな関数の集合体にする。これが大前提。
その上で関数単位にテストを行いデバッグした上で、関数の集合であるプログラムのテストを行う。
さらにシステムは大抵の場合複数のプログラムの集合体になるから最終的に全体でのテストを行う。
それが単体テスト→結合テスト→総合テストの流れ。
オブジェクト指向を使わなくても、昔からある構造化設計でもこれはプロとして当たり前の作り方。
>>904 みたいなテストしかしてないんなら、テストがどうこう以前に設計自体が素人レベルなんでしょう。
単体テストはブラウザ上でもコマンドラインでもどっちでもできるよ。
大抵はこれを行うために「ドライバ」や「スタブ」といった、上位・下位部分を担うテストプログラムを作成する。
このテストプログラムで多種多様なテストケースを実行し、通常の操作ではなかなか発生しないような
レアケースなデータでの挙動などもテストするわけだ。
やたらでかい関数を大量に生産する人間ができる原因はK○NTと○ッツPHP
>>912 俺はクラスは全く使わず、自作関数も数えるほどです。
あとはいわゆる「ベタ書き」と呼ばれるヤツなんだと思いますが、
そういうわけで単体テストというものの意味やイメージが湧きません。
PHPの標準関数ばかり使ってるから、その時点で「単体テスト」は終わってると見なしていいんでしょうか?
いわゆる「ベタ書き」の場合、ブラウザからアクセスしてのテスト(すなわち実運用と同じことをやってみる)しか
考え付かないのですが・・・。
>>914 だからそもそも設計が素人レベルなんだって。
その設計では単体テストは「不可能」で「無駄」。
そもそも「単体テストができるように作る」ことに意義があるの。
それができない時点で、一定率以上の品質は保てないんだよ。
ただ、ちっこいプログラムしか作ってない分には品質が多少低くても
それほど問題になることはないだろうから、必要はないんじゃない?
下手に中規模以上のシステムを作ってみようとか思わなきゃおっけー。
ユーザ関数は可読性を上げるためにも使ったほうがいい気もするが。 べた書きで困っていないんならそれでいいのかな それである程度の規模のを作ってるんだとしたら引き継ぎたいとは思わんが・・・
>>914 いや、それもちゃんとしたテストだよ。
例えば顧客管理という機能があったとして、もうちょっと細かく分けると顧客の登録、削除、更新って言う機能が
必要だってのはなんとなく分かるでしょ?
で、登録、削除、更新って言う機能を別々に作ってそれぞれがちゃんと動くかテストする。これが単体テスト。
それが上手く行けば次はそれぞれをくっつけて全体としてちゃんと動くかテストする。これが結合テスト。
本当はさらに顧客の登録だけでも細かく分けるから上記の例が100%正しい訳では決して無いけど、とりあえずイメー
ジとしてはこういうもんだって把握しとけ。
可読性の高いプログラムってどんなのだ?俺は未だに答えが見つからん・・・ ユーザ関数とか使われるといちいちその関数を探すのがメンドクサイ。
関数やクラスは入出力のみ明確にされたシンプルな機能をブラックボックスに閉じ込めることで ・呼び出し側ではその中身まで意識しなくても全体の動作を読める ・関数側では自身のみに着目して機能と実装を検討できる という可読性のメリットがはじめて得られるわけで、そもそもは全体をまとめて読む必要を無くすもの。 しかし、正しい設計で作られた関数でなければそれらのメリットは生まれない。 いちいち関数を呼んでる場所毎にその中身を追っかけなきゃいけないんなら それは関数の設計自体がどっかおかしいんだろう。
>>914 まったくもって、それでOKですよ
逆に、それが一番望ましいのです
テスト用のアクションリストを作成して
UI経由で人間が直にテストしていく行為を行わないベンダーが多くてね
まぁ丸投げの世界じゃ、口頭で「テストしたか?」程度が現実w
システムっていってもさ
小規模も中規模も大規模もかわらないって
ぶっちゃげネットワークが大きいか小さいか、ノード数が多いか、少ないかだよ
だからパフォーマンスチェックは、どのベンダーも意外と真面目ねw
なので考えに間違いがないので安心してね
>>918 機能追加のしやすさを考えれば自然と流れの読みやすいものになるよ。
関数名探すのが面倒ってのはエディタが悪い。
もしくは関数をどのファイルに関連付けるか整理できてない。
ってかPHPごときで、そんな大規模なプログラムにはならなんでしょ。
blog辺りかそれ以上の規模くらいで十分考慮しなきゃいけないレベルだと思うが。 まさか埋め込みメールフォームとかのレベルの話じゃないだろうな。
924 :
軟式PHP :2006/08/22(火) 09:58:06 ID:???
>>922 それが大企業から降りてきたプロジェクトなどは、
CI > 単体テスト > 結合テストとか結構ややこしい手順を踏まないといけないことがあるよ。
規模の大小にかかわらず、ユニットテストはしてもらいたいものだが 少なくとも、コアになるような処理に関してはね
PukiWikiのソースをちょっと見てみたけど、あれは参考に……なる? 処理ごとに細かくユーザ定義関数が用意されているんだけど。
読む力が十分に備わった人なら。
928 :
914 :2006/08/22(火) 12:10:13 ID:???
>>915 そうですね。確実に素人の考えです。でも「プロ」のやり方が正しいかどうかは分かりません。
俺は複数人数で開発してるわけじゃないので、プロのやり方がひどく無駄で非効率に感じてしまう時があります。
なぜ単体テストと品質が直結するのか、いまいち納得がいきません。そのやり方が全てではないと思います。
>>916 可読性という点では、ベタ書きですがかなり気をつけて書いています。
ただそれは「自分が分かりやすい」というものでしょうから、
たしかに誰かに引き継ぐとなると、引き継いだほうは多少大変かもしれません。
ただベタ書きとはいっても、一つ一つの処理は、だいたい一つの流れでまとまっているわけで、
その近辺だけを読めばだいたい分かるようになっています。
929 :
914 :2006/08/22(火) 12:35:40 ID:???
>>917 なるほど、そういうイメージなんですね。分かりやすいです。
ちなみに俺はベタ書きですが、「顧客の登録、削除、更新」があったとして、
それぞれの機能の終わりの部分にexit;を挿入してテストしてますので、結果的に単体テスト…になってるのかな??
>>920 そうなんですか、ちょっとホッとしましたw
俺の考えでは、要するに最終的に実際の運用で想定されるあらゆる操作・アクションを
漏れなく実行してみるテストをすればそれでいいのでは?・・・という感じです。
930 :
914 :2006/08/22(火) 12:37:15 ID:???
>>925 たとえば自作関数が期待通りの動作をするかどうかは当然チェックしてるので、
たぶん、みなさんが言うところの「ユニットテスト」に当たるものは
無意識にやってるんだと思います。
>>929 > 俺の考えでは、要するに最終的に実際の運用で想定されるあらゆる操作・アクションを
> 漏れなく実行してみるテストをすればそれでいいのでは?・・・という感じです。
たぶん網羅してるつもりでも出来てない気がする。
テストすべき条件が3つある処理が2つあったとして、それを同じ関数に入れると
3の2乗個の条件になる。入れれば入れるほど条件は増えるが、必ず全てを網羅できるか?
予算と時間がしっかり与えられてればテスト書くんだけどね。 実際はそんな暇ない。 フリーでやってたりすると、お客さん(発注側)がかなり無理を言うので。 普通の企業で2人月の仕事を2週間でやってくれとか、 納品まで数日しか無い所で呼ばれるとか…。 テストファーストとか言っても、まるで書いてる暇がない。
>>931 関数個別の入出力のテストはそれはそれでやっています。
あと、条件を網羅できてるかどうかは、テストの手法に関わらず気をつけるべき
ポイントであり、テストの手法には直接関係ないですよね?
あと、ユーザ入力の値(範囲)チェックやバリデートを厳密にやっているので、
関数に入れてテストすべき条件はさほど多くならないようにしています。
>>933 そこまで断言できるならここで意見を求める事もないだろう。
独自の道を進めばいいんじゃないか。
けど経験則で言うと、別に劣ってないからやらなくて良いでしょって言う時は
やらなくて良い口実を探してる事が多いんだよな。
>>934 それは違うんじゃね??
下請けチームで歯車作業をやる時の手法は、あくまでも歯車用だろ。
>>930 ユニットテストは初期開発時以外でも、リファクタリングするときにも使う
テスト用の条件をテキストに書き残して、機能を変更したときにそれをもう一度
手で行うのはめんどうなので、自動的に行ってくれるユニットテストツールが
重宝される
test
天使のスプーンですくったら
ほっぺがおちるよミラクルワールド
カモーネカモネ ミラクルかもね
作って美味香 ナンバーワン
ビビンバ ズッパ タンタンメン
クスクス カタプラーナでポイ!
味にうるさいクレオパトラも
食わず嫌いのナポレオンも
みんな大好き魔法の呪文
とっておきの呪文だよ
天使のスプーンですくったら
魔法の呪文を ハリラハリラハラリー(ハイ!)
カモーネカモネ ミラクルかもね
作って美味香 ナンバーワン
ビビンバ ズッパ タンタンメン
クスクス カタプラーナでポイ!
(NHK教育 18:00 - 18:10)
http://www.youtube.com/watch?v=tmELQUsLu2o
939 :
914 :2006/08/22(火) 14:41:38 ID:???
>>936 なるほど、それは一理あるというか、説得力がありますね。
>>935 歯車になる気は無いし、複雑な問題を単純化しなくても解けるし、
忘れた頃に自分の書いたコードを読み返してもすぐ理解できるし、
もしかしたら二度と忘れる事はないんでしょう。
夏っぽいな チーム開発した事なく自己過信気味の駆け出し君に ユニットテストの恩恵なんか説明しようとしても無駄 質問者と回答者のやり取りも微妙に噛みあってない 禅問答やってる暇があったらコード書いてた方がいい
コード書いて教えてくれればいいじゃん。 時間がもったいないだろ p
じゃ情報オリムピックの問題をPHPで解いてみよう
947 :
946 :2006/08/22(火) 17:25:02 ID:bNxpCiwi
>>946 あーみにくくなった
出力例2は
4 1 1 1
じゃ無いかって事
>>946 例は間違ってないよ
三角不等式について調べてみるといい
>>948 あーごめん、問題文をきちんと把握出来てなかった。
途中で処理止めずに全部判定してたわテヘ
950 :
946 :2006/08/22(火) 17:49:10 ID:bNxpCiwi
ちなみにforeachを抜け出すっていうか終了させる方法って無いんだっけ? ユーザ関数化しちゃえばいいんだけどさ
あるよ
>>943 先生!PHP却下です!!
>本選ではC/C++とJavaだけが使えます
だからあえてPHPで解くんじゃないの
>>952 はきっと自己判断が出来ないって言われるタイプなんだろうな
>>950 foreachを抜け出す処理をするユーザ関数を見てみたい
>>955 function hogehoge
{
foreache($hoge as $var)
{
return $var;
}
}
百歩譲ってそれ何に使うの
>>941 そりゃチーム開発にはOOPだのユニットテストだの必須だが、
別にそれが必ずしも優れてるとか絶対とかってわけじゃないだろう
自己過信気味で頭が硬直化してるのはむしろ喪前では?
文法ミスりまくりだし ただ一つ目の要素返して終わりで何をしたいのかわからない
>>949 うそこくでねえだ
全部判定したら4 1 2 1だ
途中である条件を満たしたら中断したいようなループは while使いたいな。
963 :
(^ω^) :2006/08/22(火) 20:01:16 ID:???
解答書くお
964 :
(^ω^) :2006/08/22(火) 20:04:57 ID:???
<?php $file_name = "01.txt"; /* ここからプログラム */ $tri = 0; // 三角形 $r_tri = 0; // 直角 $a_tri = 0; // 鋭角 $o_tri = 0; // 鈍角 $fp = fopen($file_name, "r") or die("ファイル読めねーよ馬鹿"); while(true) { $res = sscanf(rtrim(fgets($fp)), "%d %d %d"); //値の数が3以下なら終わり if (count($res) != 3) break; sort($res); // 三角形でなければ、さようなら if ($res[0] + $res[1] <= $res[2]) break; // 終わり ++$tri; // 直角三角形 if ($res[0] * $res[0] + $res[1] * $res[1] == $res[2] * $res[2]) ++$r_tri; continue; // 鋭角三角形 if ($res[0] * $res[0] + $res[1] * $res[1] > $res[2] * $res[2]) ++$a_tri; continue; ++$o_tri; } fclose($fp); echo join(" ", array($tri, $r_tri, $a_tri, $o_tri)); ?>
965 :
(^ω^) :2006/08/22(火) 20:07:23 ID:???
ごめん、直角三角形と鋭角三角形の部分に{ }が必要だった
DOMDocumentでファイルにXMLツリーを書き出すときの排他制御は どうやるんですか?
そういえば、WinのApache 2.2.3でPHP5は使えるようになったのでしょうか?
開発のテストだけどさ、テストを行う根本的な理由はさ、運用開始したときにバグが発生してまいったなこりゃ ってことにならないように行うものだよ だからさ、バグがありませんよって示せるようなテスト結果があればいいってことだよ 単体テスト、結合テストってプロジェクトの規模によって複数階層別になるし ほかのみんなが言っている単体テストを質問者のプログラムに直接対応させるのは おかしいと思う 単体テスト=個々の機能テスト 結合テスト=複数の連携テスト ようはバグがあとあとでてこないように、発生しうるルートをすべて網羅できるように、 小さい機能から先にテストしておきましょうってことかな 複数の機能が連動するようなテストだと、すべて網羅することは難しいからね
969 :
nobodyさん :2006/08/22(火) 22:35:57 ID:pY0h5YuJ
質問でございます〜 環境はPHP5, Mysql5, Fedora5 クライアントの要望で、PHP、SQLの環境で、スプレッドシート(セル)形式のUIを作って欲しいと。 なぜか? と聞いたら、取引先のxlsからコピーできたりしたら、素晴らしいことでしょ? それとライセンスの関係でエクセルが無いPCがあるので、エクセルに依存してるのは駄目だと。 との答え。 はい。 途方にくれました。 まず、エクセル以外のスプレッドシート… 思い浮かびません。色々調べたけど、英語過ぎて分からなかった。ライセンス激高いソフトは発見したけど、SQLの兼ね合いがまるで不明。 それになんらかのスプレッドシートを作ってもSQLから出力できるのかと。 明日一日調べる予定だけど、英語てんでだから、難しいだろうなぁ;; 皆さんお知恵があれば、助けてください;;
>>969 それ、いくらで作るの?100万とかじゃないよね。
まぁ、そんなあなたに
つ Google Spreadsheets
971 :
nobodyさん :2006/08/22(火) 23:18:42 ID:pY0h5YuJ
>970 100ってことはないと思いますね。PMと営業にまだ聞いてないので、詳しくは知りません。 Google Spreadsheetsですか〜 ちょっと調べてみます〜 HTMLにさえ入れられれば… ☆(ゝω・)vキャピ
CSRF対策で、リファラのチェックってどうやるのがベストですか?? 一応考え付いた方法は、$_SERVER['HTTP_REFERER']と$_SERVER['HTTP_HOST']を 取得して、$_SERVER['HTTP_REFERER']の文字列の中に$_SERVER['HTTP_HOST']が 含まれてるかどうかをチェックするというもの。 これだと何かマズイ点とかありますでしょうか?
>>972 リファラのチェックはそれでも良いだろうが、リファラなんて
簡単に偽装出来てしまうぞ。
>>973 CSRF対策での話なので、リファラ偽装は関係ないと思いますが・・・。
CSRFによる被害を受けちゃう本人がリファラを偽装してる分には
その人自身の責任ですからね。
リファラなんて返さない人も多いのに、対策でアテになんのかそれ。
PHPでメールを送るときにmail関数を使ってるんだけどなぜか件名だけ文字化けする・・・ =?iso-2022-jp?B?".base64_encode(mb_convert_encoding("ここに日本語の件名","JIS","EUC-JP"))."?="; って言う指定をしたらある程度文字化けを防げるようになったんだけど、一部の人間はまだ文字化けしてるって言ってる。 誰かヒントください!
>>975 リファラを返さないようなキモヲタには
そもそもシステムを使わせませんので大丈夫です。
>>978 ノートン入れて標準の設定で使ってたらキモオタかよ…頭大丈夫か?
>>969 話からすると、会社的にもうその仕事は受けちゃってるんだね。乙。
自分なら断るけど。
>>969 そのクライアントがスプレッドシートに何を期待してるんだか分からん。
単に縦横にカラムが並んでればそれだけでいいのか?
>>979 まあノートン自体がキモいというかウザいけどね。
でもノートンをウザがるのがむしろオタクだよな。普通の人はそんなの気にしない。
>>983 それはあるな。
ただ、一番最初のIEの起動でさえ止めようとするあの男気には天晴れというほか無い。
>>977 あんまりメール系やらないから分からないけどmb_send_mailとかじゃダメなの?
>>977 この話題 1 ヶ月に 3 度は出るね。
MIME エンコードしろ。
>>985 ここ最近の過去スレでこの質問出てたっけ??
1ヶ月以上前じゃないか
>>988 範囲の起点が違うんじゃね?
どーでもいい。とにかく FAQ だ。
WEBの1画面で、実行するSQLの数ってどのくらいだろう カテゴリを表示する処理で、 カテゴリA10 x カテゴリB10(カテゴリA1つの付10個存在) で = 100回もの SQLを発行することになったんだけど、これって効率悪いですよね 最終的には下のように表示したいので、それぞれカテゴリA、カテゴリBの配列があればいいかな って思ってこうやったんですが、何かうまい方法ってないんでしょうか カテゴリA名1 カテゴリB名1、 カテゴリB名2、 カテゴリB名3 .... カテゴリA名2 カテゴリB名1、 カテゴリB名2、 カテゴリB名3 ....
>>991 SQLの内容にもよるよ。軽いSQLなら100回くらいやっても別に問題ない。
回数よりトータルの待ち時間と、実行中のDBサーバー負荷が肝心。
それが過負荷になってるならカテゴリBの取得をまとめてやっておいて
PHPの配列処理で分配する方法も効果があるが、そういうのは
現物でベンチマークでも取りながらチューニングしないと何とも言えんよ。
で、とりあえず質問するならカテゴリAとBがDBのテーブルにどういう風に格納されてて
どんなSQLで拾ってるのか書いてくれんことにはアドバイスのしようがない。
多分、カテゴリBのSQLと配列への格納の仕方を手直しすれば一発で引けるとは思うが。
>>991 > カテゴリA名1
> カテゴリB名1、 カテゴリB名2、 カテゴリB名3 ....
> カテゴリA名2
> カテゴリB名1、 カテゴリB名2、 カテゴリB名3 ....
カテゴリA名1内のカテゴリB名1と、カテゴリA名2内のカテゴリB名1ってのは同じなのか?別物なのか?
>981 >単に縦横にカラムが並んでればそれだけでいいのか? そういうニュアンスのことを言われました〜。 Google Spreadsheets ちょっと見てみたけど、ヒントをくれた方は、JavaScriptでHTMLの中に入れてやれってことだったのかなぁ。 色々やってみたけど、上手い使いまわしはできなかたぁ〜。
>>994 そういうニュアンスだと「xlsからコピーできたら素晴らしい」とはならん気がするんだが…
どうやってコピーする気なんだよ、それ。
なんかクライアントが壮絶な勘違いと過大な期待をしてるような気がして仕方がない。
>>995 俺もそう思う
お馬鹿な客っぽいから、グラフなんかもCOPYさせろとか言われそうw
素直にxlsファイル読み込みで、テーブルに表示させて、ゴリ押しだな
>>969 欲しいものがクライアントも理解できていない、典型的な例に見えるね
好意的に解釈するのなら
・スプレッドシート形式のUIが欲しい
・xlsファイルのインポート機能も欲しい
・だからと言って、まずxlsファイルを編集して、インポートする機能だけのものは駄目だ
また、エクセルをインストールしないと使えない処理も不可
と言うことじゃないかな
それでも、まともなスプレッドシート機能を実現するのはかなりめんどうだとは思うが
動的な列や行の追加やらなんやら…
>>997 OpenOfficeをお薦めすればいい
まぁかなり使い勝手悪いけどな
999 :
軟式PHP :2006/08/23(水) 11:54:09 ID:???
すれ違いだが、どっかの役所はOpenOffice使ってるって前TVで見たなぁ。
1000なら明日PHP5.2.0発表
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。