【PHP】下らねぇ質問はここに書き込みやがれ 43
1 :
nobodyさん :
2007/04/01(日) 04:21:50 ID:VGqlLhlD
2 :
nobodyさん :2007/04/01(日) 04:23:02 ID:VGqlLhlD
【簡易FAQ】
1.文字コードは何を使えばいいの?
→1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
→ Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
→ cronかタスクスケジューラを使え。
7.extractって危険なの?
→変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
→ .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
10. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
→ よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 15. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
→ C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
→19.を参照
21. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
12のPHP最適化テクニック
ttp://phpspot.org/blog/archives/2006/11/12php.html 01. staticメソッドが使えるなら使おう。速度は4倍になる
02. __get, __set, __autoload は使わない
03. require_once は重い
04. include, requireで読み込むファイルはフルパスにしよう
05. スクリプト開始時のUNIXタイムを $_SERVER['REQUEST_TIME'] で取れる
06. strncasecmp関数やstrpbrk関数を使えるケースはこれらを使い、正規表現は使わない
07. preg_replaceはstr_replaceより速い、しかし、strtrはpreg_replaceより4倍速い
08. 引数を、単体か配列かで自動判別するようなコードは出来るだけ避ける
09. @ を使ったエラー制御はとても遅い。→ @fputs($fp, "?");
10. $row["id"] は $row[id] より7倍速い
11. PHPのエラーメッセージは重い( noticeとかwarningとか)
12. for ($x=0; $x < count($array); $x) のように、forの中でcountを使うと毎回countが呼ばれるので使わない。
(参考)
PHPの最適化は本当か?
ttp://jigen.aruko.net/archives/433/
ゝ f/:.:r| .:.:|) {.|{/:.:.:{〈:.:... .:.:.:.:.l) , ‐ ' "´ ̄ ̄ ̄ 丶、 z|j:.:.:.:.ヒ| |) , '´ _r─'´ ̄`ー-、_ ヽ 仁\:.:(| . . :.:.:.:.. . |}- 、 r‐ ''" ノ´ ※ ※ ヽ 丶 ヾ'´  ̄  ̄ ヾ) `ヽ | ..::::-┴´ ̄` ̄` ̄`ー、_ `ヽ ヽ (ハ ___ ヾ) ヾヽY'´ : : : : : : : : ヽ ※ ヽ '、 / (ハ/ `ヽ、」) l∧ / / : : : : l : :ゝ、 l. ', ヽ '、 l } }/: : /: / :/ : l : : ヽ ※ヽ ', 丶 '、 l l ノノl: : /: : /: : /: /: ハ : : :ヽ { '、 丶、 ヽノ_ j/ {: l!: :⊥、/: : /.:/. /|: : .l ヽソ ハ ,.. -─‐`──-ヽヽ__ l: |l: :l :トリ_`ー':^/: {、 ヽ: : : | : : |_,..ィ'´ ̄ "´ `} ̄〕人:弋 じぇ、"´ 、 `丶、_ヽ.:l: /: : l|:. | ___ /辷 ム `ト `"'゙ '^ぅテォ-テ/./: /: /l.:..:.| 二三 ̄ ̄___ >ン三7 ∧ 八 , ヾジ /.イ: :/. /: .l : | 下らねぇ質問は : . : .  ̄ノ≡=ァ こ}※ \__ トー‐、 __ ノ_ .イ//_:_:_l..| ここに書き込みやがれですぅ ニニニニヽ、____/ ´フ 匸l/⌒ 、 )ヽ___ノ _ .. イ ̄※ ノ厂兀l.| \:. _:_:_:フ、_ // て/ ´ ヽ`三/ ┴、 / ノし }: : l| : . : . : . ト、\ /::/ (_{ }{"´ ヽ |〃_. イJ´ l: : : | : . : . : ..| ヽ Y::/ /(\ _ ノ)ヽ___、._丿「 /勹 l: : : :| ヽ| |{ /三\ / ヽ几_厂|/し、__兀r '" ヽ | : . : |
10get
てst
12 :
1 :2007/04/01(日) 06:22:21 ID:VGqlLhlD
スレ立て終わって元スレに連絡しようと思ったら何故かアク禁に巻き込まれた それはそうと41のURLを書き込めてないな・・・歯抜けテンプレ乙
sage
元々過去ログでどんどん長くなっていったから、 最新の5件ぐらいだけのせようって話だったはずなんだが、 やっぱ自然と伸びちゃうよなw
正規表現の書き方がいまいちわかりません 「(07/4/01 09:05:48)」という文字列があったとして 4/01にマッチさせるにはどうすればよいでしょ? [0-9]+/[0-9]+とすると07/4が引っかかってしまいます
$str = '07/4/01 09:05:48'; if (preg_match('/([0-9]{1,})\/([0-9]{2})/', $str, $match)) { print_r($match); }
>>16 レスどうもです
詳しく書き忘れました形式は年/月/日なんですが月/日がほしいんです
月は10月とかの場合
07/10/01になっちゃうのでやっぱり07/10が引っかかっちゃいます
[0-9]+\/[0-9]+\/[0-9]+\/ 3つスラッシュを書けばいいだけじゃないのか
ああすまん [0-9]+\/[0-9]+\/[0-9]+ 2つスラッシュのまちがいだw [0-9]+\/[0-9]+\/[0-9]+ [0-9]+ でいいだろう
20 :
nobodyさん :2007/04/01(日) 11:14:53 ID:sjAh9xV+
朝起きたら何かApacheが強制終了してる・・・
>>18-19 レスどうもです
年/月/日から月/日だけを取り出したいので
3つともマッチさせちゃうとマズイんです
>>15 preg_match("/^\(\d{1,2}\/(\d{1,2}\/\d{1,2}).+$/", $date, $match);
echo $match[1];
いみがワカラン 3つマッチしてうしろの二つをpreg_replaceで$2$3で取り出せばいいだけでしょ。 preg_match使う必要も無い。
前スレで7についていろいろ書かれていたことを無視した
>>1 乙
>>22-23 うまくできました
ありがとうございます
$2$3とか使えるんですね知りませんでした
26 :
nobodyさん :2007/04/01(日) 12:19:31 ID:sjAh9xV+
ファイルアップロードして、データベースに保存できるってきいたんだけどマジ?
できるけど普通に重い
>>14 俺が立てるときはちゃんと古いの削ってるよ。
手抜きしなきゃいいだけ。
>>24 じゃあテンプレに反映できるようにお前が7を書き換えろよ。
文句だけなら幾らでも言える。
30 :
nobodyさん :2007/04/01(日) 17:40:44 ID:f8tvvBL3
PHPで携帯用のサイトを作っています。 PC用では各パーツ(ヘッダー・フッター・メインコンテンツなど)に分けて includeしていましたが、携帯用だと容量の制限もあって、必要最小限の ファイルしか読み込まないようにしなければいけないみたいです。 そこで質問ですが、プログラム処理もすべて1つのファイルに書く方法 にした方が良いのでしょうか?それとも共通するファイルはincludeして 読み込む方式にした方が良いのでしょうか? PHPで携帯サイトを作られている方、アドバイスお願いします。
>いけないみたいです ×
32 :
nobodyさん :2007/04/01(日) 17:52:48 ID:PifCmp3g
ADODBをつかっています。 Connect もしくは PConnect でデータベースへの接続に失敗したとき、 失敗した理由を知るために何らかの方法は用意されているのでしょうか? たとえばエラーメッセージとかエラーコードを得る方法はあるのでしょうか?
標準関数にADODB関数なんてないんだけど
>>30 100個ファイルをincludeしようが、
全部一つに詰め込んで1GBぐらいのファイルになろうが、
要は出力する容量が携帯で読み込める容量になればいいだけ
お好きなようにとか言いようがない
共通部分を切り出そうが、関数に切り分けようが、
クラスファイル化してオブジェクト指向しようが、
それもお好きなように
>>30 携帯用だろうがなんだろうが、全く関係ない
携帯用に小さくする必要があるのは
スクリプトではなく、出力する部分だけだ
37 :
nobodyさん :2007/04/01(日) 19:09:16 ID:PifCmp3g
>>36 THX
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (11)
か・・・・うむむ、結局 MySQL 側の max_connections に引っかかってるのかな。
PHP 側では自主規制(?)で接続数に上限設けてるとか無いですよね?
mysqldはちゃんと立ち上がってるのか?
pdoでSET NAMESを送る時ってexecとqueryのどちらを使っていますか?
40 :
30 :2007/04/01(日) 19:25:53 ID:f8tvvBL3
>>34-35 ありがとうございます。大変参考になりました。
それにしても携帯用ってややこしいですね・・。
これまで作ったクラスファイルはすべてEUCなのですが、
携帯ではShift-JISじゃないと駄目みたいなので、文字化けしまくりです・・。
出力時にSJISに変換すればいいだけだろ
ぐぐってもよくわからなかったのですが、セッションIDって ランダムの文字列を生成するのですよね? その文字列を保持してsession_start();で有効にするとか。
>>42 お前も「初めてPHP入門」みたいな本かって半年勉強しろ
>>37 1.MySQLが立ち上がっているか
2.socket が /var/lib/mysql/mysql.sock に存在するか
3.MySQLへのアクセス許可がちゃんと行われているか
2は注意
パッケージ管理ソフトとかでインストールした場合は
普通起こらないが、ソースリビルドして自分でインストール
した場合は、PHPとMySQLのソケット設定が一致しない
ことがある
46 :
nobodyさん :2007/04/01(日) 22:50:44 ID:GJ1EFI8C
47 :
nobodyさん :2007/04/01(日) 23:11:30 ID:sjAh9xV+
携帯でキャリア別にページを飛ばしたいのですが、 やはりブラウザで判別したほうが良いのでしょうか? それ以外にお勧めがあれば教えてください。
49 :
nobodyさん :2007/04/02(月) 00:34:19 ID:7Cj9Qr8c
数百数千というデータを一覧表示させる場合テーブルを作ってループさせるしか方法は無いでしょうか? datagridみたいなものはPHPだとひょっとして無い?
50 :
nobodyさん :2007/04/02(月) 00:37:32 ID:616HGYvF
現在から一週間先までのスケジュールをMySQLから取得して表示するプログラムを書きたいと思っています. で,年や月のつなぎ目でも単に7日間表示するので,大本の日付データは年月依存でなくするべきですよね. そうするとUNIX時間を使うのが最も適当なのでしょうか? また,月は初めの日だけ表示して,年・月が変わった日だけ再表示したいのですが, 毎回ifで判断するのはアレですよね.何かいい方法があればご教授くださいm(__)m
>>49 階層があるのかどうかハッキリしなさい!
なんにしろDataGridみないなのはPHPにはない。
というか.NET系言語にしかないだろ
>>50 言いたいことが今一俺には理解できない。
やりなおし!
52 :
49 :2007/04/02(月) 01:00:20 ID:???
無いならしょうがないですね・・・ SELECT文とGETを駆使してなんちゃってGridを作ってみます
>>52 階層掘るときにajaxで通信させたらそれっぽくなるんじゃない?
>>49 そもそもHTMLをターゲットにするなら、最終的にはhtmlか画像しか選択肢は無いだろう・・
受け渡しならXMLとかあるだろうけど
俺言ってること的外れ?
最高に行き詰りました。どなたかアドバイス願います。 ファイルを二つ用意します。一つは設定ファイルset.php、一つは表示用のファイルindex.phpです。 index.phpを以下のように記述します。 require 'set.php'; $test "あああ"; Set(); set.phpに以下の用に記述します。 function Set(){ global $test; $test2 = "あああ"; if($test == "$test2"){print"同じ";} else{print"違う";} } で「違う」になってしまいます。 print分で確認すると print"$test$test2"; どっちも「あああ」「あああ」です。 ダンプで見ても同じです。文字コードとかもいろいろ弄りましたが、変わりませんでした。 見た目同じなのに判定は違うのでmysqlで検索にヒットしなくて困ってしまっています。 どなたかわかる方いますでしょうか? php4.3.11 apache2 を使っています。
$test = "あああ";
>56 すんません。おおぼけかましてますた。 やっぱり文字コードでした。ftpでDLした時に全部sjisに変わってた模様です。 どもでした。
ヽ(・ω・)/ ズコー \(.\ ノ
60 :
nobodyさん :2007/04/02(月) 05:33:18 ID:??? BE:435046638-2BP(396)
下記記述だとテキストログ末尾にログが追加されていくんですが 先頭に最新ログを記述する方法はないでしょうか? $wlog=fopen("comment.txt","a"); flock($wlog, LOCK_EX); fputs($wlog, $wdata);//$commentlogの最初の行に$dataを追加 flock ($wlog, LOCK_UN); //ファイルロック解除 fclose($wlog);//ファイルを閉じる
61 :
nobodyさん :2007/04/02(月) 05:33:58 ID:??? BE:543807465-2BP(396)
//$commentlogの最初の行に$dataを追加 このコメントはただのミスです。
63 :
nobodyさん :2007/04/02(月) 06:39:09 ID:??? BE:1141995097-2BP(396)
>>62 無理なようですね・・・・・・ありがとうございました。
>>63 w+かr+で一旦全部読み込んで先頭行から書き出しなおせば出来るがな。
65 :
nobodyさん :2007/04/02(月) 09:41:31 ID:5RNu93m7
//アクセスをトリガにcronぽい処理をする //$logはログファイル $intervalは更新インターバル if(file_exists($log)){ //現在時刻 - $logの更新時刻 が更新インターバルより小さかったらそこで終了 if($interval > time() - filemtime($log)){ return; } } //if(file_exists($log)) //$logを出力 $handle = fopen($log, 'w'); fwrite($handle, "a"); fclose($handle); //ここから断続的にファイル読み書き //ここまで断続的にファイル読み書き -- こんなの書いた。でもこれ条件満たすときに同時にアクセス来たら同時に実行されちゃうよね。 一つのプロセスでだけこのcronもどき使うにはどうすればいい? ロック用ファイルでロックして囲うのかな でもどこをどう囲えばいいのかよくわかんないんで教えてください
>//アクセスをトリガにcronぽい処理をする にもかかわらず、「同時」を心配して、それをトリガー後の処理で あれこれ考えるいうロジック自体を再検討すべきでしょう。
多少PHPに関係する質問です。 PHPとDBが使える無料レンタルサーバーおしえてください。
例えば.NETでは正規表現オブジェクトを初期化したときにコンパイルされてバイトコードに変換されるらしいんですが、 PHPではそういった類の最適化はなされてるんでしょうか? それともループ中で同じ正規表現を使用した場合、毎回解析されるんでしょうか?
( ´,_ゝ`)プッ
>>70 PHPの文法に正規表現リテラルがないし(インタプリタは正規表現を知らない)、
関数に正規表現文字列を渡す実装だから毎回解析じゃないのかな。
73 :
70 :2007/04/02(月) 14:09:15 ID:???
>>72 なるほど、やっぱりそうですよね。
もしかしたら言語側で特別扱いしてる可能性もあるかもなーと思ったんですが。
どうもでした。
PCREライブラリ的にはコンパイルした正規表現を保持することも可能。 実装を読んでみないとなんとも。読む気は無いけど。
75 :
nobodyさん :2007/04/02(月) 18:26:46 ID:z0wpzeSt
PHP5.1.xで所定のディレクトリにファイルがあったらPOSTでアップロードするプログラムを作成中。 バッチは一定時間おきにcronで起動。 <form method="post" action="upload.php"> <input type="file" name="fileobj" value=""> <input type="text" name="filename" value=""> <input type="text" name="param" value="1000"> </form> ↑これで受け取り側 upload.php は正常動作確認済み。 で、送信するバッチファイルのサンプル無いかな? FORMを利用したサンプルはいくつも出てくるんだが。
77 :
75 :2007/04/02(月) 19:00:55 ID:???
それです。下のような感じで単純にいけるはず。
$aPOST_VARS['fileobj'] ='@'.$file;
$aPOST_VARS['filename'] = $filename;
$uri = '
http://localhost/upload.php ';
$ch = curl_init($uri);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $aPOST_VARS);
curl_exec($ch);
>>76 サンプルソースまでご丁寧にありがとうございます。
助かります。
画像のアップローダを作成したいと思っていますが
2Byte文字列のファイル名をrenameしなおしたり、
データベースにinsert発行する前にidなんかを振る為に
一旦テンポラリに落とそうと思っています。
http://example.com/upload.html (GUI)
→
http://example.com/temp.php (file受け取り用php)
条件を満たすファイルであれば/tmp/に一旦copy。
ここまではリアルタイム処理で行います。
Linuxのcronコマンドを利用して1時間毎に/tmp/をチェックしにいき、
アップロード対象となるファイルが存在した場合にアイデアを頂いたファイルアップローダを起動させ、
レンタルサーバにアップロードします。
http://example.com/tmp/ (画像ファイル)→
http://example-2.com/ (画像用ディレクトリ)
やりたい事ってのは最終的に格納するサーバの前に、
バックアップの意味を含めてワンクッションおきたいと思ってるんです。
example-2.comにアップロードが成功した画像は
cronで呼び出される別のバッチでexample.com/tmp/からは削除します。
ってな事をやりたいと思うのです。
リアルタイムでアップロードしちゃえれば一番いいんですが、
諸事情でワンクッション置く必要があるので。
ほうほう、それでそれで?
いやそれ以上もそれ以下も無いのですがorz 勉強がてらうpろだ作りたかったのですが、 レンタル鯖の環境的な問題もあってそんな風にした次第です。
84 :
76,78 :2007/04/02(月) 20:50:28 ID:???
>>82 それで終わりだろ。お前はなにをいいたんだ?
アップローダなのに最長1時間も結果が返ってこないってのは、 設計的にどうなの?まぁ用途によるけどさ。 YOUレンタル鯖かえちゃいなよ。
>>85 ご忠告ありがとうございます。
将来的にはレンタル鯖借りてリアルタイム処理にしたいと思いますが
今は勉強中って事もあって鯖も友人に無料で使わして貰ってるんで。
それから、用途が仲間内だけで使用予定で
1時間で結果が出せれば用途を満たすんで
とりあえず今のままでよいのです。
普通考えればPOSTでそんな処理をするなんて
七面倒くさいことをしたいってのは、条件制約があるだろうと考えられるはずなのに
恥ずかしいな。
>>85 (多分
>>82 も同一人物)
89 :
85 :2007/04/02(月) 21:36:52 ID:???
あなたがたは世間知らずです
PHP資格って何よ
狭い世間だな
公式のapacheバイナリがSSLつきでおかれてたけどいつからだ!? 一週間苦労してソースからコンパイルに挑戦して挫折した俺様の苦労はどうなるんだよ!
日記ウザ
おまえも同類
>>32 普通にエラーメッセージでない?
$conn->debug = true
ってしてれば実行したクエリから実行したファイルと行から出してくれるし。
文字コードいじったりしないと化けてたりはするけど。
RDBMSによって違うのかな。
個人的には気に入ってるけど、情報が少ないライブラリなんで、
公式マニュアルでなんとかできないならPEARとか当たった方がいいかも。
日本語化されてるのあるけどちと古いんで本家も読まないとだし。
96 :
nobodyさん :2007/04/03(火) 01:51:48 ID:4755nh+U
$var= '$_POST'; var_dump($var); これの$varを展開する方法ありますか?
あります
98 :
nobodyさん :2007/04/03(火) 01:54:50 ID:4755nh+U
だが断る
100 :
nobodyさん :2007/04/03(火) 02:02:11 ID:4755nh+U
そんなこといわずに
何この自演のながれw
104 :
85 :2007/04/03(火) 03:39:38 ID:???
今さらだがちょっとまってくれ!
さすがに回答者側の偽者は出ないでくれよ('A`)
>>88 あと俺は
>>82 じゃないぞ!
82は、超初心者で聞いたことのない言葉(cronやらバッチやら)が出てきて、
勉強がてらどういうことするのか聞きたかっただけだと思う。
htmlファイルにphpを埋め込んで動作させることって可能? phpファイルにしろよとかいうのはナシで。 無理だよねぇ。
>>105 .htmlでPHPを動かすってこと?
なら可能
つ .htaccess
>>106 それがうちのsakuraのサーバだと
AddType application/x-httpd-php .html
でも無理なんよ
108 :
nobodyさん :2007/04/03(火) 08:23:27 ID:ApqIHYc2
AN HTTPDでPHPを動かしたいため php-4.3.11-Win32.zipが欲しいのですが 古いバージョンのものは手に入れることはできないのでしょうか?
>>107 じゃあ諦めろ
その前にI質問するときはID表示させろ
111 :
nobodyさん :2007/04/03(火) 08:55:53 ID:3FiNTxl4
>>105 /usr/local/bin/php を ~/www 下に php.cgi という名前でコピーする。
.htaccessに以下の設定を追加:
Action my-php /php.cgi
AddHandler my-php .html
php.iniで、"cgi.force_redirect"を off にしないこと。
デフォルトでは on になっているので、わからなければいじらないこと。危険です。
ちなみに、さくらではコンテントネゴシエーションがデフォルトで使えるので
拡張子無しで参照することができる。
115 :
nobodyさん :2007/04/03(火) 09:56:40 ID:L8WULHx8
>>111 mb_ereg("^[^!-~]|[^0-9]", $hoge)
じゃなくて
mb_ereg("^[^\!-~]", $hoge)
でしょ。
116 :
111 :2007/04/03(火) 10:42:38 ID:/c/AyO3F
mb_ereg_matchのほうかな? どっちにしても良く分からないんだけど mb_ereg_match ("[a-z]+", "asZ") がtrueを返すのは何ででしょうか? pregは思ったとおりの挙動をするんだけどなあ なんか勘違いしてますか?
それでtrue返るのあたりまえ
正規表現初歩を勉強してから来ましょう。
>>111 見てもわかって無いわ。
ttp://drupal.jpで戦争勃発 隠れJoomlaがdrupal管理者と衝突
カタギのjoomlaか?ヤクザなdrupalか?
でも良く考えたよなぁー オープンソースを占有するなんてさー
タダで日本支部になって価値がが上がれば高く売る。
drupalは成長株だから浸透すればスゴイ価値が付くとおもうよー
GPLだと占有しても刑事事件にならないからねっ
119 :
nobodyさん :2007/04/03(火) 11:28:18 ID:/TnKR6mx
Proxyのチェックプログラムを作りたいのですけど、 $_SERVERのどの変数で判定すればいいのでしょうか? Proxyについての知識は全くないので仕様とかさっぱりなのですが、 最近掲示板(PHPでできたもの)がProxy経由で荒らされてるので、 Proxy判定するプログラムを組み入れたいと思っています。
変数の内容を全部書き出して確認しましたか?
>>119 getHostByAddr($_SERVER['REMOTE_ADDR']) === $_SERVER['REMOTE_ADDR']
これが真になれば逆引きできねーってことになって判定するとか。
122 :
119 :2007/04/03(火) 13:25:08 ID:FtC4cK4M
>>121 ありがとうございます。
教えていただいたものを使ってみたところ、
診断くんで?判定になるProxyでも見事Proxy判定にすることができました。
こんな簡単なスクリプトだとは思っておりませんでした。
まだ取りこぼしているものもあるようなので、
他の方法を探して、それと組み合わせて使うことにします。
php+MySQLで会員制サイト作ってるんですが、 例えば、会員情報の変更phpで、 WHERE句を忘れていて、謝って全会員の情報を変更してしまう、 といったポカミスが発生しやすいあふぉな俺なんですが、 MySQLレベルでこれを防ぐ方法ってないでしょうか。
ユーザの権限制限でいけるだろ。 勉強ならいいが、公開する気なら・・
>>123 バックアップとってから開発とかデバッグとかすればいいんじゃないの?
それ以前に実地以外でテストするとか。
全テーブルをInnoDBとかで作っておいて、 変更する前には必ず BEGIN; で、「あっー」ってときは ROLLBACK; でいいんじゃね?
>>123 つうか、本番環境で作業するな
開発環境を別途作ってやれ
どこにも本番でやってるとも書いてないわけだが
129 :
nobodyさん :2007/04/03(火) 15:20:50 ID:pT0TAH0V
mysqlのmediumtextで格納しているデータを出力できません。 echo $row["comment"]; のような形では出力できないんでしょうか?
130 :
129 :2007/04/03(火) 15:33:12 ID:???
すみません。勘違いでした。
132 :
虚弱PHP :2007/04/03(火) 16:15:10 ID:???
>>123 常にスクリプトを通してDBいじるしかないんじゃ。
スクリプトではWHERE句が付いてなかったらNGとか。
UPDATEには必ずLIMIT句つけるとか。
でも、これだと逆に問題の発覚が遅れる恐れ有り。
echoとprintどっちが速い?
DAOとビジネスロジックとの境界がよく分からないのですが教えて下さい。 例えば複数のデータをinsertする場合、全件のデータをDAOに渡してDAOの中でループさせてクエリを発行しますか? もしくはロジック側でループさせて最小単位まで分割し、1行ごとにDAOを実行しますか? またDAOのメソッドは一つの機能に特化して実装すべきですか?それとも汎用性を持たせるべきですか? where句やorder句などをDAOメソッド内で記述してその条件のみ取得させるか、 ロジックからDAOへ引数としてそれらを渡す形にして他の場所でも使えるようにするかで迷っています。
どっちもかわんない。 おれはデバックはprintにしてメインはecho
138 :
nobodyさん :2007/04/03(火) 16:52:11 ID:UEWlkpj3
ライブチャットみたいなの作りたいんですけど、あれはPHPと何を連携したらいいのですか?
>>135 落ち着け、どこにもPHPと絡んだ質問ないぞ
>>135 時と場合によるとしか言いようがない
DAOのメソッドなんて、追加、更新、削除と
条件検索くらいじゃないの
>>135 DAOのベースになるクラスで汎用的なメソッドを実装して
各モデル毎のDAOで必要になる固有のメソッドを
ベースクラスの汎用的なメソッドを使いつつ実装していけばいいんじゃない?
機能に特化したメソッドにするかしないかは
機能次第で使いまわすケースが多ければ
引数である程度自由度を持たせるとか
その例だと複数のデータをinsertする箇所がたくさんあるなら
それのためだけのメソッドを用意して、そうでなければ
ビジネスロジック側でループさせてもいいんじゃない?
144 :
nobodyさん :2007/04/03(火) 19:11:46 ID:UEWlkpj3
(;´Д`)ハァハァ
>>133 echoのがカンマで区切って複数出力できるので便利。
速度的には変わらん。
おまえらに質問。 ハゲてるだろ?
>>147 なにそれ礼を出してくれると嬉しい。
echo(test,dayo,kana);
とか出来るのかな・・
150 :
nobodyさん :2007/04/03(火) 20:23:09 ID:??? BE:362538645-2BP(396)
ナンバー 名前 内容 日付 パスワード 上記ログが連なったログの一行を削除して 再度番号を振り、配列しなおす場合具体的にどのような プログラムになるのでしょうか?
151 :
149 :2007/04/03(火) 20:24:56 ID:???
>>149 echo "test" , "test" ;
こういう事かな。
ドット( . )でもいいんじゃないの?
>>149 echoに括弧を付けてはいけない。
echo $hoge,$hoge * 1000,number_format($hoge);
ドット演算子だと
echo $hoge.($hoge * 1000).number_format($hoge);
こうしないといけないし内部的に結合してやる必要性はないと思う。
CやPerlから入ってきた身としては、echoでは違和感を感じる・・・ デバックのときくらいしか使わないかな〜
155 :
111 :2007/04/03(火) 21:08:25 ID:3FiNTxl4
>>115 >>117 レスサンクス
var_dump ( mb_ereg ( $pattern, $hoge ,$c ) ) ;
var_dump ( $c ) ;
ってやったら、なんでtrueが帰るのか解りました。
"^[^!-`].*}$"
こんな感じかな?
自分のかきこ良く見ると英数記号とあるけど、半角記号と数字以外の間違いでした。
だから、範囲の指定もこんな感じかな。
>>115 ちなみに[]の中はエスケープ不要みたいですよ。
言わなくていいものを・・・ 俺様に恥をかかせるのか!
157 :
115 :2007/04/03(火) 21:15:52 ID:???
>>155 ちなみにも糞もないなあ。
一般論で書いただけで、それを跡付け学習でエラソウに書くお前はなんだと思うが。
<pre>を使って、print_preなるテスト用の関数を作りました。 これを使うために、いちいちすべてのファイルでrequire_onceするのが面倒なんですが、 何かいい方法はありませんか?
│ ↑ └─┘ おらっしゃあぁぁ!!! ∩∧ ∧ ヽ( ゚Д゚) \⊂\ O-、 )〜 ∪
>>158 意味不明なんだが・・・
>>158 php.ini auto_prepend_file
・PHPで書く
・問答無用で一番最初に読み込まれる
php extensionとしてphpの関数に含める
・Cで書く
別に笑うところじゃないよ
165 :
nobodyさん :2007/04/03(火) 21:49:35 ID:y3kK4c5q
$subject = "needed: two potatoes, three carrots, five tomatoes"; $pattern = '/two (.+)\,/'; preg_match($pattern, $subject, $matches); print_r($matches); /* 出力結果: Array ( [0] => two potatoes, three carrots, [1] => potatoes, three carrots ) */ 正規表現で "potatoes" をマッチさせたいのですが、$matches[1]を見ると コンマの後ろの文字列までマッチしてしまいます。 どうしてでしょうか?
167 :
nobodyさん :2007/04/03(火) 21:56:57 ID:y3kK4c5q
>>166 "potatoes"がマッチするにはどう表現すればいいのでしょうか?
>>165 正規表現は原則として、最長最左一致をします。
これはどういうものかというと、可能な限り長めにマッチするということです。
その正規表現の例で言うと"two "のあとに1文字以上の任意の文字が来て、
その後にカンマがついていればいいことになります。
そしてその最長のパターンはというと、あとは考えてみてくださいw
>>167 $pattern = '/two (potatoes)/';
>>165 $pattern = '/two ([[:alpha:]]+),/';
というか妙な正規表現の使い方だな。
>>153 カッコが省ける
さらに、 カンマは結合しないからローコストって事かな・・
172 :
nobodyさん :2007/04/03(火) 22:07:10 ID:??? BE:507553474-2BP(396)
ナンバー 名前 内容 日付 パスワード 上記ナンバー+1 名前 内容 日付 パスワード 上記ナンバー+1 名前 内容 日付 パスワード このようにログが並んでいるのですが 例えば上から二行目のログのみを 削除する場合具体的にどのような関数を私用すればいいのでしょうか? その際削除した行以降のナンバーを再度正しく振り直したいのです。
>>165 $pattern = '/two (.+?),/';
$pattern = '/two ([^,]+)/';
>>172 必死で書き直してきたか。
いまアドバイス書いてやるからまってろ
175 :
nobodyさん :2007/04/03(火) 22:13:04 ID:y3kK4c5q
自己完結しました(・∀・)
>>172 file_get_contents
explode
implode
file_put_contents
>>172 それ掲示板のログだろ。
なんでナンバーをいじくる必要があるんだよ
>>172 <?php
ログを配列に読み込む処理
配列の上から2件を削除する処理
配列をログに書き込む処理
?>
こんな感じでいかがか?
>>172 がいってるナンバーを正しく振り分ける理由がわからんが、無駄だからやめろ
180 :
nobodyさん :2007/04/03(火) 22:33:57 ID:??? BE:580061748-2BP(396)
>>174 すいません、関数自体あまり把握できてなくて
ちょっとつまづいております、
ありがとうございます。
>>176 関数の意味を調べてみます、
お手数おかけします。
>>177 このログにフォームのラジオボタンつけて出力する時に
利用するからだったと思います。
自分で作っといてあれですが目の前の事で手一杯で。
>>178 十分です、
本当にすいません。
>>178 ログを全部読み込むのかよ…。と思った俺は貧乏人なのかもしれない。
182 :
nobodyさん :2007/04/03(火) 22:43:07 ID:/5XcJrtX
RSSのデータをPEARのXML/Unserializerで取り出して 必要な部分をeucのページに表示させたいと思っています echo mb_convert_encoding($str_utf8, "EUC-JP", "UTF-8"); としてみたのですが、丸数字(@A…)が半角の“?”になってしまいます ご教示いただけませんでしょうか
>>182 php.ini文字コード設定関連をチェック
186 :
172 :2007/04/03(火) 22:52:04 ID:??? BE:1305137489-2BP(396)
187 :
182 :2007/04/03(火) 23:11:04 ID:???
>>184 検索などをしてみてはいたのですが、php.iniの文字コード設定を、
というのが多くていろいろ試行錯誤してみてはいるのですが・・・
再度見直してみたいと思います
>>185 mb_convert_encodingの引数ですよね?今検索して初めて知りました
こちらも試してみたいと思います
おふた方どうもありがとうございました
>>182 ファイルの文字コードを元からutfで作っとけば悩まずにすむ
>>186 1. A君がフォームを表示。
2. B君がフォームを表示。
3. A君が番号2のログを削除。
4. B君が番号3のログを削除。
5. (ノ∀`) アチャー
190 :
172 :2007/04/03(火) 23:24:05 ID:??? BE:870091968-2BP(396)
>>189 現在のプログラム自体アウトですかね?
一応、
現在作成中のものはバリューに入れる番号をコメントは1,2
情報はa1,a2になるようにしようと思うのですが。
そういう問題ではなくて?
191 :
182 :2007/04/03(火) 23:39:28 ID:???
>>188 ほんと、おっしゃる通りだと思います・・・
>>190 横からなんなんですが、削除が起こってもそこを埋めない(書き込み)通番を
持っておくべきだと思います
表示上番号が飛ぶのが気持ち悪いのでしたら行番号を表示されればいいのでは
ないでしょうか
192 :
172 :2007/04/03(火) 23:43:42 ID:??? BE:181269252-2BP(396)
>>191 おっしゃるとおりですね、
行番号をvalueに挿入するようにします。
これがかなりネックになってましたので。
193 :
155 :2007/04/04(水) 00:03:54 ID:jkYA50BD
>>157 そんなつもりはなかったんだ。
「ちなみに」っていうのはまずかったね。
すまん。
ところで
>>155 のレスでもまたASCIIコード見間違えてて微妙に間違ってたOTZ
いないとは思うけど、ここ見てあれ使う人がいたら悪いので一応報告しとく
最初の文字が数字と記号と制御文字以外の文字列にマッチする正規表現は
'^[^\W0-90-9].*$'
こんな感じでどう?
なんか微妙に板違いだけど・・・
>>192 おまえは勘違いしている。行番号はソースにふくめるな。
エディタで行番号表示させて確認するだけにしろ
いや表示のときに連番にすりゃいいだけの話だろ
196 :
172 :2007/04/04(水) 00:25:17 ID:??? BE:435046346-2BP(396)
>>194 count($file)で行数カウント後の番号を利用しちゃ駄目という事ですかね?
197 :
172 :2007/04/04(水) 00:27:27 ID:??? BE:815711459-2BP(396)
>>195 ログを全て表示した時にも
ラジオボタン削除利用したいので
フォームへのvalue値の自動挿入はしときたいのですが
無謀ですかね。
削除されたら名前・内容を“あぼーん”に書き換える処理にしとけば解決。
>>197 番号抜けアリのラジオボタンを並べりゃ「ラジオボタン削除が利用できる」けど
富豪的に
>>178 でやればいいよ。配列に何MB食わせるのか知らないけど。
削除用のラジオボタンとやらをログのナンバーと無関係に連番振って吐いてるのかな。
>>197 っつーか何がしたくて今何が問題なのかがよくわかんないんだけど.。
ログを全て表示した時にラジオボタン削除(って何なのか知らんけど)をするために
フォームへのvalue値の自動挿入(hiddenのことか?)することは
別に無謀でも何でもないからさっさと作ればいいと思うけど
行を削除したあとに連番に数をそろえないていいから。 そろえたものをログに書き込むのは必要ないし効率が悪いからやめたまえ。 ログを配列に読み込んで、その配列を連番でvalueに利用すればおまえのやりたいことはできる。 つべこべいわずだまってマニュアルみろ。 16歳、工業高。
つけわすれた。 氏ね
203 :
172 :2007/04/04(水) 01:02:18 ID:??? BE:815710695-2BP(396)
アドバイス頂いてありがとうございます、
countでカウントしたものを
ラジオ削除のナンバーに置き換えて処理するようにして
それで手におえないようなら
番号抜け削除を次候補という事で考えてみます。
本来ならあぼーんが掲示板の性質上いいのでしょうが
今回は比較的単純なスクリプトで後に大量設置する可能性があるもので
文字数省略できるところはしとこうかと。
>>199 削除用番号はログのナンバーを引用してます。
>>200 すいません、
html部分に先にvalue手打ちで書き込んどけということかと思ったもので
ログ利用では駄目なのかなと。
ってか、DBで行の入れ替えってできないんだな
205 :
172 :2007/04/04(水) 01:03:29 ID:??? BE:580060984-2BP(396)
は?
DBで行の入れ替えができないとでも?
いや行の入れ替えができるとかできないじゃなくて、 そもそも「行の順番」て何だ? DBでそんな概念あるか?
ORDER BYとか指定しない限りINSERTした順に表示されるとかそんな保証はないでしょ
連想配列のキーと値を入れ替える関数あるじゃん? 1年ぐらい前にその関数使ってゴニョゴニョしたら5〜6分かかってたバッチ 処理が2秒で終わったことがあった。 ちゃんとテストして処理に抜けとか問題は無かったけどあまりにも早すぎて 怖くなってから元に戻しておいた。
テストの結果は正しくても、書いたロジックに自信のないvoodooプログラミングなのであればそれが正解かも
213 :
nobodyさん :2007/04/04(水) 01:28:15 ID:??? BE:1468279499-2BP(396)
まだ勉強し始めたばかりですが そんなプログラムの組み立てによって差が出るんですね。 あっても2,3秒のものだと思ってました。
>>172 ツッコまれてる理由は理解したの?
効率とか関係ないから。
> ナンバー 名前 内容 日付 パスワード
「ナンバー」とやらをキーにしてログを削除したいんだろ?
「ナンバー2のログを削除」みたいな感じで。
その「ナンバー」が削除処理の度にコロコロ変わったらマズいのは分かるよな?
分かってるならあとは好きに書けばいい。
>>212 いやマジであれはやばいって絶対何かの呪いだもん
「なんか」で変換すると「男か」ってでるな
216 :
nobodyさん :2007/04/04(水) 01:48:18 ID:??? BE:326284092-2BP(396)
>>214 ナンバーは消して現在こういう感じで処理してます。
explode以降は改修前のままですので今から直しますが。
$cdlog=file('comment.txt');
for($i=0;$i<count($cdlog)-1;$i++){
$cditems=explode("\t",$cdlog[$i]);
if($items[0]==$_POST['delradio']&&$items[4]==$_POST['delkey2']||$items[0]==$_POST['delradio']&&'pass'==$_POST['delkey2']){
>>215 その5分が2秒に劇的改善した処理ってどんなのなの?
>>216 あなたがページを表示したとする。
あなたはname="delradio" value="5"のカキコを削除したいと思った。(削除ボタンはまだ押していない。)
と、ここで他の誰かが割り込んで、name="delradio" value="4"のカキコを削除した。(削除ボタンを押した。サーバ側で削除処理も完了した。)
あなたは削除ボタンを押した。
あなたは目的のカキコを削除できる?
たまたまじゃなくて必ず削除できる?
>>209 格納した順というか、リソート機能ならPHPMyAdminで一発で出来るし
自前でやるとしても簡単なコードで出来るでしょう。
オートインクリメントしてるなら、それでソートすればいいんじゃね?
もっともこれはPHPMyAdminみたいな、基本ORDER BY付けないGUIで見るときに見やすいとかだけで
普通にDBから検索する場合、大抵はORDER BYつけるしリソートすること自体あんまり意味無いと思うが。
220 :
nobodyさん :2007/04/04(水) 02:59:00 ID:??? BE:271903853-2BP(396)
>>218 ファイルロックをしないといけないということですよね。
後程完成品をアプしますのでまたお気づきになった点を
ご指摘いただければありがたいです。
ファイルロックはもちろん必要だが、どう見てもそれ以前の問題だろ。 まぁいいやコードが有れば話もしやすいだろうし。
>>220 1 a
2 b
3 c
というデータになっているとしよう。Xという人が1を、Yという人が2を
ほぼ同時に消すという操作をしたとしよう。ファイルロックをしたとして、
XのクエリがYのそれよりも速く到達したときどうなるかというと、
Xのクエリの処理後
1 b
2 c
になる。これはわかるよね。次にYのクエリの処理だが、
これは2を消せという指令だ。ロジックはファイルの中から2を探して消すのだから、最終的には
1 b
になる。でもYが消したかったのは最初のbの行じゃなかったのか?
というのが問題。わかったかな。
224 :
nobodyさん :2007/04/04(水) 03:25:12 ID:??? BE:453173055-2BP(396)
あーなるほど・・・・・・
と言う事は結局削除文字列代入しか無理と言う結論に?・・・・・・・・・
しっかしよくスレッドフローティング方式の掲示板とか作れますね、
作ってる方尊敬しますわ。
下記は現在作成中のソースです。
一番下のソースはめちゃくちゃなので放置お願い致します。
http://www.pachiweb.com/updir/data/php.txt したい事は投稿者が自身でコメントか情報かを選択しそれを別々に保存、
そのログから新着5行づつを表示させると言うものです。
ラジヲボタンでその記事を削除したいのですが
なるべく情報、コメント含めラジオボタンで選択→パスワード入力後
ワンクリックで削除という手軽さで削除を行いたいです。
ファイル構成は
本体.php
reference.txt
comment.txt
です。
225 :
nobodyさん :2007/04/04(水) 03:26:46 ID:??? BE:326285036-2BP(396)
>>221 さんを見てやっと気がついたんですが
いろいろご解説頂いて本当にすいません。
マジすいません。
>>225 ごめん、コードを見ずにそういうことをしたい場合の定石を書くw
・ID列と連番列を別に取る
データには一度書いたら書き換わらないID列と、メッセージ番号(seq)を示す数を別に記録しておく
ID seq その他情報
1 1 a
2 2 b
3 3 c
消すときはIDをキーに行を探し、seq列を連番に書き換える。たとえば上の表のID2の行を消したときは
ID seq その他情報
1 1 a
3 2 c
のようにやる。IDは書き換えない
・そもそもseqはファイルに記録せずにいちいち数える
要件にもよるけどこれで十分処理が間に合う場合がけっこうある
227 :
nobodyさん :2007/04/04(水) 03:50:19 ID:??? BE:761330276-2BP(396)
な、なるほど初心者には結構複雑な事をしなきゃいけないんですね。 IDとSEQに同じように番号を割り振ったとしても ID側は歯抜け数字列になっても SEQ側はきれいな数字列に直されると。 要するにID側をvalueに割り振れば問題解決ですか。
228 :
nobodyさん :2007/04/04(水) 03:54:46 ID:??? BE:362538454-2BP(396)
すいません、複雑でもないですね。 とりあえずナンバーをまた採取するようにして それをIDにしてladioに代入します。 結局、素人の私がナンバーを振り直したいとか 訳わからん事言わなければ普通に解決してた問題なのですね・・・・・・
各レコードに削除フラグをつけたらどうでしょ 処理が増えるようだけど172さんにとってはすっきり書けるような気がする 通番用にはそれの変数一つ増やすだけだし あと“何が”削除されたのか後で管理者が分かるのもメリットと言えばメリット 書いては消し書いては消しタイプ(削除比率の高いもの)だと ファイルが膨らむばかりなので向かないけど
230 :
虚弱PHP :2007/04/04(水) 09:25:54 ID:???
普通のサービスだと、普通の削除は削除フラグ立てるだけの場合が多いと思う。 完全削除は別のオペレーションで。
valueって何だvalueって 「値に入れればいいんですね」とか言ってるのと同じだ seqを毎回振りなおすほうが面倒じゃないか? ログ中の順番で表示して番号を付けりゃいいじゃん っていうか一番楽な方法はDBだけど
記事ごとにユニークな文字列なり数値なりを記録しとけばそれでいいだろ。 削除の際はそれを入力させれば確認できる。 一番簡単なのはやっぱりデータベースだけど。
初心者です。 =& ってどういう意味でしょうか? 例: function Controller($request, $session, $result) { $this->request =& $request; $this->session =& $session; $this->result =& $result; }
235 :
233 :2007/04/04(水) 11:58:05 ID:???
236 :
nobodyさん :2007/04/04(水) 12:48:21 ID:Msn4ohO/
Apache + mod_ssl + Open_SSLでSSL環境を入れてみたいのですが
Webサーバが整備されればPHP側では特に意識する必要なく
https:// 〜〜〜/〜〜.phpのように普通にアクセスして問題ありませんか?
はい。
238 :
233 :2007/04/04(水) 13:41:06 ID:???
リファレンスについて、概要は理解できたんですが、実際どういった時に 使用するものなのかが理解できません。 例えば233に書いたのはネットにのっていたあるサンプルクラスのコンス トラクタなんですが、この場合は何故リファレンスにしているのでしょうか? 馬鹿ですみません。
239 :
虚弱PHP :2007/04/04(水) 13:44:49 ID:???
PHPのリファレンスって、他の言語に比べるとかなり複雑だよね。
PHP4とPHP5でも変わってくるし。
>>238 使う必要を感じないなら、使わなくていいんじゃないかな。
勉強なら他の言語で参照渡しと値渡しの勉強した方がいいと思う。
240 :
虚弱PHP :2007/04/04(水) 13:45:27 ID:???
s/かなり//
>>238 クラス使うようになると必要性を感じるようになってくる
とりあえずクラスとオブジェクトからがんばれ
ちなみに、サンプルのコンストラクタは受け取り時に参照してないけど PHPなら参照する意味あんまないね。
PHPなら→PHP4なら
phpMyAdminで collation server latin1_swedish_ci の値を collation server utf8_general_ci に変更したいです。 方法を教えてください。
if(...){...}; for(...){...}; のセミコロンってなんか意味あんの? ってかカコイイの?
いみない
247 :
nobodyさん :2007/04/04(水) 16:15:15 ID:PZ7+vB49
JpGraphでグラフを描画しているのですが、Y軸の目盛の間隔を調節する にはどうすればよいのでしょうか? 例えば 0.0 から 20.0 までの目盛の間隔は広く、 20.0 から 100.0 までの目盛の 間隔は狭くする、という調節がしたいのです。 そうしないと、小さい値(だいたい 0.0 から 3.0 )が細かすぎて読み取れないのです。 よろしくお願いします。
248 :
nobodyさん :2007/04/04(水) 16:21:48 ID:1w3+kv1a
これどのような意味か教えて。 if(!$a = intval($b)){ $a = 0; }
>>248 $bを整数へ変換した値を$aへ代入する。
もし$aが0なら、$aへ0を代入する。
記法の問題だけだろうな。 $a = intval($b);だけで結果は同じだから。
251 :
nobodyさん :2007/04/04(水) 16:55:47 ID:74I3KgLe
phpでの関数ポインタの書き方を教えて下さい。
>>251 echo 'void (*abon)(int) = exit;';
をいをいw PHPの場合ないんだけど、それ風になんか代替させたいならcall_user_func + 参照渡しを検討ってことかな。
匿名関数はあるが、長いコード書く場合は激しく使いにくい。 まぁ、call_user_func, call_user_func_arrayあたりを使うのが無難だね。
PHP7で実装との仰天情報
ちなみに、call_user_func、call_user_func_arrayは参照渡しできないので コールする側で参照するか、PHP5ならオブジェクト渡すか。
アーcall_user_func_arrayは参照できたかも
無名関数とクロージャーは あれば便利だけども、なくてもそれほど問題はないからな
260 :
虚弱PHP :2007/04/04(水) 17:47:00 ID:???
>>247 それって対数グラフを使う場面ってことじゃないの?
261 :
nobodyさん :2007/04/04(水) 18:34:49 ID:PZ7+vB49
262 :
nobodyさん :2007/04/04(水) 19:42:34 ID:o8UCEOfE
PHPでタイマー機能みたいなのってあるのでしょうか? ○秒後に実行させるという。(表示されるのではなく) Javascriptでやっているのですが、基本的にPHPのページなもので もし可能であればPHPのみで出来ればと思います。
metaタグでスクリプトに飛ばせば?
sleep
265 :
247 :2007/04/04(水) 20:00:52 ID:PZ7+vB49
対数グラフじゃないでしょうか?
267 :
262 :2007/04/04(水) 20:38:52 ID:???
>>263-264 sleepだとページ全体が表示されるのを遅らす事になります。
なので、sleepの間は何も表示されません。
また、metaで別ページに飛ばすのでもないです。
そうではなくてPHPファイル(test.phpなど)のHTMLの部分は表示されていて
プログラム実行箇所は○秒遅れたら良いのです。
質問です。 今、smartyを初めていじってて、単純なプログラムを作ったんだけど、 文字化けするトラブルが発生しました。 最初に言うと、smartyを使う点以外はコレまでに作ってきたプログラムと 同じようにしてるので、いきなり文字化けが発生したというのはやっぱり smartyに関係した問題かなと思ってるんですが、どういう原因が考えられるでしょう? (1)PHPファイル コレをブラウザで開きます--------------------- <?php require_once("MySmarty.class.php"); $o_smarty = new MySmarty(); $o_smarty->assign("MyName","YAMADA,Yoshihiro"); $o_smarty->display("sample.tpl"); ?> (2)sample.tpl テンプレファイル--------------------- <html><head> <meta http-equiv="content-type" content="text/html; charset=EUC-JP"> <title>Smartyのテスト</title></head> <body> 私の名前は{$MyName}です。 </body></html> (3)MySmarty.class.php --------------------- <?php require_once("MySmarty.class.php"); $o_smarty = new MySmarty(); $o_smarty->assign("MyName","YAMADA,Yoshihiro"); $o_smarty->display("sample.tpl"); ?>
つうかPHPはサーバーサイドスクリプトだぞ
271 :
268 :2007/04/04(水) 20:51:35 ID:???
質問に間違いがありました。各ファイルは以下の通りです。 (1)PHPファイル コレをブラウザで開きます--------------------- <?php require_once("MySmarty.class.php"); $o_smarty = new MySmarty(); $o_smarty->assign("MyName","YAMADA,Yoshihiro"); $o_smarty->display("sample.tpl"); ?> (2)sample.tpl テンプレファイル--------------------- <html><head> <meta http-equiv="content-type" content="text/html; charset=EUC-JP"> <title>Smartyのテスト</title></head> <body> 私の名前は{$MyName}です。 </body></html> (3)MySmarty.class.php --------------------- <?php require_once("/php/include/smarty/libs/smarty.class.php"); class MySmarty extends Smarty{ public function __construct(){ $this->Smarty(); $this->template_dir="./templates"; $this->compile_dir="./templates_c"; $this->cache_dir="../cache/"; $this->caching=false; } } ?> 開発環境はwinXP apache2 php5です
>>271 内部コードは?
テンプレートはもちろんEUCなんだよな?
ブラウザの文字コード変換で適当に変えて何のコードになってるか分かる状態か?
MySQLのテーブルデータをCSVでエクスポートするスクリプトを書いてます。 テーブルの文字コードはEUCで、CSVの出力をSJISにしたいのですが、 header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=hoge.csv"); 〜以降printで内容出力 こんな感じで出力するとファイルがEUCで出力されます。 Smartyがらみでphp.iniでは以下の設定をしてます。 mbstring.http_output SJIS mbstring.internal_encoding EUC-JP HTMLの出力はこれでSJISになっているんですが、 CSVの出力だと関係ないんでしょうか?
274 :
268 :2007/04/04(水) 21:02:28 ID:???
>>272 回答ありがとうございます。
テンプレート(sample.tpl)はEUCで保存してます
ブラウザの文字コードももちろんEUCで出力されてるんですが化けていて、
SJISやISOなどに変更しても化けています。
ちなみに、「????O??AMADA,Yoshihiro???B」 となります。
smartyだけの文字コードをいじる設定があるのかとphpinfoで調べても
該当項目がないみたいなので困ってしまいました
>>271 sample.tplの
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
これcharset=Shit-JISの間違いじゃ??
>>274 function s_outputfilter($str)
{
print_r(mb_detect_encoding($str, 'auto'));
}
$o_smarty->register_outputfilter('s_outputfilter');
解決策ではないが、とりあえずこれを実行して表示前のコードを調べてみれ
278 :
268 :2007/04/04(水) 21:24:20 ID:???
>>277 SJISってでました!
どういうこと???
smartyはSJIS書き出しが標準ってこと??
どこに設定ファイルがあるんでしょうか?
>>276 なんで判ったんですか?
phpiniの設定はどうなってんの?
280 :
nobodyさん :2007/04/04(水) 21:44:52 ID:??? BE:543807465-2BP(396)
すいません、fopen書き込み+読み込み専用で開いて その直後に排他ファイルロックかけると 同スクリプトでほぼ同時に同じ処理をしようとした人は その処理中ファイルの読み込みさえ出来なくなるんですかね? つか、fopenの読み込み+書き込み専用で開くとかどういう意味があるのですか? 読み込み専用のみで開いても読み込み+書き込み専用で開いても 後者選んどけば何の不自由なくすべて処理できるのでは?
281 :
268 :2007/04/04(水) 21:45:46 ID:???
smartyはやっぱりやめたほうがいいですよね。 cakePHPに移行します
>>280 「読むだけの処理の時に誤って書き込むことがない」ということが保障される
しょうもない質問だけどフレームワークって何よ?
284 :
nobodyさん :2007/04/04(水) 21:48:49 ID:M2pD0HVK
設定ファイルを分離したり機能ごとにファイルを小分けしたりして 可読性やメンテナンス性高めたいんだけど そういうのの勉強できそうなきれいでわかりやすいphpのコードやtipsって どこかにありませんか。 本人ですら後で読み返した時1から思い出さないとよくわからないことが多いです。
285 :
nobodyさん :2007/04/04(水) 21:50:30 ID:??? BE:145015924-2BP(396)
>>282 ありがとうございます、
もしお暇でしたら下記質問も教えてもらえるとうれしいです。
ロックかけた後は別の人が同時に同じプログラム
の投稿ボタンを押してもはじかれるという事でよいのでしょうか。
ロックかけた後、そのファイルを自分で再度呼び出す分には問題なくて?
287 :
nobodyさん :2007/04/04(水) 21:56:37 ID:??? BE:271904235-2BP(396)
>>286 そうです、色々アドバイスを頂いたのをまとめた結果、
記事にナンバー(ID)振ってナンバーの並びが歯抜けになっても放置で
それを削除していく方式にしました。
それでファイルにロックかけて前の記事のナンバーを取り出し1を加算していこうとしているのですが
ファイルロック関連で疑問に思った事がありまして・・・・・・
本で調べてみたのですが概念的なことしか載ってなくて
具体的に疑問点が解決できませんでした。
何度もすいません。
288 :
268 :2007/04/04(水) 22:03:20 ID:???
>>279 php.iniは保存のエンコードも書き出しのエンコードも EUCで統一しています。
290 :
nobodyさん :2007/04/04(水) 22:34:35 ID:GchyYXGQ
質問です。 UTF-8で表示されているフォームから特殊文字(??)を入力して 送信するとそのままバイナリで送信されてくるのですが sjisやujisなフォームから送信するとHTMLコードで送信されてきます(&#9685;&#3642;) UTF-8の場合、そのままsjis-win等に変換すると特殊文字が壊れてしまいます。 何がやりたいかと言うと。 携帯絵文字の入力も想定しているので、どうしてもUTF-8 -> SJISへ変換する作業が 必要になるのですがUTF-8で送られて来た場合でも&#9685;&#3642;の様なHTMLコードにしたいのです。 これを実装するにはUTF-8のバイナリとHTMLコードの変換マップ等を 作らないと実装できないものでしょうか? どなたかお力添えお願い致します。
291 :
nobodyさん :2007/04/04(水) 22:34:56 ID:??? BE:435045683-2BP(396)
>>289 それだとラジオボタンでの削除の際、
不具合出るとのことでした。
DBも今勉強1からはじめると大変そうなので
完成後置き換えるようにしたいと思います。
292 :
290 :2007/04/04(水) 22:37:21 ID:GchyYXGQ
特殊文字(??) と化けてしまいました申し訳ないです。 ()内に入る特殊文字はこれです。 ??
>>291 なんで?
ユニークナンバーをキーにして削除すればいいじゃん?
(つーかラジオボタンだろうとチェックボックスだろうとセレクトボックスだろうと同じこと)
>>290 >sjisやujisなフォームから送信するとHTMLコードで送信されてきます(&#9685;&#3642;)
>UTF-8で送られて来た場合でも&#9685;&#3642;の様なHTMLコードにしたいのです。
???
295 :
290 :2007/04/04(水) 22:48:38 ID:GchyYXGQ
296 :
290 :2007/04/04(水) 22:57:14 ID:GchyYXGQ
>コピペしてPOSTした時に正常に表示させたいのです。 補足です。 コピペしてPOSTしてからSJISに変換しても壊れないようにしたいのです。
297 :
nobodyさん :2007/04/04(水) 22:57:46 ID:Rqzs89IS
>>249 >>250 ありがとうございます。
if(!$a = intval($b)){
$a = 0;
}
上記での ! がどのような意味になっているのか教えてください。
「$bを整数へ変換できず、$bの値を$aへ代入できない場合」、すなわち
「$a = intval($b) が成立しない場合」という理解でいいのでしょうか。
ここでの ! の使い方がいまいち分かりません。
1.$bをintval関数にかける 2.その返り値を$aに代入する 3.2の式(=$aの値)の否定を取ったものが真になるか判断する 変換できないとか代入できないとかいう判断はここではありません.
>>297 なんか解釈の仕方が変だぞ
分岐と式の仕様を理解していないのか?
!は否定の演算子
$a = intval($b) の否定。
その例文の場合だと、intval($b) の結果を $a に代入して、
それが 0 なら分岐する
おい、クズ質問者ども。いまから0時までに質問してくれた方には 俺が誠心誠意を持って答えてやるから質問ぶつけてこい! PHPに対するあついハートをわすれるなよ!
htmlファイルを扱っているとtableなどが入れ子になっている場合があるのですが、 例えば2番目にあらわれた<table>〜</table>までを取得する方法を教えてください (上記の”〜”の中にもtableが含まれていたりするとお手上げなのです)
>>301 2番目にあらわれた<table>〜</table>までを目で見て判断する。
次におもむろにCtrl+Cを押してコピーし、適当な箇所へCtrl+Vを押して貼り付ける。
!より=の方が優先順位高いの?
>>301 【test.txtの内容】
<html>
<head>
<title>テスト</title></head>
<body>
<table>
<tr><table><tr><td>これを取得する</td></tr></table></td>
</tr>
</table>
</body></html>
【test.phpの内容】
$file = file_get_contents("test.txt");
preg_match("[(<table>.*?</table>)]",$file,$array);
print_r($array);
306 :
300 :2007/04/04(水) 23:56:26 ID:???
307 :
300 :2007/04/04(水) 23:57:27 ID:???
のこり3分
$a = 3; $b = $a++; これで$bが3だから驚いた
>>308 あたりまえ。4にしたけりゃ++の位置をかえろ
>>305 いや、マニュアルだと!の方が高かったんだけど、
それだと
>>248 の書き方は文法的におかしくない?
実際やってみたら動いたわけだけど、何か見落としてる?
>>310 if(!$a = intval($b)){
$a = 0;
}
【$A = $B】
$Bを$Aに代入する
【$A = "a"】
$Aはaである
【!$A = "a"】
$Aはaではない
これで理解しろ
>>310 見落としてると思う。
第十五章
>注意: ! は = よりも優先されるはず なのにもかかわらず、
>PHP は依然として if (!$a = foo()) のような式も許します。この場合は foo() の出力が $a に代入されます。
>>301 if(!$a = intval($b)){
$a = 0;
}
$bの値が整数だったばあいいif分の中身が実行されるが、
$bになにも格納されてなかったら動かないぞ
314 :
312 :2007/04/05(木) 00:12:10 ID:???
316 :
312 :2007/04/05(木) 00:14:00 ID:???
>>313 をいをい。intvalのマニュアル嫁.
失敗時に0を返すんだよ
>>312 ほんとだ、見落としてた。
というとつまり、!$a = $b みたいな形の式のみ特例的に=の方が優先順位が高くなる、ってことか。
それはちょっと・・・どうよ?
318 :
312 :2007/04/05(木) 00:20:53 ID:???
>>317 英文だと
if (!$a = foo()), in which case the return value of foo() is put into $a.
となってるから、!$a=$bじゃなくて、関数の返し値の代入に限ってって感じだと思うよ。
つまり関数の方の動作を優先するってことなんだろうなあ。
なにが?
>>318 試してみたら右辺が変数でも同じだったよ。
まあ、どちらにしろあまりいい仕様ではないね
なんで?
322 :
312 :2007/04/05(木) 00:36:05 ID:???
>>320 みたいだね。
$a = 1;$b = 0;
if(!$a = $b) {
echo $a;
}
で 0 が出力結果になるな。
323 :
301 :2007/04/05(木) 00:47:30 ID:???
>>304 とりあえず改行を無視して
$html = '<table><tr><td>→<table><tr><td>これを取得する</td></tr></table>←</td></tr></table>';
preg_match("[(<table>.*?</table>)]", $html, $array);
print_r($array);
とやってみました
イメージとしては $array[0]に$html全体が
$array[1]に→この部分←が入るような形になればありがたいのですが…
>>301 ネストをきれいに表現してる正規表現のサンプル見たことあるな。
元レスから判断するけどn番目のテーブル全体が欲しいんだったら
対応する括弧を見つけるロジックでいいんじゃないのか。
>>301 下手に正規表現使って一発判定するより、tableタグのペアがあるかだけ確認して再帰にしたほうがラク
326 :
301 :2007/04/05(木) 01:29:36 ID:???
どうもすみません 正規表現は前に何度も躓いていますし、なんか自分でも無理かと… 324さんと325さんのおっしゃってる意味は同じと考えていいのでしょうか? 対応する括弧を見つけるロジック = 再帰 なんでしょうか??? 実はファイル(ディレクトリ)操作を勉強している時に「再帰」が出来てきて 理解を頓挫したことがあります(都合のいいサンプルをそのまま使いました…) 階乗で解説してあるサイトなどで勉強してみましたが、今回のケースに 当てはめることが全く出来ません もしよろしければヒントでもいただけないでしょうか?
preg_match_allで<table>〜</table>内を取得してさらに正規表現をはなて
タグの対応関係は深いところから探って行かないと分からないからな。 tableタグの数をカウントアップ、閉じるタグでカウントダウンして、ゼロになってところで間の要素を再帰で同じ処理すればいいんじゃないか?
すでに定義されてるファンクションを上書きするにはどうしたらいいの?
Zend Engineを改造する。
>>330 function htmlspecialcharsplus($value)
{
// サニタイズして出力します
echo htmlspecialchars($value);
}
>>326 そういうのは、htmlをxml文書として扱いましょう。
自分ならPEARのXML_Serializeクラスつかうけど。
>>330 PECLモジュールのAPD入れてoverride_function
PEAR使ったことないしクラス名だけで判断しちゃうけど、 対象htmlファイルの構造が常にいっしょ もしくは、tableタグに必ずidがついてる みたいな条件下じゃないとどこかで再帰的な手法が必要になるんじゃないかな。
画像を保存したいのですが、 送られてきた指定した画像のサイズを変え保存するにはどうしたらいいでしょうか? GD入れないとダメすか? また、保存する場所ですがDBにいれるか、ファイルを置くディレクトリを設置するか迷っています。 DBに入れた場合、DBの動作(SELECTなどの)は遅くなりますか?
339 :
nobodyさん :2007/04/05(木) 13:18:45 ID:ln1txq/N
素材で落ちてるメールフォームってDLしてうpだけじゃだめなんですか? 誰か教えてくださいお願いします。 ちなみにOSはWiiiiiinXP 今のところのエラーはメールこねーy+文字化け杉 文字コードの設定とかkwskおしえてほしす
341 :
>339 :2007/04/05(木) 13:36:29 ID:???
環境というか… 落としてきたPHPの設置方法はうpするだけと書いてあるんですが うpしてもロカルでも動かないので何か要るのかしらと思って悩んでます。。 一応持ってるだけなんですがアパチ2とPHP5はおいてある。 でも使い方とかはHello World+print、echo止まりだから全然わかりまてん
おまえの環境にSMTPサーバが起動してないからだろ
あとXPの場合homeかproぐらい書きましょう。
あと住所氏名年齢電話職業ぐらい書きましょう。
あとxmailでググレカス
346 :
nobodyさん :2007/04/05(木) 13:50:21 ID:ln1txq/N
>342 えと、うp自体はPHP可レンタル鯖にうpしてるんだけどSMTP鯖起こさないといけないんですか? >343 すまんかった Proです
>えと、うp自体はPHP可レンタル鯖にうpしてるんだけどSMTP鯖起こさないといけないんですか? 日本語で話して下さい
自鯖で動かしてんじゃないのにxmailって要るんですかこのボケがって聞いてんだよ
自鯖でテストしろやゴルァ
350 :
nobodyさん :2007/04/05(木) 14:09:03 ID:ln1txq/N
mjdddd 配布スクリプトくらいうpして動かせてよ・・・
>配布スクリプトくらいうpして動かせてよ・・・ 意味が分からない
Smartyって必須の技術ですか? 使っている人、やっぱり格段に効率化できました? 入力データ検証とかみると便利そうだなと思いますが、 それ以外で効果抜群だった点など教えてください。
配布サイトさらせよ
354 :
nobodyさん :2007/04/05(木) 14:34:37 ID:ln1txq/N
phpでの文字コードと mysqlでの文字コードの関係が ごちゃごちゃしてて理解できずにいるんですが、 詳しいサイトないでしょうか? phpのソースをUTF8で書いて、 MySQLの文字コードがEUC固定の場合に、文字化けを発生させないようにできるんでしょうか?
コード変換すればいいんじゃなかったっけ?
357 :
355 :2007/04/05(木) 14:45:26 ID:???
そもそもMySQLの文字コードをEUCにする、ってどういうことなんでしょうか? PHPで挿入したデータが自動的にEUCに変換され保存される、ということでしょうか? 例えば、UTF8のスクリプトからMySQLにデータ挿入しても EUCで保存され、 UTF8のスクリプトで読み込む場合、読み込んでから UTF8に変換して出力する、みたいな感じでしょうか?
358 :
nobodyさん :2007/04/05(木) 14:46:06 ID:ln1txq/N
Apache2を起動してPHP5もHelloWorld確認してみた。 んで、ApacheにDLしたPHP置いてみた。 ドリームウイーバで送信先メールアドレスだけ書き換えた。 Fatal error: Call to undefined function mb_convert_encoding() in C:\Program Files\Apache Group\Apache2\htdocs\sendmail.php on line 148
359 :
339 :2007/04/05(木) 14:46:53 ID:???
↑339です
>>857 $str = "あいうえお";
$str = mb_convert_encoding($str, "euc-jp", "utf8");
>>358 extension=php_mbstring.dll
php.iniに↑みたいな設定がWinだといるらしい
そのエラーメッセージでググったらぞろぞろでるぞ
>>354 >>このフォームは、"sendmail"のみに対応しています。
おまえの使ってるレンサバがsendmailに対応してるのか確認。
誰も答えるやつがいなかったらおれがこたえてやるがいまから仕事だから遅くても怒るなよよ。
363 :
nobodyさん :2007/04/05(木) 15:20:00 ID:ln1txq/N
>361 それは多分初期設定時に ;extension=php_mbstring.dllをextension=php_mbstring.dll になおせって説明かと。。 >362 ロカルでもむりなん? 鯖設定みてくる
364 :
339 :2007/04/05(木) 15:24:11 ID:ln1txq/N
>>364 >endmailご利用不可能です
アカンがなwww
366 :
虚弱PHP :2007/04/05(木) 15:44:45 ID:???
>>357 > PHPで挿入したデータが自動的にEUCに変換され保存される、ということでしょうか?
MySQL4.1以降だとそうなるはず。
だけど、化けまくる場合が多いので、MySQL4.1以降の場合は
skip-character-set-client-handshake設定して、
自分でちゃんと文字コード管理するのがよさげ。
個人的には全部UTF-8にした方がいいと思うけど。
適当に検索したら、以下のページでMySQL&PHP連携での文字コードの話が書いてあった。
http://puchiko.lowtech.ne.jp/?itemid=349
367 :
nobodyさん :2007/04/05(木) 15:49:15 ID:ln1txq/N
>365 アカンがなwwwww 対策練ってくる・・・orz
368 :
虚弱PHP :2007/04/05(木) 15:50:33 ID:???
>>364 しかし、そのサーバーまだ全然ページないねw
ページも素人っぽいし。
369 :
339 :2007/04/05(木) 15:52:18 ID:???
そこはきにすんな。 場所が借りれたらいいと思った。今は反省していない。
370 :
虚弱PHP :2007/04/05(木) 16:13:19 ID:???
>>355 設定で、どうにでもできる自由度を理解してないだけと思われ。
PHP側でMySQLの設定にあわせて文字変換してもいいし
MySQL側の設定で、MySQL側の変換を無効にしたりとか
PHPに合わせてデータを渡したっていいし、オマイの好きに
出来るよってところかな。
PHPとMySQLの文字変換の関係って言われても
答えとしては、自分がPHPとMySQLでやろうとしてることに
一番いい設定を選べばエエやん?って感じ。
372 :
339 :2007/04/05(木) 16:20:25 ID:ln1txq/N
あわわ・・・ 逃げに走って、sendつかわなくていいフォームさがしてう
ある連想配列の要素全てに htmlspecialchars をかけたい場合、 簡単にする方法はないでしょうか?
>>366 >だけど、化けまくる場合が多い
これの原因の多くが使ってるmysqlクライアント側文字コードが
デフォルトは「latin1」と設定されてるから。
PHPでEUC-JPやUTF-8に変換してデータ送っても
MySQLサーバの方ではクライアントはlatin1で送るよと表明しているから
latin1→サーバ側に指定された文字コードに変換する。
latin1と思って日本語扱えば、そりゃ文字化けは必至。
だからクライアントの起動オプション、ライブラリならビルド時に指定するか
SET NAMESで「これからクラアントは○○で送るよ」とサーバに教えてやらないと駄目
http://dev.mysql.com/doc/refman/4.1/ja/charset-connection.html PHPやMySQLの公式ビルドもののクライアントライブラリも「latin1」と設定されてる。
# RHEL系はUTF-8になってるのかね。
まあ自分も
>skip-character-set-client-handshake設定して、
>自分でちゃんと文字コード管理するのがよさげ。
こっち
375 :
あきら :2007/04/05(木) 16:40:24 ID:jUd/uPxe
postgresql 7.3.15 で カラムを使って日付の計算を教えてください。 create table kaiin (kaiin_code varchar(6), kaiin_name varchar(20), nyukai_ymd varchar(10), kigen integer, primary key (kaiin_code)); nyukai_ymd は 日付を表現する文字型のカラム kigen は 有効期限で1から12(nヶ月) 有効期限切れの会員の検索 入会日(nyukai_ymd) < 今日(2007-04-05)から遡ってkigenヶ月 select * from kaiin where nyukai_ymd < to_char(to_date('2007-04-05', 'YYYY-MM-DD') - interval 'kigen month', 'YYYY-MM-DD'); ERROR: Bad interval external representation 'kigen month' と言うエラーが.....! intervalでカラム(kigen)を使う方法を教えてください。 宜しくお願いします。
376 :
355 :2007/04/05(木) 16:43:30 ID:???
>>366 >>371 >>374 レスありがとうございます。
>MySQL4.1以降だとそうなるはず。
つまり4.1以降のクライアント側の文字コードがEUCに設定されている場合、の話ですよね。
では、4.0以前のサーバー側の文字コードって何の意味を成しているのでしょうか?
>>373 $array = array_map('htmlspecialchars',$array);
379 :
nobodyさん :2007/04/05(木) 16:46:08 ID:Y4vj6k1c
PHP初心者です
今まで無料鯖で自作ブログみたいなのをつくってましたが、今回SSLが使えて広告もない鯖をタダで
使えるようになりました。そこで特にその必要はないのですが、あるならやっぱ使いたいのでコメント
やユーザー情報の入力はセキュアな状態で行うように改造したいと思ってます。
そこで質問なんですが、サイトのアドレスは
http://mydomain.xxx.xxx/で 、SSLは
http://secure.xxx.xxx というサブドメインでしか使えなくなってます。鯖は同じなのでmydomainで使ってるサイトの外見テンプ
レートをsecureから参照したいのですが、どうすればいいのかわかりません。
例えば、mydomain/tpl/tpl.phpといったテンプレートファイルをsecure/index.phpから参照するにはどう
すればいいですか?
日本語怪しかったらスミマセン
お願いしまッス!
380 :
339 :2007/04/05(木) 16:46:37 ID:ln1txq/N
381 :
あきら :2007/04/05(木) 17:01:57 ID:jUd/uPxe
詳細が抜けててすみませんでした。 FreeBSD 5.3 Apache/1.3.37 php 4.4.4 postgresql 7.3.15 実際は $today = date("Y-m-d"); $result = pg_Exec($conn,"select * from kaiin where nyukai_ymd < to_char(to_date('$today', 'YYYY-MM-DD') - interval 'kigen month', 'YYYY-MM-DD');"); です。 宜しくお願いします。
Smartyいじってるんですけど、こんなエラーがでました。 Warning: Smarty error: unable to read resource: "menu.tpl" in C:\php\include\SMARTY\libs\Smarty.class.php on line 1095 正直Smartyにエラーが出るなんて想像もしてなかった 1000行も見返して問題チェックなんてする気にならないというか、 変にいじったら予想外の部分にまで後々障害出そうで怖いんですが、、 皆さんこういうトラブル発生しましたか?
>>380 $err_message使ってないみたいだから174行目削除
387 :
あきら :2007/04/05(木) 17:12:49 ID:jUd/uPxe
>>383 サーバーサイドプログラミング関連の話題を扱っています。
Perl, PHP, Java, Ruby, C, Tcl といった言語処理系の話、
Apache, CGI, JSP/Servlet, ASP, ColdFusion といったアプリケーション実行環境の話、
Oracle, PostgreSQL, MySQL といったデータベースの話などをテーマにしています。
とあったのでココでいいと思いました。
場違いでごめんなさい。
>386 special thxxxxxxxxxxx! なにかうろこのようなものがとれた
反省の弁を綴りつつも自己正当化する
>>387 に乾杯
>>385 すみません、
「Smarty.class.php の1095行目のmenu.tplを読めない」 と書いてあるのかなと
思うんですが、、
良くわかりません
>>387 それはこの板全体の説明で、このスレッドは「PHP」の
質問スレッドだよ
PostgreSQLの話題は別のスレッドが基本
面倒だから答えるけど
エラーメッセージ見てわかるように
interval 'kigen month'
この表現がおかしいんだよ
interval の指定はこんなふうにはできない
interval '1 month' とか interval '2 month' ならできるけど
カラム名の指定は、少なくともPostgreSQL では無理
Oracleでも無理だと思うけど
392 :
あきら :2007/04/05(木) 17:45:14 ID:jUd/uPxe
>>391 大変すみませんでした。
答えてくれて有難うございました。
>>390 意訳しすぎ
勝手にコロンで区切られた文章を連結するなよ
素直に前から読んだら良いじゃないか
テンプレートファイル menu.tpl が読めなくなっているのだろ
1095 行目は実際にエラーを発行している場所であって、
そこに問題あるってわけじゃないぞ
何を触ったのかは知らないけど、テンプレートパス指定が
おかしくなったのか、menu.tplを消したかは知らないが
>>393 お恥ずかしいです。
まともに動かせるように頑張ります
>>336 その再帰手法を個別に書かないで、XMLとして処理すればいいんだよ。
<table と </table> の最長一致文字列を探したあとは、それをXML処理にゆだねればいい。
その場合おっしゃるidなどの要素内属性記述は、逆に邪魔になるからそれを消して渡す。
397 :
338 :2007/04/05(木) 18:21:18 ID:???
無視すんなや!くらぁ!(#´;ω;`) 無視されるのは大嫌いなんだ!
>>397 質問者はID出せよ
GD入れなくてもできる
バイナリデータをいじくって、なんらかのフォーマットの
画像データを出力するスクリプトが書けるのなら
そんなのがいやらなら、GD入れるなり、ImageMagick使うなり
したらいい
バイナリデータをDBに登録するかどうかは、その案件しだい
としか言いようがない
selectで遅くなるとは普通考えられないが、これは
DBの仕様次第だろう
399 :
379 :2007/04/05(木) 18:49:27 ID:Y4vj6k1c
ここにもいるよぉ〜 ノシ
>>399 同じサーバにあるのなら、何も悩むことなく読み込めるだろう
パスの指定は、ドメインとは関係ないのだから
テンプレートだろ?画像じゃなくて
画像であっても、シンボリックリンクでも貼れば解決するだろうけど
コメントやユーザ情報の入力にSSLって・・・
402 :
虚弱PHP :2007/04/05(木) 20:07:19 ID:???
>>373 PHP5なら array_walk_recursive が使えるよ。
再帰的に負う必要がないなら、array_walkでOK。
こっちはPHP4でも使える。
403 :
虚弱PHP :2007/04/05(木) 20:12:16 ID:???
>>397 Linuxなら明示的に指定しない限り、GD付属してたとおもったけど。
Windowsならphp.iniでコメント外すだけ。
>>401 詠嘆口調で話ししろって躾けられたのかお前?
405 :
nobodyさん :2007/04/05(木) 21:08:26 ID:MctJVuph
すいません、テキストファイルの書込に関してなんですが。 後部に追記ならfopen(filename,"a")で簡単ですが、 先頭に追記していきたい場合はこれだと無理です? 一度中身を変数なりに入れてからfopen(filename,"w")あたりで 追加分+中身を入れないとダメ? 初心者ですいません。
>>405 そのとおり
メモリに読み込んで先頭に追加して
書き込む
SSL使うのいいけど、CAはどうするの
勉強のために本買ったが全然わかんねーwwwwww
410 :
405 :2007/04/05(木) 21:25:43 ID:MctJVuph
>>406 サンクス。
マニュアルを読むと fopen(filename, "r+") でfpが先頭にあるみたいなので
いけるかと思ったんだが、ファイルにゴミがまざる orz
一時保存して追加するしかないのね。
>>412 これだけで明らかに社会不適合者に見えるこいつの異常なキモさって・・・
414 :
379 :2007/04/05(木) 22:39:38 ID:BEBjQR7Y
>>400 どうもです
なんつーか、インクルードしたいんですけど無理ですかね?
シンボリックってググッたけど意味わかんないっす。
PHPじゃなくてサーバーの専門用語っぽいことはわかったんだけど
馬鹿ですんません
なんでincludeできないの?
416 :
379 :2007/04/05(木) 22:43:15 ID:???
なんかしらないけどできないっす 同じフォルダにないとインクルードできないっぽいっす
418 :
379 :2007/04/05(木) 22:50:11 ID:???
>>417 PHPが5.1.6でアパッチが2.0っす
420 :
379 :2007/04/05(木) 22:53:36 ID:???
わかんねっす どこをみりゃいいっすか
エラーメッセージ書けよ
/home/mydomain/tpl.php /home/secure/index.php <?php include('../../mydomain/tpl.php); ?> で inlcude できるだろ セーフモードで制限がかかっているのか?
あ、一個上に上がりすぎた include('../mydomain/tpl.php'); か
425 :
nobodyさん :2007/04/05(木) 23:08:57 ID:1F/X4KzL
質問です。 ディレクトリに書き込み権限があるかどうか調べるにはどうしたらいいでしょうか?
426 :
nobodyさん :2007/04/05(木) 23:24:19 ID:FIQWGizo
2007-04-05 23:20:53 こういう形式の日時から、タイムスタンプを取得したいのですが、 どうすれば良いのでしょうか?
>>425 サーバにSSHで入ってls -allで目視確認
Apacheユーザも目視確認
>>425 is_writable()
>>426 strtotime("2007-04-05 23:20:53")
430 :
nobodyさん :2007/04/05(木) 23:33:36 ID:FIQWGizo
431 :
nobodyさん :2007/04/06(金) 01:36:07 ID:7OEWd9FE
htmlタグをすべて小文字にすることはできませんでしょうか? よろしくお願いいたします
<ここの文字を取得> 大文字を小文字にする関数
一文字ずつ判定して、以下を繰り返す↓ Aだったらaに変換 Bだったらbに変換・・・・ いいんですよ効率悪くても。このやりかたで不満をもって自分で効率のよいコードがかけるようになりなさいな
大文字やら小文字やらこだわる前に まず魅力あるコンテンツを作れるようになろうぜ
魅力のないレスだな
お前がな
>>432 strtr("AbCDeF", "ABCDEFGH...", "abcdefgh..."); #=> "abcdef"
PerlとPHPはどっちのほうが難しいですか?
C++
Perlに気間ってんだろ
Perlは人の書いたコードは読めない。
perl は言語仕様を隅々まで目を通さないと、 他人の書いたコードが読めなくなるからな
>>431 $html = '<FORM>
A
<IMG SRC="./NULLPO.GIF" />
<INPUT
TYPE="CHECKBOX"
CHECKED />
A
</FORM>';
$html = preg_replace_callback('/<[^<>]+>/',create_function('$matches',
'if(strpos($matches[0],\'=\') === false) return strToLower($matches[0]);
$length = strlen($matches[0]);
$quote = false;
for($i = 0; $i < $length; $i++) {
if($matches[0][$i] === \'"\') $quote = !$quote;
elseif(!$quote) $matches[0][$i] = strToLower($matches[0][$i]);
}
return $matches[0];'),$html);
var_dump($html);
string(79) "<form>
A
<img src="./NULLPO.GIF" />
<input
type="CHECKBOX"
checked />
A
</form>"
まぁおおよそ効率の良いやり方じゃないが、な…。
即席なんで不備があるかもしれん。
pearのAuthを使って認証しようとしてるんですが、 Class 'DB' not found in というエラーになります; DBクラスが見つからないと言っているんでしょう けどDB.PHPはちゃんとあるし、何故なんでしょうか?
>>448 板間違えて書き込んだので直ぐ誤ってますよ。
昨日一日考えてたんですが、今自己解決しました。
pear DBをインストールしたらOKでした。
配列のキーの値に、文字数制限などあるんでしょうか?
>>447 まさかとは思うが、pear/DB.php がないってことはないだろうな
あ、すでに自己解決していたか
453 :
338 :2007/04/06(金) 14:28:35 ID:???
class内でpreg_replace_callbackする際、 あらかじめ配列化された$this->mojiを使用することが出来ません。 こんなときどうすればいいんでしょうか? #$this->moji= array('001'=>'<font size="1">', '002'=>'<font size="2">'…); #$str = '!001!';だとした場合 function hoge_ForOutput($str) { $hoge = preg_replace_callback( "/!(\S{4})!/", array($this, 'conv_func'), $str ); return $hoge ; } function conv_func($str) { if($this->moji[$str['1']]=="") { return $str; } else { return $this->moji[$str['1']]; } } }
454 :
453 :2007/04/06(金) 14:30:08 ID:2B8Av++o
ID出し忘れました 名前も間違えました。。 すみません
456 :
453 :2007/04/06(金) 15:05:58 ID:2B8Av++o
>>455 ご指摘ありがとうございます。
変数名等、実際のものと少し書き換えたのでミスしてしまいました。
この場合、\S{3}です。
ただ、問題なのは
function conv_func内で$this->mojiがNULLになってしまうことなんです。
array(&$this, 'conv_func'), は?
ごめん、違うわ↑
>>456 ならないけど…。
実際の物を書いたら?
ちなみに同じくミスっているのかもしれないけど下記はエラーになる。
if($this->moji[$str['1']]=="") // Undefined index
return $str; } // Array to string conversion
460 :
453 :2007/04/06(金) 15:45:14 ID:???
すみません。。 オブジェクト作成時 Hoge::hoge_ForOutput() にしていたのが原因でした… お騒がせしました
ヽ(´ー`)ノ
462 :
453 :2007/04/06(金) 16:02:55 ID:???
m(#_ _)m
463 :
nobodyさん :2007/04/06(金) 20:59:56 ID:pizAbRpt
allow_url_fopen = Offにしてあるレンタル鯖なのですが、 どうすれば他鯖のファイルを取得できますか? 申し訳ないですが、ご教授ください
464 :
nobodyさん :2007/04/06(金) 21:04:21 ID:sS5tmZeq
クラス内定数をクラスを定義しているファイルの外で定義することは出来ないのでしょうか。
>>464 まず試してみましたか?ためしてみてできなかったら質問してください
>>463 pearのhttp_requestとか?
offでできるかは知らね
>>464 それは最早クラス内定数ではないのでは・・・。
継承すればスーパークラスの使えるのかな?
ほか変数なりdefineなりグローバル変数なりを考えてみてはどうでしょう.
467 :
nobodyさん :2007/04/06(金) 21:54:34 ID:9fDFot8y
クラスってどんな便利性があるの?
使いまわしできる
Pearのquickformでフォームを 作ってみたんですが、フォームの部品を [select box] [search box] [bottun] みたいに並べるのはどうすればいいんでしょうか? 普通にやると [select box] [search box] [bottun] みたいにレイアウトされてしまいます。
それはHTMLとCCSの問題だと思う
間違えたCSSね
474 :
470 :2007/04/06(金) 22:31:06 ID:???
>>473 リンク先参考になりました。
どうもありがとうございます。
475 :
nobodyさん :2007/04/06(金) 22:39:22 ID:9fDFot8y
477 :
nobodyさん :2007/04/06(金) 22:43:53 ID:9fDFot8y
479 :
nobodyさん :2007/04/06(金) 23:58:48 ID:51+hyhMJ
preg_match('/^(string)?;(string)?;(string)?$/', ';string;', $matches); でマッチさせると、$matches[1]には空文字列が入ってくれるのに$matches[3]には値がセットされません。 この挙動は変ではありませんか?
480 :
◆SQL.mUThc. :2007/04/07(土) 00:10:22 ID:vJbH2RhG
セッションについて質問です まずwildcard.phpでセッションを開始し、GETのyouridにセッションidを渡します このような形になります ⇒ hoge.php?yourid=hogehogehoge3333 そしてGETで受け取ったyouridの値を、hoge.php側で確認できる$_SESSIONのセッションidと一致したかどうかでユーザー認証をしています そこで質問ですが、 このセッションidがリファラーなどで外部に漏れて第三者に渡り、その第三者がこのアドレスにアクセスしたとしても その第三者がアクセスするときはセッションIDが違うので、認証ができないことを確認したのですが この方式でユーザーの認証をするのはセキュリティ的にみて問題はありますでしょうか? セッションを扱うのは今回がはじめてで無知なことは承知しています 詳しい方よろしくお願いします
>>480 そのセッション情報をどこに保存するかで変わると思う
cockieなら、悪意がある人間がたまたま情報を手に入れる
ことができたのなら、認証を突破できるだろう
>>480 セッションIDをパラメタに埋め込む必要はあるのかな?
勘違いかも試練がデフォルトクッキーが使えるならクッキー
にセッションIDを持たせるんじゃなかったっけ?
ただ何があろうともSSLは必須
483 :
◆SQL.mUThc. :2007/04/07(土) 00:48:33 ID:vJbH2RhG
わかりました やはり当方セッションについて勉強不足のようです もう少し勉強しないと危険なスクリプトになりそうです どうもクッキーがポイントみたいですね 出直してきます ご意見ありがとうございます
485 :
nobodyさん :2007/04/07(土) 01:31:50 ID:zMY0muXp
掲示板などいろいろ作ってます。 文字コードは今までいろいろ試しました。SJIS,EUC,UTF8 一長一短あると思いますが、何が一番いいでしょうか?
>>485 まぁ、もうUTF-8だろうな〜
RedHatもデフォルトUTF-8になったし。
SJISは論外
UTF8以外はありえんから
>>485 クロスブラウザを考慮しつつ、手間がかからない方向で考えると
スキルあるならSJIS。携帯でも見れるし。
スキル無いなら、EUCが無難ってとこじゃね?
古いOSのブラウザをバッサリ捨てるならUTF8。
あらかじめ言っておくけどBOM調べとけよ
Web2.0関連(笑)でUTF-8以外使うとトラブルの元。
無印Win98だってUTF8無問題で読めるのに・・・
>>491 出版社関係お得意のMac OS9のIEだとUTF8ダメだねw
それは知ってるけどさー、MACIEに対応するために他の全てを犠牲にするのはナンセンスじゃん せっかくうざい文字コード問題がUTF8統一で解決しかかってるのに、ノイジーマイノリティのために 全体の足を引っ張るのは論外じゃね? 全体の1%もない連中が騒ぎすぎなんだよ・・・
>>493 足引っ張るとかじゃないんじゃね?
サイト構築者が、一人でも多くのお客さんに見てもらいたいと
イヤラしく考えるかどうかだけでしょw
俺個人の話をすると、某マイナーゲームのサイトを
立ち上げたんだけど、まぁぶっちゃけ、既に有名サイトがあって
その二番煎じだったんだよね。ただ、その某有名サイトは
UTF8でCMS的な作りだったんだけど、俺はEUCで構築して
携帯用にはSJISで吐き出せるようにした。某雑誌がその
ゲームを取り上げる際に、紹介サイトとして、俺のサイトを
掲載したいとメールを送ってきた。本家的な某大御所サイトが
あるのに、何故俺のサイトなんだろう?と今でも分からないけど
多分、雑誌社の編集部はMac OS9で、俺のサイトをチェック
しやすかったんだろうと、俺は睨んでるw
どんどん痛々しい展開になってきたのでこの辺で終了。
みんな知ってるサイト紹介しても意味ないからな
宣伝乙厨発生警報
マカーって数は少ないくせに声だけはやたら大きい
499 :
nobodyさん :2007/04/07(土) 10:01:39 ID:vZgv1pNd
php5にimapをインストールしたいんですがなかなか出来なくて困ってます 今のところは以下の手順でやってます cd imap-2006f make lrh cp -p c-client/rfc822.h c-client/mail.h c-client/linkage.h /usr/include/ cp -p c-client/c-client.a /usr/lib/ これで php-5.2.1 ./configure --with-imap=/usr/local とすると utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. ってエラーで止まっちゃって config.log見ると configure: failed program was: #line 45958 "configure" #include "confdefs.h" #include <c-client.h> int main() { int i = U8T_CANONICAL; ; return 0; }
>>499 使ってないので良く知らんけど
なんで、聞く前に
U8T_CANONICAL is missing PHP
ぐらでぐぐらないのか?一発で原因がわかるんだけど。
SNSみたいなソフトを作ろうと思ったら やっぱり独自にフレームワークを構築するのかな? どんな感じで作ってるのかすげー気になる。
SNSなんか簡単に作れる 作る気にはなんねーけど
>>501 GREEやってることを見ればいいんじゃない?
あそこは本人のEthna発展系でフレームワーク作ってるから。
SNS作るためにフレームワークが必要,ってなんかおかしくね?
商売で持続的に展開するには必要でしょ。 SNSそれ自体は結局は単なるブログと掲示板の集積だから「簡単」に作れるにしても、 商売に必要な多機能付加、メンテナンス考えれば、きちっとしたフレームワークがなきゃね。
メンテナンス性を考えるのならそれを見越した書きかたをすれば良いだけ SNSなんて既存のフレームワークで充分だろ
507 :
nobodyさん :2007/04/07(土) 11:38:26 ID:36/fFnrN
mixiってなんの言語でつくってんの?
Perlらしい
509 :
nobodyさん :2007/04/07(土) 12:10:36 ID:JPCg3GgQ
フレームワークって何?
開発枠組み
511 :
nobodyさん :2007/04/07(土) 13:09:47 ID:JPCg3GgQ
ってことは俺はじゃあ俺はWAMPか
WAMPとかLAMPとかは、開発(一般)環境だな。 フレームワークって言った場合は、ソフトウエアのためのソフトウエア統合環境のことだ。
513 :
nobodyさん :2007/04/07(土) 13:23:52 ID:JPCg3GgQ
WAMP+Dreamweaverで開発している俺は独自環境・・・?
Dreamweaver(笑)
515 :
479 :2007/04/07(土) 13:43:50 ID:qxhDTSD1
回答がないようですので、PHP-usersのメーリングリストで聞きます。 失礼しました。
最初からそうすればいい
マニュアルも読まないで、挙動が変だとか言う奴になにを「回答」しろというのだよ。
518 :
nobodyさん :2007/04/07(土) 14:02:21 ID:S7Rnm2Ut
ファイルロックしたまま開放せずにexitしちゃったらどうなるの?
どうもしないよ
520 :
501 :2007/04/07(土) 14:07:31 ID:???
>>503 thx 参考になります。
SNSというよりWebアプリと言うべきだったorz
最近phpをはじめてCMSなどをいじりはじめたので
>>505 さんの言われている様なことが気になっていたんです。
で自分で話し振っといて悪いがフレームワークが何なのかわからなくなったw
しかもなぜ
>>501 の質問に至ったのかさえ忘れてしまったw
ほんと俺ってバカだなwwwwwwwww
522 :
nobodyさん :2007/04/07(土) 14:16:46 ID:S7Rnm2Ut
>519 >521 さんくす すまん読んだつもりが見逃してた
>>520 とりあえずなんでもいいからフレームワークダウンロードして
ちょっと弄ってみたらわかるとおもう
言葉で説明しても分かってる人にしか分からん説明になりそうだ
$hoge[var]と$hoge['var']って違うの? なんか違う結果が出るんですけど・・・。 あと $hoge = array( var => 'test' ); と $hoge = array( 'var' => 'test' ); って違うんでしょうか?
_,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" | ( ゚Д゚) <あのね、先生もそんなにヒマじゃないの。 |(ノ |) | | ヽ _ノ U"U
せめてマニュアル読んで質問しろよ・・・常識的に考えて・・・
というか、言ってること不明だなw
test.phpをincludeのみで使いたいんだが、 直リンクできないようにする方法とかない?
>>529 __FILE__ と $_SERVER['SCRIPT_FILENAME'] を比較することで
直アクセスか、includeされてるかの判別ができるからそれでどうにかしろ
>>529 1.普通は、include先ファイルはWebディレクトリ外に置く。これが基本。
2.中に無きゃいけないっていうなら、include元の(たとえば)index.php冒頭に
define('MYFILE',true);
とか書いておいて、includeされるファイル冒頭に
if(!defined("MYFILE") || MYFILE != true) {
die('');
}
みたいなことやる。
3.2.でアクセスされるのも厭なら、apacheのrewrite_modつかって
RewriteEngine on
RewriteRule (アクセス許可ファイルじゃなきゃ) (アクセス不可)
とかで処理。
include だけなら拡張子変えれば?
httpdのmimetype関係ディレクティブを弄らないと普通は テキストファイルとして見えちゃうことが多いから駄目でしょ。
webサーバ側で対象のファイルやディレクトリに アクセスできなくすればいいapacheなら.htaccessとかでdenyに webからアクセスできなくてもphpからなら権限さえあればincludeできる
htaccessってあんまりおすすめしたくないな
webサーバー側設定に依存するのは事故拡散するからね。
>>531 あるいは
>>531 の2のようなこととかをPHP内部でしておくのが大切。
俺もLAMP環境を中心に色んな案件やってきたが、
>>530-531 の方法を推奨する
何か実現したい事があった時に、色んな設定(コーディング)等をする必要があるのは高度だ。
不具合があった時に問題切り分けなど時間かかって経費かかるし、
速度面や再利用性など重視で問題がなければ、言語内で完結したほうがいい。
>>502 おまえさんがほんとに簡単に作れるなら作った方が良いよ。
儲け時だから^^
儲けられなかったら補償してくれんの?
SNSなんて運用が重要でただ作っただけじゃ全く儲からないよ
今さらSNSで有料コンテンツなんて流行らないだろうし、収益モデル次第だよな
なんかどっかで戻り値が想定できない?ような設計はだめだ みたいのを読んだ気がするんだけど、 functionの戻り値がOKなら配列(array)だめならfalse(bool) みたいに違う型を送るのは、設計的にあまりよくないのですか? 戻り値が想定できないじゃなくて、文字列か配列特定できないどっちかが返ってしまうとかだったかも・・・。
>>543 その関数を使うPG視点で分かりやすく使いやすいのが良い関数。
>戻り値が想定できない?ような設計はだめだ
「戻り値が想定できないような関数名はだめだ」なら良く聞くけど。
>>543 PHPの標準関数はそういう戻り値(array or bool)が多いけど
正直言って使いにくいとはよく思う。
慣れたんで困らなくはないけど。
ただ、これは作法の話であって設計がダメとかいうのとは違う。
元の話を思い出したらまた来な。
じゃあどういうのが使いやすいんだ?
もういちいち「?」で人の質問流れの中で無内容な反問レスを書く人は、居なくなってくれないかな。 ほとんど同一人物だろこれ。
じゃあどういうのが使いやすいのかな
ドウデモイイ
>>544 ,545
レスdクス。
特に悪い設計と言うわけじゃないんですね。
>>547 PHPに興味はあるんだけど頭が悪くて質問に答えるどころか、
疑問も浮かんでこないのに、なにかスレで言いたくてたまらない
可哀想なやつだと思ってにこにこして読んであげてるよ、おれw
552 :
nobodyさん :2007/04/07(土) 23:01:46 ID:K6TrX8TC
へたれな質問ですいませんが、 $fp = fopen(filename, "r"); while(!feof($fp)) { $str = fgets($fp, 4096); $str = rtrim($str); // 改行除去 echo "$str<br>"; } fclose($fp); ファイルの中身 ------------------ ああ いい うう EOF ------------------ 単純にファイルの中身を表示しているだけだが、ファイルの末端を改行すると その行も処理されちゃうのはなんで? EOFで最後の行は無視されるかと思うんだけど… (if (!$str){ continue; } でうまくいけるけど)
[EOF]も、l文字列の終端をあらわす制御コードだからです。 null[EOF] null[改行] はrtrimから見れば一緒です。
シランガナ
>>552 単純にeofに達する判断が読み出した後だからとしか
期待する動作を望むならfgetsの戻り値でやるとか
$fp = fopen(filename, "r");
while($str = fgets($fp))
{
$str = rtrim($str);
echo "$str<br>";
}
fclose($fp);
557 :
nobodyさん :2007/04/08(日) 03:33:53 ID:evw5P74I
ファイルの改行の数数えるのってこれでいい? substr_count ( file_get_contents($file), "\n" ); 今までは count(file($path)); でやってたけど上のほうが1.5倍速かった ファイルはShift_JISで日本語入ってるけど平気かな
>>557 sjisの下位バイトは制御コード使ってないので大丈夫。
間違ってるのは後者。改行コードが0個でも1と返る。
559 :
nobodyさん :2007/04/08(日) 09:24:41 ID:iJakkiFr
質問です。 たとえば、ライブハウスのライブ情報を登録する機能があるとして、 各日にちごとに出演者情報を登録する際に、出演者数が毎日マチマチで ある場合、SQLに送信する出演者IDの数もマチマチになるわけですけど、 そうすると、単純に考えたら保存するフィールドが複数必要になります。 でも、そんな不安定なことするわけにいかないので、特定のフィールド”players”に カンマ区切りで追加上書きしていくのが正解なのかなぁと思ったんですが、 こういう発想でいいんでしょうか? なんだかphpの質問かSQLの質問かわからないですが、アプリ制作の いろはとして質問させてもらいました。OKですか?
>>559 DBの正規化の考え方からすれば、その「不安定なこと」も「特定フィールド
カンマ区切り」もいずれも外れてる。
ライブイベント情報に即して、出演者「行」を増やしていく(第一正規化)。
ライブイベント情報をキーにして出演者 tableを別途作り、またIDキーなどで
整序していく(第二正規化以降)のが普通。
>>560 なるほどー、ありがとうございます
正規化について調べてみます!
562 :
nobodyさん :2007/04/08(日) 10:48:24 ID:evw5P74I
>>558 さんくす
問題ないのね というか後者は間違ってたのか 助かりました
複数のデータをどう入れるかって問題はDB初心者のころは誰しも通る道だよね 大抵カラムをその数だけ増やすかカンマ区切りで入れちゃうんだけど
んでカンマ区切りにLIKE検索かけたりね
まあベタな補助情報ならそれでいいんだけど(たとえばドリンク付きカラムのコーラ、ジュース、ビール みたいなもん)、出演者情報は、どう考えてもライブ情報なら最初から正規化対象だろうから いい勉強の機会ということで。
566 :
nobodyさん :2007/04/08(日) 12:48:00 ID:+aqEfY9a
環境: Windows XP, Apache 2.2.4, PHP 4.4.6 $path = '/diary/2007/'; $dir = opendir($_SERVER['DOCUMENT_ROOT'].$path); while($file = readdir($dir)) { if(ereg(".php$", $file)) { $file = ereg_replace('.php', '', $file); echo('<a href="/diary/2007/'.$file.'">'.$file.'</a>'."\n"); } } closedir($dir); このようにファイル名を取得してリストを作っています。 ディレクトリ 2007 の中には 01.php, 02.php, 03.php, 04.php のファイルがあり また、上記の方法ではこの順に表示されます。 ディレクトリの中の最後のファイル名のみを取得したい場合は (上記の例では 04.php が "最後のファイル名" に相当します) どのように書けば良いのでしょうか。よろしくお願いします。
ループの中を $aF[] = ereg_replace('.php', '', $file); として 最後に $hosii_file_mei = array_pop($aF); じゃだめなのかい?
568 :
nobodyさん :2007/04/08(日) 13:23:08 ID:Q73wCY81
質問です。 PHPでBBSを作りました。 案の定荒らしが書き込まれています。 そこでプロキシ経由での書き込みを禁止したいのですが、その書き込みがプロキシ経由かどうかを知るためにはどうすればよいのでしょうか? よろしくお願いします。
>>568 ハッキリ言えば全て防ぐのは無理。
楽な方法としてはBBQつかってみるとか
571 :
568 :2007/04/08(日) 13:29:08 ID:Q73wCY81
>>569 ありがとうございます。
getHostByAddr($_SERVER['REMOTE_ADDR']) === $_SERVER['REMOTE_ADDR'] )
で真にならなければプロキシ経由になるんですね。
知りませんでした。さっそく導入してみます。
ちょっと前までProxyとわかるためにすごく複雑なプログラム組んでたが、 こんなに簡単にわかるのか・・・
573 :
569 :2007/04/08(日) 13:31:55 ID:???
>>571 「経由」かもしれない、っていう程度だし、負荷がかかるし、あんまり自分は好きな方法じゃない。
とりあえずそこらへんからはじめて見たらってな程度。
自分がやるなら
>>570 の方面でやるだろうな。
Smartyって何だ? フレームワーク? それともソフト?
>>566 $index = glob($_SERVER['DOCUMENT_ROOT'].'/diary/2007/*.php');
とかやってcount()とかarray_pop()とかarray_slice()とかかなぁ。
577 :
568 :2007/04/08(日) 13:43:30 ID:Q73wCY81
さっそくBBQについて調べてみました。
http://bbq.uso800.net/code.html に組み込み方法として
sub checkProxyList
{
my $RADDR = $ENV{'REMOTE_ADDR'} ;
$RADDR =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $query_addr = "$4.$3.$2.$1.niku.2ch.net";
my $addr = join('.', unpack('C*', gethostbyname($query_addr)));
if ($addr eq '127.0.0.2')
{
DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)");
}
return 0 ;
}
が載っていましたが、これってPHPではないですよね?
PHPでのBBQの導入はどうすればよいのでしょうか?
>>576 いや、ググって調べたんだが自分の考えが合っているかどうかわかんないので
よく使う関数集みたいな感じで集めたものでいいの?
「アプリケーションソフトを開発する際に頻繁に必要とされる汎用的な機能をまとめて提供し、アプリケーションの土台として機能するソフトウェアのこと。」
>>575 glob関数は、パターンマッチでファイル名を確保するから、
それ使うと、
>>566 の要件(おそらくファイルシステム上のファイル順での取得)には合わないでしょ。
>>577 それくらい勉強しなさい。
perl知らなくても、その程度のコード見れば移植は簡単でしょ。
それにもう少しぐぐれば、PHPでのそのBBQ対応スクリプト見つかるし。
脊髄反射で聞くのはやめようぜ。
>>577 その程度のPerlスクリプトならPHPの知識があれば十分読めるだろ
>>578 テンプレートエンジン
include() include_once() require() require_once() この違いがわかんね
>>579 GLOB_NOSORTフラグを立てれば、というか数字二桁限定では関係ないんでは。
「マニュアル嫁」っていうやつは どの辺り読むかURL出してやったほうがいいと思うぞ ただでさえ読みづらいマニュアルなんだ
いつもの奴かw
>>583 ああ、そうだね。それだとOKか。
587 :
568 :2007/04/08(日) 14:01:34 ID:Q73wCY81
ありがとうございました。どうやらBBQいけたみたいです。
>CHMでダウンロードして再コンパイルすれば文字化けも消えて便利だぞ? ちょwwww詳しく!!!!
相手にスンナってのに
>「マニュアル嫁」っていうやつは >どの辺り読むかURL出してやったほうがいいと思うぞ 関数なんて関数名でぐぐれば出てくるしPHPサイとの検索機能使ってもでてくるし 関数リファレンスって章があるんだし 自分で探せない奴は頭おかしいと思うぞ。
592 :
566 :2007/04/08(日) 14:21:53 ID:+aqEfY9a
>>592 >>567 だけど、
>>579 のglob使うほうがスマートだよ。
$index = glob($_SERVER['DOCUMENT_ROOT'].'/diary/2007/*.php',GLOB_NOSORT);
echo array_pop($index);
の二行で終わる。
>ただでさえ読みづらいマニュアルなん PHPほど親切で分かりやすいマニュアルはないだろマジで・・・
確かにPHPの関数名でググるとPHPマニュアルが見つかる。 ザクザク見つかる。 というかそれしか出てこない。 PHPマニュアルのミラーがなんであんなにあるのか不思議だ。 置くなとは言わないが、せめて検索エンジンはじいてくれよ。。。
公式落ちてる時に役立つじゃn
公式が落ちたときのためのミラーがそんなにいくつも要りますか。 ググった時の上位10件がPHPマニュアルとそのミラーなんて酷すぎるぜ。 あと、PHPマニュアルは階層構造になっているのが逆に使いづらいというか。 目次をクリックしたらまた目次だったときは一瞬迷う。
だからCHM使えと何度言ったら
>>597 沢山あって分かりにくいからミラー作らないで下さい/Googleは規制してくださいってか?
情報の選別くらい自分でしようぜ
いや、でも分かる 俺も検索しててウザーって思う なんでみんなあんなにミラー作りたがるんだ?
作りたがるっていうか、apacheの設定で勝手に拾われてるんじゃないの?
>>601 アドレス欄に php.net/hogehoge でいける
ブラウザで設定しとけば、もっと早くなりますな
望んでる動作をする関数を見つけたいときはどうするんだぜ?
606 :
566 :2007/04/08(日) 15:48:22 ID:???
>>593 早速書き換えました。重ね重ねありがとうございます。
>>605 ・ぐぐる。
・目的別リファレンスがある書籍を買う。
・日頃からマニュアルを眺めて関数の機能を把握しておく。
文字列関数ならphp.net/string、配列関数ならphp.net/array、よくわからんかったらphp.net/funcrefから探したりとか
610 :
609 :2007/04/08(日) 15:52:19 ID:???
stringじゃなくてstringsだった
phpマニュアルのミラーに広告載せてるやつは何なの?
お前みたいなカモを待ってるんだろ。 公式ブックマークしとけばそんなサイト気にならないよ。
自分の鯖にマヌアルうpるやつってなんなの? 自分らしさの表現なの? どうせなら本家ミラーのjp*.php.netにすればいいのに
ミラーサイト=SEO
しかもろくに更新しないから内容の古いことw
ミラーサイトは公認制にするべき。 ミラーサイト側に苦情を入れようと思ってる。
本家とかjp.php.netとかPHPユーザ会(これは論外に遅い)の サーバーの挙動が遅いってのもあるよな。そこらへんは使う気になれない。
↑ 以上、アンチミラーサイト側 それについてミラーサイト作者の反論 ↓
いやなら公式見てればいいじゃないですか
620 :
617 :2007/04/08(日) 18:13:53 ID:???
俺はこっち側
>>619 マニュアルのミラーが検索結果を汚染しているって話だったのだが
Webに転がってるミラーうざい⇒自分専用のミラー作っちゃえ
マニュアルしか出てこないってこたないでしょ 例えばどの関数でぐぐるとそうなる?
マニュアルが上位に引っかかって有効な情報がえられない むしろミラーサイトなんて複数もいらねえよ
むしろというか、その話をしているんだけどね^^;
preg_matchで4桁の数値にマッチさせるには /^\d{4}$/ でいけましたが、 4桁〜8桁の文字にマッチさせるにはどうすれば良いのでしょうか? /^\d{4-8}$/ にしてみましたがダメでした
マニュアルをミラーすると: ・ウェブサイトの知名度やページランクが上がる可能性がある。 ・広告をつければ何もせずにお金がじゃんじゃか、ああおいしい。 ・なんとなくいいことした気分になる。
>>627 /^\d{4,8}$/
マニュアル読もうな
公式のみ指定でぐぐればいいんじゃ?
それじゃあ公式しか調べられないじゃん。
もうどうでもいいから、そろそろやめようか
関数のTipsとか面白い使い方とかを調べたくてぐぐっても マニュアルばっかりだとやる気なくすよってことでは? -マニュアルとか-manualを付けるって手もあるけど たまたまそれらの語句を含んでいた有益なページまで除外してしまうかもしれんし
そこでオントロジ検索ですよ
公式マニュアルとUser Contributed Notes以外に有益な情報なんてほとんど皆無。 例外的に有益な情報はちゃんと上位に出てくる。 このスレのレベルは公式嫁だからもういいじゃん。
SELEFT * FROM account ↓ You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELEFT * FROM account' at line 1 これってaccountってテーブルがないってことでいいんだよな?
なんという構文エラー・・・これは間違いなく(ry
seleFtになってんぞ。
これは間違いなくSELEFT構文
インド人を右に SEを左に
糞ワロタwwwwwwwwwwww
644 :
nobodyさん :2007/04/08(日) 22:22:06 ID:OS1trKFT
646 :
nobodyさん :2007/04/08(日) 22:44:17 ID:zw0Bo/cU
質問です。
>>644 の質問はPHPと何の関係があるんですか?
>>638 > check the manual (マニュアル嫁、バカ)
>>646 The PHP Extension and Application Repository
プログラミング言語PHP用のライブラリ集。色々な拡張モジュールやアプリケーションがPEARに登録されており、ネットワーク経由で取得・利用することができる。PerlでいうCPANにあたる。
「ぴあー」だと思われていたが最近「ぺあー」だと判明
PEARって俺パールって読んでたよwwwwwwwwww
パールはperlだろ
>>644 とりあえずphpのバージョンを書いて。
大方php5で実行してるから、php4のOO満載のpearがエラー出してるんだと思うけど。
652 :
nobodyさん :2007/04/08(日) 23:09:51 ID:OS1trKFT
>>651 PHP Version 4.4.4
です。
php4用に書かれていないんでしょうか・・。
mysql_query()って成功するとTRUE返すんだっけ?
パスワードの暗号化って皆何使ってる? md5でいいの?
globとopendirって使い分けで何か気をつけることある? ファイル名を正規表現でいじるならはじめからreaddirのなかでpreg_matchする→opendir 簡単なパターンマッチ→glob なのかなあと。こんなかんじ?
656 :
nobodyさん :2007/04/09(月) 00:22:46 ID:AitdzCc4
絵文字を?*****;形式に変換できませんか?
>>656 いきなり質問するより前に、まずは自分で試せ
>>655 つーか、PHPでWebサイト作るのに、正規表現使うほど複雑なファイル構造は登場しないし。
時々せいぜい出てきてもglob($dir.'/*')か、glob($dir.'/*.ext')くらいだな。
ごちゃごちゃしたデータは全部DBに入れた方が効率的。
&#*****; の半角です、すみません
>>653 マニュアルぐらい読もうよ。
サンプルも載ってるんだし。
<html> <head> <title></title> </head> <body> <? echo $_SERVER['HTTP_USER_AGENT']; ?> </body> </html> これにアクセスするとソースが Array ( ) <hr /> となります 正直わけわかりませんorz どなたか助けてください・・・
662 :
661 :2007/04/09(月) 01:03:13 ID:???
あ、ごめんなさい。WEB制作板に書き込んだつもりでした。 専ブラの誤爆です。しつれいしました
663 :
661 :2007/04/09(月) 01:03:55 ID:AitdzCc4
ソースに問題ないから環境がおかしいな。 PHPをもう一度インストールしなおしてもなるなら質問してみろ。 ※初回にIDをだして質問しましょう
665 :
nobodyさん :2007/04/09(月) 01:11:29 ID:AitdzCc4
>>664 すんません
Windowsなのでインストールではなく上書きしました。
しかし、直りません。
ブラウザも特に設定をいじっていません。
上書きはあんまり推奨しない。全部削除してからいれないせ。 あとブラウザはなにつかってんの?
667 :
nobodyさん :2007/04/09(月) 01:14:09 ID:AitdzCc4
>>666 全部削除して上書きしました。
ブラウザはIE6.0です。
668 :
nobodyさん :2007/04/09(月) 01:18:49 ID:AitdzCc4
すみませんでした・・・ <html> <head> <title></title> </head> <body> <? echo $_SERVER['HTTP_USER_AGENT']; ?> </body> </html> にアクセスしてると思いきや、 Array ( ) <hr /> が出力される別の.phpにアクセスしていましたorz
orz
ヽ(・ω・)/ ズコー \(.\ ノ
671 :
nobodyさん :2007/04/09(月) 01:40:10 ID:xbEWIqwP
文字をprintすると、 ブラウザに?????と表示されてしまうのですが、 これはphp.intの設定に間違いがあるのでしょうか、 それとも、Apacheのほうでしょうか?
ブラウザでは?w
>>671 まさか貴様今年の新卒か!?
文字コードを勉強して来い!
674 :
nobodyさん :2007/04/09(月) 02:04:28 ID:xbEWIqwP
PHPの設定し直したら、正常に表示されました。 と思ったら次は、mysqlが使えなくなった・・・
>>674 OS再起動してMySQLが立ち上がってないとかじゃないだろうな
そうじゃないならphp.iniのMyS
676 :
nobodyさん :2007/04/09(月) 02:30:23 ID:xbEWIqwP
mysqlを有効にする場合は、 php.intの;extension=php_mysql.dllの「;」を外すだけでいいんですよね? Apacheを再起動してphpinfoで確認しても、 mysqlの情報がでてきません。 おかしいな・・・php.intを設定し直すまでは、 mysqlの情報出てたんですけど。
677 :
sage :2007/04/09(月) 02:42:16 ID:ukAGIvQQ
・・・
678 :
nobodyさん :2007/04/09(月) 02:56:36 ID:xbEWIqwP
PC再起動したらmysqlの情報でてきました おさがわせして申し訳ございませんでしたwww
.int
680 :
nobodyさん :2007/04/09(月) 03:09:37 ID:xbEWIqwP
681 :
nobodyさん :2007/04/09(月) 03:11:39 ID:Lr1gb1O7
ht★tp://77.xmbs.j★p/kid66666/←★は抜いてね! ◎マル秘!総合サイト! m(__)m《どろろ》m(__)m 超人気!完全決定版です!ホスト掲示板・風俗掲示板お水掲示板・総合掲示板 ブラックOK!必殺金融屋!超激安噂の車屋さん☆ このサイトを知らない者は必ず損します(--;)!!
一回きりのミスだったらタイポかも知れんと突っ込まれないだろうが、何回もintって書いてるから突っ込まれるんじゃね?
整数型ファイルなのか・・・
interface
685 :
nobodyさん :2007/04/09(月) 04:20:52 ID:vh2gxFaj
ソートに関して質問です。 $elemA[0]="りんご"; $elemA[1]=0.23; $elemB[0]="みかん"; $elemB[1]=0.21; $elemC[0]="ばなな"; $elemC[1]=0.11; $array[0]=$elemA; $array[1]=$elemB; $array[2]=$elemC; とされた$arrayを各要素の2つ目の要素の数字でソートしたいのです。 関数sort()はこういう使い方を想定して無いみたいなので困っています。 こういう場合どうすればいいのでしょうか?
usort
687 :
nobodyさん :2007/04/09(月) 04:49:00 ID:xbEWIqwP
.インポ
688 :
nobodyさん :2007/04/09(月) 05:24:42 ID:kaHzWtZF
ごめん、色々調べたんだけど全然わからんから質問いいかな? PHPでSmartyが使いたくてダウンロードして特定のディレクトリにコピーした後、 php.iniのinclude_pathにそのディレクトリへのパスを設定。 んでrequire_once("Smarty.class.php");ってやるとSmarty.class.phpが見つからないって言われる。 見たところパスはちゃんと設定されてて、反映もされてるし、Smarty.class.phpもある。 Apacheはちゃんと再起動したし、なんでエラー?みたいな。 ちなみにSmartyだけじゃなくて他のファイルも同じような状況。 カレントディレクトリとかは普通に読み込めるんだけど、/usr/local/...とかになると無理。 前はApacheもPHPもソースをコンパイルして入れててその時はちゃんと動いてたんだけど、 パッケージに入れ替えてから動かなくなった・・・。 これって何が原因が原因なのかわかる人いる?
689 :
nobodyさん :2007/04/09(月) 05:30:23 ID:kaHzWtZF
ごめん、環境書き忘れたorz 環境はFedora6、Apache2.2、PHP5
permission deniedじゃなくて?
ソフトバンクのページってHTML対応表とかないんだな、糞だ
$array = array("ABX"=>"テスト"); のとき foreach($array as $key=>$value){ echo $key; } で、「ABX」を表示できるけど、 echo $array['ABX']がそのままテストと表示されるように ABXを表示できないの?
array_search()で検索するとか、array_flip()で反転させるとか
>>693 「テスト」の部分が空白のとき
array_flipなら []=>ABXになるけど
直接echoにできないね
695 :
644 :2007/04/09(月) 08:34:27 ID:WcujzhhQ
>>644 自己解決しました。
なんとか複数のIPを連続的に国判別する方法が見つかりました。
お騒がせいたしました。
697 :
nobodyさん :2007/04/09(月) 10:37:50 ID:iVxz/LH1
>>690 最初パーミッションかと思ったんだけど、エラーにはパーミッションのエラーは出ててなくて、
ただファイルが見つからないっていう表示がでるだけ。
>>696 phpinfo()見る限りでは/etc/php.iniを読みにいってるようになってる。
get_include_path()で設定されてるパスを調べてみたら設定が反映されてるみたいだからちゃんと機能はしてると思う。
ただなぜか読み込めない。
なんだこれ。orz
>>697 Smarty って現在バージョンは、インストール直後、スクリプトファイルは、Smarty/libs/*phpにあるので
そこはチェックした?
699 :
nobodyさん :2007/04/09(月) 11:07:06 ID:SC5xLpVK
半角の + をGETメソッドで取得する際にどのようにするべきでしょうか? 普通に hoge.php?value=+ とやっても取得できません。やはりエンコードすべきなのでしょうか?
>>699 そういう問題ではなくて、そもそも+を値として扱うというのが不正規
RFC2396の2.2.Reserved Charactersを見ましょう。
+は、あなたがやってるuriの?、=と同等の扱いです
701 :
nobodyさん :2007/04/09(月) 11:18:43 ID:SC5xLpVK
>>700 ありがとうございます。
具体的に+を値として認識させてGETで取得するにはどのような方法があるのでしょうか?
702 :
nobodyさん :2007/04/09(月) 11:20:00 ID:SC5xLpVK
>>700 ありがとうございます。
具体的に+を値として認識させてGETで取得するにはどのような方法があるのでしょうか?
わざわざreservedされてるものを、どうしてもっていうのがわからんけど、 ・・・どうしてもしたいなら、encodeすればいい。
704 :
nobodyさん :2007/04/09(月) 11:27:53 ID:SC5xLpVK
>>700 ありがとうございます。
URIから抜く際、たとえばPathが /hoge/appl/itemの場合 スラッシュ(/)の3番目以降の値(item)を取り出すにはどうすればいいのでしょうか?
まだ春休みなのか?
706 :
虚弱PHP :2007/04/09(月) 11:33:53 ID:???
>>654 SHA1使ってたけど、SHA512+Saltに変更した。
shaは構造が欠陥だから、心配するならtigerにすればいい。 漏れてもいいような情報ならmd5でもいいんじゃないかね。
708 :
nobodyさん :2007/04/09(月) 12:21:35 ID:4ZyIPEha
>>698 チェック済みです。
yum install php-smartyでパッケージでいれると
/usr/share/Smatyにインスコされるみたいなんですが、そこにパスを通しても読めないorz
というかSmatyじゃなくてもPEARとかでもなんでもそんなかんじです。
これはもうOSごと最インスコかな、、、
おれは独自の暗号化アルゴリズムを作ってる
>>708 ×Smaty
○Smarty
のタイポと思うが、それはそれとしてOSごと再インスコっていうのはヤケクソみたいだから
やめようぜw
とりあえず
ini_set ('include_path','パス名:パス名');
で明示的に指定しても駄目なの?
なんかすごくプリミティブなところで確認ミスしてる気がするぞなんか。
やっぱあれだよね。自鯖の開発環境の個別のアプリは、 ソースコンパイルする技能があるなら、とりあえずそれでやるべきだよね。 パッケージインストールは、カーネルとか、そういうのに限るべきだと思う。 問題の切り分けが出来なくなるわw
712 :
nobodyさん :2007/04/09(月) 12:55:42 ID:W+dKCXXH
ユーザーからの入力文字をhtmlspecialcharsを使わずに独自に無害化するコードを書いてます。 < > & " ' これらの文字以外に正規表現などで使われるメタ文字も無害化するべきでしょうか?
問題が100%発生しなくなるくらい安定すればいいんだけどね
1つのページで 投稿→確認画面→投稿完了 をするときにうまいこと分ける方法ないかな・・・ 皆どんな感じでやってる? 値無し=投稿 $_POSTのみ=確認画面で$_POSTをセッションに $_POST+$_SESSION=投稿完了 これがベストかな?
716 :
nobodyさん :2007/04/09(月) 13:10:28 ID:W+dKCXXH
>>714 作法を学習するために独自で作りたいと思ってます。
他の言語にも作法を適用したいためなんですが無駄にやりすぎですかね?
>>715 multipart扱う場合は、それじゃ駄目だろうな。$_FILE処理も必要
>>715 だめじゃないかな。
ブラウザで投稿画面に戻ったときに既にセッションに値入ってるもん。
それだと、投稿画面に戻る→修正して投稿したときに確認が画面がスルーされて完了しちゃうよ。
formのhidden値で区分けるべき。あと、上に書かれてる$_FILEの扱いも気をつけてね。
719 :
nobodyさん :2007/04/09(月) 13:23:34 ID:VhSqsDLr
サーバの監視スクリプトみたいのを作りたいのですが、 IPアドレス:ポート番号で接続を試行して、応答が返ってきたらtrueを返す。 みたいな都合のいい関数ありませんでしょうか?
>>719 PHP5ならstream_socket_clientで一発
4ならphp socket ping あたりでググレ。ping系スクリプトが転がってる。
721 :
nobodyさん :2007/04/09(月) 13:48:05 ID:VhSqsDLr
>>720 pingが通らなかったので、pingを使わない方法を探していましたが、
これでいけるようです!どうもありがとうございました。
速度じゃなくて勉強のために作ってるんだろ。
>>712 RFCをよみながらエスケープすべき文字を見極めてやればよし。
勉強ならC言語とかでやらないと意味が無いだろう。 PHPなんかだと組み込みの高機能な関数が多すぎる。
PHPで車輪の再発明するぐらいならCの勉強した方がよさげ
726 :
nobodyさん :2007/04/09(月) 14:24:21 ID:kaHzWtZF
727 :
nobodyさん :2007/04/09(月) 14:33:36 ID:W+dKCXXH
アドバイスありがとうございます。 htmlに出力するときはhtmlspecialcharsで対象となる文字のみ対策しておけばXXS対策になるんでしょうか?
>>726 Smarty 以外のファイルはちゃんと読めるのか?
729 :
nobodyさん :2007/04/09(月) 14:57:00 ID:kaHzWtZF
>>728 Smarty以外も読めんですorz
ファイルの種類というよりもむしろ、ディレクトリの場所によって読めるか読めないかみたいな感じで、
カレントディレクトリとかドキュメントルート以下(/var/www/html/〜〜)の中にあるファイルなら普通に読めるんですけど、
/usr/〜〜とかそれ以外の場所になるとパスが通ってても読めない状況です。
>>729 セーフモードでアクセスが制限されている可能性は
確かめた?
>>727 クライアントからの入力データだと思うもの全てをhtmlspecialcharsに突っ込んでも安全とは限らない。
本質的にXSSはプログラマがクライアントからの入力全てに気を配らないと起こり得る。
環境変数もどれが任意でどれがそうでないかを全て把握してる人はそういない。
よって、HTML出力を必要としない部分全てをhtmlspecialcharsに突っ込むのが安全。
尤も、タグの属性値なんかに突っ込むならそれでも不十分。そんな設計は見直すべきだが。
732 :
nobodyさん :2007/04/09(月) 15:09:03 ID:kaHzWtZF
>>730 セーフモードっていうのがよくわかってないんですが、
php.iniを見てみたら
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
みたいになってます。
>>729 seLinuxが有効になっている可能性は?
734 :
nobodyさん :2007/04/09(月) 15:28:35 ID:kaHzWtZF
>>733 ああああああああああああああ!
# getenforce
Permissive
鬱すぎるorz
736 :
nobodyさん :2007/04/09(月) 15:51:53 ID:kaHzWtZF
>>735 seLinuxは無効になってたっぽいです。
もうほんとなにが悪いんだか・・・。
737 :
nobodyさん :2007/04/09(月) 16:34:56 ID:R/Jf3MPV
お知恵を貸してください。 最近よく私が管理しているWikiにスパムが飛んできて困っているのですが、 $_POST['msg']に入っている本文から英字だけ抜き出す場合どうすればいいのでしょうか。 それを使って英字の文字数によりスパム弾きをしたいと思っているのですが…
[a-z]
739 :
nobodyさん :2007/04/09(月) 16:39:28 ID:R/Jf3MPV
>>738 eregを使うという所までは思いついたものの、
ループ処理で文字を次々ヒットさせる際の処理が思い浮かばず…
while(){substr(************************************); ふぬああああああああああああああああああ [a-z] } うんこ。
情報は小出しじゃなく一度に出したほうがいいぞ 答える方も質問してる方も時間の節約になる エスパーが登場すればこの限りではないが
preg_match_all
allなんてむだなものもひろうからpreg_matchがいいよ
>>736 で、あえて聞くけど
require_once(フルパス);
もエラーになるの?
あるいは
echo file_exsists(フルパス);
はtrue返るの?
上のフルパスはフルパス.file名の意味
746 :
nobodyさん :2007/04/09(月) 17:16:23 ID:R/Jf3MPV
>>740 有難う御座います。
参考にしながらこんなのを組んでみました…
$msg = $_POST['msg'];
$eng_num = 0;
$i = 0;
//コメントスパム対策
while($i<=strlen($msg)) {
$i++;
$num = substr($msg,$i,1);
if (ereg('[a-zA-Z0-9]',$num)) { $eng_num++; }
}
if (strlen($eng_num)>50) { die; }
…が正しく実行されないのは置いといて、
大体こんな感じでいいのでしょうか。
ord使いたいな $msg = $_POST['msg']; $eng_num = 0; $i = 0; while( $char = ord($msg[$i++])) !=0) { if (ereg('[a-zA-Z0-9]',$char)) { $eng_num++;} if($eng_num > 50 ) {die('invalid post');} }
>>747 それは動かんだろ
$msg配列じゃないし、eregがへん。
749 :
nobodyさん :2007/04/09(月) 17:33:38 ID:R/Jf3MPV
>>747 有り難う御座います!
バイト後にやってみます。
あ、そうだな。なかったことにしてください。
>>743 無駄なものってなんですか?
preg_match_all('/\w/',$_POST,$c);
if (count($c[0]) > 50) die();
で問題が出る?
セッションって、一度クッキーに置き換えてるのですか?
spycとsyckではYAMLのパース結果が違うくないですか? spycに添付されていたspyc.ymlで比較してみたんだけど、違うようです。 あと、syckは解析できなかった時に、"unknown type"を返しますよね? なんじゃこりゃ?
754 :
nobodyさん :2007/04/09(月) 20:50:38 ID:W+dKCXXH
データベース(MySQL4.1)からデータを抽出したいのですが、 $sqlのなかにフィールド名とテーブル名が入った変数を入れると動きません。 $sqlの中に変数ではなくて、フィールド名とテーブル名を直接書けば正常に動きました。 フィールド名とテーブル名を変数に格納して、$sqlにまぜたいのですが うまくいきません。 以下、問題となるコードを抜粋しました。 $field_name = "id, name"; $table = "table1"; $sql = "SELECT $field_name FROM $table_name ORDER BY id"; $res = mysql_query($sql,$con) or die("データを抽出できません"); PHP4.4.6とMySQL4.1を使用してます。 どなたかご教授お願いいたします。
>>754 $table = "table1";
$sql = "SELECT $field_name FROM $table_name ORDER BY id";
$table_nameなのか$tableなのか
printとechoの違いは無し? タイム計測したらechoの方が二倍近く速かったんだが
>>754 変数を"でくくるのはこれで合ってますか?
$sql = "SELECT \"$field_name\" FROM \"$table_name\" ORDER BY id"
試してみましたが動きませんでした。
>>755 すいません、$tableは$table_nameの打ち間違えです。
echo で$sqlを出力したらでてきた内容です。
SELECT id,name, FROM table1 ORDER BY id
変数の中身を直接書くと動くので、SQL文自体には間違いはないと思ってますが
何か勘違いしている部分等ございましたらご指摘ください。
759 :
nobodyさん :2007/04/09(月) 21:29:13 ID:Hw87SVIB
以下のようなプログラムを作って php -f test.php とコマンドラインから呼び出したのですが何も表示されません。 何故でしょうか? test.php <? print "aaaaaaaaa"; ?>
>>758 SELECT id,name, FROM
の抽出するフィールドリストの最後にカンマついてちゃだめ
てかmysql_error使え
762 :
nobodyさん :2007/04/09(月) 21:54:49 ID:LuOmRtTQ
むちゃくちゃ単純なところで数時間はまっている… ------------------------------------------------------ $_POST['name1'] = htmlspecialchars($_POST['name1']); //1回目だけ特殊記号変換 echo $_POST['name1']; echo $_POST['name2']; $form = "<form action=\"${_SERVER['PHP_SELF']}\" method=\"POST\"> <input type=text name=name1> <input type=hidden name=name2 value=\"${_POST['name1']}\"> <input type=submit value=\"go\"> </form> "; echo $form; ------------------------------------------------------ 一度受け取った$_POST の中身をhtmlspecialchars で&gt; に変換して もう一度送っているだけなんだが。 (俺の頭の中では)$_POST['name2']の中身は&gt; 変換済みになっているわけだが、 二回目を受け取ったら(もう一度送ったら)、自動的に元に戻っちゃうわけ? 助言をお願いします。
>htmlspecialchars で&gt; に変換して 意味不明 >$_POST['name2']の中身は&gt; 変換済みになっているわけだが、 意味不明 >二回目を受け取ったら(もう一度送ったら)、自動的に元に戻っちゃうわけ? 意味不明 返れ
日本語でおk $fromとかわけわかんないんだけどさ
>>752 Cookieに値は入れないが概念的にそうとも言える。
>>759 エラーも表示されないってことなら、同じファイル名の別のtest.phpだったとか。
>>762 変換というよりエスケープ。
$form = "<form action=\"${_SERVER
ここで「"」を「\"」にエスケープしてるけど、HTMLでは元に戻ってるでしょ?
>>762 まあ誰もがハマる道かもしれんな
元に戻るんじゃなく、送信されるhiddenの値が
HTMLエスケープされていない文字列ってだけだ
769 :
762 :2007/04/09(月) 22:17:16 ID:LuOmRtTQ
? ごめん、あれだ、マジでこんがらがっている かりに<img>を入れると<img>に変換されて <input type=hidden name=name2 value="<img>"> 上のソースになるわけだけど、 これをそのまま送るとなんで<img>になっちゃんだ?
770 :
nobodyさん :2007/04/09(月) 22:22:09 ID:6Xdj6yAC
完全意味不明だな。 普通に考えて<一回目>は &lt;img&gt; になってるだろ
>>765 DoCoMoでセッションが使えなかったからさ・・・
772 :
499 :2007/04/09(月) 22:24:02 ID:???
遅レススマソ なんか検索して一見目にここから最新のfixもってってちょって書いてあったんで落としてビルドしたけどやっぱいり同じエラーで止まったっす 英語読めてないだけかもしれませんが
773 :
762 :2007/04/09(月) 22:24:26 ID:LuOmRtTQ
すいません、半角で送信してもうた。 <input type=hidden name=name2 value="&lt;img&gt;">
775 :
nobodyさん :2007/04/09(月) 22:27:20 ID:AitdzCc4
>>773 質問の内容がまじで意味不明だが
ページを開くと一度だけプログラムが実行され
実行終了後には変数が全て空っぽになる(一部例外は除く
777 :
nobodyさん :2007/04/09(月) 22:33:49 ID:AitdzCc4
$_POSTや$_GETの値をそのままクエリで使用するときは、 $post = $_POST; "SELECT * FROM test WHERE id='$post'" より "SELECT * FROM test WHERE id='"+$post+"'" のほうがいいんですかね? $postの値が「' 適当なSQL文'」だったらまずいですよね もしその場合は下記の方も同じ動作なのでしょうか?
なんか今日、htmlエスケープ/specialchar関係で質問してる奴、全部同じ匂いするなw
>>777 そんなこと気にするくらいなら
適当なDBインターフェースを利用して
プレースフォルダを使えばいい
pear::DB の場合
$params = array($post);
$sql = "SELECT * FROM test WHEAR id=?";
$ret = $conn->query($sql, $params);
>>777 +演算子じゃインジェクションの前にとんでもないことになるけど。
クォートするかPDOStatement->bindValue()でも使おうぜ…。
>>771 「セッションを使うためにsidをcookieに持たせる」ってのはデフォルトの挙動であって
use_trans_sidとかでGETで送らせてやればCookie使えなくてもセッション自体は使えるよ
>>769 ソースに書かれた文字列の評価ってプロセスがあるんだよ
何らかの文字列を > そのものとして扱えないと > を入れる方法がないでしょ?
>>781 うん、.htaccessで設定したら使えたおサンクス
全ての携帯で見れるサイトって作るの難しいよな
>>772 imapのmake時点でエラー出てない?
784 :
nobodyさん :2007/04/09(月) 23:53:47 ID:R/Jf3MPV
>>751 完璧でした。どうもありがとう御座いました!
javaの排他処理?のシンクロナイズドをPHPで実現したいのですがどうしたら良いでしょうか。。 やりたいことはクッキーの削除とDB(トランザクションの処理はしています)への書き込みで、重複登録を防ぐ為にクッキーが無ければDBへ書き込まないようにしています。 普通に処理をするPGへ遷移する場合はクッキーも削除され、DBへ1件書き込まれるだけですが、F5を連打するとDBに1件書き込まれますがクッキーが消えません。。 また、処理の最後で$_COOKIEにarrayを入れるとクッキーとDBが削除及び登録されたりされなかったりします。 あと、setcookieで削除する所で戻り値がとれるまでループさせてやると、連打した数だけDBに登録されてしまいます。クッキーは削除されています。 何かヒントみたいなもの頂けると嬉しいです。。 お手数お掛しますがよろしくお願い致します。
786 :
785 :2007/04/10(火) 00:01:49 ID:???
すいません。 環境はPHP4.3.0 apache2 windowsXPです。 よろしくお願い致します。。
787 :
nobodyさん :2007/04/10(火) 00:53:06 ID:LOxXZREL
掲示板の記事を途中で切って全部読むリンクを付けるってのやってるんだけど…… 切る部分にURLやらメールアドレスやら携帯絵文字が入らないようにして、 2バイト文字の区切りで切れるようにして、 なんてやってると正規表現やら条件分岐使いまくりなんだけど 他でもそういう風にやってるのかな?高々文区切るだけで もう規定数の文字数で問答無用にぶった切ってもいいような気がしてきた
>>787 >もう規定数の文字数で問答無用にぶった切ってもいいような気がしてきた
なんでこうしないの?
見た目で考えても 「>>続きを見る」 の方が視認性高いじゃん
>>787 エロゲスレに誤爆した
確かマルチバイト系の関数で指定文字で切ってくれる関数があったぞ
よく覚えてないけど省略するときの文字も指定できたはず
>>760 さんのアドバイスが的中しました。
foreachでまわしてたので自動的にカンマがついてたのに気づきませんでした。
現在は問題なく動きます。ありがとうございます。
>>790 じゃ上で書いてた問題のあるコードってのは嘘だったわけ?
>>785 重複登録を防ぎたいなら、INSERTで失敗させるようにするとか、トランザクション使うとかすればいい。
setcookieでクッキーを削除したつもりでも、ブラウザがそのレスポンスを受け取るまでは何度でもクッキー送ってくるよ。
クッキーは排他処理とかに使える道具じゃない。
793 :
nobodyさん :2007/04/10(火) 02:26:58 ID:4NI9RXKe
朝っぱらからケンカうってるやつは暇なのか?
>>787 >>789 mb_strimwidth だね。(誰かこの関数名の単語の区切りを教えて)
でもメールアドレスの途中で切らないとかそういった機能はないから
たとえば「split系関数で切りたい文字列と切りたくない文字列が交互に並ぶ配列にして
ループで順に連結して規定バイト数を超えたかどうか見つつ
添え字 % 2 の戻り値でmb_strimwidth をかけるかどうか判断する」といったロジックが必要。
>>785 こういう場合は、
if(処理終了) {header("Location:....");}でOK。
強制的に飛ばす(リダイレクトする)のがいい。
>>797 >mb_strimwidth だね。(誰かこの関数名の単語の区切りを教えて)
エス トリム ウィドゥス かな?
で本題
mb_strimwidth(接続文字空)でいったん切ってから、正規表現で末尾の連続する半角英数記号を削除
で どう?
>>787 そんなに厳密じゃなくてもいいわけでしょ?
「ひらがながあれば、ある範囲で切る」だけを唯一の区切り条件にすればいいじゃん。
漢文サイトじゃないだろうから。
>>801 「連続する」英数だから全部は消えないだろ
URLのみの書き込みなら消えるけど
>>783 --with-imapにソースを解凍してmakeしたディレクトリ指定したらコンパイルまで通りました
パスが違うのかコピーするファイルが足りないのか?
804 :
nobodyさん :2007/04/10(火) 10:33:14 ID:Y95uap3I
オブジェクト指向を勉強しています。 PearDBクラスを、自分が作ったクラスの中で使うとき、 extendsするのか、ただ単に使う場所でinclude_once('DB.php')すればいいのか わかりません。 どちらにすればいいのでしょうか?
PHPでオブジェクト指向を勉強するなカス
806 :
nobodyさん :2007/04/10(火) 11:06:49 ID:Y95uap3I
いいんです。PHP以外はやる予定はないので。趣味ですし。
ストレスたまってる奴が昨日から沸いてるな
808 :
虚弱PHP :2007/04/10(火) 11:35:34 ID:???
>>804 用途によるとしか…。
>>805 は言葉は悪いけど正論だと思うなぁ。
オブジェクト指向はJavaでやるのが一番だと思う。
いや、SmalltalkとかRubyの方がいいのかもしれんけど、
俺はまともにやったことないからわからん。
カスは愛想だよ、うん。
810 :
虚弱PHP :2007/04/10(火) 11:40:23 ID:???
>>785 なんか根本的に間違っている気がする。
synchronizedってスレッドの処理だから今回のような件だと関係ないし。
俺だったら、CookieのかわりにSession変数使う。
811 :
虚弱PHP :2007/04/10(火) 11:45:46 ID:???
>>777 DBによってエスケープ方法が違うけど、
mysqlのネイティブ関数としてはmysql_real_escape_stringとかがある。
PDOならプリペアドステートメント使えば解決。
DBって決められたUPDATE文を実行するときでも、 エスケープしとくべきですか?
813 :
nobodyさん :2007/04/10(火) 12:22:30 ID:FUjP3ASn
var メンバ変数の宣言かかなくても、動くんですが、そんなもんですか?
814 :
nobodyさん :2007/04/10(火) 12:27:36 ID:FUjP3ASn
var メンバ変数名が違ってたら、エラーがでる設定ってありますか?
815 :
虚弱PHP :2007/04/10(火) 12:59:06 ID:???
>>812 "決められたUPDATE文"にDBから引っ張ってきた値が入っている場合は、
セカンドオーダーSQLインジェクションが発生する恐れがあるので必ずエスケープ。
平文でコードに直書きしている場合は問題ない…
けれども、人間は間違いをおかすものなので変数は全部エスケープが正解。
816 :
虚弱PHP :2007/04/10(火) 13:01:39 ID:???
>>813 そんなものです。
>>814 error_reporting(E_ALL);
でどんなもんでしょ
>>813 そんなものです
>>814 ないと思う
ただし、右辺値で使う場合は警告がでる
$foo = $this->bar;
とかね
オブジェクトについて質問です。
ttp://labs.cybozu.co.jp/cbl_activerecord/ このO/Rマッピングライブラリを使って、DBから取得してオブジェクトに入れるところまではできたのですが、
取得した値を使いたい場合にいちいち
$var['name'] = $todo->name;
$var['title'] = $todo->title;
と指定するのではなく、まとめて$varの配列に置き換えたいのですが
どうすれば良いのでしょうか?
多分PDOのfetchmode変えるなりすればできると思うが、 何のためのO/Rマッパだよ、、、そのまま使えばといいんじゃないかと
関数を実行した時に失敗したらエラーを返したいのですが、 hogeFunction() or die ('hogeFunction失敗'); という感じでいいのでしょうか? それとも if (hogeFunction()) { } else { die('失敗'); } とかくのがベターなんでしょうか?
session.use_trans_sid を"1" ブラウザをCOOKIE不可にしておいて <?php session_start(); echo 'Welcome to page #1'; $_SESSION['favcolor'] = 'green'; echo '<br /><a href="page2.php">page 2</a>'; ?> を実行すると hrefに?PHPSESSID=xxxx...が追加されるのはなぜ? クッキーの読み込みをしていないのになぜブラウザの設定が分かるの? (ブラウザをCOOKIE OKにしておくと?PHPSESSID=xxxx...は追加されない) つか 初めての接続でブラウザのCOOKIE設定を知る方法があるの?
>>820 そういう用途なら例外使えばいいんじゃない
823 :
nobodyさん :2007/04/10(火) 14:28:49 ID:mS0KEdcp
824 :
虚弱PHP :2007/04/10(火) 14:39:17 ID:???
825 :
818 :2007/04/10(火) 14:49:13 ID:???
てst
826 :
820 :2007/04/10(火) 15:20:17 ID:???
>>822 例外ってcatchとかtryっていうやつですよね?
使ったことないのでよくわからないですが、
頑張って使ってみます。
$num=3の意味が気になる
829 :
nobodyさん :2007/04/10(火) 16:07:31 ID:qz4cFwH4
内部コードをEUCJP、表示コードがSJISの時、 リクエストパラメータはSJISで渡ってきますよね? 1)一括してEUC-JP変換 2)処理 3)一括してSJISに変換 4)表示 とやるか、 処理する段階で逐次変換処理を入れるか、 どちらが適当でしょうか?
830 :
nobodyさん :2007/04/10(火) 16:08:40 ID:S/LWkosg
stream_context_createでhttpsのストリームを作るのはどうすればいいですか
831 :
830 :2007/04/10(火) 16:13:03 ID:???
ごめん、ふつうにhttpsのurl指定したら出来た。
>>829 文字コードに依存するような処理がない限りは
その例で良いと思う
>>821 session.use_trans_sid
session.use_only_cookies
あたり
現在、PHPでどこまでのスキルがあれば金がとれますか?
会社なり顧客なりが金を払いたくなるようなコミュニケーション能力と人柄。
836 :
nobodyさん :2007/04/10(火) 18:26:31 ID:GbKKaQIE
無料のantispamで設置が容易なものを教えてください
PEAR::Text_CAPTCHA
cronが使えないサーバで、5分おきにあるスクリプトを実行させたいのですが、 (スクリプトが全て終了するのに最長3分ほどかかります) 別ファイルで時間を記録したテキストを作成して、 そこから現在時刻とひいて5分以上だったら、 アクセスしてきた人に更新してもらおうと思ったのですが、 上記の通り最長3分間ブラウザが無応答状態になるので、迷惑ですよね。 ポップアップで裏でやるなんてのも迷惑ですし、 もっと他にいい方法ありませんでしょうか?
webcronっていうURL叩いてくれるサービスがあるぜ
>>841 おーこんな素晴らしいサービスがあったのですね。
知りませんでした。
これで解決しそうです。
本当にどうもありがとうございました。
【PHP】 4丁目に引っ越してきたPHP君。 大いなる進化をとげるたびにのファンを大切にしないところが玉に傷。 【Perl】 CGI全盛期にもっとも活躍した三丁目のPerlさん。 時代とともに年をとるのか、PHPにも活躍の場を与えるえらいひと。 【Java】 いざというとき頼れるJava兄さん。 大きな事件は「いいから俺にまかせてみろ!」と豪腕な構えだ。 【HTML】 すべてはここからはじまった伝説の男HTML。 戦いの場によっては、スーパーサイヤ人の限界を超えたXHTMLに変身して活躍していると噂される。
_,,‐─-v‐、,,、 ,,-‐'": : : : : : : : : : `ヽ /: : : : : : : ,,__ : : : : : : \ r': ,、,,.-─''"゛ ミ : : : : : : : 'i、 `/ / ミ_ : : : : : : :,、} i l _,,..-‐^‐-、 `゙i: : : /l.l| i、}‐-、 ヽ;;/,rェッ;;'" ゙ー' 9iリ! | ',tテi ヽ='" ゞ t' | 'i"´| , -、 ヽ-、,,___ | '}、 !,,tu'" ヽ、 ,l: ‐-‐" }: : : : : } lヽ、__,,,.-‐ヽ /: : : : : : /|: : : : : ,r/ /: : :ヽー‐' ノ: : : : : : : / .|: : : : : /: \ /: : : : : 丶,, -''_: : : : : : / |: : : : : /: : : : :ヽ/: : : : : : : ヾ''‐--‐ヽ |: : : : : /: : : : : : : : : : : : : : : : : : ヽ\: : / |: : : : : ビップ=デ=ヤレー[Vuip De Yale] (1955〜 フランス)
845 :
nobodyさん :2007/04/10(火) 19:57:30 ID:daN1ASwg
PDOでMySQLに接続したいんだけど、どういうわけか接続できていない。 MySQLのバージョンは5.0.22なんだけど、PHP5.1.6のPDOはサポートしてる? 教えてくれ。
複数モジュール間での値の受け渡しで行き詰まってます。 |(a)別のHTMLのフォームからのPOST ↓ +----------------+ 実行 +----------------+ | 親モジュール.php |------->| 子モジュール.php | +----------------+ +----------------+ ↑ | └−−−−−−−−−−−┘ (b) 親モジュールが生成するHTMLに結果を渡したい (a)のPOSTで渡ってきたフォームのデータを、親モジュールでたとえば $user_id = $_POST['USER_ID'] として取って、$user_idをrequire_onceで子モジュールに渡し、子モジュールではDBからuser情報をselectします。 子モジュール内には、HTMLを出力するような処理はなく、単純にDBからのselectのみです。 次に、select結果を変数に入れ、(b)のように親モジュールが生成する HTML上のフォームに返したいのですが、そもそものフォームへの返し方がわかりません。 希望する処理の流れを整理すると。 (1) 静的なHTMLファイルのフォームから親モジュールにPOST (2) 親モジュールはPOSTされた情報を使って子モジュールを実行し子モジュール内の変数に結果を代入 (3) 子モジュール内の変数にセットされた結果を親モジュールが生成するHTML内フォーム(HIDDEN属性など)にセット (4) このタイミングで、親モジュールのHTMLが出力される という処理をやりたいと思っていますが、 どのような方法を使えばよいか、ヒントだけでもご教示いただきたく。 現状、(2)までは出来ていて、(3)の部分で行き詰まっているところです。
847 :
846 :2007/04/10(火) 19:59:55 ID:???
一部訂正します。 >$user_idをrequire_onceで子モジュールに渡し、 は、 $user_idをrequire_onceで実行した子モジュールに渡し、 という意味です。
>$user_idをrequire_onceで子モジュールに渡し、 ここが意味わかんないです><
IDがでてないよ
850 :
虚弱PHP :2007/04/10(火) 20:20:37 ID:???
>>846 なにに躓いているのか分からない…。
俺だったら親がResultオブジェクトを用意して子に渡し、
子はResultオブジェクトに値を設定してリターン。
何が分からないのか分からないのですが 普通にDBから取得した値を変数に代入するなりすればいいだけじゃないかと
852 :
846 :2007/04/10(火) 20:22:04 ID:???
>>848 わかりにくくてすみません。
まだPHPを初めて数日なものでして。。。(´・ω・`)
HTMLを生成しないPHPモジュール内の変数の内容を、
別のPHPモジュールが生成するHTMLのフォームに
渡す方法を知りたい、という感じです。
>>852 いやだから現在$user_idをrequire_onceを渡してるの?
できてるとこまでソース見せてくれ
>>852 requie_onceしているだけならそのままそれが使えます
>>850 の言ってるみたいにその小モジュールというのが
オブジェクト群とかでそれに渡しているのならそれを返せば良いだけ
856 :
846 :2007/04/10(火) 20:32:26 ID:???
>>850 >>851 >>853-855 アドバイスありがとうございます。
ソースが会社なもので、今手元にありません。
戴いたアドバイスを元に、明日頑張ってみます。
あと、ソースを支障ない範囲に加工して明日はらせていただきます。
だめだこりゃ
そんな程度のスキルで書かれたソースなんて誰だれがパクるんだwww 無駄な心配しなくていいよ846君
プロだとは思えない
860 :
846 :2007/04/10(火) 21:46:19 ID:???
いえいえ、仕事はできますよ
給料もらえてるのが、幸せだと思う
まあそれはそれで幸せだからがんばってくれ
session_start()もheaderと同じく何も出力される前でいいんだっけ?
うん
865 :
846 :2007/04/10(火) 22:10:47 ID:???
>>858 すみません。
いえ、パクられるなんてこれっぽっちも思ってません。
ただ、作ってるソースをそのまま貼ったのが会社にバレると、
こんなものでも面倒になるので、ということで。。。
>>860 別に私をカタるのは構いませんが、初心者おちょくるのは楽しいですか?
ID出さないで質問、レス記述してるのも問題じゃないの
一応言っとくとメール欄に何も書かないとID出るから
868 :
846 :2007/04/10(火) 22:23:24 ID:???
>>866 トリップってやつを付ければいいんでしょう?
sage進行かと思って、ずっとsageをメル欄に入れてました。
トリップの付け方、勉強してきます。。。。
もうこりゃワザとだな
sage信仰なんてものは都市伝説です sageは自演隠しのための機能ですw
ワザとですね
873 :
nobodyさん :2007/04/10(火) 22:41:28 ID:NUin5iQl
class Test { private $var; function __construct($arg) { $arg = $this->var; } function test() { return $this->var; } } $obj = new Test('hogehoge'); echo $obj->test(); 例だとhogehogeを出力したいのですが、出力できません。 どこがおかしいのでしょうか?
874 :
873 :2007/04/10(火) 22:46:54 ID:NUin5iQl
すみません、自己解決しました。 $arg = $this->var; ではなくて、 $this->var = $arg;の順ですね。 スレ汚し失礼しました。
$arg = $this->var; この辺
876 :
nobodyさん :2007/04/10(火) 23:21:59 ID:6hVZtA40
空メールシステムの簡単な説明サイトなどはありませんか?
877 :
nobodyさん :2007/04/10(火) 23:22:32 ID:ywkUcui/
スイマセン 教えて頂きたいのですが PHP.iniの設定は3ファイル全部設定するのでしょうか?
>>877 意味がわからない
3ファイルって何のこと
>>877 php.ini-distとか-recommendedとかのこと?
881 :
nobodyさん :2007/04/10(火) 23:38:14 ID:6hVZtA40
882 :
nobodyさん :2007/04/10(火) 23:44:19 ID:+1UvK/Fa
テキストフォームに入力されたデータが自然数かどうか判定するために とりあえず整数かどうかの判定をしようと思って if( is_int($_GET["data"]) == FALSE ) echo"エラー:入力されたデータは整数値ではありません。"; としてみたのですが、何を入力してもエラーが表示されてしまいます なぜでしょうか?
エラーに書いてあるとおりですw
885 :
nobodyさん :2007/04/10(火) 23:48:46 ID:+1UvK/Fa
??? 例えば3を入力した場合 is_int($_GET["data"])の返す値はTRUEにならないのでしょうか?
is_int()の仕様読まずにカキコ 引数が整数値じゃないとfalseじゃないの? $_POSTの値は数値でも文字列だよ やるならctype_digit()で
入ってる値をint型にするのなかったっけ
if(preg_match("/[^0-9]+/",$_GET["data"])){ echo"エラー:入力されたデータは整数値ではありません。"; } とかは?
なにそのゴージャスな正規表現オーバーヘッドを気にしない使い方
マニュアルみている間に書かれたけど
>>888 が一番いいんでね?
(int)あたりでキャストしてもphpだと"50abc"でも50と判断しちゃうじゃなかった?
正規表現で判断するのが無難かと。
bool is_int ( mixed var )
与えられた変数が整数かどうかを検査します。
注意: 変数が数値もしくは数値文字列の場合 (フォームからの入力の場合は 常に文字列となります) 、is_numeric() を使用する必要があります。
正規表現でオーバーヘッド気にしてんのか?
/^[0-9]+$/ じゃね?
893 :
nobodyさん :2007/04/11(水) 00:19:57 ID:ZmOxrGFo
すいませんis_intのページに >フォームからの入力の場合は 常に文字列となります と思いっきりかいてありましたね(´・д・`;) もう一つ質問です フォームに無記入で送信した時に「入力されてないよ」というエラーを出したくて if( is_set($_GET["data"]) == FALSE ) echo"入力されてないよ"; としてみたら、データを無記入で送信したときでなく フォームのあるページに初めてアクセスした時に既にエラーが表示されてしまいました 無記入送信した時のみに表示するにはどうしたらいいのでしょう?
>>893 if(!is_set($_GET["data"])||$_GET['Submit'])
echo"入力されてないよ";
送信ボタンの名前は何よ?
895 :
nobodyさん :2007/04/11(水) 00:36:36 ID:ZmOxrGFo
送信ボタンは<input type="submit" value="送信">としていたのですが 送信ボタンにもname属性記述できたのですか
>>893 if($_GET["data"] == "") {
echo '変数が用意されてるかどうかと中身がカラかどうかは違うよ';
}
あと、isset()のような気がする。
issetは変数 emptyは中身
この辺は引っかかりやすいところだけどマニュアルをきちんと読めば解決するはず
899 :
nobodyさん :2007/04/11(水) 02:45:59 ID:wpqDaNbU
掲示板のログファイルの最終行のログのみを取り出したいんですが、 $file = file("bbs.log"); $count = count($file); $count--; $file[$count]; という流れが妥当でしょうか? もっと効率のよいやり方がございましたらご教授お願いいたします。
逆ソートして1番目とる
メソッドの中から、自分の名前(メソッド名)を知るには どうすればいいでしょうか?
>>901 ネタ乙。
ネタじゃないなら
>>1 とちょっと前のレスを読んでから質問してこい。
>>894 テキストボックスのエンターとかで送信されたときに
submit buttonの名前を送らないブラウザがあったと思う
submitをCSSで画像にすると画像のどの位置がクリックされかを POST先のページでX軸とY軸で取得できるって皆知ってた?
「explode()で配列にし、そのn番目を返す」 これを一文で書く方法ないですか? $a = explode('/',$str); echo $a[1]; こういう風にテンポラリ変数を介するのではなく explode('/',$str)[1] のように書きたいんです
欲しかったのは最後の要素だったのでend()で出来ました こんな関数はじめて使った
908 :
899 :2007/04/11(水) 04:32:56 ID:???
>>905 おお〜それです。まさしく求めていた答えです。
905さんのやりかたに便乗します。発見してレスに残してくれてありがとうございます。
910 :
nobodyさん :2007/04/11(水) 10:47:54 ID:KfKwGm7g
for ($i = 0; $i < n; $i++) { do_action(); } True/Falseを返すdo_action()をn回行います。 Trueが返ってきた数によって、処理を決めたいのですが、 その処理をどこにどのように書けばいいのでしょうか? n回全部Trueが返ってきた場合の処理と、 1〜n-1回返ってきた場合の処理と、 n回全部Flaseが返ってきた処理を書きたいです。
$woofoo = 0; for ($i = 0; $i < $n; $i++) { if(do_action()) $woofoo++; } if($woofoo==$n){ }elseif(0<$woofoo and $woofoo<$n){ elseif($woofoo==0){ }
$t = 0; for ($i = 0; $i < n; $i++) { if(do_action()==true){$t++;} } if($t==0){ echo "ない"; }elseif($t<5){ echo "ある"; }else{ echo "すぎ"; } ううう
913 :
910 :2007/04/11(水) 11:14:53 ID:KfKwGm7g
>>911-912 お二人方どうもありがとうございます。
見事にスクリプトが一緒ですねw
早速使わせていただきます。
一緒っていうか基本中の基本。 もっとえろい書き方もできるけどロジックに忠実に(バカ正直に)書いたらこんなものになるのが普通
915 :
nobodyさん :2007/04/11(水) 12:52:10 ID:ZybRpRjg
日付をindexにして他に4つぐらいのカラムをもたせたMySQLを,月単位で一括編集するphpを書いています. 今,編集したい月と年を受け取って,その月の各フィールドに対する情報を入れるためのフォームをphpで出力しようとしているのですが, "SELECT * FROM schedule WHERE DATE_FORMAT('date', '%Y-%m') = " . 年 . "-" . 月; というクエリを送って,その結果をmysql_fetch_assoc()しても まだ何もデータを入れていないせいだと思いますが,FALSEを返します. 各フィールドにデータが入っていてもいなくても,その月の日数分だけ処理を実行するにはどうすればよいですか?
日本語でおk
>>915 まずどこまでできたのかコードを晒せ。1から聞きたいのなら丸投げスレへ
>>915 mysql_fetch_assoc()でfalseが戻ったら
目的の処理をするように
PHPで記述すればいいだろ。
なんという要領を得ない質問・・・この人は間違いなく初心者 まだデータはないけど動作確認のために編集処理したいってこと? 0件ならFALSEが返ってきて当然だけど、どう動作してほしいの? サンプルデータを入れるなり、新規登録フォームを作って入れるなりすりゃいいじゃん
920 :
915 :2007/04/11(水) 13:48:33 ID:ZybRpRjg
仰る通り初心者です.MySQLとか初めてです. 昨日始めて,やっとまともに接続できるようになりました. 要領を得ない質問ですみません. これは簡易スケジュール帳なんですが,なんでこんな処理をしたいかというと, 既にその日のスケジュールが定義されている場合は,フォームのvalueに既に入ってるスケジュールを表示して, 定義されてない場合でも,その日のスケジュールを編集するためのinputタグを出力したいからなのですが.
if(定義されてない場合でも){その日のスケジュールを編集するためのinputタグを出力したいからなのですが.} if(mysql_fetch_assoc(なんたら) ==false){echo '<form>.................';} それだけの話しだろ
うんやりたいことをそのままロジックに落とせばいいだけの話なんだけども。 その中で処理の仕方や書き方が分からなかったら質問してくれれば良い。 DBというよりプログラムの問題だよね。卒研かなんかですか?
>>920 言いたい事はわかるが上でみんながいっているようにphpで処理させるだけ。
問題はphpでどこまで出来ているのかということ
>>920 inputタグのvalueプロパティをDB格納値にするか、
空欄にするか、ってことでしょ?
>>922 の言うように、
自分のやりたいことをナンバリングしながら
順を追って説明する文章を書けば、
90%くらいはできあがると思われ。
携帯サイトで掲示板を作っているんですが、
先にコメントなどを書かせて、
2ページ目でメールで画像を送ってもらう際、本文にIDをつけてDBと認証
投稿完了としたいんですがPHPで実現可能でしょうか?
ここみたいな感じです。
http://megaview.jp
IDだけで認証してええのん?
928 :
nobodyさん :2007/04/11(水) 14:12:36 ID:aJnUgs6a
質問です。 外部に公開しているWebサーバでドキュメントルート以下に置いたスクリプトを ローカルからのみアクセスできるようにするにはどうすればいいですか?
929 :
915 :2007/04/11(水) 14:15:03 ID:ZybRpRjg
素早いレスありがとうございます. もうちょっと煮詰めます.卒研とかでは全くなく,サークルのサイトをリニュしろと言われて、、
930 :
nobodyさん :2007/04/11(水) 14:15:03 ID:yUjB1srR
プログってライブドアが最初に作ったのですか?
>>928 >ローカルからのみ
この意味が不明
ローカルホスト(たとえば127.0.0.1)でのみって言う意味か?
それともプライベートネットワーク経由という意味か?
>>928 ディレクトリのオーナーとPermission変えとけwww
>>930 んなわきゃない。
933 :
nobodyさん :2007/04/11(水) 14:16:58 ID:aJnUgs6a
ローカルホストからという意味です。 そのWebサーバが動いているPCからのみアクセスできたらと考えています。
>>928 192.168.*
三番目の*に当てはまる数字は環境によって違うからipconfigでデフォルトゲートウェイみて記入しろ
間違っても192.168.*.*と4つ数字はかくなよ
じゃあスクリプトの頭に if($_SERVER["REMOTE_ADDR"]!='127.0.0.1') {die();} つけときなさい。 httpd/.htaccessの設定で deny from all allow from 127.0.0.1 でもいいけど。
昼下がりに、こんにちは。 phpに任意のサイト丸ごとを保存させたいのですが 読み込んでも普通はhtmlソースだけですよね? html内の画像のurlを拾って同じフォルダ構成にしてバイナリ保存して… ではなくて何かmht的なスマートなものはあるんでしょうか?
なぜ PHP mht でグーぐるを検索しないのか
938 :
925 :2007/04/11(水) 14:29:08 ID:???
>>926-927 さん
変レス有難うございます。
メールで送られたものを自動で取得
これはPHPでできるのでしょうか?
自動がどうやるのか思いつきません。
IDはハッシュ値かなんかで認証しようと考えています。
>>938 .forwardでphpスクリプト動かせばいいんじゃないの?
940 :
925 :2007/04/11(水) 14:37:06 ID:???
初回でIDださないやつに回答するの控えない?
>>940 PHP自体の話題じゃないから、.forward スクリプト とか mail alias スクリプトあたりで検索してみて。
ピント来ないのであれば、.forwardやメールaliasでよく使われるprocmailと一緒に検索。
.forward procmail とか。そこらへんからなにをやってるのか糸口をつかもう。
944 :
925 :2007/04/11(水) 14:48:34 ID:???
>>942 様
ご丁寧にありがとうございますm(_ _)m
サーバーサイドは無知ですので書籍等も探してみたい思います。
>>941 マニュアル人間!
945 :
925 :2007/04/11(水) 14:54:43 ID:???
>>941 しねよカス。
>>943 えっと、ググってみましたがいまいちよくわかりません。
もう少し詳細に教えていただけませんでしょうか?
>>944 偽者やめてください・・・
946 :
925 :2007/04/11(水) 15:06:45 ID:???
偽者とかウザいのでもういいです。
|ω^)
お互い気持ちよく使うために質問者はID表示のご協力お願いします。
949 :
貴之 :2007/04/11(水) 16:07:05 ID:1U3tdNyu
ルートディレクトリの下を定数"ROOT_DIR"に入れる場合は define ("ROOT_DIR", realpath( dirname(__FILE__) . '/..' ).'/' ); となると思うのですが、 ルートディレクトリの上を定数にするにはどうしたらいいでしょうか?
貴之くんはぐぐるって言葉を覚えてからきてね
顔みたい '/..' ).'/' )
banzai("__FUUN__",ヽ(´ー`)ノ);
953 :
貴之 :2007/04/11(水) 16:50:59 ID:1U3tdNyu
>>949 既にぐぐりました!
ID出すとかきちんとルールは守っていますので。
口が悪くてすみません。
でも教えてください!
何歳ですか?
955 :
nobodyさん :2007/04/11(水) 17:14:42 ID:aPlJaTQ1
PHP 4.3.9を利用しております。 os redhat es4 です メールから受け取った文字列をPHPで処理してDBに格納するといったことをやりたいのですが、 mb_convert_encodingでのコード変換が上手くいきません。 いろんなサイトを見て回って教科書どおりだと思うんですが、なんで上手くいかないのでしょうか。 サンプルコード ========================================================== #内部文字コードを表示 echo "internal=".mb_internal_encoding(); #受け取った文字列の文字コードを表示 echo "\n$mail['subject']=".mb_detect_encoding($mail['subject']); #文字コードを変換 $test = mb_convert_encoding($mail['subject'],mb_internal_encoding(),mb_detect_encoding($mail['subject'])); #変換後の文字列の文字コードを表示 echo "\nafter convert=".mb_detect_encoding($test); [結果] internal=EUC-JP ⇒現在の文字コード Array['subject']=JIS ⇒文字列の文字コード after convert=SJIS ⇒変換後の文字コード ==========================================================
956 :
貴之 :2007/04/11(水) 17:23:27 ID:1U3tdNyu
>>954 14です。
解答お願いします。
ググるワードでもいいのでお願いします。
ルートディレクトリ 上
くらいしか考えられなかったです。
>>956 define('ROOT_DIR', dirname(dirname(__FILE__)) . '/');
define('ROOT_DIR_UP1', dirname(ROOT_DIR) . '/');
>>955 mb_convert_encodingは正確に指示通りconvert出来るかどうか別だから、
mb_detect_orderをセットして優先順位を決めてからやってみたら?
959 :
貴之 :2007/04/11(水) 18:37:42 ID:1U3tdNyu
960 :
nobodyさん :2007/04/11(水) 19:24:32 ID:zI9N6jIn
PHPで質問です Aさん,10 Cさん,5 Bさん,-5 Dさん,-10 Dさん,8 Cさん,2 Eさん,-2 Fさん,-4 Bさん,9 Gさん,3 Hさん,-1 Cさん,-11 と、こんな感じで「名前,点数 (タブ区切り) 名前,点数 〜〜」 というデータが書かれたtsvファイルがあります。 これを 1位 Aさん 10点 2位 Bさん 4点 ・ ・ ・ という具合に、順位とそれぞれの点数を全部加算して出力したいのですが、 よい実装方法が浮かびません。 あらかじめtsvファイルから名前だけを抜き出して重複チェックをし、 それを別のファイルに書き出しておく。 tsvファイルを開いてfileで配列にいれ、 foreachで回して、別ファイルに書き出した名前でひっかかった点数だけを抜き出して加算していく。 加算した点数と名前をまた別ファイルに書き出していく。 そして最終的にそれをソートし・・・ ってな具合かなと思ってるんですが、 もっとスマートな方法がありそうなので、質問してみました。
>>960 ファイルを読みながら、名前をキー、点数を値にして配列を作る。
キーが既に存在したら点数を加算するだけ。
最後に配列をソート。
963 :
nobodyさん :2007/04/11(水) 20:16:06 ID:zNlK5rg/
includeして接続できるか0と1で返して判断するぐらいしか思いつかん
965 :
960 :2007/04/11(水) 20:43:06 ID:zI9N6jIn
>>961 レスありがとうございました。
確かにそうなんですけどね><
今回ちょっと使えないんです…
>>962 レスありがとうございました。
今ちょっとやってみたんですが、うまいことできそうです。
名前をキーにするっていう発想がなかったです…
966 :
nobodyさん :2007/04/11(水) 21:00:20 ID:zNlK5rg/
>>964 incやfopenでもFalseでした…
うーん
しかし960と962の文章を比べるとその差が歴然としてるな
968 :
960 :2007/04/11(水) 21:06:34 ID:zI9N6jIn
PHPで質問です <?php $a = '?'; $b = 'か'; $c = 'し'; $d = 'ま'; $e = 'す'; $f = '週'; $g = '回'; $h = 'H'; $i = '何'; echo $f .$i .$g .$h .$c .$d .$e .$b .$a; ?>
>>969 echo mt_rand(10, 2000);
print empty($_GET['manko']);
>>29 とりあえず、こんなのでいいんじゃね?
12のPHP最適化テクニック
ttp://phpspot.org/blog/archives/2006/11/12php.html 01. staticメソッドが使えるなら使おう。速度は4倍になる
02. __get, __set, __autoload は使わない
03. require_once は重い
04. include, requireで読み込むファイルはフルパスにしよう
05. スクリプト開始時のUNIXタイムを $_SERVER['REQUEST_TIME'] で取れる
06. strncasecmp関数やstrpbrk関数を使えるケースはこれらを使い、正規表現は使わない
07. preg_replaceはstr_replaceより速い、しかし、strtrはpreg_replaceより4倍速い
08. 引数を、単体か配列かで自動判別するようなコードは出来るだけ避ける
09. @ を使ったエラー制御はとても遅い。→ @fputs($fp, "?");
10. $row['id'] は $row[id] より7倍速い
11. PHPのエラーメッセージは重い( noticeとかwarningとか)
12. for ($x=0; $x < count($array); $x) のように、forの中でcountを使うと毎回countが呼ばれるので使わない。
(参考)
PHPの最適化は本当か?
ttp://jigen.aruko.net/archives/433/ PHPのパフォーマンス改善
ttp://selfkleptomaniac.org/archives/45 ■最適化にまつわる神話
1. コメントをなくすと速くなる
2. ダブルクォート(”)はシングルクォート(’)より速い
3. 参照渡しの方がコードが速くなる
4. オブジェクトを使う方が速くなる
5. タナリ($a = 1 ? $b = $a : $b = 0;)はif(){}else{より速い
これらは全部嘘です。
正規表現で0〜100までと指定したい場合、どうすればいいでしょう? これでは無理でした。 [0-100] 以下だとできるんですがスマートではないです。 100 | [1-9][0-9] | [1-9]
[0-9]{1,3}
>>975 それだと101以上や0で始まる数字もマッチしちゃうんじゃないかな
てかintvalして普通に比較した方が
>>973 釣られておくけど、その記事のTIPSは
いくつかを除いて重箱の隅レベルのパフォーマンス改善だし
これを使えあれを使うな系はケースバイケースのものが多いし
正直あまり良くないと個人的には思う
初心者に誤った先入観を持たせるような気がする
>>976 うほっ!
原文読んだら、反対なのねん!
>str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4
>>979 俺も思う。だからテンプレに入れるべきじゃないと思うんだよね…。
初心者向けのこのスレのテンプレに入れるならこんな感じだよな。 「Q:処理が重いです A:コードを整理して無意味なコードやループを無くせ」
>>973 > 01. staticメソッドが使えるなら使おう。速度は4倍になる
そんなもんクラス設計によりけりだから
> 02. __get, __set, __autoload は使わない
使うと便利になるケースめちゃくちゃあるだろアフォかおまえは
> 03. require_once は重い
分かるけどコードキャッシュなりなんなりで解決すべきで
コーディングで対処するものではないのでは
> 04. include, requireで読み込むファイルはフルパスにしよう
これも誤解を招く書き方
> 05. スクリプト開始時のUNIXタイムを $_SERVER['REQUEST_TIME'] で取れる
ふんふん、それでそれで?
> 06. strncasecmp関数やstrpbrk関数を使えるケースはこれらを使い、正規表現は使わない
微妙
> 07. preg_replaceはstr_replaceより速い、しかし、strtrはpreg_replaceより4倍速い
これはまあベンチの話だし的は外してない
> 08. 引数を、単体か配列かで自動判別するようなコードは出来るだけ避ける
ケースバイケース
> 09. @ を使ったエラー制御はとても遅い。→ @fputs($fp, "?");
これは俺もあまりおすすめしない
> 10. $row['id'] は $row[id] より7倍速い
それnoticeちゃうんかと
> 11. PHPのエラーメッセージは重い( noticeとかwarningとか)
じゃあおまえはもうerror_reporting(0)でずっとコーディングしてろこのハゲ
> 12. for ($x=0; $x < count($array); $x) のように、forの中でcountを使うと毎回countが呼ばれるので使わない。
どっちでもいーよ死ね
こんな感じだろ?実際
>これはまあベンチの話だし的は外してない
>>980
>>983 TIPS的にどうかって意味合いでしか書いてねーし
実際ベンチの結果なんてしるかよw
鬼の首取った気で嬉しかったのか?ww
986 :
974 :2007/04/12(木) 00:39:31 ID:???
>>977 さん
IPチェックしたいのでその方法はあまりきれいじゃないかなあと
'/^210\.121\.3\.([0-9]|[1-9][0-9]|1[0-9][0-9] |2[0-4][0-9]|25[0-5])$/'
こんな感じしか無理ですか?
もう、0≦χ≦100でいいじゃん
>>986 $ip = explode(".", $_SERVER["REMOTE_ADDR"]);
$chk_ip1 = sprintf("%d.%d.%d", $ip[0], $ip[1], $ip[2]);
if($chk_ip1 == "210.121.3" && ($ip[3] >= 0 && $ip[3] <= 100)){
echo "ok";
}
>>985 それを言ったら、最適化のTIPSであって
コードが読みやすくするTIPSではないから
>>982 のいくつかは的外れだぞ
2ちゃんにのるようなテンプレって自演で作者がからんでるよね。
classの中で自身のクラス名はどうやって取るのでしょうか?
__CLASS__
ありがとう御座います、できました
プロファイリングして、時間のかかってる箇所の 上位2つくらいの処理を見直すだけでずいぶん速くなることはよくある。 パフォーマンス最適化のTIPSなんてバカらしくなる。
>>994 そのためにも普段は見通しの良いコードを書くことを心がけるべきで、
パフォーマンス最適化TIPSみたいな小手先のテクニックを使って
コードが読みづらくなるのであれば、そのような愚は避けるべきだ。
そういうTIPSは最適化の時に考慮してやればいいだけの話だ。
>>706 SHA1って非可逆なの?cryptよりもいいの?
>>982 せっかくのテンプレ案なんだから、否定するだけじゃなくて改良しようとかポジティブなほうにそのパワーを使えばいいのに・・
改変してスレ立てsればおk
999ならPHP6がニューリリース
1000なら皆エラー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。