リクエストパラメータなどを収めた連想配列から、いくつかのパラメータだけ の部分配列を取り出したい。 $request = array('hoge'=>1, 'fuga'=>2, 'piyo'=>... これからキーが hoge, fuga の物だけを取り出すとすると、 foreach (array('hoge', 'fuga') as $param) { $a[$param] = $request[$param]; } これ、もうちょっと簡潔に書けないかな? $a = array_intersect_key($request, array_flip(array('hoge', 'fuga'))); こんなの考えたけど、あんまり短くならない。
>>341 関数にする。
array_flip(array('foo','bar'))の部分を最初から連想配列にする。
firefoxだとsessionが動作するのに IEだと動作してくれないのって何が原因ですか?
htmlを通るとsessionが切れるとかいう話もどっかで聞いたな
346 :
デフォルトの名無しさん :2009/03/03(火) 23:44:08
phpで作りたいものがない
何ならあるの
子作り
<?PHP function timeSinceLastCall() { static $lastTime = null; $curTime = microtime(true); if($lastTime === null) $elapsed = 0; else $elapsed = $curTime - $lastTime; $lastTime = $curTime; $d=sprintf("%.f", $elapsed); return $d; } for ($i=1;$i<10;$i++){ print 'Loop took ' . timeSinceLastCall() . 's'; print '<br>'; } ?>
<?php $handle = fopen("./file.txt", "r+"); $b=file_get_contents ('./file.txt'); $a=$b+1; fwrite($handle, $a); print $a; ?> このコードを実行すると、 一回ごとに数字が1増える
351 :
デフォルトの名無しさん :2009/03/12(木) 22:45:13
アクセスカウンタじゃんw
で、アクセスカウンタって、そうやってテキストで作るのと、数値項目一つ入れたDBで作るのと、どっちがいい?
データーベースで作る場合は、 まず、 「どのデーターベースにしようかな?」 って決めなきゃならないじゃん。
そんで決めたら、今度は、 「どのアクセス方法でアクセスしようかな?」 って、アクセス方法を決めないといけないじゃん。 PDOとか、pear::dbとか、 pear::mdbとか、pear::MDB2とか。 (これらはデーターベースアクセス抽象化レイヤー) それか、O/Rマッパー使うか?とか。 pear db_dataobjectとか。
そんで例えば、PDO使う、とか決めるじゃない。 そしたら、今度は、 PDO->execでやるのか、 プリペアードステートメントでやるのか、 バインドパラムは使うのか? とか、悩まないといけない。
そんでわからないから、例えばWEBプログラム板で聞くじゃない そしたら 「おれたちはマニュアルにのってることしか 回答できねええんだよおおおお」 とかってキモヲタが絶叫してるし。 まじ関わり合いになりたくねぇえ、って心の底から思うじゃない。 思わずプログラム板に避難しちゃうくらいきもいから。
>>353-356 おまいらのせいで100gで3600円もする貴重な最高級煎茶が無駄になったじゃないか
排他しろヴォケ
開いたら閉じてくれぇえええええ
<form method="post" action="<?php $_SERVER["PHP_SELF"]; ?>"> <input type="submit" value="プッシュ!"> <input type="hidden" name="bbb" value=" あれほど言ったのに、まだそんなカキコするですか!もう許さんです! あんたを許すわけにはいかんです!こんなカキコでレスたくさん付くとでも 思ってるなんて頭おかしーよです!あんたみたいなバカ初めて見たです! あんたみたいなバカ、ゴキブリ以下です!あんたみたいなバカ、ウジ虫以下です! 死んでほしーです!つーか、死ぬべきです!あんたは絶対に許されないです! 勘違いしたバカを許すわけにはいかんのです!面白半分にいい加減なカキコ するヤツなど許さんです!キャラメルコーンのピーナッツをケツの穴に詰めて 死ねよです!!! "> </form> <?php if(isset($_POST['bbb'])){ print "<pre>". $_POST['bbb'] ."<pre>"; print "<br>"; } ?>
>>361 これを「1.php」とかのファイル名で保存して実行。
するとプッシュってボタンが出るから、
それを押すと、自分に対する応援のメッセージが出力される。
<form method="post" action="<?php $_SERVER["PHP_SELF"]; ?>"> <input type="submit" name="bbb" value="プッシュ!"> </form> <?php if(isset($_POST['bbb'])){ $handle = fopen("./file.txt", "r+"); $b=file_get_contents ('./file.txt'); $a=$b+1; fwrite($handle, $a); print $a; } ?>
>>363 これを「2.php」とかの名前で保存。
それと、file.txtって名前のテキストファイルを作成して
同じディレクトリに置いておく。
これで事前準備はOK。
あとは、2.phpを実行して、ボタンを押すと、
一回押すごとに、数字が1増える。
<?php $cnt = 0; $f = file_get_contents (__FILE__); file_put_contents (__FILE__, preg_replace_callback("/(?=>\$cnt = )[0-9]+(?=;)/", create_function( ... って感じで、自身を書き換えるカウンタもつくれるんだろうな
>>365 そこの変な書き込みしているやつ、止まれ。
お前はタリバンか。
367 :
デフォルトの名無しさん :2009/03/14(土) 05:50:25
画像をアップロードするものを作っているのですが 拡張子はjpgでも中身はTIFFだったりする場合って、みなさんどう対処されてます? ブラウザでは表示されないんで困ってます 教えてエロい人!
>>367 ファイルの先頭数バイトで判定すれば良いんじゃね?
>>368 バイナリは詳しく分からないので
getimagesize()で確認してみるとにしました
欲を言えばGDとかで通常のjpgにしたかったんですけど
上書きしたjpgも何故かブラウザで見れなかった〈(。А。)〉
>>369 俺が適当に作って使ってるやつでよければ
大抵のサーバマシンには fileコマンド ぐらい入ってると予想して
無かったらドンマイ
function getExtensionByMineType($fname)
{
$minetype = trim(`file -i $fname | cut -d' ' -f2`);
$ext = NULL;
switch ($minetype)
{
case "image/jpeg":
$ext = ".jpg";
break;
case "image/gif":
$ext = ".gif";
break;
case "image/png":
$ext = ".png";
break;
default:
$ext = NULL;
break;
}
return $ext;
}
>>370 コード参照用
調べて増やせば他の拡張子も対応可能 貼ってから気付いたけどマイムタイプだな
postgresql の COALESCE みたいな関数ってある? $a=""; $b=null; $c="hoge"; xxx($a, $b, $c); hoge と表示される
PostgreSQLのってか標準SQLのな まーないけどこんな感じでなんとかなるんじゃね。 $ret = $a == "" ? ($b == "" ? ($c == "" ? null : $c) : $b) : $a; is_nullとか===にしちゃ駄目よ。 そういやPHPの日本語マニュアル見ると三項演算子ってterniary条件文ってなってるけど ternaryの間違いだよなこれw
やっぱないのか PHP5.3 から ?: ってのが出来てるみたいだね
いや昔からできてるけど
昔からって三項演算子の省略型が? $ret = $a ?: $b
C++あたりから普通にあるじゃん・・・
誰がC++の話してんだよ^^;
あぁすまん、Cからあっ(ry C派生なんだからPHPは最初からあったでしょ >三項演算子
>Notice: Undefined variable エラーでてコンパイルすら通らなかった。
ちがった、こっちだったw >Parse error: syntax error, unexpected ':'
コンパイルしてるのか
PHPはソースが変更されて最初のアクセスでコンパイルされて中間コードが生成される 二度目以降はこの中間コードを直接見るので一度目より速度は多少速くなる。 実はこれ4.xの途中で変更された仕様で、古いバージョンだと毎度コンパイルしてるから遅い
385 :
デフォルトの名無しさん :2009/03/14(土) 19:00:23
php5でSmartIrcは どうやってつかうのでしょうか おしえてください
しらない
387 :
369 :2009/03/14(土) 19:18:54
>>370 遅くなりましたが、ご丁寧にどうもありがとうございます!
388 :
385 :2009/03/14(土) 19:27:40
ドキュメント読めばいいじゃん
ageんなカス
日本を狙う 朝鮮人の原爆ミサイル建造費用は
日本国内の 在日パチンコ屋からの送金
パチンコの市場規模は 年間30兆円
日本の国家予算の 3分の1以上
北朝鮮の国家予算の なんと100年分!
これを在日朝鮮人が 自由に動かし
パチンコマネーを 北朝鮮に送金している
パチンコ屋を 全面営業禁止にしない限り
北朝鮮は制裁など 痛くもカユくもない
在日朝鮮人なら 生活保護もらい放題
毎月二十数万円もらって 毎日遊んで暮らしてる
住宅費・医療費・教育費なんでも無料
税金は1円も払わない 超特権階級(貴族)
民主党は 選挙権まで与える予定
日本は 在日天国 <丶`∀´> ウハウハ〜♪
http://2cchan.ham-radio-op.net/kimuchi.html
Visual Studio2005( VS.Php 2.6 試用版 )を使用して PHPのデバッグ実行を行おうとしているのですが、PHPスクリプト内に設定した ブレークポイントで止りません。 一体どうすればブレークポイントを止める事が出来ますか? 【ブレークポイント上のエラー】 ・ブレークポイントは、現在の設定ではヒットしません。 Unbound break point 【IEの設定】 次のチェックを外しています。 ・スクリプトのデバッグを使用しない(Internet Explorer) ・スクリプトのデバッグを使用しない(その他) 【php.iniの設定】 [DBG] debugger.enabled = true debugger.profiler_enabled = true debugger.JIT_host = 127.0.0.1 debugger.JIT_port = 7869 debugger.enable_session_cookie = true extension=php_dbg.dll ;;;;;;;;;;;;;;;;;;; ; Module Settings ; ;;;;;;;;;;;;;;;;;;;
文字列の関数を利用する時は、 非マルチバイト関数を利用する事が ないかとおもいますが。 マルチバイト関数と、非マルチバイト関数対応表と、 マルチバイト関数が存在しない非マルチバイト関数表 とかってどっかにないでしょうか? 例、mb_trimが存在しない。
go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね! go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!go-pear.bat 氏ね!
>>395 ありがとうございます。
非マルチバイト関数を使うな!
といっても、もれが出てしまいます。
皆様どのように解決しておりますでしょうか?
思いつくのは。
・コーディング後に非mbチェックスクリプトを実行。
・関数を改造してこけるようにする。
・対処しない、根性でテスト。
<?php $a=mb_convert_encoding(`ping www.google.com`,"UTF-8","SJIS"); print "<pre>"; print_r ($a); print "</pre>"; ?> ----------------------------------------------- これはおもしろい。 実行すると、PHPからpingを打って、 結果を表示してくれる。
$a = `ping www.google.com`; でいいんじゃないのかと思うが。
>>400 やってみたらできた、ありがとう。
execのコードを一部改変したものですから。
言い訳スンナヨ
Net_UserAgent_Mobileを使って3G端末の識別がしたいんだけど、isFOMA()メソッド を使用したら、「Call to undefined method Net_UserAgent_Mobile_NonMobile::isFOMA()」 って表示された。 本でもネットでも以下の方法しか記載されてないから、わけわからない。 $agent = Net_UserAgent_Mobile::singleton(); if ($agent->isFOMA()) {}
それってPEAR?
>>399 へぇーそんな事も出来るんだ。
面白いね
>>403 Net_UserAgent_Mobile_NonMobile::isFOMA()
と
Net_UserAgent_Mobile::isFOMA()
は違うがな
エスパーじゃないので解りません
使えない人ですね
>>407 文字コードは設定と一致してる?
クラスの先頭にある
var $charset='utf-8';
の 'utf-8' を 'shift_jis' に変えてみるとか
>>410 ファイルはすべてUTF-8にしています。
文字コードを試しに変えてみましたが、だめなようです。
エラーは出ませんが、何も表示されません。
>>411 display_errors
error_reporting
手元のインタプリタで試したけどそのままで動いてる (utf-8 => shift_jisのみ修正) > class kana2roma { // var $charset='utf-8'; var $charset='shift_jis'; … > $roma=new kana2roma(); echo $roma->conv('アキハバラあったかまつり'); akihabaraattakamatsuri null このクラスは漢字を単純に捨ててるので、認識できない文字の 場合も同様に捨ててるだけ(エラーがでない)の可能性も高い だとすると文字化けした場合、すべての文字が単純に捨てられてる だけの可能性がある なので以下の2点を確認することを勧める 1) 半角英字の文字がそのまま出力されるか 2) 関数 _baseOne() の最後を書き換えて文字を確認する return NULL; => return $str; これで漢字などの変換対象でない文字もそのまま出力するはず これで文字化けなどが起こっているなら文字コード回りを再度見直した ほうがよいと思う
PHPのCLI版おもすれー
CLI ってまぎらわしい。 Common Language Infrastructure (いわゆる .NET) Command Line user Interface (いわゆる DOS窓) Command Line Interpreter (いわゆる CMD.EXE、COMMAND.COM)
あと、Client (Client application) を CLI と略すこともある。 まぎらわし〜〜〜
<html> <head> <title>フォームのデータを受け取る</title> </head> <body> <?php echo "<p>入力内容:".@$_POST["text1"]; ?> <form method = "POST" action = " <? = $_SERVER["PHP_SELF"]?> "> <table> <tr> <td><input type = "text" name = "text1"></td> <td><input type = "submit" value = "送信" name = "sub1"></td> </tr> </table> </form> </body> </html> 本で読んで上のようなコードを書いたんですがうまくいきません 原因分かる方いたら教えてほしいのですが phpは5.2 アパッチは2.2を使ってます
Access forbidden! 要求されたオブジェクトへのアクセス権がありません。 読み込みが許可されていないか、 サーバが読み込みに失敗したかでしょう。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。 Error 403 localhost 04/09/09 12:08:32 Apache/2.2.11 (Win32) PHP/5.2.9-1 書き忘れたのですが、上のようなエラー文が出ます
[Thu Apr 09 14:36:08 2009] [error] [client 127.0.0.1] (20024)The given path is misformatted or contained invalid characters:
Cannot map POST /%3C?%20=%20$_SERVER['PHP_SELF']?> HTTP/1.1 to file, referer:
http://localhost/rcvform2.php POSTがちゃんと働いていないということでしょうか?
<? = $_SERVER["PHP_SELF"]?> を普通にファイルへのパスにしたらどうなりますか。
>>421 うまくいきました!
ということは<? = $_SERVER["PHP_SELF"]?>の部分記述の仕方に問題があったんですね
お騒がせしてすみませんでした。
ブラウザからメールアドレスを入力してもらって、 そのアドレス宛にメールを送るプログラムを書いているのですが、 メールの件名の7文字目だけ抜けるという現象に見舞われています。 (文字化けは起こしていません) 文字コードなど怪しいところは調べたのですが解決に至っていません。 スクリプト内で設定した件名:パスワード再発行URL メーラで表示されている件名:パスワード再行URL ヘッダ内のsubject =?utf-8?Q?=e3=83=91=e3=82=b9=e3=83=af=e3=83=bc=e3=83=89=e5=86=8d=e7=99?= =?utf-8?Q?=ba=e8=a1=8cURL?= 文字コード以外で調べるべき箇所があるのでしょうか。 アドバイスなどありましたらお願いします。
>>422 その場合、phpのショートタグなんちゃらが
無効になっている。
>>423 あいうえおかきくけこ
といれて、抜けるかどうか調べる
ソ
>>413 ご指摘、ありがとうございます。
当方の環境では、半角英字も全て、出力されません。
やはり文字コード周りが怪しいので、PHP.iniを見直して
みたいと思います。
このクラスは、utf-8などの文字コード設定と内部コードが
あっている必要があるということでしょうか?
<?php print "Type your name , please?.\n"; $a=fgets(STDIN); $b=trim($a); print "Your name is " . $b . ", ok?\n"; ?> ------------------------------ CLI用。 これを、アパッチ経由でなくて、 WindowsのMS-DOSプロンプトで動かす。 「1.php」とかの名前で保存して、 その保存したディレクトリにDOSで移動して php 1.php って打ち込む。 すると Type your name , please?. samansa Your name is samansa, ok? とかってDOSプロンプト上でphpプログラムを実行できる。
$a=fgets(STDIN); この行でDOSプロンプトからの キーボードからの入力を受け付けることができる。 ただし日本語は文字化けする。
なにを言いたいのかよくわからないけど、
プログラムの簡単な確認なら
php -a
で組込みのインタラクティブシェルが起動するので、
対話的にプログラムを実行できる
あと、Windowsだと、ASConsole というのもある。これもインタラクティブシェル
なんだけど、複数行の入力をサポートするので関数とかのコピペが簡単に
できて結構便利
ちなみに自分の環境では
>>428 のプログラムで日本語文字化けしなかった
ソースコードをutf-8で書いて、 それをDOSプロンプトで出力したので 文字化けしたのかな? (DOSプロンプトはシフトJIS出力なので) おそらくソースコードもシフトJISで保存すれば 文字化けしないんだと思う。
windowsのphpに脆弱性upでとよろ
入社面接に応募したらPHPで100行くらいの自作コードを送るように言われたんだけど、 JAVAの経験はあるのですがPHPの経験がなくてどんなの作ったらいいかわからないので、 なにか意見いただけませんか?
100行って微妙だな。
質問です。 ニュースサイトなどでよく見かける、「あるページに、内容が関連する他のページの見出しを表示」がしたいのですが、 これはどのような仕組みで実現しているのでしょうか。教えてください。
比較する記事から形態素解析で使われている単語を抽出して、ある程度一致したものを列挙するだけ 形態素解析エンジンはChasenとかKakasiとかMeCabとかYahooAPIとか色々あるんで 好きなのを選ぶといいよ
一方俺はタグを使った
ブログツールのMovableType使ってた時は、タグの類似度でやってたな。
439 :
435 :2009/04/11(土) 15:39:09
おー、「形態素解析」初めて聞きました。そういうのがあるんですね。 わかりました。挑戦してみます。ありがとうございます。
>>434 100行で魅せろって意味だとしたら相当難しいな
ある意味良課題
君たちやってみたまえ
100行ならメール専用画像アップローダぐらいは作れそうだな
バイナリセーフでない正規表現系の関数は、 基本的に危険だから使わないほうが良い?
危険、という意味は、ヌルバイト攻撃されるから。 ¥nを入れられると、その後ろに’(シングルクオーテーション)等を 自由に入れられてしまう。
教科書読んでると、たまに 「*Windows版では動作しません」 って書いてある関数があるんだが、これを実験するには、 やはり、自分のパソコンにLinuxを入れるしか ないのだろうか?
>>446 Cの時は読み飛ばした
今ならVMWare使って遊ぶ
VMwareかぁ、、、 危険ではないのかな?
php初心者です。 画像などのファイルをアップロードしてデータベースに格納したものをダウンロード して表示させるときにcontent-typeをつけて表示していますが、ファイルがいろいろな種類のときに ダウンロードしてきたデータのmime-typeを判定する方法があったら教えて下さい。 お願いしますm(_ _)m
自分のパソコンの中で判定するってこと?
>>451 判定結果をcontent-typeの後につけて、出力をしたいと思っています。
>>453 Windowsが起動しなくなるとか、、、
php初心者ですがアドバイスをいただきたくm(_ _)m 今までC言語6年とJava1年やってきてますので、完全なコンピュータ素人では ないつもりです。が、Web系は関わった事が無いのでhtmlとかxmlとかは素人です。 今度担当するプロジェクトでphpを覚える必要が出てきまして、入門用の書籍を 探しています。 今日色々とPHP本を漁って、オライリーの「プログラミングPHP」が良さそうかな、 と思いました。 そこで質問が2つ。 ○先輩に「PHP5徹底攻略(マンモス本?)」を薦められたのですが、執筆された 時期が5年以上前なので、情報が古くないかと心配です。 ○上記の2冊以外でオススメの入門書がありましたら教えてください。 以上、よろしくお願いいたします。
phpの言語仕様はC言語に毛が生えた程度。
クラスの概念がC言語には無いけど、Javaやってたようだから何とかなると考えれば、
入門書に頼らずとも、本家サイト(php.net)の言語リファレンス(
http://www.php.net/manual/ja/langref.php )よめば、何とかなる様に思えます。
むしろ大変なのは、phpの外の世界。
html, http, セキュリティ対策(XSS, SQL-Injection等)、Javascript、CSSなど、理解しなければならないことが山の様にあります。
>>456 俺も
>>457 にほぼ同意。そんだけ経験あればマニュアルとか、買ってもリファレンス系で足りるはず。
下手に入門本とか買うとかえって混乱すると思う。(オライリー系ならいいけど)
むしろWEBアプリならではのセキュリティとかMVCとかの方が面倒。
削除したはずの要素までファイルに記録されてしまう。削除した要素を無視する方法があったら教えてほしい。 $names["test"]=123; $names["a"]=1235; unset($names["a"]); save_namefile($names); function save_namefile($a) { $fp = @fopen("./names.txt","w"); flock($fp,LOCK_EX); foreach($a as $key => $v){ $buf = $key . "<>" . $v . "\n"; fputs($fp,$buf); } flock($fp,LOCK_UN); fclose($fp); }
457が言いたいことを全部言ってくれた
>>459 WebProg板のくだスレで質問してた人?
もしかして、既に出てる質問なのか。 もし、そうなら、そこのURLを教えてほしい。 該当する板に行ったがなかった。
>>456 ●はじめてのphp言語 プログラミング入門
●独習PHP
●実践マスターPHP+MySQL
●速効!図解プログラミングPHP + MySQL
>>456 マンモスの徹底攻略4ならPDFで公開されているから、何か買う前にダウンロードしてみたらどうだい。
>>459 そのサンプルを実行してみると君がいったような動作には
ならない。予想では
0. サンプルが実際のコードをあらわしていない
(実際のコードにはつまらないタイプミスがある、など)
1. names.txtへの書き込みが失敗している
2. web上で動かしていて上書きされている
468 :
456 :2009/04/21(火) 23:13:35
皆様ありがとうございます。 ここの意見も参考に色々な本を試し読みしまくって、結局「プログラミングPHP」と PHPのセキュリティに関する本を買いました。 私にとってレベルが高すぎず低すぎず、文体とか読んだ感じとかのフィーリングが 好きだったので。 今回の仕事にPEARとxmlが絡む事は確定しているんで、その辺もフォローしている本の 方が良いかな?と結構迷いましたが、基本とセキュリティ知識をある程度身につけて からにします・・・不器用なんでw
>>469 すみません。後になって気付いたので訂正します
× 空の要素が記録されてしまう
○ 空の要素が<>の形で記録されてしまう
mt_randの中がどうなってるか柱泣けど 通常PCで発生させる乱数ってのは擬似乱数って言って 同じ条件なら同じ乱数が出るようなタイプの乱数だから パスワード再発行したときと同じ日時で乱数発生させたら 同じパスワード出来ちゃうとかそんな感じじゃないかね
474 :
466 :2009/04/26(日) 20:33:34
>>470 >>469 のアドレスをアクセスするとソースが見えないんで想像だけど
(というか見えるようにしてもらっても全部を見る気はない w)、
「値が空の要素は除外したい」だったら foreach()のブロックの最初に
if (strlen($v) == 0) continue;
を追加すればいいと思う。
<?php $link = mysql_connect('localhost', 'root', 'pass'); //データーベース コネクト $db_selected = mysql_select_db('bbb', $link); //テーブル選択 $result = mysql_query('SELECT c FROM ddd'); //クエリー発行 print mysql_result($result, 0); //表示 ?> ----------------------- これだけで、MySQLに接続して テーブルを選択して、 クエリーを発行して、 結果を表示できるよ! PHP、マジで超カンタン
ちなみにテーブル構造です ホスト名 localhost ユーザー名 root パスワード pass データーベース名 bbb テーブル名 ddd テーブル構造 | a | b | c -------------------- 0| 111|222 | 333
この場合、 bbbというデーターベースに接続して、 dddというテーブルを選択して、 cというカラムを選択して、 行番号0の行を選択して、 そこのデーターを取ってきて、 画面に表示した。
いやちょっと説明違うな。 bbbというデーターベースに接続して、 dddというテーブルを選択して、 その中のcというカラムを選択して、 データーを全部取ってきた。そして その中の、行番号0の行を選択して、 そのデーターだけを画面に表示した。
<?php $b="a"; for($i=1;$i<60;$i++): print $b++; print "\n"; usleep(1000000/2); endfor; exit; ?> ------------------------------------------------ これをCLIモードで実行すると、 ちょっとおもしろいよ。
<?php print "文字を入力してください\n"; $in = fgets(STDIN); $c = rtrim($in); print $c . "、、、ですと?!"; ?> ------------------------------ これも実行すると ちょっと面白い例。 CLIから実行。 PHPで対話的アプリが実装できる。
またお前か 全然成長してないな
俺も25年前くらいにBASICで同じようなことやって一喜一憂してたから気持ちはわかる
ここはプログラム板。 キチガイは入れない場所ですぞ
<?php `CLS`; ?> なんでこれで 画面がクリアされないのか、 理由がわからないづら
行番号がないからだろ
>>479 笑いどころはここらへん?
>exit;
>?>
MSSQLに接続できん・・・・・ もう2日はトライしてるわ・・・
つ PDO
>>448 mysql使ってたんだけど、コマンドラインからの操作が面倒くさすぎてMSSQLserverにしたら
2005年版は何かphpとの接続にパッチやら入れないといけないらしく、上手くいかない・・・・
あぁ〜PCやりすぎて目が痛いよう
そんなあなたのためにphpmyadminというものがあるが使わなかったんか?
MySQL Admnistratorでいいと思う ちゅうかなんでその理由でPostgreSQLなどに行かずに 急にSQLServerに飛ぶのか解らんが
>>490 >>491 あ〜そんな物があったのか・・・・丸二日費やしたのが馬鹿みたいだぜ。
なんとなく目に留まったのがMSSQLだったからorz
ちょっと試してみます
xamppだったら 最初からついてるよね。
最近のテスト環境構築丸々入ってるよ〜系なら大抵ついてくるね>phpmyadmin というか、ほんとに便利だから入れないと移行とか大変すぎる
495 :
492 :2009/05/05(火) 16:23:27
MySQL Admnistratorは英語って以外は中々使いやすいね。 日本語のかねやんMySQLAdmin使いたいんだけど何か接続できないから諦めた。 それにしてもphpは自分の設定であってるかどうか不安だわ。 少しでも調べないで変えると戻すのも苦労する
自PCの環境で完成した〜と思って、サーバにあげて実行してみたら Fatal error: Call to undefined function zip_open() ・・・まあ、PHP暦1週間の初心者なので・・・(´・ω・`)
コマンドのインストールに失敗する前にWebmin使ってみよう! ・・・ファイアウォールの設定はしっかりとね。
>>495 Tools→Options→GeneralOptions
右上LanguageをJapaneseにしてアプリ再起動
1%だけ日本語になるぜw
499 :
484 :2009/05/09(土) 01:25:34
データベースには接続できるのですが、テーブルにアクセスできません・・・・。 毎回接続までしか試しておらず、MYSQLからMSSQLに設定を変えて、またMYSQLに戻した からかもわからないのですが、いつからアクセス出来なくなったのかわかりません。 どなたかエスパーしてください・・・・・何を聞いていいのかもわかりません。 INSERT INTO 生徒 (id,名前) values (0001,'鈴木'); とコマンドラインからSYSQLに同じ命令を打ったら 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 'INSERT INTO c”?a?’ (id,a??a‰?) values (0001,'e?´a?¨') LIMIT 20 OFFSET 0' at line 2 とエラーが出てきました。 これはphpのエラーじゃないのでしょうか?
500 :
デフォルトの名無しさん :2009/05/09(土) 01:59:47
>>499 >You have an error in your SQL syntax ってエラーが出てるから、SQL文に問題あるのでは?
>>499 項目名にマルチバイト文字なんて使えるのか?
>>499 `項目名`
あと mysql_real_escape_string を忘れずに
>>502 それはバッククオートで囲め、て意味?
ただコードを書くだけでは意思が伝わらないことが多いよ
504 :
デフォルトの名無しさん :2009/05/09(土) 02:33:30
テーブル名もマルチバイト文字だな。
SQLのオブジェクトにマルチバイト文字を使うのは面倒。 エンコーディングでいかようにでも化けちまうきがすんだけど ''で括ってもどうなるか、EUCになるならいいが、最近はUTF-8もあるから。
>>503 テーブル名や項目名をバッククオートで囲む、これ癖つけておいたほうがいいよ
`table`.`index` という感じで
PostgreSQLから移ってきた時に、これで丸2日ほどつぶしてしまったよ俺。。。
別にマルチバイトでも問題ないよ OracleやAccessじゃよくある
ただ文字化けしてるだけじゃん。文字コードの設定を統一すればいいよ。 > とコマンドラインからSYSQLに同じ命令を打ったら コマンドライン版の PHP.EXE のこと? PHPで直接、SQL の INSERT 文が発行できたっけ??? もしコマンドライン版の mysql.exe なら、mysql.ini で文字コードを設定する。 自分が何をしているのか、相手に伝えられないと答えようがないよ。
509 :
499 :2009/05/09(土) 14:24:17
皆さんありがとうございます。 マルチバイトを使わずにアクセスした所、アクセス出来たので設定がおかしいのだと思います。 あああああああああああああああああ何でこんなに設定がめんどくさいんだpg歩ディfgしあhふぃさdhfじゃs」dpfは 環境設定だけでプログラム全く書いてねえぇぇぇぇぇぇl!!!!!!!!!!!!!!!!!!!
わからんなら、何かフレームワーク使った方が楽だし憶えやすいぞ。
設定が面倒くさいんじゃなくてマニュアル読んで手順通り設定してないだけだろ 文字コードさえ一致してればマルチバイトであろうがなんであろうが動く むしろマルチバイトで動かないけどアスキーにしたら動いたってのは何も解決して無くて まだどこかで文字コードの不一致が起きたまま動いていると言うことだ
データベース名やテーブル名、フィールド名に2バイト文字を使うのは今では普通なのか? 今まで使ってはいけないと思って使ってなかったけど・・・。 テーブル名やフィールド名を考えるのがメンドイんだよな〜
好きか嫌いかだろうな。 別にローマ字でもいいと思ってるし。 要は間違えなければいい。
今では普通じゃなくて昔から使えたし別に今更禁止する意味もない 禁止なのは開発の規約上アルファベットで揃えるから禁止とか 日本人しか理解できないから禁止とかそういう理由であって システム的に動かないから禁止ってわけではない
あとはシステム的に開発環境などをスキル低い人が設定できないから トラブル避けるために禁止ってのもあるけど
DBで設定してる文字コードと違うことは良くあるね だから接続したあとに設定するわけで MySqlだけど置いときます <?PHP //DB接続 $_DB = mysql_connect( "localhost", "root" )or die("Could not connect"); //テーブルを選択 mysql_select_db( "table" ); //DBとの接続間で使う文字コードをセット mysql_set_charset("utf8"); ?>
517 :
デフォルトの名無しさん :2009/05/09(土) 18:07:32
仕事で日本語テーブル名、日本語項目名で作られたデータベース使ったことあるけど、最低、最悪だったよ SQL文書くのに面倒くさくて、見たくもない、日本語禁止。
秀丸で手入力でもしてるのか? ツール使えよ 仮にカラム名が英文だったとしても打ち間違ってバグの元になるぞ
移植性を考えるとマルチバイト文字はオヌヌメできぬ。
520 :
499 :2009/05/10(日) 00:55:00
スレチギリギリにも関わらず皆さん本当にありがとうございます。 テーブル名やカラム名をマルチバイトを使わずに、挿入するデータだけを マルチバイトを使ったら、挿入できたのですがテーブル内容を表示するとき 文字化けが起こりました。 また、mysql_uery,mysqli_set_charset関数はエラーが出て使えませんでした・・・。 Call to undefined function mysql_query() と出ます。 環境は PHP Version 5.2.8 Apache 2.0.63 NetBeans 6.5 MySQL 5.1 MySQL Administrator です
つ >むしろマルチバイトで動かないけどアスキーにしたら動いたってのは何も解決して無くて >まだどこかで文字コードの不一致が起きたまま動いていると言うことだ
なんか初心者スレ案内したほうがいいような気がしてきた
>>520 ちゃんとphpとmysql(のDB)と文字コード合わせてる?
こういう場合にSQL周りをクラスでラップしてると 文字コード関係の問題解決は楽なのよねぇ
リリース後に運用でgdgdになって火消しに行くこと多いんだけど PHPの場合DB周りも含めて実装が意味不明な事が多いんだよねぇ せめてPEARでも使ってよと思うんだけど、何故かそうしてる所が少ない… 独自実装の方がどう考えても面倒でしょうに
mysqli_set_charset を使うには php に mysqli をインストールすること。 デフォルトではインストールされない。 mysql_uery なんて関数ははじめから無い。 たぶん mysql_query か mysqli_query の間違いだろ。 とにかく、php.ini、my.ini の設定を最初っからやりなおせ。 そうすれば文字化けも直る。 入門書・解説サイトなどをよく読め。
PEAR など既存のライブラリを使いたがらないのは 他人の書いたコードのデバッグをしたくないからだろ。 PEAR に100%バグが無いと保証あるなら別だが。
うちはSmartyぐらいしか使ってないなぁ
こんなとこだと思うw ・有名なライブラリの存在を知らない。 ・自分が作ったほうがバグが少ないという 根拠のない自信。 ・作ってみたい。 ・コスト意識がない。
最近はメンテや機能追加ばっかりだから 追加でライブラリ使うことを向こうから止められる 開発楽になりますよって言っても聞かないしー
その辺のSI会社のプログラマが書いたライブラリより PEARにバグが無い確率の方が低いだろJK
PERA_DBやPEAR_MDBに今さら重大なバグあったら世界がひっくり返るわw 少なくとも、文字コードが良く解りませんって言ってる奴が 直接SQL発行するよりも1億倍マシ。
>>532 PEARにバグが有る確立の方が低い
の間違いか?
日本語が不自由だからPEAR()笑なんてカスみたいな勝手ライブラリ使うんだろ どう考えても上級PGがノウハウもって書いた独自ライブラリの方が優れてる
536 :
デフォルトの名無しさん :2009/05/10(日) 03:06:37
<?php $a = mysql_connect(localhost,root,pass); $d= mysql_select_db(aaa,$a); for ($index = 1; $index <= 100; $index++) : $e=rand(); $f=rand(); $sql = "insert into bbb (id,name,value) VALUES ('','$e','$f') "; $c = mysql_query($sql,$a); endfor; ?> ---------------------------------- ↑このスクリプトを実行すると、 データーベースに100のレコードを追加する。 idはオートインクリメントで、バリューはランダムで生成。 できあがてから、phpmyadminで見ると、すげーおもしろいよ。
データーベース構成 サーバー localhost ユーザー名 root パスワード pass データーベース名 aaa テーブル名 bbb テーブル構成 id | name | value idはプライマリーキーで、 オートインクリメント。
面白くはないと思うけど
×自分が作ったほうがバグが少ないという ○自分が作ったライブラリなら、バグ出ても自分で直せる
PEAR_DBくらい何処でも使われてるライブラリなんて そもそも使って困るようなバグなんて絶対にないし 仮に万が一出ても速攻で修正されるわ
<?php
$a = mysql_connect(localhost,root,pass);
mysql_select_db(aaa,$a);
$d = rand(1,300);
$e = mysql_real_escape_string($d);
$sql = "select name from bbb where id='$e' ";
$b = mysql_query($sql);
$c = mysql_fetch_assoc($b);
print_r($c);
?>
------------------------------------------
↑これがデーターを
取り出すときのコードね。
データーベース構造は
>>539 と同じ。
<?php $a = mysql_connect(localhost,root,pass); mysql_select_db(aaa,$a); $d = rand(1,300); $e = mysql_real_escape_string($d); print "id=" . $e; print "<br>"; $sql = "update bbb set name='12345' ,value='67890' where id='$e' "; $b = mysql_query($sql); var_dump($b); ?> ------------------------------------------------------------------ ↑これが、データーをアップデートするときのコード。 データーベース構造はさっきとおなじ。
これで、SELECT,INSERT,UPDATE、の 3つの構文が使えるようになりました。 あとはもうオレ様無敵状態。
>>546 つせめてPEARでも使ってよと思うんだけど
>>546 DELETE
あと何が凄いってコネクションクローズしてないことだな
PDOをつかえば、sqlサーバ入れ替えられるよって云ってみたが、 お勧めのSQL鯖との親和性を証明できぬ。
SQLサーバってまさかDBMSのこと?
deleteとかって、 普通、使わないと思うんだよね。
なんで?
確かにupdateで削除フラグ立てるケースが多いな。メンテ時とかに一括削除したり。
554 :
デフォルトの名無しさん :2009/05/10(日) 12:29:40
スレ間違いならスマン PHP4を使ってるんだが、 $output = '<emoji=1>'; print($output); のようにすると、<emoji=1>が出力されない。空。 <br />のようなHTMLは出力されるけど、独自タグが出力されない。 これって、サーバー側とかPHPで何か設定とかあるのか?
>>553 DBによってはupdateって、コピー先のデータを書き換え、元のところに
システム側でのDeleteのフラグを立てるんだよね
この辺は仕様把握しておかないとボトルネックになる
ウチだと元に戻せること前提だから、消すこと事態がないんだけど
ホスト変数が使えない旧mysql APIとか へんてこ仕様山盛りのunified ODBC APIは もう捨てちゃえばいいのに。
>>474 サンクス。その方法でやったらうまくいった。
今日はOOPの勉強するかな。
もしかして、 クラスの、メンバ変数定義のところで、 $a=$a*2; とかって、計算をしたら、ダメなのかな?
やったこたないが、検証してみれば分かるだろ?
マニュアル読めば分かるだろ?
ここはプログラム板ですよ。 「マニュアル読め」しかいえないキチガイは かえってください!
じゃあ google-toi, s'il te plait
>>559 メンバー変数定義?
class test
{
private $a = $a * 2;
private $b;
function __construt()
{
~~~~
}
}
ってことか?
=w=)コンストラクタでやりゃいいだろ・・・
>>565 おお。
そのためにコンストラクタってあるんだ?
なんなんだが・・・
わしゃーてっきり self:$:hogera かと
つーか前後関係の説明がさっぱりないから、意味不明
>>562 プログラム板だとなぜにマニュアル読まないんだ?
あと,マニュアルに書いてあることをなぜわざわざ質問するんだ?
「マニュアル」 しか言えない人はこなくていいです。 帰ってください。
まあその程度でも給料もらえるんだよね、PHPプログラマって。 ドキュメント読んで探すより回りのデキる奴に聞いたほうが早い (邪魔だが朝出した簡単な課題に1日かけられるよりマシかも知れない)
他人を逆引きリファレンスにするのはだーれだ! おれら、生き字引じゃ、なーいんだ!
574 :
520 :2009/05/13(水) 00:42:29
未だに設定が上手くいきません・・・・ skip-character-set-client-handshake を書いてみたりしたのですが、全く変化ありません。 色々なサイトの情報を全て試したので元に戻せるのかも微妙です^q^ どこかにまとめて記述してあるサイトを教えてください。
何を? っていうか現状どうなってるか書かねーからこっちも何も言いようが無いんだけど
>>574 >色々なサイトの情報を全て試したので元に戻せるのかも微妙です
戻せないなら全部消してインストールしなおしがおすすめです。
これを機会にバージョン管理ツールの使い方をちょっとかじって
楽に戻せるようにしておきましょう。
>>574 最初の質問がどこにあるかわからないから、
もう一回最初から質問書いて。
svn使ってるけど、本番サーバのフォルダにリポジトリと同期させるのが コマンドラインでやるしかなくなったことでひるんでる。 作業用クライアントマシンにPHP環境仕込んだけど、やっぱサーバの 環境とはかなり違う・・・憂鬱。
svnで本番環境に展開するのと クライアントにPHP入れたことに何か関連性があるのか?
$a_a++; ってやったら、プラスされないんだけど、 なんで?
582 :
520 :2009/05/13(水) 22:45:39
php.ini default_charset = "UTF8" extension=php_mbstring.dll mbstring.language = Japanese mbstring.internal_encoding = UFT8 mbstring.http_output = UFT8 my.ini default-character-set=utf8 mysql.default_charset = UTF-8 上記を設定したのですが、MySQLにマルチバイト文字を追加しAdministoratorなどで見てみると文字化けが起こります。 やりたい事は、マルチバイトでレコードの追加と表示とブラウザへの表示です。 フレームワークのコード設定がおかしいのでしょうか? 環境↓ PHP Version 5.2.8 Apache 2.0.63 NetBeans 6.5 MySQL 5.1 MySQL Administrator
UFT8
> MySQLにマルチバイト文字を追加し 発行したSQLくらい書け
>>583 早速直しました。ありがとうございます。
>>584 INSERT INTO `test` (id,name) values (0012,'ああ')
でphpから挿入しようと試みました。
マルチバイト以外は正常に挿入できたので文法に間違いはないと思います。
utf8で全て揃えたら今度は挿入時にエラーが発生するようになってしまいました・・・・
>>585 ・・・・・・・・・・。で、エラー文を書く気は無いのかい。
PHP暦2週間でくだらない質問すいません。 File_Archive::extract ↑このコロン二つってどういう意味なんでしょう? 文法とか調べたけど全然載ってないので・・・・
>>586 すましえん
try{
$dbh=new pdo($dns,$user,$password);
$st=$dbins->query("INSERT INTO `test` (id,name) values (0012,'ああ');");
if($st){
print "よい";
}
else{
print "だめ";
var_dump($st);
}
}catch(pdoexception $e){
print"エラー :".$e->getMessage();
die();
}
で実行すると
だめbool(false)
と出てきます。
少し前までは文字化けしながらも挿入できたのですが・・・
>>585 INSERT INTO `test` (`id`,`name`) values ('0012','ああ');
こうじゃダメかい?
>>587 親クラスのメソッドとか、メンバに
アクセスするってこと。
たとえば
親クラスA{
unko-
}
だったら、子クラスがBだったら、
親クラスAのメソッドunko-にアクセスしたかったら、
A::unko-
って書く。
>>589 出来ませんでした・・・。
INSERT INTO `test` (id,name) values (0012,'aa');
にするとすんなり挿入できるのですが・・・・
utf8 UTF8 UTF-8 など表記の違いがあるのでしょうか
ソースがutf8nじゃ無いとか面白いことしてないよな。
>>591 うーん、とりあえず自分の晒してみる
$query = "
INSERT INTO inline
( `day_index`, `write_day`, `edit_day`, `text`, `flag` )
VALUES
( ". $ID .", ". time() .", ". time() .", '". mysql_real_escape_string( $post_array["text"] ) ."', '1' )
";
>>591 phpinfoで設定確認をされました?
PHPてBOMに対応してないんだ、 勉強になった>結構はまりますよね。
602 :
デフォルトの名無しさん :2009/05/14(木) 09:53:34
for文とwhile文ってみんな使い分けてるの? for文の方がコード少なくていいから、 while文使った事ほぼないんだけど。
というか用途が全然違うでしょ
604 :
デフォルトの名無しさん :2009/05/14(木) 12:14:15
while文で例えばインクリメントで加算していく処理とか。
605 :
デフォルトの名無しさん :2009/05/14(木) 13:51:30
while は テキストファイルを読み込む時 とか DBからデータを取り込むとき hashの処理とか が多い(while not eof) for は配列処理とか(個数が決まっているとか)が多いかも
foreachもたまには思い出してあげてください・・・
607 :
デフォルトの名無しさん :2009/05/14(木) 17:58:22
すまん そだね
>>602 ファイルからデーター抜くときはwhile
609 :
520 :2009/05/14(木) 20:29:30
レス下さった方ありがとうございます。 phpinfoで確認した所、ちゃんとutf8に設定されていました。 mysql_set_charset()などの関数が使えればいいのですが、別途にインストールが 必要なのでしょうか? Fatal error: Call to undefined function mysql_set_charset() とエラーが出てしまいます。
611 :
デフォルトの名無しさん :2009/05/14(木) 23:50:19
sql でcharset指定できなかったっけ? #postgresと間違えているか?
612 :
520 :2009/05/15(金) 00:20:02
諦めて一度全てアンインストールしてみます。 XAMMPでまとめて入れてみます。
XAMMPインストールしたらデフォルトでマルチバイトが扱えました!!!!!1111 どうもお騒がせしました。 これからもよろしくお願いします
いままでxampp使ってなかったの?
615 :
520 :2009/05/15(金) 01:15:09
すいません、追記ですが
$dbh->query("SET NAMES 'utf8' ;")
を書いたらマルチバイトが扱えるようになりました。
書かなかったら使えませんでした。
>>614 phpの入門書的な本に、それぞれ単体でインストールする方法が載っていたのでXAMMPは存在自体
知りませんでした。
設定をいじくると怖いので、しばらくこれでいきます。
どうせローカルでの用途しかないので。
皆さんありがとうございました。
616 :
デフォルトの名無しさん :2009/05/15(金) 07:32:52
一応 my.cnf の default-character-set はちゃんと調べたほうが いいと思う
PHP 5.2.3 以後に追加された mysql_set_charset('UTF8'); の方が望ましい。 ・・・らしいよ。
SET NAMES だと正しくエスケープできない場合があるから セキュリティ上よくない。
620 :
デフォルトの名無しさん :2009/05/15(金) 20:33:12
phpでシリアル通信のプログラムを作成しようとしています お勧めのライブラリは何でしょうか
シリアル通信つーてもいろいろあるわけだがUARTで良いのかえ?
622 :
デフォルトの名無しさん :2009/05/15(金) 21:20:15
USBです
USB経由でなんかデバイス接続して、 それのコントロールとかをPHPで書けるってことなのかえ? すごいなあ
>>620 とりあえずphpで作ろうとするなw
デバイスドライバがある前提にしたって、それに特化したライブラリがなきゃ話にならん
>>624 いままでCとか組み込み系とかで
10年くらいやってきた人なんでしょう?たぶん。
ならなぜJavaに行かんのだw
627 :
デフォルトの名無しさん :2009/05/16(土) 06:32:05
>>617 phpのバージョンが不明だから 書いてみた
foreachの必要性が良くわからん
一度に挿入するデータが多すぎて(カラムが多すぎて)、phpの中に書くと大変かつ汚くなってしまうので 外部にクエリを書いて読み込みたいのですが、可能でしょうか?
>>629 ライブラリが導入可能であれば、
O/R Mappingとかいいですね。
SQL文いらなくなります。
>>629 クエリを生成するルーチンを書けばいいんじゃないかな
>>629 俺は連想配列からクエリ生成するようにしてるよ
>>628 配列からデーターを一個づつ抜いてきて、
なんかの処理をするときに便利だよ
配列を使わないのなら、得に使わないかもしれない
最近のパソコンには”シリアルポート”(RS-232CとかUARTとか)が標準装備されていない。 むしろUSBコネクタに接続するシリアルポートの方が一般的だったりする。 若い人はそれしか知らんやろね。
セントロニクス36ピンだろJK
それはパラレル・・・・
PCのパラレルポートはちいせえんだよ あのセントロニクスの巨大コネクタがいいんじゃねぇか
>>634 今、RS-232C⇔UBSの製品おおいよ
この間仕事で使ったよ
デスクトップは今でも殆どRS-232Cはあるよ ノートはなくなったけど
641 :
デフォルトの名無しさん :2009/05/17(日) 06:43:18
>>630 そこから吐かれるSQLの効率がよく問題になると思うのだが
#チューニングするときは、ちゃんとわかってないとできないぞ
>>633 それをいうならhashだろう?
「hash」っていうのは、添え字がハッシュ値な配列じゃん。配列ジャン! それに、添え字が連続した数値の普通の配列にもforeachは便利に使えるぞ。
643 :
629 :2009/05/17(日) 18:16:58
レスありがとうございます。 カラムが20以上あって何も考えずに書くと骨が折れます・・・。 ルーチンとは、forなどで回すということですよね? その場合、トランザクションはどのようにすればよいのでしょうか?
644 :
デフォルトの名無しさん :2009/05/17(日) 18:52:07
>>642 うーん 配列と実装は違うと思うよ
key<->val のmapはhash使ってると思うしw
#ちごうたかな?
どのようにも何も普通にやればいいんじゃないかな
test
648 :
643 :2009/05/17(日) 21:04:48
すいません、トランザクションは自己解決しました。
登録フォームから新しく登録された人の情報を、その人のidの名前で新しくhtmlファイルを作って保存したいのですが、 $arr['id'] を新しく生成するページの名前 $arr に登録された情報が入っていて $newpage に新しく生成するページのhtmlが<?= ?>込みで書かれているのですが なにか上手い方法はありませんか?
意味がわかりません ソースを書いてください
$arr=$array(id=>'0001',name=>'sato'); $newpage=" <html><body> id=<?= $arr['id'] ?><br> name=<?= $arr['name'] ?>
その人のidの名前って、 0001.html ? それとも、 naoko.html?
653 :
651 :2009/05/18(月) 23:06:23
途中で送信してしまいました。 $arr=$array(id=>'0001',name=>'sato'); $newpage=" <html><body> id=<?= $arr['id'] ?><br> name=<?= $arr['name'] ?> </body></html>" この2つを合わせて $arr['id'].html というファイルに <html><body> id=0001<br> name=sato</body></html> と書き込みたいです。
そうですか。で?
どこで行き詰ってるの?
ようやくわかった。 0001ってIDの人がきたときに、 0001.htmlっていうHTMLファイルを作って、 そこにデーターを書き込みたい、ってことだな?
$arrayって何よ
658 :
デフォルトの名無しさん :2009/05/19(火) 01:07:20
はじめてプログラムに挑戦している者です。 独習PHPという本で、値がダブルクォーテーションで囲まれているか シングルクォーテーションで囲まれているかで、結果が違うという内容なのですが サンプル通りに入力して、ブラウザで表示すると サンプル <?php $title='サーバサイド技術の学び舎 - WINGS'; $data1="「$title」はサーバサイド技術の最新情報をお届けします。<br />"; $data2='「$title」はサーバサイド技術の最新情報をお届けします。<br />'; print($data1); print($data2); ?> ↓次のようなエラーが出てしまいます。 Parse error: parse error, expecting `']'' in C:\Apache Software Foundation\Apache2.2\htdocs\samples\chap2\variable2.php on line 3 どうすれば正しく表示されるようになるでしょうか(´Д`)?? 教えてちょんまげm(_ _)m
<?php $title='サーバサイド技術の学び舎 - WINGS'; $data1="「$title 」はサーバサイド技術の最新情報をお届けします。<br />"; $data2='「$title」はサーバサイド技術の最新情報をお届けします。<br />'; print($data1); print($data2); ?> --------------------------------- これで、できる。
$title 」は ここに、半角スペースを入れた。 eと、」のあいだ。
661 :
658 :2009/05/19(火) 02:00:07
できました!ありがとうございますm(_ _)m 助かりました(。・_・。)ノ
どうやら文字コードで化けてたようだ Shift-JIS以外だと何もせず動いた
PHPを始めようと思い、環境を作りました 文字コードの設定に関して教えて下さい サイトなどを見るとUTF-8かEUC-JPで構築されている例が多いのですが どちらの文字コードの方が主流、またはおすすめなんでしょうか? SJISで構築してみたのですが、文字の正規表現が上手くいかず 構築しなおそうかと思っています 宜しくお願い致します
SJIS でうまくいかないと言うヤツは UTF-8 にしても EUC にしてもうまくいかない。 まずは、なぜ SJIS でうまくいかなかったのか それを解決してみろや。 SJIS か EUC か UTF-8 かは、サーバOSや クライアントOS(Windowsとは限らないぞ、ケータイだってあるし) にあわせて最適なヤツをその都度選定すればいい。
オレはPC向けはUTF8、ケータイ向けはS-JISだな。 DB使わない場合はPC向けでもS-JISで作る事はあるけど。
ちょっと迷ったので質問させてください。 @POSTがない場合に代用の値を入れる。 if($data != $_POST['data']) $data = 0; Aデータを配列に入れ、キーを付けて再格納する。 $file = $file('./data.txt'); foreach($file as $xxx){ $p = split('<>',$xxx); $data[$p[0]] = $xxx; } この二つより軽い書き方とかあるんでしょうか?
間違えました、@は正しくはこうです。 if(!$data = $_POST['data']) $data = 0;
$data = ( array_key_exists( "data", $_POST ) ? $_POST['$_POST'] : 0 );
みすった・・・ orz $data = ( array_key_exists( "data", $_POST ) ? $_POST['data'] : NULL ); array_key_exists だとエラーログも荒れないというのも重要です
とりあえずforで10000回繰り返してみました。 if(!$data = $_POST['data']) $data = 0; 結果0.0024509429931641/sec $data = (array_key_exists("data", $_GET) ? $_GET['data'] : NULL); 結果0.0069079399108887/sec if(isset($_GET['data'])){ $data = $_GET['data']; }else{ $data = NULL; } 結果0.0036120414733887/sec orz
間違えました、一番目はこうです。 if(!$data = $_GET['data']) $data = 0 結果0.0024509429931641/sec
何で1000回も回す必要があるん? 数msの差なんてDBで・・・
入門書って必ずこう書くべきだと思うのね。 (1)プリント分。hello (2)変数、定数 (3)配列、連想配列(ハッシュ) (4)if、switch(条件分岐) (5)while,for,forech(ループ) (6)ユーザー定義関数 (7)OOP
自分だと(3)と(4)は逆かな
そんでページの色は 赤 橙 黄 緑 青 藍 紫 にするべきだと思うのね。虹の色にあわせて。
>>677 プログラムを書かせるため。
表示、変数、分岐まで覚えさせて、それらでプログラムを作らせる
プログラムは覚えるだけじゃなく、自分で考えて書くことが大事だと思ってる
(1)プリント分。hello (2)変数、定数 (3)配列、連想配列(ハッシュ) の間は、プリント文と変数と定数だけでいいんだよ!
(A)まず直接print文でhelloを出させる print "hello"; (B) 次に変数に入れて出させる $a="hello"; print $a; (C) 次に定数を教える (D) そん次に 配列を教える。 使い方はprint文だけ。
俺は0章で他の言語の思想を尊重してバカにしない事をまず教える
682 :
デフォルトの名無しさん :2009/05/20(水) 13:09:39
requireとincludeって使い方に何か違いがあるんですか? includeは古い書き方だって聞いたのですが、そういう認識でいいんでしょうか?
>>682 include → Warning 続けて動作する。
require → Fatal Error 実行停止
基本は
あーすまん、どっちを推奨するか書きたかったが、用件によって違うんでなしで。
>>683 requireだと読み込むファイルがなかったらそこで終わるということですか?
includeを使ったことがないので、厳密な違いがあるのかなと
requireを使ってれば間違いないという考え方は危険なんでしょうか?
>>685 大体はrequireでオッケー
自分でエラー処理とかしたい場合はincludeを使うという感じかな?
>>686 なるほど、そういう使い方ですか
まだPHPを始めて日が浅いので、色々やってみます
ありがとうございました
ちょっと質問させてくれ。 ウニコードの整数配列から文字列を作りたいんだが、$array = array(0xE8, 0xC3, ... ); pack('C*', $array); だとうまくいかない。 とりあえず、文字境界で区切って、整数列の長さごとにswitchして ... case 2: pack('C*', $array[0], $array[1]); break; ... みたいな事やってるんだが、他にうまい方法しらない?
690 :
688 :2009/05/20(水) 22:56:32
>>689 情報どもです。遅くなってすまない。一応その辺りは一通り目を通してた。
html_entity_decodeで一括変換するのも試してみたが、元データがUTF8だから、実体参照にするための変換入れたりするよりは、>688の書き方を選んだ次第。
でも、switchの辺りとか、コードの見た目がアレな感じかなと。
PHP書くのが初めてなんで、他の関数とか、C#のparamsっぽいのとか、定型的な書き方の見落としがあるのかと思ってここに来た。
しかし、型制約のない言語はエラーチェックとかデバッグが大変やね・・・w。
>>690 すまそ、何がしたいのか汲み取れなかった。
pack関数が配列をサポートしてないから、エラーなるね。
おそらくswitch〜caseの書き方しかないと思う。
数字だろうと文字だろうと基本は文字の書き出しです、ベースはWebですし。
バイナリ数使うとややこしくなるんで、文字列で書き出すしか。(フォーマットはしっかりして)
計算したあとSQL打つときは、ちゃんと枠にはめないと後々大変です ^^;
>>691 いや、若干後出しっぽくなったかも。すまぬ。
PHPコードとしてもこれはアリみたいだからこのまま使うことにした。
サンクス
$a = array(0xe3, 0x81, 0x82, 0xe3, 0x81, 0xbb); $s = call_user_func_array('pack', array_merge(array('C*'), $a)); echo $s;
このスレのルール 情報はあとだしで、 なるべく小出しでちょっとづつ出しましょう
やっぱ逆引き辞書無いと不便だな、と昨日痛感したよ・・・
>>696 頼むから、PHPマニュアルなんかと併用してくれよ
あと、そう言う人は人のソースをたぶんあんまり読んだりしないんじゃ
ないかという偏見を持ってみたり
他の言語でいうクックブックやレシピ集くらいまで行けば別だけど
<?php $a=rand(1,2); if($a==1){ ?> aaa <?php } else{ ?> bbb <?php } ?> ------------------------------- こういう書き方って普通なの?
普通っていうか、 aaaのところをprint "aaa";にするかどうかは人それぞれだろ。
推奨はどっちなの?
それはaaaやbbbの分量、それとaaaやbbbにPHP側から 埋め込みたいデータがどのぐらいあるかによる。
witch 〜 case でやったほうが美しい・・・
ていうか、それ動くのか?
echoかprintで出力しろよ もしくは外部ファイル読み出すとか
switch 〜 caseじゃなくてか
最近の流行のフレームワークを教えてくれ
cakeでいいんじゃない
>>708 レスThks
だよね。
ちょっと使い倒してみます。
http://www.e-and-a.ws/116.asp ここのページに書いてある、
<?php
header("Content-Type: image/gif");
$image = imagecreate(120,120);
$black = imagecolorallocate($image,0,0,128);
$yellow = imagecolorallocate($image,255,255,0);
imageline($image,10, 60, 110, 60, $yellow);
imageimg($image);
imagedestroy($image);
?>
このサンプルコードが動かない。
「画像ファイル "
http://localhost/1.php " は壊れているため、表示できませんでした。」
ってなってしまう。なんで?
Javascript で、 <script> a="hello world!"; b=a.strike(); document.write(b); </script> こういうの見ると、ああ、OOPなんだな、って思うね。 なので、PHPで、おんなじようなことしたいんだけど。 どう書いたらいい? OOPでクラスを書いてnewするの??
<s><?php echo "hello world!" ?></s>
>>712 ふざけんなゴミクズ。
PHPなめとんのか?コラ。
SQLはじめると、型っていうのが出てくるんだよね。 とりあえず、数値だけでも、 tiniint smallint, int って3種類あるんだけど、 127以下だったらtinyintでいいのか?
<?php foreach (range('a', 'z') as $letter) { print $letter; print "<br>"; } ?> こういうことができるのが、PHPのすごいところ。 おなじことをperlでやったら、正規表現を駆使した 渾身の一作で、何十行 書かないといけないことやら。
<?php $a = uniqid(); print $a; ?> これ、試してみたら、全然ユニークじゃないんだけど、 どういうこと? 生成されるIDの左側が常に一緒なんだけど??
一文字でも違えばユニークだと思うが ランダムと勘違いしてないか?
PEARって別にincludeとかしないでも、 ソースの中にベタ書きしてもいいのか?
他人に配布しないならいいんじゃね
>>717 何がすごいのかわからんけど。
('a'..'z').each{|x|puts x}
>>723 だからさ。
そういう書き方すると、
なにをやっているのか、意味が
まったくわからないわけじゃん。
>>717 程度の話ならどの言語で書いても数行じゃないか
数十行になるのはアセンブラくらだよ
まぁ、ある程度簡単で読みやすく書けるところはいいと思うね でもコメントは書こうよ・・・
>>724 普通に解るだろ別に
それはその言語を知らないから読めないだけじゃないか
単にa〜zまでを出力するのに可読性を低くしたり数十行使ったり方がむしろ難しいと思うの
だからDANあたりにPHP使いはアホとか言われるんだよまったく
>>724 「PHPのすごいところ」って、そういう意味かw
まあ、
>>717 はわかりやすいからいいんじゃない?
別にすごいとは思わんけど…w
>>717 perlではこう書けます。
foreach my $letter ('a' .. 'z') {
print "$letter<br />";
}
同じくらい読み易いでしょ?
むしろ正規表現を使うほうが難しいw
>>717 >>723 はRubyの例だけど読みやすいように書いてみるか
('a'..'z').each do |x|
puts x + "<br />"
end
これって、すごいのだろうか?w
PHP しか知らないんだから PHP がすごいのも仕方ないw
コージーお兄さん、サ
誤爆失礼
Perlだったら print foreach a .. z, "<br>"; こんだけ。
それいいな。
>>717 >おなじことをperlでやったら、正規表現を駆使した
>渾身の一作で、何十行
>書かないといけないことやら。
強引に正規表現を使ってやったぞ
(my $str = join('', 'a'..'z')) =~ s/(\w)/$1<br>/g;
print $str;
>>717 Perlでやるとこう?
print join '', ('a'..'z'), '<br>';
または
print ('a'..'z');
print '<br>';
読みにくいかなぁ
>>742 元のphpのコードでは、
一文字ずつ、後ろに"<br>"を付けるようになってるんだが…
>>> for o in range(ord('a'), ord('z')+1): ... print chr(o), '<br />' Pythonは'a'..'z'と書けないけど、for x in 〜: という構文はPerlのforeachや Rubyのeachよりも「その言語をしらないユーザー」に読みやすい。 inclusiveな範囲で文字列を列挙する関数を書くとこうなる。 >>> def chrange(from_, to_): ... for o in xrange(ord(from_), ord(to_)+1): ... yield(chr(o)) >>> for c in chrange('a', 'z'): ... print c, '<br />'
717は必ずレスがもらえるコピペ
746 :
デフォルトの名無しさん :2009/05/24(日) 16:10:28
>>744 [Ruby]
for o in ('a'..'z')
print o + "<br/>"
end
>>746 素直にそう書けばいいのに、 Rubist ってやたら .each {|x| ... } を使いたがるよね。読みにくい。
>>743 しまった><
じゃあこう
# aからzまで後ろに<br>を付けて出力
print map{"$_<br>"}('a'..'z');
>>747 eachもmapもselectもsortもFile.openも似たような構文で書けるから。
なんでeachだけforみたいな別記法使わなきゃならんのという感じ。
rubyの世界の殻の中ではちゃんと統一はとれている。
rubyの外からだと独特で読みにくいのは認めるけど、こればかりは
「使ってみないと分からない」の世界じゃないのかなぁ。
>>747 一言で言うと、「ダサイ」んだよ。Rubyで for 使うと。
他の言語で言うと、foreachを使うべきところで for使う感じ。
>>751 Perlの場合、foreachと書くところでforと書いた方がスマートな場合を
Larry Wall自身が自著で幾つか例を挙げている。
だからどうした、としか
>>747 だって、for が each の構文糖なんだもん
print "$_<br>" foreach 'a'..'z';
携帯で画像をランダム表示したいのですが どのようなスクリプトが使えるのでしょうか?
<img src="<?php rand(1,10); >.jpg"> で1.jpg〜10.jpg用意しろ
これはスクリプトではないので他の方お願いします
javascriptでいいんじゃない
>>757 で何が足りないのか言ってくれないと次が出せない
PHPのタグの閉じに?が抜けてるから そのままコピペして動かなかっただけじゃないのかw
この質問かつてないくらい様々なスレにマルチされてるな
>>760 遅れてすいません
今サーバをもってないのですが
無料PHPサーバでおすすめあげてもらえませんか?
あぁ、後データベース使いたいならfirebirdがいいよ
BDはXindiceの方がいいよ
ありがとうございます!! 携帯ではJSは使えないようです
いや今時のJSは携帯持ってるよ
未だにcookieが使えない携帯があります
>>745 けどこのスレってPHP初心者大半 + 一部の分かってる人、と
思ってたら、わりと他の言語もたしなんでる人がヲチしてる
みたいなのが分かってちょっと驚いてるw
MySQLで、レコードの数を知りたい時はどうかくの?
>>774 見積書
内容 数量 単価
DBレコード調査 1 \50,000-
あと勉強することっていったら、 e-mal、正規表現、MySQL、画像生成くらいかなぁー
あとinclude_pathの意味がわからない
なんでotuneの野郎がこんなスレ見てるのかマジで意味がわからない
それと、pearとsmartyとcakeかな。
>>773 LLバトルロワイヤルスレから人が来てるからな。
わざわざPHPの初心者スレをチェックする Ruby/Perl/Python 使いなんて
ほとんどいないだろ。
PHPはスクリプト系の王者なんだから、 他の言語のことなんか気にしてないのにねー
723 >('a'..'z').each{|x|puts x} 724 >だからさ。 >そういう書き方すると、 >なにをやっているのか、意味が >まったくわからないわけじゃん。 まじっすか。 foreach (range('a', 'z') as $x) { echo $x; } とおなじじゃないのか。 この程度で「意味がまったくわからない」というのなら、プログラム書くのやめたほうがいいよ。 いくらなんでも頭悪すぎる。
単にRubyの構文知らなかっただけだろ
>>783 アンカーの張り方くらい覚えてから書き込んでくれよ
ペチパーの低レベルさがまざまざと
791 :
デフォルトの名無しさん :2009/05/25(月) 07:26:56
>>784 やってる奴じゃないと、普通はわかんないだろ・・・・
#そのくらいは想像せいや ってのもありだけど
putsってあったらRubyかTCLだろJK
>>724 Cしか知らない人がいきなりforeachとか'a' .. 'z' とか見たらそこで凍ると思うぞ。
方言みたいなもんなんだから言語が違ったら読みにくいのは仕方ないだろ。
RANDMIZE DIM GOTO GOSUB RESTORE READ PEEK POKE IF 〜 THEN 〜 ELSE FOR 〜 NEXT モシ 〜 ナラバ イケ 〜
tumblrからお越しの皆様は、半年ROMってろ
tumblr のやつらってキモイよね〜 誰にも相手されてないくせに やたら自意識過剰でさ〜 弱小ゴミクズ言語のくせにナマイキなんだよね〜
<script> a="byebye"; <a src="javascript:'window.alert(a);'">aaaa</a> window.alert(a); </script> これをサニタイズするにはどうしたらいい?
htmlspecialchars
>>796 やめなさいってw
俺は両方見てるんだからさw
>>797 意図がわからない
scriptタグの中にHTMLを書くってのは何か意味があるの?
何のために「サニタイズ」したいのかもわからない
グーグルで検索したら、extractは危険だから使うな、って 書いてあるのだが、どうなのだ?
>>803 危険な理由を考えてみ。宿題。
昔のPHPはクエリのaaaは自動的に$aaaに展開されていた。
危険すぐるので今はoptional、非推奨になっている。
普通に考えて、野良クエリーがグローバル変数を侵食するとか怖くてつかえんだろw
GETで送ったaaaが普通に$aaaに入るはんて怖すぎるw でも初期につくったPHPプログラムを見ると、普通にif ($aaa == とか使ってて え、なにそれこわい
807 :
デフォルトの名無しさん :2009/05/29(金) 13:10:18
>>806 昔はそれしかできなかったんだから、しょうがないでしょ?
機能的にできなかったことで、今の観点から文句をいわれてもねぇーって感じ
いや、$HTTP_VARSは使えたでしょ
お伺いします。 よくこういうmysql_queryの使用例が出てくるのですが、 mysql_query('SELECT * FROM テーブル WHERE なんとか); WHEREってどんな役割があって、どう使うものなのかがどうしてもわかりません。 色々とググっては見たのですが、具体的な解説は見付かりませんでした。 どうか教えてください。
>>809 板違い。データベース板で聞いてよ。
SQL文については初歩の初歩だから、入門書の1冊くらい読みなさい。
811 :
809 :2009/05/29(金) 17:15:27
そうでしたか、ごめんなさい。 でもおかげで「SQL文」で検索したらわかりました。 いままではPHPを使っているんだから、 PHP関連から探すという先入観があり進めなかったようです。
>>808 そういう問題じゃない。
この野良クエリが変数に入ることがなぜ脆弱性を引き起こすのか理解してないな。
大げさだが、環境変数書き換えるようなもんだからな
>>810 お前が板違い。
質問に一切答えない
webprog板のキチガイ自閉症どもから
避難してこのスレができたのだ。
>>811 PHPを学ぶときに、
「PHPだけ学べばいいんだ」
って思って最初はじめるんだけど、じきに
PHPプラス、SQLも学ばなくては
いけないんだ、って気づかされる。
つまり、PHPとMySQLのバイリンガルになることを
強要されるってこと。これがキツイ。
PHPで自分でテキストいじり倒すよりはるかにSQLのほうが簡単だと思うが SQLなんてエディタで楽々吐けるんだし
818 :
817 :2009/05/29(金) 23:38:43
そういう意味ではPHPとDBはセットなんだと思うよ 今の時代でPHPだけってシステムのほうがほぼ無いんじゃないかな
>>815 そういうおまえも、質問には何一つ答えてないワケだが。
SQL補完できるエディタとかってあるの?
PHP+Postgreは少数派か・・・ んー、スーパーグローバルの値を、SQL文にそのまま使うのは怖いね。 限定された空間で作るなら適当にやるけど、公開サーバーだと・・。 とりあえずは、SQL Escapeは必須だし、$_POSTで受け取った変数の中身 くらいはチェックに掛けるな
結局、このスレには > WHEREってどんな役割があって、どう使うものなのか という問いに答えられるヤツは一人もいないのか。
そんなの調べれば出てくるからな
>>823 だいたい「どんな役割があって、どう使うものか」を聞きたい人って
学校や会社の宿題が終わらなくて2chで済まそうっていう屑ぐらい
じゃん。そんな屑にいちいち答え教えてたらキリがない
PHPスクリプトがサーバーで動くとき、 アパッチ権限で動く場合と、 自分の権限(自分のアカウントがもしyamadaならyamada)で動く場合と、 この2つだけ? もっと他にもあるの?
「サーバー権限」 「ユーザー権限」 この2つ?
>>816 PHPっつーかweb開発やってるとPHP、SQL、DB、HTML、CSS、JavaScript(AJAX)、Flash(ActionScript,Flex)、
サーバー構築の知識、サーバーメンテの知識、一通り必要だぞ。
別にPHP関係なくて、Ruby や Railsだって今時そうだし。
それで、キツイ言ってたら、プログラマーやってけないと思うけど。
つか簡単でしょそれら
831 :
デフォルトの名無しさん :2009/05/30(土) 07:19:02
つーかDB触るアプリだと、必須だと思うのだが>SQL
SQLでできることはSQLでやったほうが、パフォーマンスぜんぜんいいしね
#基本はねw
>>809 SQL今後も書きそうなら、入門書位読みなさい
>>827 Apacheからたたく場合はApacheのuser(and group -> httpd.conf) だっしょ?
#普通はパーミッションあわせるわなぁ・・・・
cuiの場合は起動するuser(and group)にあわせる
そういう意味では、変わらないと思うのだが
#基本はね
#cron なんかだと user 指定する場合もあるけど
>>830 簡単なことしかやってなかったらいいんですけどねえ・・・
「つか」って何ですか?
>>827 > Apacheからたたく場合はApacheのuser(and group -> httpd.conf) だっしょ?
suEXECでユーザ権限で動くサーバも多い。
設定次第では、特定の既存ユーザのアカウントで動かすこともできるが、まあこれは
Apacheのuserってことになるのかな。
他のパターンはあるのかなってことだろ?
つーか、どうせこんな質問、レスばかりになるんだから、ム板にPHPを持ってくるのは やっぱり激しくミスマッチな気がする。
837 :
デフォルトの名無しさん :2009/05/30(土) 11:46:37
>>834 あ そうだ すまん
#自分じゃつかわねーから 忘れてた
>>816 >PHPとMySQLのバイリンガルになることを強要される
飯のタネだと思えばつらくもなんともない
てか、言語だけ覚えてもただの言語マニアだろ。 どんな言語でも実用的なもの作ろうと思ったら、 システムや外部ツールとの連携を覚えることは必要になる。 PHPでもコマンドラインツールだけ作る用途で使うなら、 SQLなんて知らなくてもいい。 むしろパイプやファイル入出力のほうが有用になる。
このスレ、板違いだろ
>>839 覚えたばっかりで使ってみたかったんですね。
SQLとファイル入出力を両方知った上でどちらを使うか洗濯するのであって 片方しか知らなくていいってことじゃないと思うが 俺は文字を表示したいだけだからechoだけで十分だし そこまでできてるので俺はPHPできる人ですって話にはならんわけで
別に1年目からそれを全て求められるわけじゃないからねぇ 5年やって純粋なPHP以外は解りませんだったらアホだけど 5年やればそのうちの8割くらいは触ることになるはずだから
いや、5年もいらないだろ
じゃ何年?
メールフォーム一筋で食ってきた俺なんか未だにSQLとか書いたこと無いぜ仕事ください
触るだけなら1年程度で十分だな。 練りこむのを入れるなら3年強。
仕事就いて即バグ取りとメンテ、増築させられたよ C++やってたから文法覚えるだけで特に苦にならなかった SQLもいくつか見たら、ノリ判るし
ノリでプログラムを理解する奴を俺は信用しない。
いや、SQLぐらいプログラムできるなら判るでしょ・・・
>>847 それはさすがにもう食い扶持ないと思うぞ……。
つーか今までよく食ってこれたなお前。
>>850 この場合、ノリってのはプロジェクトの作法みたいなものを指してるんじゃね
条件の記述パターンとかトランザクションのかけ方とか
5年必要って話じゃなくて5年やって駄目ならアホって話だよ 大きなプロジェクトなら1年2年スパンだからずっとコードと保守って事もあるし それで2年やってサーバ知らないからアホって事にはならんけど 次も同じ仕事を2年3年続けてたらアホだよねって
>>853 思うに、誤解の無い表現が出来ない奴は、職業プログラマは駄目だってことじゃね?
856 :
847 :2009/05/30(土) 23:16:58
>>852 スピード対応重視だったせいか去年までは何故か食えてたんだけど流石に無理があったw
今はデザイナの嫁さんの稼ぎで食ってる主夫≒ニートでござい。
確かにメールフォームの需要がなくなるってことはなさそうだな 食えるかどうかはともかくw
858 :
デフォルトの名無しさん :2009/05/31(日) 00:21:36
>>851 やってることのレベルによると思うけど、それは無理
単純なSQLだけならありだろうけど、そんな奴は迷惑
#と数年前の自分に言いたいw
MySQL使いに多いんだけどJOINなしのSQLを何度も投げるのはやめて欲しい もう3.23の時代じゃないんだぞ
>>859 ・その方がスクリプト(とDBの構造)がシンプルになる。
・その方が 圧 倒 的 にパフォーマンスがいい場合がある。
なんて理由から、JOINを選択的に排除するのは特に問題だとは思わない。
逆に、とにかくJOINする、っていう考え方が害になることも多いんだよ。
4〜5個JOINを入れ子にしたSQLとか、書いた奴以外が読むのは激しく負担。
また、そこでバグでも出された日には目も当てられない。
いやだからその考え方が江戸時代の考え方なんだよったく
あまり複雑なJOINだと大量に重複データーが混じるが、それって問ボトルネックになるのかな?
それはSQLが間違ってるから混ざるのでは 外部結合なんて混ざりようがないだろ
JOINがネックになってればそこはチューニングするんだから、 最初からJOINなしで作るのはおかしい。 よっぽど統計の取り方がクソなRDBMSでも無い限り、JOIN使った方が速い。 JOINは害って言ってる奴は、MySQL4しか使ったこと無いんじゃないか。
なんで突然外部結合に話を限定するんだ。
それこそまさに、限定的にJOINを使ってるってことじゃないの?
>>859 から感じる雰囲気では、こんなSQLも普通だと思ってそうだが、そんなもんなの?
(出所は伏せるが、知ってる人は多いかも)
SELECT
class_id1, class_id2, name1, name2, rank1, rank2,
product_class_id, product_id, T1_classcategory_id AS classcategory_id1, T2_classcategory_id AS classcategory_id2,
product_code, stock, stock_unlimited, sale_limit, price01, price02, status
FROM
(
SELECT
T1.class_id AS class_id1, T2.class_id AS class_id2, T1.classcategory_id AS T1_classcategory_id,
T2.classcategory_id AS T2_classcategory_id, T1.name AS name1, T2.name AS name2,
T1.rank AS rank1, T2.rank AS rank2
FROM dtb_classcategory AS T1, dtb_classcategory AS T2
WHERE T1.class_id IN (
SELECT class_id1 FROM vw_cross_products_class AS crs_prd WHERE product_id = ? GROUP BY class_id1, class_id2)
AND T2.class_id IN (
SELECT class_id2 FROM vw_cross_products_class AS crs_prd WHERE product_id = ? GROUP BY class_id1, class_id2
)
) AS T1
LEFT JOIN (
SELECT * FROM dtb_products_class WHERE product_id = ?
) AS T3
ON T1_classcategory_id = T3.classcategory_id1 AND T2_classcategory_id = T3.classcategory_id2
ORDER BY rank1 DESC, rank2 DESC
せめて読みやすくしようと勝手にインデントしてみたが、括弧の対応でミスった。
それって
>>859 が書いたんじゃなくてお前が書いたんだろw
言いがかりで正当化しようとするなよ
俺も何度か途中参画したプロジェクトでテコ入れしたことあるけど 結合してクエリ投げる回数減らした方がパフォーマンス上がる場合が多かった
みんながみんなMySQL使ってるわけじゃないだろ。 接続コストが高いけど性能も高いPostgreSQLやOracle使ってるなら、 JOINした方が全然早い。 単純読み出し命のMySQLくらいじゃないか。都度投げた方が早くなる可能性高いのは。
LAMPって知ってる? ポスグレやOracleはそもそもLAMPの保障外だから 事例としては稀で、実務では通常ありえない組み合わせ PHPでDBと言えば、特別指定しない限りMySQLのことだから
そ、そうだね… 話題変えようか…
なんか久々に聞いたなLAMPって単語
>>867 >>865 のことか?
俺が書いたんではなく、読まされたんだよ。ボトルネックっぽいからと。
結論から言うと、そのデータを取得するためには、90%は無駄な処理。
それを確認するのにどんだけソースとテーブルの関連を調べたか。
最初から、シンプルに3つ位のクエリを出して処理して十分追いつく内容だったし、
マトリックスを作るにしても、もぶっちゃけこのSQLよりPHPで作った方が早かった。
大事なのは、それを突き止めることも困難なスパゲッティSQLを自己満足で書くんじゃないと。
チューニングの結果として複雑になるならまだしも、最初から複雑に書く奴は馬鹿じゃないか?
>>870 さすがに恥ずかしい切り口じゃね?それは。
PostgreSQLも、8.x系統からはまたライトユーザの視野に入るようになってきてる印象。
それまでは、結構昔からDB使ってる人や会社で好まれるもの、っていうイメージがあったが。
それはそのSQL書いた奴が馬鹿なだけで、 JOINと言う仕組みが悪いわけじゃないような気が。
PostgreSQLもWindows版つくったりと、ユーザー広げようとしてるしね Joinより、ビューをDB側で用意したほうが圧倒的に早くなるよ
なんだ、LEFT JOIN のことか
なんだか勇気をもらえるスレだなココ
>Joinより、ビューをDB側で用意したほうが圧倒的に早くなるよ それはない
viewったって中身は結合だから、たまたま速ければそれでいいんだけど 遅かった場合に直しようがないから結局最初からSQLで結合した方が楽だよ
>>865 ひどいね。スキーマが分からないので何ともし難いけど分かる範囲だと
次のように書ける。
[無保証]
SELECT
T1.class_id AS class_id1, T2.class_id AS class_id2,
T1.classcategory_id AS classcategory_id1, T2.classcategory_id AS classcategory_id2,
T1.name AS name1, T2.name AS name2, T1.rank AS rank1, T2.rank AS rank2,
product_code, stock, stock_unlimited, sale_limit, price01, price02, status
FROM dtb_classcategory T1, dtb_classcategory T2
INNER JOIN vw_cross_products_class crs_prd1
ON T1.class_id = crs_prd1.class_id1
INNER JOIN vw_cross_products_class crs_prd2
ON T2.class_id = crs_prd2.class_id2 AND crs_prd1.product_id = crs_prd2.product_id
LEFT JOIN dtb_products_class T3
ON T1.classcategory_id = T3.classcategory_id1 AND T2.classcategory_id = T3.classcategory_id2
AND crs_prd2.product_id = T3.product_id
WHERE crs_prd1.product_id = ? ORDER BY rank1 DESC, rank2 DESC
RDBMSのバージョンも分からないけど、インデックスの使用を妨げる
ような書き方もしていないから多分速いよ。
スキーマが分かればもっと短く速く書けるようになる可能性が高い。
(特にvw_cross_products_class。product_idがキーならこのテーブルを
第一テーブルにしてdtb_classcategoryをJOINした方が速くなる。
あとカンではT3のclasscategory_idの制約も必要ないと思う)
PHP上でロジックを書いた方が速いかはレコード数等々にもよるけど。
あと元クエリーは酷すぎ。多分最善策だったのは、このクエリを事前に
DB板の関連スレにコピペする事だったんじゃないのかな。罵倒しつつ
親切な人がすっきりと書き直してくれたはず。
881 :
デフォルトの名無しさん :2009/05/31(日) 09:00:46
>>870 それは単なる言葉の定義。
そういう構成で使われることが多かった だけやん
誰が何の保障をしてくれるわけ?
>>870 いやあの、LAMPって保障とかそういう言葉じゃないから。
既にあったDBがポスグレとかOracleとかあるからしねえ。
昔はポスグレの方が性能高かったから(今は知らん)か、ポスグレ指定されることもあるしねえ。
金あるとこはしょーもないシステムにOracle突っ込もうとするし。
883 :
デフォルトの名無しさん :2009/05/31(日) 14:17:24
>>879 Oracleの待てビュー早くね?
#Ora使いじゃないからわかんないんだけど
メールヘッダインジェクションとか まじで勉強しないとダメなの?
パスの相対指定のやり方とかってどうやるの? 外部から見られたら困るtxtファイルなんかを public_htmlの外に格納するときなんだけど、 --public_html--a--1.php | |--private_html--2.txt こうなっていたとして、1.phpから、2.txtを 読みたいんだけど。 1.phpからみて、一つ上の(a)、一つ上(public_htm)の、一つ上の中の、 private_htmlの中の、2.txt これでいいの? だとしたら、相対パスの書き方はどうなるの?
require_once('../../private_html/2.txt'); これでできた。 でも、ドキュメントルートを指定して書く やり方あったよね。それ教えてよ。 [DOCUMENT_ROOT] こんなかんじのあったでしょ。
またお前か
>最低限、CR、LFだけはチェックし、含まれる場合 >はセキュリティ上のエラーとして処理(攻撃が行わ >れたとアラートを発生させる等)しなければなりま >せん。 こんなこと書いてあるんだけど、 本当にこんなことしないといけないの?
ここはプログラム板 C++やJavaの偉い人がきますよ
>>888 SQLの場合、実装に穴があると「;」の後ろにLF入れられたら面倒なことになる場合があるけど、
それは穴の方が問題であってLFが問題じゃないよね。
他にCRLFが問題になる場面って思いつかないな。SQLの場合だけ気をつけてればいいかと。
>>890 SQLの話じゃないよ。メールヘッダインジェクションの話だよ。
誰がアナルやねん!
894 :
デフォルトの名無しさん :2009/06/01(月) 19:49:24
ここで聞くことなのか怪しいところですが、PHPを自宅で使える環境にできません。 Apache_2.0はちゃんとインストールできてると思います。 PHP5.2.9もちゃんとインストールして、指示されているように設定の文書も変更しました。 (それが古いバージョンのものだったので一部違う部分もありましたがだいたいできたと思います) ちなみにOSはVistaです。 わかる方がいたら是非教えてください(>_<)
895 :
デフォルトの名無しさん :2009/06/01(月) 20:34:22
LoadModule php5_module "drive:/path/to/php-5.2.6/php5apache2.dll" は設定してる? もしくは変更したところを全部書いてみる エスパーじゃ答えられないし、それやんないとお互い時間の無駄
896 :
デフォルトの名無しさん :2009/06/01(月) 21:21:20
設定の変更などは高度すぎてわからないので まとめてインストールできるXAMPPというものがあると聞きまして インストールしたのですが、結局できません。 依然としてApacheは正常に動いてるようなのですが。。 もうなにがなんだか…すいません
xamppで失敗できる人がいるとは思わなかったw 単に使い方わかってないだけでインストールは一通り出来てんじゃないの? 何をもって「できない」と思ってるのか書いてくれないからわからんけどさ。
898 :
896 :2009/06/01(月) 22:33:17
なんとかでき?ました!笑 メモ帳で書いてたので拡張子がphpのつもりがtxtになってるのが原因でした。。 ありがとうございました!! ちなみに、こんな一括インストールがあるのに、これが主流でないのはなぜでしょう? これには何か欠点があるのでしょうか?
・Windowsでは連続動作・セキュリティ的に脆弱 ・一括インストールだと後のバージョン更新、ライブラリ追加ができない ・バージョンやライブラリ当の違う、複数の環境に対応したテストがしづらい
900 :
デフォルトの名無しさん :2009/06/01(月) 22:43:06
>>898 秀丸使ったほうがいいと思うよ(メモ帳以外のエディタなら何でも)
>何か欠点
使いたいバージョンを手でインストしても、慣れればそう手間ではない
おまけがいっぱい入りそうなのが嫌
Linux鯖がメインでphp以外はディストリのパッケージを使うから
#Win版はzipを解凍
Postgresの方がメインだから
単なる趣味だから
まぁ、せっかくだからPHPエディタのスタンドアロン版とかお勧めする 簡易デバッグも出来るし(設定できればの話だが)
>>898 お手軽開発用としては割と主流だけどね。
本番用には
>>899 の理由含めて色々問題があるから使い辛いけど。
903 :
896 :2009/06/01(月) 23:30:20
そうなんですか。。。 僕は学校の課題を家でも出来るようにしたいだけだったので、たぶんこれで大丈夫です! もしハマっていったらまた個別で使いやすいようにインストールしていきます。 ちなみにエディタはGreenPadを使うようにしました。一番簡単なようだったので。。。 いろいろありがとうございました!!
>>885 まず
http://www.php.net/manual/ja/ これをブックマークしといて。
それから
search for 欄にDOCUMENT_ROOT
を入力してからその右側のプルダウンからonline documentationを
選択してそのさらに右にある矢印をクリック。
気持ち悪いピンクの囲みに何か書いてあるだろう?
xampp使うと成長しないからね
906 :
デフォルトの名無しさん :2009/06/02(火) 14:35:27
$arr = (4,7,8,9) 上記配列で、 残りの1~9(今回の場合は1,2,3,5,6)までの値を配列に格納 する方法を教えてください。
普通に1から10まで回して、$arrに存在してなかったら追加でいいんではない?
$a=array(4,7,8,9); $b=array(1,2,3,4,5,6,7,8,9,10); var_dump( array_diff($b,$a)); が array(7) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [9]=> int(10) } なのはなぜですか?
トーナメント表などのお勧めなscriptってありますかね?
910 :
デフォルトの名無しさん :2009/06/03(水) 00:42:12
>>906 $array = range(1,9);
$data = array(4,7,8,9);
print_r( array_unique( ( array_merge( $array, $data ) ) ) ) ;
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 )
911 :
デフォルトの名無しさん :2009/06/03(水) 00:46:50
>>908 <?php
$a=array(4,7,8,9);
$b=array(1,2,3,4,5,6,7,8,9,10);
print_r( array_diff($b,$a));
Array ( [0] => 1 [1] => 2 [2] => 3 [4] => 5 [5] => 6 [9] => 10 )
PHP Version 5.2.6
>>908 何を聞きたいのか知らんが、なぜ[3]が入るのか?
ということであれば、再現せず
<?php
$a=array(4,7,8,9);
$b=array(1,2,3,4,5,6,7,8,9,10);
var_dump( array_diff($b,$a));
array(6) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[4]=>
int(5)
[5]=>
int(6)
[9]=>
int(10)
}
PHP 5.2.8
>>898 主流じゃないと思うが、検索する限りではWindowsではよく使われているようですよ。> XAMPP
>>910 rangeという関数あるんですね。
ありがとうございます。
いろいろと活用できそうです。
いやだから文句言うなら回答例を
プログラムって、はじめてやるような例の場合、 精神的な負担やストレスがはんぱないよね。 ストレス度250%って感じ。 同じこと何回もやって、 「ああ、また例のあれだな」 って、先の展開が読めれば なんてことないんだけど、1回目は 本当に脳の血管がぶちきれそうになる。
>>919 そこで言うストレスっていうのは、時間内にできるかどうかもわからん!ってもんだろうな。
時間的な制限がよっぽどきっちきちでなければ、初回が一番楽しい。・・・は語弊があるか。
一番モチベーション高いけどな。
二度目は前回の反省を活かしていじる楽しみがある。(でも一番迷走しやすい)
逆に、三回目以降こそ苦痛で仕方がないような気がする。
どうせそのままでは使えなくてあちこちいじる必要があるのに、全体としてやってることは
前と同じっていう、なんとも言えない作業感が辛くなったりする。
また、前にやった処理と若干違う部分がなんとも修正しにくかったりした場合とかも、変に
あるものを活かそうとして逆に足を引っ張られたりしない?
>>920 ああ、あなたは理系だね。
私は文系だから、ストレスを感じ取る
局面が正反対なの。
unko大学からのアクセスのときだけ、 専用のページに飛ばすのって どう書けばいい? unko大学のリモホが、 abc-123.unko.edu だったとしたとき。 リモホを変数に格納して、 ピリオドで区切って配列に格納して、 右から二つのセクターが、edu、unko、 と一致しているかどうかを==で調べて、 もしtrueなら飛ばす、これでいいの?
>>922 別にそれでもいいけど普通htaccessでしょ。
それでいいんじゃねーの
>>923 ただ飛ばすだけでなくて、ログも取りたかった。
phpで全部制御すればなんでもできるでしょ?
>>925 ログはHTTPdのログがあるじゃないか・・・。
まあPHPで済まして悪いことは何もないからそのままでもいいと思うが。
無料のレンタルサーバーだから アパッチのログは見れないんだよ、dude
date関数って、どの時間帯が表示されるのかな? php.iniの設定で決めるの?
つまり自分のパソコンで実験してるときはJSTが表示されて、 レンタルサーバーにアップロードしたら、 そのサーバーのタイムゾーンで表示されてしまうのかな? だとしたら、アタマこんがらがるね。
なんでPHPerって、スレを乱立させるんですか?
クッキーの受け入れを拒否してると、 セッションクッキーも受け取れなくなるの?
ブラウザの開発元に聞いたら? サーバ側の処理で「クッキーの受け入れ拒否」とかあるの?
仮に誰かが血迷って次スレ立てるとしたら、少なくともスレタイを「PHP初心者@〜〜」にしとけ それか、ここがム板での雑談スレって扱いなら、テンプレに質問スレへのリンクでも貼って置けよ。 クソスレ乱立させんな
>>931 当然。URLにセッションIDを埋めるしかなくなる。
それが他人のパソコンに残ったり、そのURLを利用者が知らずにネットに貼ったりして
セッション乗っ取りが行われる。セッションIDにはワンタイムトークンを使うべきと言われたり、
決済やパスワードの変更等重要なタスクが発生する場面では再認証すべきと言われているのは
そのため。
>>932 開発元に何を聞くんだよw
>>928 date_default_timezone_set()
>>934 あーー。
それで、use.cookie_only=1
とかにしないとダメなんだ?
>>936 session.use_cookies = 1;じゃなかったっけ?
セッションハイジャックでググってみるといい。
938 :
デフォルトの名無しさん :2009/06/04(木) 17:18:28
$first_sunday = mktime(0, 0, 0, $month, 1 - date("w", mktime(0, 0, 0, $month, 1, $year)), $year); 西暦と月の情報だけで、その月の朔を含む週の日曜日を求めるコード。 長くて気持ち悪いんだけど、もっと短くならないかな?
十分短いと思うがw
>>938 $first_sunday = strtotime('next sunday', mktime(0, 0, 0, $month, 1, $year));
941 :
デフォルトの名無しさん :2009/06/04(木) 18:10:33
>>940 お、ありがとう。
この関数のことは知らなかったよ。
>>922 Webサーバが逆引きした名前を用意してくれるとは限らないし、
そもそも逆引きの名前がないかもしれない。
>>940 $first_sunday = strtotime("next sunday $year-$month-1");
>>944 % php -r "var_dump( date( 'Y-m-d' ,strtotime( 'next sunday 2009-2-1' )));"
string(10) "2009-02-08"
PHP5で、文字列の連結を高速化する手法はありますか? 配列に格納後joinするのが早いと思っていたのですが、実際に計測してみると「.」で一つずつ連結する方が早い始末… メモリ確保の観点から「.」で一つずつ連結するより早い方法がある(C#のStringBuilderのような)と思うのですが、どうなんでしょう
>>946 '.'を使うのは並び順とかを指定するコストを人間が
負担してるわけだから早いのは当たり前。
例えば以下でどっちが早い?っつったら二番目に決まってるじゃん。
ループ回す分のコストがないわけだから。
foreach(1..5 as $count){
print $a[$count];
}
print $a[1] . $a[2] . $a[3] . $a[4] . $a[5];
>>945 PHP 4.4.3では2009-02-01と出るな・・・・。
まったくPHPってヤツは。
949 :
946 :2009/06/06(土) 16:39:34
foreach($a as $tojoin){ $a = $joined . $tojoin; } よりも $joined = join('', $a); の方が遅いってこと?なら研究の余地があると思うが。 joinは内部的に配列を追ってるから、そのコストを人間が 負担するのでは比べる意味がない。
ほとんどの場合、その程度の速度差を気にしたところで何の意味もない
953 :
945 :2009/06/06(土) 17:38:33
>948 2009-02-08になったのはPHP5.2.6@FreeBSD。 まったくPHPってヤツは。。。
954 :
952 :2009/06/06(土) 17:56:11
すみません
>>952 >とんでもないロス
は言い過ぎました。
ある程度のロスがあるので、気持ち的にちゃんとした処理が簡単に出来るならしておきたい
に訂正しまふ
>>952 あのさあ・・・・。
連結作業があって、それをそのままドンと出すのと、
配列チマチマ作る作業が先にあって、それからjoinするのとじゃ手間が全然違うでしょ。
それでも通常と配列にはほとんど差がでてないという。
逐次データが出てくるような場合は '.'、元々配列ならjoinの方が早いっていうのは
当たり前のような気がするが。
ためしに配列作ってそれを '.'で繋ぐってテストスクリプト作ってみ。
あとこういうのはクラス化するとどこでロスが出るか分からないから
>>950 みたいに
裸でスクリプト書くのが普通。
そもそも君が知りたいのはjoinのコストと'.'のコストでしょ?全然テストになってない。
テストスクリプト作り直し。
質問 リモートホストをサニタイズ無しで 表示するのって危険?
大事なのは、リモートホストの直接菜表示が危険かどうかではなく、 それが何故危険かどうかわからないことだ
>>955 お願いします、PHP以外のCやC#とかをいじってから言って下さい
C#には文字列連結用のクラスまでデフォルトで用意されてるんですが…
>>958 他の何言語を持ち出してきても結論は変わらないでしょ?
それと
>>955 がCやC#をいじったことがない前提で話を
しているのはなぜ? w
>>959 メモリ確保時のロス、リスト構造、ポインタ、PHPのメモリコピーのタイミングなどの話が全く出てこないので、他言語の事を上げさせていただきました
正直、ここまで話にならないとは思いませんでした
>>960 話にならないのはお前のテストコードだろ。
俺は元々C書きだ。
お前が本当にC書きなら、メモリ確保やポインタがどうなってるか知りたい場合ソースコード
読むのが普通だろ。何やってんの?
> メモリ確保時のロス、リスト構造、ポインタ、PHPのメモリコピーのタイミングなどの話
PHPのテストコードレベルでそんな話出てくるわけ無いだろ。
>>962 おい・・・・・このテストスクリプトって無駄なjoinを繰り返してないか・・・?
他人にお話にならないとか抜かすのは100年早いと思うぞ。
でだ。単純に、
> for ($ii=0; $ii<$cnt; $ii++) {
> > $sb1 .= $str;
> }
と、
> $sb2 ='';
> $sb2 = join('', $test_array);
とを比較してみたら、これでもやっぱり配列の方が遅かったな($test_arrayは用意してある)。
何か問題を感じたらこういう根本的なとこから追っておくのが普通だろ。
まてまて、これは公平な試験じゃないな。片側だけ配列にアクセスしてる。 > for ($ii=0; $ii<$cnt; $ii++) { > > $sb1 .= $test_array[$cnt]; > } と、 > $sb2 =''; > $sb2 = join('', $test_array); だとjoinの方が早い。 結論: ・'.' と joinはjoinの方が早い。 ・配列を使った連結と使わない連結は、使わない連結の方が早い(当たり前だわな)
965 :
962 :2009/06/07(日) 00:05:10
配列を使わない方が速いに決まってるってのが分からんのですが 実際にどんな処理をしてるのかは知りませんが、 join時に配列の各要素を回ってメモリサイズを計算 ↓ メモリ確保 ↓ 結合 の方が 一回一回メモリを確保で結合していくよりも速くないですか? まあ勘違いしてるかもしれんので、今度時間のある時にでもCで確認してみます
966 :
965 :2009/06/07(日) 00:11:08
一応
>>965 で言ってる配列は、ポインタを格納した配列です。
PHPは値を書き換える時点でメモリをコピーするらしいので、
多分ポインタで持ってるのではないかなと
この時点で間違ってるんかな…
967 :
966 :2009/06/07(日) 00:57:22
ああああ変なこと言ってる
>>966 は無視してくださいスレ汚しすみません
まぁぶっちゃけると、そんなこと気にしてる暇があったらコード書け、と。 今の時代、早いコードより見やすいコードのほうが重要
ここで遅い、早い言っている人はそれがクリティカルなプログラムをphpで作っているんだw
>>965 > 配列を使わない方が速いに決まってるってのが分からんのですが
配列をシークするコストがなくなるからな。文法無視して例を書くと、
foreach(1..100 as $loop){ $a .= 'abc' }
foreach(1..100 as $loop){ $a .= $b[$loop] }
どっちが早いか明白だろ?
> 一回一回メモリを確保で結合していくよりも速くないですか?
仮にPHPがそう設計されてるとして、結合だけに関してはな。
ただ、君のテストコードだとjoinは配列使ってて'.'は配列使ってないので
、配列のコストがjoinには掛かる。だから、「君のテストコード」
の場合ではjoinの方が早いとは限らない。
>>966 だ・か・ら、
ソース嫁、と。
>>968 そうでない場面もあるよ。まあPHPでは少ないけど。
>>970 > ただ、君のテストコードだとjoinは配列使ってて'.'は配列使ってないので
.で逐次連結するか、すべて一時配列に格納して最後にjoinするか、
そういう前提でどっちが効率的なのか、って質問だろうに。
勝手なテスト書いてクソの役にもたたない結論出されてもね。
言われてるのは、何のためにそこまでテストしたいんだってのがぶれ過ぎてるってことじゃないの?
例えば
>>962 のコードでは
$var2[] ='a';
ってことをやって計測してるけど、本当にこれが最善の配列の作り方なのかとか、
例えば連結する文字列が固定なのであれば
join('', array('a', 'a', 'a', 'a'))
なんて書き方も可能なのでそっちとの比較もしてみるとか、
考慮に入れてもいいような事がいろいろあるはず。
その辺が甘々なのに、ちっちゃなパフォーマンスにこだわるのが違和感バリバリ。
というか、joinよりimplodeの方が速度出るんじゃなかったっけ? その辺から地道に頑張れ
joinはimplodeのaliasだぞ。
あら。ほんとだ。 差が出るのはsplitとexplodeか。(正規表現の解釈で?) うん。おれが地道に頑張る
_Y_ r'。∧。y. ゝ∨ノ PHP厨が配列の ,,,ィf...,,,__ )~~( 連結の議論をしてる間に _,,.∠/゙`'''t-nヾ ̄"'''=ー-.....,,, ,i i, ,z'"  ̄ ̄ /n゙゙''''ー--... ,i> <i 文明はどんどん発達し r”^ヽ く:::::|::|:::〔〕〔〕 i> <i. ていく・・・・・・。 入_,..ノ ℃  ̄U ̄_二ニ= `=.,,ー- ...,,,__ |,r'''"7ヽ、| __,,,... -ー,,.=' >ーz-,,,...--,‐,‐;;:'''""~ ~''':x.,, ~"|{ G ゝG }|"~ ,,z:''" ___ ~"'=| ゝ、.3 _ノ |=''"~ <ー<> / l ̄ ̄\ .|)) ((| / ̄ ゙̄i;:、 「 ̄ ̄ ̄ ̄| ̄| ̄ ̄ ̄\ ))| r'´ ̄「中] ̄`ヾv、 `-◎──────◎一' ├―┤=├―┤ |li:, |「 ̄ |i ̄i|「.//||「ln|:; ||//__|L_」||__.||l」u|:; |ニ⊃| |⊂ニ| || ,|/ |_. └ー┘ ._| ||/ ヘ 「 ̄ ̄ ̄| /
相変わらずそのAAは発達しないんだな
テストコードを書いた者ですが、 もともとはC#で言う「StringBuilder」を作りたかったのであのようなコードになりました 書き方が悪かったですね まあ多分色々勘違いしてると思うので大人しくソース眺めてみます
>>960 > 正直、ここまで話にならないとは思いませんでした
この流れ、どう読んでもお話にならないのは自分の方だから、
社会に出て身の程を知った方がいいよ。
PHPのスレだなあ
とりあえず、
>>979 のしたかった話と、大方のレスのレベル(階層)がずれてるのは確かだろ。
文字列連結の、PHPの実装上最も速い方法は 「.」 での連結なのか?っていう疑問。
んで、ただ単にCの階層で具体的な話をする(できる)奴がいなかったってだけじゃないか
# 本人が挙げたテストコードが、その階層以前の問題だったってことも大きいんだろうけど
>>960 の煽りはいただけないが、
>>980 の煽り返しは明らかにレベル(次元)が低い、と思う。
ちなみに俺はPHPのソースコードはダウンロードしたことはあるが読んだことない。
需要があるみたいなので、そろそろ次スレ頼む
>>981 >ただ単にCの階層で具体的な話をする(できる)奴がいなかった
>ってだけじゃないか
>>961 が指摘してることを理解してから出直しな
>>945 2/1は日曜なんだから次の日曜は8日で当たり前じゃないのか?
985 :
945 :2009/06/08(月) 21:33:48
願わくは984にもう少しスレを遡る勇気あらんことを。
何だよ性格ひねくれてんな
>>984 2/1の次の日曜は8日なんだが、'next sunday'は1日になったり8日に
なったりするからやっぱりPHPはこういうトコ困ったちゃんだな〜って流れだよ。
そういう時は "+1 day" してから訊ねるといい。
989 :
デフォルトの名無しさん :2009/06/09(火) 14:03:16
php4とか旧世代の遺物を使ってんのが悪いんだろ
>>989 客のサーバにPHP4しか入ってない(んで触れない)こととか普通にあるからなぁ。
うちでもメインのサーバーはPHP4だよw 今度PHP5の新サーバーを立てたけど、まだまだPHP4には頑張ってもらわないとw
PHP5に入れ替えても完全に動くって補償があるならいいけど 今とりあえず動いてるなら4使い続けちゃうよね
サーバーで動かしてるサービスが複数あるから PHP4からPHP5に移行するメリットが特に無い。 PHP5でかかにゃならん仕事はPHP5が入った別のサーバーで書く。
994 :
デフォルトの名無しさん :2009/06/10(水) 09:17:20
>>992 商用の鳥のパッケージ使うならいいけど、srcのほうはupdateとまってるでしょ?
とういうのが気になる
5.2->5.3のギャップもすごそうだね
995 :
デフォルトの名無しさん :2009/06/10(水) 23:34:35
仕事では4ばっかりで、5はまずない うちの会社はそんな感じ 正規表現苦手なのにXMLをちょこっと使う必要があるから、そのあたりの関数作ったりして、少し憂鬱になる サポートとっくに切れてるんだから新しくしてよと
今回、実験してみたんだけど、 その国が15:00前後になるように リンクを投入すると、一番クリック数が 多くなるみたいね。
わかんないことがあったんで、 アメリカの掲示板に英語で質問したら すぐに解決した。2ちゃんねるはもういらない。
>>997 2chじゃなくてMLとかだろjk・・・。
糞スレ終了 php板に帰れよ
?>
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。