PHP@プログラム板

このエントリーをはてなブックマークに追加
717デフォルトの名無しさん
<?php
foreach (range('a', 'z') as $letter) {
print $letter;
print "<br>";
}
?>

こういうことができるのが、PHPのすごいところ。

おなじことをperlでやったら、正規表現を駆使した
渾身の一作で、何十行
書かないといけないことやら。
718デフォルトの名無しさん:2009/05/24(日) 08:01:33
<?php
$a = uniqid();
print $a;
?>


これ、試してみたら、全然ユニークじゃないんだけど、
どういうこと?

生成されるIDの左側が常に一緒なんだけど??
719デフォルトの名無しさん:2009/05/24(日) 08:08:55
一文字でも違えばユニークだと思うが
ランダムと勘違いしてないか?
720デフォルトの名無しさん:2009/05/24(日) 08:13:06
>>718
http://www.phppro.jp/phpmanual/php/function.uniqid.html

<?php
// 接頭辞なし
// PHP 5 以降でのみ動作します
$token = md5(uniqid());

// よりよい、推測しにくい方法
$better_token = md5(uniqid(rand(), true));
?>
721デフォルトの名無しさん:2009/05/24(日) 08:17:47
PEARって別にincludeとかしないでも、
ソースの中にベタ書きしてもいいのか?
722デフォルトの名無しさん:2009/05/24(日) 08:21:15
他人に配布しないならいいんじゃね
723デフォルトの名無しさん:2009/05/24(日) 08:43:56
>>717
何がすごいのかわからんけど。

('a'..'z').each{|x|puts x}
724デフォルトの名無しさん:2009/05/24(日) 08:48:57
>>723
だからさ。
そういう書き方すると、
なにをやっているのか、意味が
まったくわからないわけじゃん。
725デフォルトの名無しさん:2009/05/24(日) 08:49:35
>>717程度の話ならどの言語で書いても数行じゃないか
数十行になるのはアセンブラくらだよ
726デフォルトの名無しさん:2009/05/24(日) 08:52:10
まぁ、ある程度簡単で読みやすく書けるところはいいと思うね

でもコメントは書こうよ・・・
727デフォルトの名無しさん:2009/05/24(日) 08:53:22
>>724
それは単に言語を読めて無いだけ
728デフォルトの名無しさん:2009/05/24(日) 08:54:12
>>724
普通に解るだろ別に
それはその言語を知らないから読めないだけじゃないか
729デフォルトの名無しさん:2009/05/24(日) 08:55:23
単にa〜zまでを出力するのに可読性を低くしたり数十行使ったり方がむしろ難しいと思うの
730名無し募集中。。。:2009/05/24(日) 08:56:08
だからDANあたりにPHP使いはアホとか言われるんだよまったく
731デフォルトの名無しさん:2009/05/24(日) 09:26:46
>>724
「PHPのすごいところ」って、そういう意味かw
まあ、>>717はわかりやすいからいいんじゃない?
別にすごいとは思わんけど…w
732デフォルトの名無しさん:2009/05/24(日) 10:19:01
>>717
perlではこう書けます。
foreach my $letter ('a' .. 'z') {
    print "$letter<br />";
}
同じくらい読み易いでしょ?
733デフォルトの名無しさん:2009/05/24(日) 10:22:55
むしろ正規表現を使うほうが難しいw
734デフォルトの名無しさん:2009/05/24(日) 11:39:26
>>717
>>723 はRubyの例だけど読みやすいように書いてみるか

('a'..'z').each do |x|
 puts x + "<br />"
end

これって、すごいのだろうか?w
735デフォルトの名無しさん:2009/05/24(日) 13:17:46
PHP しか知らないんだから PHP がすごいのも仕方ないw
736デフォルトの名無しさん:2009/05/24(日) 13:19:54
コージーお兄さん、サ
737デフォルトの名無しさん:2009/05/24(日) 13:21:50
誤爆失礼
738デフォルトの名無しさん:2009/05/24(日) 13:43:40
Perlだったら
print foreach a .. z, "<br>";
こんだけ。
739デフォルトの名無しさん:2009/05/24(日) 13:57:58
それいいな。
740デフォルトの名無しさん:2009/05/24(日) 14:15:33
>>738
ダウト。仕様を満たしていない。
741デフォルトの名無しさん:2009/05/24(日) 14:33:52
>>717
>おなじことをperlでやったら、正規表現を駆使した
>渾身の一作で、何十行
>書かないといけないことやら。

強引に正規表現を使ってやったぞ

(my $str = join('', 'a'..'z')) =~ s/(\w)/$1<br>/g;
print $str;
742デフォルトの名無しさん:2009/05/24(日) 15:29:15
>>717
Perlでやるとこう?
print join '', ('a'..'z'), '<br>';

または
print ('a'..'z');
print '<br>';

読みにくいかなぁ
743デフォルトの名無しさん:2009/05/24(日) 15:33:20
>>742
元のphpのコードでは、
一文字ずつ、後ろに"<br>"を付けるようになってるんだが…
744デフォルトの名無しさん:2009/05/24(日) 15:59:05
>>> 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 />'
745デフォルトの名無しさん:2009/05/24(日) 16:10:23
717は必ずレスがもらえるコピペ
746デフォルトの名無しさん:2009/05/24(日) 16:10:28
>>744
[Ruby]
for o in ('a'..'z')
 print o + "<br/>"
end
747デフォルトの名無しさん:2009/05/24(日) 16:17:02
>>746
素直にそう書けばいいのに、 Rubist ってやたら .each {|x| ... } を使いたがるよね。読みにくい。
748デフォルトの名無しさん:2009/05/24(日) 16:25:08
>>743
しまった><

じゃあこう
# aからzまで後ろに<br>を付けて出力
print map{"$_<br>"}('a'..'z');
749デフォルトの名無しさん:2009/05/24(日) 16:32:27
>>747
eachもmapもselectもsortもFile.openも似たような構文で書けるから。
なんでeachだけforみたいな別記法使わなきゃならんのという感じ。
rubyの世界の殻の中ではちゃんと統一はとれている。

rubyの外からだと独特で読みにくいのは認めるけど、こればかりは
「使ってみないと分からない」の世界じゃないのかなぁ。
750デフォルトの名無しさん:2009/05/24(日) 16:32:58
>>747
Ruby使いの人は、for使わない症候群なんですよ。普通は>>746みたいに書かない
751デフォルトの名無しさん:2009/05/24(日) 16:34:27
>>747
一言で言うと、「ダサイ」んだよ。Rubyで for 使うと。
他の言語で言うと、foreachを使うべきところで for使う感じ。
752デフォルトの名無しさん:2009/05/24(日) 16:48:38
>>751
Perlの場合、foreachと書くところでforと書いた方がスマートな場合を
Larry Wall自身が自著で幾つか例を挙げている。
753デフォルトの名無しさん:2009/05/24(日) 17:15:14
だからどうした、としか
754デフォルトの名無しさん:2009/05/24(日) 17:22:40
>>747
だって、for が each の構文糖なんだもん
755デフォルトの名無しさん:2009/05/24(日) 17:23:12
print "$_<br>" foreach 'a'..'z';
756デフォルトの名無しさん:2009/05/24(日) 19:14:36
携帯で画像をランダム表示したいのですが
どのようなスクリプトが使えるのでしょうか?
757デフォルトの名無しさん:2009/05/24(日) 19:24:22
<img src="<?php rand(1,10); >.jpg">
で1.jpg〜10.jpg用意しろ
758デフォルトの名無しさん:2009/05/24(日) 19:27:27
これはスクリプトではないので他の方お願いします
759デフォルトの名無しさん:2009/05/24(日) 19:35:42
javascriptでいいんじゃない
760デフォルトの名無しさん:2009/05/24(日) 19:44:37
>>757で何が足りないのか言ってくれないと次が出せない
761デフォルトの名無しさん:2009/05/24(日) 19:46:13
PHPのタグの閉じに?が抜けてるから
そのままコピペして動かなかっただけじゃないのかw
762デフォルトの名無しさん:2009/05/24(日) 19:46:44
この質問かつてないくらい様々なスレにマルチされてるな
763デフォルトの名無しさん:2009/05/24(日) 19:46:49
>>760
遅れてすいません
今サーバをもってないのですが
無料PHPサーバでおすすめあげてもらえませんか?
764デフォルトの名無しさん:2009/05/24(日) 19:47:33
>>762
まあ、初心者っぽいからねぇ
765デフォルトの名無しさん:2009/05/24(日) 19:49:48
>>763
Apacheでいいんじゃね?
766デフォルトの名無しさん:2009/05/24(日) 19:50:30
>>765
ありがとうございます!
767デフォルトの名無しさん:2009/05/24(日) 19:52:40
あぁ、後データベース使いたいならfirebirdがいいよ
768デフォルトの名無しさん:2009/05/24(日) 19:53:33
BDはXindiceの方がいいよ
769デフォルトの名無しさん:2009/05/24(日) 20:00:19
ありがとうございます!!

携帯ではJSは使えないようです
770デフォルトの名無しさん:2009/05/24(日) 20:03:30
いや今時のJSは携帯持ってるよ
771デフォルトの名無しさん:2009/05/24(日) 20:37:49
未だにcookieが使えない携帯があります
772デフォルトの名無しさん:2009/05/24(日) 20:53:57
>>757
すげえええ
773デフォルトの名無しさん:2009/05/24(日) 22:08:32
>>745
けどこのスレってPHP初心者大半 + 一部の分かってる人、と
思ってたら、わりと他の言語もたしなんでる人がヲチしてる
みたいなのが分かってちょっと驚いてるw
774デフォルトの名無しさん:2009/05/24(日) 22:34:53
MySQLで、レコードの数を知りたい時はどうかくの?
775デフォルトの名無しさん:2009/05/24(日) 22:58:42
>>774
見積書

内容           数量   単価
DBレコード調査      1   \50,000-
776デフォルトの名無しさん:2009/05/24(日) 23:49:42
>>775
ボロい商売だな
777デフォルトの名無しさん:2009/05/25(月) 00:02:22
あと勉強することっていったら、
e-mal、正規表現、MySQL、画像生成くらいかなぁー
778デフォルトの名無しさん:2009/05/25(月) 00:10:49
あとinclude_pathの意味がわからない
779デフォルトの名無しさん:2009/05/25(月) 00:11:41
なんでotuneの野郎がこんなスレ見てるのかマジで意味がわからない
780デフォルトの名無しさん:2009/05/25(月) 00:17:54
それと、pearとsmartyとcakeかな。
781デフォルトの名無しさん:2009/05/25(月) 00:27:43
>>773
LLバトルロワイヤルスレから人が来てるからな。
わざわざPHPの初心者スレをチェックする Ruby/Perl/Python 使いなんて
ほとんどいないだろ。
782デフォルトの名無しさん:2009/05/25(月) 00:40:20
PHPはスクリプト系の王者なんだから、
他の言語のことなんか気にしてないのにねー
783デフォルトの名無しさん:2009/05/25(月) 01:25:51
723
>('a'..'z').each{|x|puts x}

724
>だからさ。
>そういう書き方すると、
>なにをやっているのか、意味が
>まったくわからないわけじゃん。

まじっすか。
foreach (range('a', 'z') as $x) { echo $x; }
とおなじじゃないのか。
この程度で「意味がまったくわからない」というのなら、プログラム書くのやめたほうがいいよ。
いくらなんでも頭悪すぎる。

784デフォルトの名無しさん:2009/05/25(月) 01:27:55
単にRubyの構文知らなかっただけだろ
785デフォルトの名無しさん:2009/05/25(月) 01:41:02
>>783
アンカーの張り方くらい覚えてから書き込んでくれよ
786デフォルトの名無しさん:2009/05/25(月) 02:46:03
>>783
頭が悪すぎる
787デフォルトの名無しさん:2009/05/25(月) 02:54:04
>>783
しばらくROMったほうがいいよ。
788デフォルトの名無しさん:2009/05/25(月) 02:57:22
789デフォルトの名無しさん:2009/05/25(月) 02:58:03
>>783
はどうせotuneとかだろ
790デフォルトの名無しさん:2009/05/25(月) 07:25:19
ペチパーの低レベルさがまざまざと
791デフォルトの名無しさん:2009/05/25(月) 07:26:56
>>784
やってる奴じゃないと、普通はわかんないだろ・・・・
#そのくらいは想像せいや ってのもありだけど
792デフォルトの名無しさん:2009/05/25(月) 07:38:36
putsってあったらRubyかTCLだろJK
793デフォルトの名無しさん:2009/05/25(月) 07:44:04
>>724
Cしか知らない人がいきなりforeachとか'a' .. 'z' とか見たらそこで凍ると思うぞ。
方言みたいなもんなんだから言語が違ったら読みにくいのは仕方ないだろ。
794デフォルトの名無しさん:2009/05/25(月) 12:09:35
RANDMIZE
DIM
GOTO
GOSUB
RESTORE
READ
PEEK
POKE
IF 〜 THEN 〜 ELSE
FOR 〜 NEXT
モシ 〜 ナラバ イケ 〜
795デフォルトの名無しさん:2009/05/25(月) 12:42:03
tumblrからお越しの皆様は、半年ROMってろ
796デフォルトの名無しさん:2009/05/25(月) 14:55:44
tumblr のやつらってキモイよね〜
誰にも相手されてないくせに
やたら自意識過剰でさ〜

弱小ゴミクズ言語のくせにナマイキなんだよね〜
797デフォルトの名無しさん:2009/05/25(月) 22:50:30
<script>
a="byebye";
<a src="javascript:'window.alert(a);'">aaaa</a>
window.alert(a);
</script>

これをサニタイズするにはどうしたらいい?
798デフォルトの名無しさん:2009/05/25(月) 23:30:05
htmlspecialchars
799デフォルトの名無しさん:2009/05/26(火) 08:46:23
>>796
やめなさいってw
俺は両方見てるんだからさw
800デフォルトの名無しさん:2009/05/26(火) 09:25:22
>>797
高木「サニタイズ言うな」
801デフォルトの名無しさん:2009/05/26(火) 11:29:58
>>797
意図がわからない
scriptタグの中にHTMLを書くってのは何か意味があるの?
何のために「サニタイズ」したいのかもわからない
802デフォルトの名無しさん:2009/05/29(金) 03:32:32
http://oshiete1.goo.ne.jp/qa2543364.html

ここに、

>extract($_POST);
>とか、
>extract($_GET);
>とすれば、$_POST[aaa] は $aaa へ展開され、そのまま変数に入ります

って書いてあるんだけど、こんなやり方あるの?
803デフォルトの名無しさん:2009/05/29(金) 03:34:32
グーグルで検索したら、extractは危険だから使うな、って
書いてあるのだが、どうなのだ?
804デフォルトの名無しさん:2009/05/29(金) 07:29:55
>>803
危険な理由を考えてみ。宿題。

昔のPHPはクエリのaaaは自動的に$aaaに展開されていた。
危険すぐるので今はoptional、非推奨になっている。
805デフォルトの名無しさん:2009/05/29(金) 07:33:42
普通に考えて、野良クエリーがグローバル変数を侵食するとか怖くてつかえんだろw
806デフォルトの名無しさん:2009/05/29(金) 08:22:54
GETで送ったaaaが普通に$aaaに入るはんて怖すぎるw
でも初期につくったPHPプログラムを見ると、普通にif ($aaa == とか使ってて
え、なにそれこわい
807デフォルトの名無しさん:2009/05/29(金) 13:10:18
>>806
昔はそれしかできなかったんだから、しょうがないでしょ?
機能的にできなかったことで、今の観点から文句をいわれてもねぇーって感じ
808デフォルトの名無しさん:2009/05/29(金) 13:52:25
いや、$HTTP_VARSは使えたでしょ
809デフォルトの名無しさん:2009/05/29(金) 15:56:20
お伺いします。
よくこういうmysql_queryの使用例が出てくるのですが、

mysql_query('SELECT * FROM テーブル WHERE なんとか);

WHEREってどんな役割があって、どう使うものなのかがどうしてもわかりません。
色々とググっては見たのですが、具体的な解説は見付かりませんでした。
どうか教えてください。
810デフォルトの名無しさん:2009/05/29(金) 16:46:36
>>809
板違い。データベース板で聞いてよ。
SQL文については初歩の初歩だから、入門書の1冊くらい読みなさい。
811809:2009/05/29(金) 17:15:27
そうでしたか、ごめんなさい。
でもおかげで「SQL文」で検索したらわかりました。
いままではPHPを使っているんだから、
PHP関連から探すという先入観があり進めなかったようです。
812デフォルトの名無しさん:2009/05/29(金) 17:45:33
>>808
そういう問題じゃない。
この野良クエリが変数に入ることがなぜ脆弱性を引き起こすのか理解してないな。
813デフォルトの名無しさん:2009/05/29(金) 19:17:19
大げさだが、環境変数書き換えるようなもんだからな
814デフォルトの名無しさん:2009/05/29(金) 23:18:50
>>809

WHERE id=1 とか。
815デフォルトの名無しさん:2009/05/29(金) 23:19:35
>>810
お前が板違い。

質問に一切答えない
webprog板のキチガイ自閉症どもから
避難してこのスレができたのだ。
816デフォルトの名無しさん:2009/05/29(金) 23:21:09
>>811
PHPを学ぶときに、
「PHPだけ学べばいいんだ」
って思って最初はじめるんだけど、じきに

PHPプラス、SQLも学ばなくては
いけないんだ、って気づかされる。

つまり、PHPとMySQLのバイリンガルになることを
強要されるってこと。これがキツイ。
817デフォルトの名無しさん:2009/05/29(金) 23:37:33
PHPで自分でテキストいじり倒すよりはるかにSQLのほうが簡単だと思うが
SQLなんてエディタで楽々吐けるんだし
818817:2009/05/29(金) 23:38:43
そういう意味ではPHPとDBはセットなんだと思うよ
今の時代でPHPだけってシステムのほうがほぼ無いんじゃないかな
819デフォルトの名無しさん:2009/05/29(金) 23:40:15
>>815
そういうおまえも、質問には何一つ答えてないワケだが。
820デフォルトの名無しさん:2009/05/30(土) 00:05:13
SQL補完できるエディタとかってあるの?
821デフォルトの名無しさん:2009/05/30(土) 00:25:29
>>820
会社ではAccess、自宅ではPHPmyAdmin使ってる

Winアプリでフリーだとこのあたりが有名かな

黒猫 SQL Studio
http://kuronekosoft.ewinds.net/sqlstudio.aspx

A5:SQL Mk-2
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/

ODBCで準備しないといけないが、マニュアル見ればすぐ出来ると思う
あと、PostgreSQLならWinでインストールするとSQLエディタも付いてる
822デフォルトの名無しさん:2009/05/30(土) 00:43:30
PHP+Postgreは少数派か・・・

んー、スーパーグローバルの値を、SQL文にそのまま使うのは怖いね。
限定された空間で作るなら適当にやるけど、公開サーバーだと・・。

とりあえずは、SQL Escapeは必須だし、$_POSTで受け取った変数の中身
くらいはチェックに掛けるな
823デフォルトの名無しさん:2009/05/30(土) 00:57:24
結局、このスレには
> WHEREってどんな役割があって、どう使うものなのか
という問いに答えられるヤツは一人もいないのか。
824デフォルトの名無しさん:2009/05/30(土) 00:59:22
>>823
うん、答える人はいないよ
825デフォルトの名無しさん:2009/05/30(土) 00:59:41
そんなの調べれば出てくるからな
826デフォルトの名無しさん:2009/05/30(土) 01:26:10
>>823
だいたい「どんな役割があって、どう使うものか」を聞きたい人って
学校や会社の宿題が終わらなくて2chで済まそうっていう屑ぐらい
じゃん。そんな屑にいちいち答え教えてたらキリがない
827デフォルトの名無しさん:2009/05/30(土) 04:46:24
PHPスクリプトがサーバーで動くとき、
アパッチ権限で動く場合と、
自分の権限(自分のアカウントがもしyamadaならyamada)で動く場合と、
この2つだけ?

もっと他にもあるの?
828デフォルトの名無しさん:2009/05/30(土) 04:49:10
「サーバー権限」
「ユーザー権限」

この2つ?
829デフォルトの名無しさん:2009/05/30(土) 06:02:00
>>816
PHPっつーかweb開発やってるとPHP、SQL、DB、HTML、CSS、JavaScript(AJAX)、Flash(ActionScript,Flex)、
サーバー構築の知識、サーバーメンテの知識、一通り必要だぞ。
別にPHP関係なくて、Ruby や Railsだって今時そうだし。
それで、キツイ言ってたら、プログラマーやってけないと思うけど。
830デフォルトの名無しさん:2009/05/30(土) 07:04:33
つか簡単でしょそれら
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 指定する場合もあるけど
832デフォルトの名無しさん:2009/05/30(土) 08:16:40
>>830
簡単なことしかやってなかったらいいんですけどねえ・・・
833デフォルトの名無しさん:2009/05/30(土) 09:13:26
「つか」って何ですか?
834デフォルトの名無しさん:2009/05/30(土) 11:19:55
>>827
> Apacheからたたく場合はApacheのuser(and group -> httpd.conf) だっしょ?
suEXECでユーザ権限で動くサーバも多い。
設定次第では、特定の既存ユーザのアカウントで動かすこともできるが、まあこれは
Apacheのuserってことになるのかな。
他のパターンはあるのかなってことだろ?
835デフォルトの名無しさん:2009/05/30(土) 11:21:09
>>834>>831へのレス
836デフォルトの名無しさん:2009/05/30(土) 11:22:01
つーか、どうせこんな質問、レスばかりになるんだから、ム板にPHPを持ってくるのは
やっぱり激しくミスマッチな気がする。
837デフォルトの名無しさん:2009/05/30(土) 11:46:37
>>834
あ そうだ すまん
#自分じゃつかわねーから 忘れてた
838デフォルトの名無しさん:2009/05/30(土) 12:03:27
>>816
>PHPとMySQLのバイリンガルになることを強要される
飯のタネだと思えばつらくもなんともない
839デフォルトの名無しさん:2009/05/30(土) 12:10:13
てか、言語だけ覚えてもただの言語マニアだろ。
どんな言語でも実用的なもの作ろうと思ったら、
システムや外部ツールとの連携を覚えることは必要になる。

PHPでもコマンドラインツールだけ作る用途で使うなら、
SQLなんて知らなくてもいい。
むしろパイプやファイル入出力のほうが有用になる。
840デフォルトの名無しさん:2009/05/30(土) 12:23:38
このスレ、板違いだろ
841デフォルトの名無しさん:2009/05/30(土) 12:36:08
>>839
覚えたばっかりで使ってみたかったんですね。
842デフォルトの名無しさん:2009/05/30(土) 12:43:54
SQLとファイル入出力を両方知った上でどちらを使うか洗濯するのであって
片方しか知らなくていいってことじゃないと思うが
俺は文字を表示したいだけだからechoだけで十分だし
そこまでできてるので俺はPHPできる人ですって話にはならんわけで
843デフォルトの名無しさん:2009/05/30(土) 13:10:13
>>832
そりゃ君の精進が足りないのだよ
844デフォルトの名無しさん:2009/05/30(土) 13:26:56
別に1年目からそれを全て求められるわけじゃないからねぇ
5年やって純粋なPHP以外は解りませんだったらアホだけど
5年やればそのうちの8割くらいは触ることになるはずだから
845デフォルトの名無しさん:2009/05/30(土) 18:24:27
いや、5年もいらないだろ
846デフォルトの名無しさん:2009/05/30(土) 19:11:02
じゃ何年?
847デフォルトの名無しさん:2009/05/30(土) 19:22:28
メールフォーム一筋で食ってきた俺なんか未だにSQLとか書いたこと無いぜ仕事ください
848デフォルトの名無しさん:2009/05/30(土) 19:29:17
触るだけなら1年程度で十分だな。
練りこむのを入れるなら3年強。
849デフォルトの名無しさん:2009/05/30(土) 19:31:24
仕事就いて即バグ取りとメンテ、増築させられたよ
C++やってたから文法覚えるだけで特に苦にならなかった

SQLもいくつか見たら、ノリ判るし
850デフォルトの名無しさん:2009/05/30(土) 19:33:21
ノリでプログラムを理解する奴を俺は信用しない。
851デフォルトの名無しさん:2009/05/30(土) 19:42:03
いや、SQLぐらいプログラムできるなら判るでしょ・・・
852デフォルトの名無しさん:2009/05/30(土) 19:51:55
>>847
それはさすがにもう食い扶持ないと思うぞ……。
つーか今までよく食ってこれたなお前。
853デフォルトの名無しさん:2009/05/30(土) 19:58:56
>>850
この場合、ノリってのはプロジェクトの作法みたいなものを指してるんじゃね
条件の記述パターンとかトランザクションのかけ方とか
854デフォルトの名無しさん:2009/05/30(土) 20:56:06
5年必要って話じゃなくて5年やって駄目ならアホって話だよ
大きなプロジェクトなら1年2年スパンだからずっとコードと保守って事もあるし
それで2年やってサーバ知らないからアホって事にはならんけど
次も同じ仕事を2年3年続けてたらアホだよねって
855デフォルトの名無しさん:2009/05/30(土) 21:36:58
>>853
思うに、誤解の無い表現が出来ない奴は、職業プログラマは駄目だってことじゃね?
856847:2009/05/30(土) 23:16:58
>>852
スピード対応重視だったせいか去年までは何故か食えてたんだけど流石に無理があったw
今はデザイナの嫁さんの稼ぎで食ってる主夫≒ニートでござい。
857デフォルトの名無しさん:2009/05/30(土) 23:33:24
確かにメールフォームの需要がなくなるってことはなさそうだな

食えるかどうかはともかくw
858デフォルトの名無しさん:2009/05/31(日) 00:21:36
>>851
やってることのレベルによると思うけど、それは無理
単純なSQLだけならありだろうけど、そんな奴は迷惑
#と数年前の自分に言いたいw
859デフォルトの名無しさん:2009/05/31(日) 00:25:43
MySQL使いに多いんだけどJOINなしのSQLを何度も投げるのはやめて欲しい
もう3.23の時代じゃないんだぞ
860デフォルトの名無しさん:2009/05/31(日) 00:49:02
>>859
・その方がスクリプト(とDBの構造)がシンプルになる。
・その方が 圧 倒 的 にパフォーマンスがいい場合がある。

なんて理由から、JOINを選択的に排除するのは特に問題だとは思わない。
逆に、とにかくJOINする、っていう考え方が害になることも多いんだよ。
4〜5個JOINを入れ子にしたSQLとか、書いた奴以外が読むのは激しく負担。
また、そこでバグでも出された日には目も当てられない。
861デフォルトの名無しさん:2009/05/31(日) 00:53:35
いやだからその考え方が江戸時代の考え方なんだよったく
862デフォルトの名無しさん:2009/05/31(日) 00:55:05
あまり複雑なJOINだと大量に重複データーが混じるが、それって問ボトルネックになるのかな?
863デフォルトの名無しさん:2009/05/31(日) 01:02:48
それはSQLが間違ってるから混ざるのでは
外部結合なんて混ざりようがないだろ
864デフォルトの名無しさん:2009/05/31(日) 01:05:33
JOINがネックになってればそこはチューニングするんだから、
最初からJOINなしで作るのはおかしい。
よっぽど統計の取り方がクソなRDBMSでも無い限り、JOIN使った方が速い。
JOINは害って言ってる奴は、MySQL4しか使ったこと無いんじゃないか。
865デフォルトの名無しさん:2009/05/31(日) 01:07:35
なんで突然外部結合に話を限定するんだ。
それこそまさに、限定的に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
866デフォルトの名無しさん:2009/05/31(日) 01:10:25
せめて読みやすくしようと勝手にインデントしてみたが、括弧の対応でミスった。
867デフォルトの名無しさん:2009/05/31(日) 01:10:50
それって>>859が書いたんじゃなくてお前が書いたんだろw
言いがかりで正当化しようとするなよ
868デフォルトの名無しさん:2009/05/31(日) 01:12:06
俺も何度か途中参画したプロジェクトでテコ入れしたことあるけど
結合してクエリ投げる回数減らした方がパフォーマンス上がる場合が多かった
869デフォルトの名無しさん:2009/05/31(日) 01:14:43
みんながみんなMySQL使ってるわけじゃないだろ。
接続コストが高いけど性能も高いPostgreSQLやOracle使ってるなら、
JOINした方が全然早い。
単純読み出し命のMySQLくらいじゃないか。都度投げた方が早くなる可能性高いのは。
870デフォルトの名無しさん:2009/05/31(日) 01:19:34
LAMPって知ってる?
ポスグレやOracleはそもそもLAMPの保障外だから
事例としては稀で、実務では通常ありえない組み合わせ
PHPでDBと言えば、特別指定しない限りMySQLのことだから
871デフォルトの名無しさん:2009/05/31(日) 01:26:04
そ、そうだね…
話題変えようか…
872デフォルトの名無しさん:2009/05/31(日) 01:27:12
なんか久々に聞いたなLAMPって単語
873デフォルトの名無しさん:2009/05/31(日) 01:33:55
>>867
>>865のことか?
俺が書いたんではなく、読まされたんだよ。ボトルネックっぽいからと。
結論から言うと、そのデータを取得するためには、90%は無駄な処理。
それを確認するのにどんだけソースとテーブルの関連を調べたか。

最初から、シンプルに3つ位のクエリを出して処理して十分追いつく内容だったし、
マトリックスを作るにしても、もぶっちゃけこのSQLよりPHPで作った方が早かった。
大事なのは、それを突き止めることも困難なスパゲッティSQLを自己満足で書くんじゃないと。

チューニングの結果として複雑になるならまだしも、最初から複雑に書く奴は馬鹿じゃないか?


>>870
さすがに恥ずかしい切り口じゃね?それは。
PostgreSQLも、8.x系統からはまたライトユーザの視野に入るようになってきてる印象。
それまでは、結構昔からDB使ってる人や会社で好まれるもの、っていうイメージがあったが。
874デフォルトの名無しさん:2009/05/31(日) 01:39:12
それはそのSQL書いた奴が馬鹿なだけで、
JOINと言う仕組みが悪いわけじゃないような気が。
875デフォルトの名無しさん:2009/05/31(日) 01:45:20
PostgreSQLもWindows版つくったりと、ユーザー広げようとしてるしね

Joinより、ビューをDB側で用意したほうが圧倒的に早くなるよ
876デフォルトの名無しさん:2009/05/31(日) 01:48:52
なんだ、LEFT JOIN のことか
877デフォルトの名無しさん:2009/05/31(日) 01:57:36
なんだか勇気をもらえるスレだなココ
878デフォルトの名無しさん:2009/05/31(日) 02:03:35
>Joinより、ビューをDB側で用意したほうが圧倒的に早くなるよ

それはない
879デフォルトの名無しさん:2009/05/31(日) 02:26:00
viewったって中身は結合だから、たまたま速ければそれでいいんだけど
遅かった場合に直しようがないから結局最初からSQLで結合した方が楽だよ
880デフォルトの名無しさん:2009/05/31(日) 08:02:33
>>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
それは単なる言葉の定義。
そういう構成で使われることが多かった だけやん
誰が何の保障をしてくれるわけ?
882デフォルトの名無しさん:2009/05/31(日) 09:36:19
>>870
いやあの、LAMPって保障とかそういう言葉じゃないから。

既にあったDBがポスグレとかOracleとかあるからしねえ。
昔はポスグレの方が性能高かったから(今は知らん)か、ポスグレ指定されることもあるしねえ。
金あるとこはしょーもないシステムにOracle突っ込もうとするし。
883デフォルトの名無しさん:2009/05/31(日) 14:17:24
>>879
Oracleの待てビュー早くね?
#Ora使いじゃないからわかんないんだけど
884デフォルトの名無しさん:2009/06/01(月) 05:15:49
メールヘッダインジェクションとか
まじで勉強しないとダメなの?
885デフォルトの名無しさん:2009/06/01(月) 05:46:14
パスの相対指定のやり方とかってどうやるの?

外部から見られたら困る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

これでいいの?

だとしたら、相対パスの書き方はどうなるの?
886デフォルトの名無しさん:2009/06/01(月) 06:04:18
require_once('../../private_html/2.txt');

これでできた。
でも、ドキュメントルートを指定して書く
やり方あったよね。それ教えてよ。

[DOCUMENT_ROOT]

こんなかんじのあったでしょ。
887デフォルトの名無しさん:2009/06/01(月) 06:48:49
またお前か
888デフォルトの名無しさん:2009/06/01(月) 07:07:41
>最低限、CR、LFだけはチェックし、含まれる場合
>はセキュリティ上のエラーとして処理(攻撃が行わ
>れたとアラートを発生させる等)しなければなりま
>せん。


こんなこと書いてあるんだけど、
本当にこんなことしないといけないの?
889デフォルトの名無しさん:2009/06/01(月) 07:08:23
ここはプログラム板
C++やJavaの偉い人がきますよ
890デフォルトの名無しさん:2009/06/01(月) 07:33:50
>>888
SQLの場合、実装に穴があると「;」の後ろにLF入れられたら面倒なことになる場合があるけど、
それは穴の方が問題であってLFが問題じゃないよね。
他にCRLFが問題になる場面って思いつかないな。SQLの場合だけ気をつけてればいいかと。
891デフォルトの名無しさん:2009/06/01(月) 07:47:13
>>890
SQLの話じゃないよ。メールヘッダインジェクションの話だよ。
892デフォルトの名無しさん:2009/06/01(月) 09:49:44
>>891
ああ、なるほど。
893デフォルトの名無しさん:2009/06/01(月) 14:45:11
誰がアナルやねん!
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は正常に動いてるようなのですが。。

もうなにがなんだか…すいません
897デフォルトの名無しさん:2009/06/01(月) 21:53:29
xamppで失敗できる人がいるとは思わなかったw
単に使い方わかってないだけでインストールは一通り出来てんじゃないの?
何をもって「できない」と思ってるのか書いてくれないからわからんけどさ。
898896:2009/06/01(月) 22:33:17
なんとかでき?ました!笑
メモ帳で書いてたので拡張子がphpのつもりがtxtになってるのが原因でした。。

ありがとうございました!!

ちなみに、こんな一括インストールがあるのに、これが主流でないのはなぜでしょう?
これには何か欠点があるのでしょうか?
899デフォルトの名無しさん:2009/06/01(月) 22:36:48
・Windowsでは連続動作・セキュリティ的に脆弱
・一括インストールだと後のバージョン更新、ライブラリ追加ができない
・バージョンやライブラリ当の違う、複数の環境に対応したテストがしづらい
900デフォルトの名無しさん:2009/06/01(月) 22:43:06
>>898
秀丸使ったほうがいいと思うよ(メモ帳以外のエディタなら何でも)

>何か欠点
使いたいバージョンを手でインストしても、慣れればそう手間ではない
おまけがいっぱい入りそうなのが嫌
Linux鯖がメインでphp以外はディストリのパッケージを使うから
#Win版はzipを解凍
Postgresの方がメインだから
単なる趣味だから
901デフォルトの名無しさん:2009/06/01(月) 22:44:25
まぁ、せっかくだからPHPエディタのスタンドアロン版とかお勧めする
簡易デバッグも出来るし(設定できればの話だが)
902デフォルトの名無しさん:2009/06/01(月) 22:45:36
>>898
お手軽開発用としては割と主流だけどね。
本番用には>>899の理由含めて色々問題があるから使い辛いけど。
903896:2009/06/01(月) 23:30:20
そうなんですか。。。
僕は学校の課題を家でも出来るようにしたいだけだったので、たぶんこれで大丈夫です!
もしハマっていったらまた個別で使いやすいようにインストールしていきます。
ちなみにエディタはGreenPadを使うようにしました。一番簡単なようだったので。。。

いろいろありがとうございました!!
904デフォルトの名無しさん:2009/06/02(火) 01:11:20
>>885
まず http://www.php.net/manual/ja/ これをブックマークしといて。
それから
search for 欄にDOCUMENT_ROOT
を入力してからその右側のプルダウンからonline documentationを
選択してそのさらに右にある矢印をクリック。
気持ち悪いピンクの囲みに何か書いてあるだろう?
905デフォルトの名無しさん:2009/06/02(火) 12:34:17
xampp使うと成長しないからね
906デフォルトの名無しさん:2009/06/02(火) 14:35:27
$arr = (4,7,8,9)
上記配列で、
残りの1~9(今回の場合は1,2,3,5,6)までの値を配列に格納
する方法を教えてください。
907デフォルトの名無しさん:2009/06/02(火) 20:18:19
普通に1から10まで回して、$arrに存在してなかったら追加でいいんではない?
908デフォルトの名無しさん:2009/06/02(火) 20:44:02
$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)
}
なのはなぜですか?
909デフォルトの名無しさん:2009/06/02(火) 21:19:26
トーナメント表などのお勧めな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
912デフォルトの名無しさん:2009/06/03(水) 01:22:39
>>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
913デフォルトの名無しさん:2009/06/03(水) 05:37:18
>>898
主流じゃないと思うが、検索する限りではWindowsではよく使われているようですよ。> XAMPP
914デフォルトの名無しさん:2009/06/03(水) 07:51:52
>>894
xamppにしたほうがいいよ。
915デフォルトの名無しさん:2009/06/03(水) 09:25:13
>>910
rangeという関数あるんですね。
ありがとうございます。
いろいろと活用できそうです。
916デフォルトの名無しさん:2009/06/04(木) 00:57:35
>>906>>908 もなんか質問がおかしいなぁ
>>910 の回答もきっと勘違いだし
頭悪そうなやつばっかだな
917デフォルトの名無しさん:2009/06/04(木) 01:01:23
いやだから文句言うなら回答例を
918デフォルトの名無しさん:2009/06/04(木) 01:24:03
>>917
おまえもばかだなあ。回答例なんてもう必要ないんだよ。
>>906 の質問の正解は >>908 で出てるだろ。>>906 = >>908 かもしれんが。
>>908 が意味不明な質問してるがきっと何か勘違いしてるんだろう。
>>910 は微妙な回答をしているが、これは >>906 の質問が悪いからだな。
919デフォルトの名無しさん:2009/06/04(木) 01:49:21
プログラムって、はじめてやるような例の場合、
精神的な負担やストレスがはんぱないよね。

ストレス度250%って感じ。

同じこと何回もやって、
「ああ、また例のあれだな」
って、先の展開が読めれば
なんてことないんだけど、1回目は
本当に脳の血管がぶちきれそうになる。
920デフォルトの名無しさん:2009/06/04(木) 02:00:39
>>919
そこで言うストレスっていうのは、時間内にできるかどうかもわからん!ってもんだろうな。

時間的な制限がよっぽどきっちきちでなければ、初回が一番楽しい。・・・は語弊があるか。
一番モチベーション高いけどな。
二度目は前回の反省を活かしていじる楽しみがある。(でも一番迷走しやすい)

逆に、三回目以降こそ苦痛で仕方がないような気がする。
どうせそのままでは使えなくてあちこちいじる必要があるのに、全体としてやってることは
前と同じっていう、なんとも言えない作業感が辛くなったりする。

また、前にやった処理と若干違う部分がなんとも修正しにくかったりした場合とかも、変に
あるものを活かそうとして逆に足を引っ張られたりしない?
921デフォルトの名無しさん:2009/06/04(木) 02:03:28
>>920
ああ、あなたは理系だね。
私は文系だから、ストレスを感じ取る
局面が正反対なの。
922デフォルトの名無しさん:2009/06/04(木) 06:28:58
unko大学からのアクセスのときだけ、
専用のページに飛ばすのって
どう書けばいい?

unko大学のリモホが、

abc-123.unko.edu

だったとしたとき。

リモホを変数に格納して、
ピリオドで区切って配列に格納して、
右から二つのセクターが、edu、unko、
と一致しているかどうかを==で調べて、
もしtrueなら飛ばす、これでいいの?
923デフォルトの名無しさん:2009/06/04(木) 06:38:15
>>922
別にそれでもいいけど普通htaccessでしょ。
924デフォルトの名無しさん:2009/06/04(木) 06:42:30
それでいいんじゃねーの
925デフォルトの名無しさん:2009/06/04(木) 07:03:41
>>923
ただ飛ばすだけでなくて、ログも取りたかった。
phpで全部制御すればなんでもできるでしょ?
926デフォルトの名無しさん:2009/06/04(木) 07:06:03
>>925
ログはHTTPdのログがあるじゃないか・・・。
まあPHPで済まして悪いことは何もないからそのままでもいいと思うが。
927デフォルトの名無しさん:2009/06/04(木) 07:36:12
無料のレンタルサーバーだから
アパッチのログは見れないんだよ、dude
928デフォルトの名無しさん:2009/06/04(木) 07:56:52
date関数って、どの時間帯が表示されるのかな?

php.iniの設定で決めるの?
929デフォルトの名無しさん:2009/06/04(木) 07:57:35
つまり自分のパソコンで実験してるときはJSTが表示されて、
レンタルサーバーにアップロードしたら、
そのサーバーのタイムゾーンで表示されてしまうのかな?

だとしたら、アタマこんがらがるね。
930デフォルトの名無しさん:2009/06/04(木) 08:06:04
なんでPHPerって、スレを乱立させるんですか?
931デフォルトの名無しさん:2009/06/04(木) 08:10:51
クッキーの受け入れを拒否してると、
セッションクッキーも受け取れなくなるの?
932デフォルトの名無しさん:2009/06/04(木) 08:20:21
ブラウザの開発元に聞いたら?
サーバ側の処理で「クッキーの受け入れ拒否」とかあるの?
933デフォルトの名無しさん:2009/06/04(木) 08:24:33
仮に誰かが血迷って次スレ立てるとしたら、少なくともスレタイを「PHP初心者@〜〜」にしとけ
それか、ここがム板での雑談スレって扱いなら、テンプレに質問スレへのリンクでも貼って置けよ。

クソスレ乱立させんな
934デフォルトの名無しさん:2009/06/04(木) 08:49:17
>>931
当然。URLにセッションIDを埋めるしかなくなる。
それが他人のパソコンに残ったり、そのURLを利用者が知らずにネットに貼ったりして
セッション乗っ取りが行われる。セッションIDにはワンタイムトークンを使うべきと言われたり、
決済やパスワードの変更等重要なタスクが発生する場面では再認証すべきと言われているのは
そのため。

>>932
開発元に何を聞くんだよw
935デフォルトの名無しさん:2009/06/04(木) 08:50:10
>>928
date_default_timezone_set()
936デフォルトの名無しさん:2009/06/04(木) 09:00:53
>>934
あーー。
それで、use.cookie_only=1
とかにしないとダメなんだ?
937デフォルトの名無しさん:2009/06/04(木) 09:19:47
>>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);
西暦と月の情報だけで、その月の朔を含む週の日曜日を求めるコード。
長くて気持ち悪いんだけど、もっと短くならないかな?
939デフォルトの名無しさん:2009/06/04(木) 17:22:44
十分短いと思うがw
940デフォルトの名無しさん:2009/06/04(木) 17:34:03
>>938
$first_sunday = strtotime('next sunday', mktime(0, 0, 0, $month, 1, $year));
941デフォルトの名無しさん:2009/06/04(木) 18:10:33
>>940
お、ありがとう。
この関数のことは知らなかったよ。
942デフォルトの名無しさん:2009/06/04(木) 20:54:58
>>922
下のは正規表現で一発な気がする
943デフォルトの名無しさん:2009/06/04(木) 23:48:20
>>922
Webサーバが逆引きした名前を用意してくれるとは限らないし、
そもそも逆引きの名前がないかもしれない。
944デフォルトの名無しさん:2009/06/05(金) 01:38:43
>>940
$first_sunday = strtotime("next sunday $year-$month-1");
945デフォルトの名無しさん:2009/06/05(金) 22:05:48
>>944
% php -r "var_dump( date( 'Y-m-d' ,strtotime( 'next sunday 2009-2-1' )));"
string(10) "2009-02-08"
946デフォルトの名無しさん:2009/06/06(土) 14:07:50
PHP5で、文字列の連結を高速化する手法はありますか?

配列に格納後joinするのが早いと思っていたのですが、実際に計測してみると「.」で一つずつ連結する方が早い始末…

メモリ確保の観点から「.」で一つずつ連結するより早い方法がある(C#のStringBuilderのような)と思うのですが、どうなんでしょう
947デフォルトの名無しさん:2009/06/06(土) 15:58:12
>>946
'.'を使うのは並び順とかを指定するコストを人間が
負担してるわけだから早いのは当たり前。

例えば以下でどっちが早い?っつったら二番目に決まってるじゃん。
ループ回す分のコストがないわけだから。

foreach(1..5 as $count){
 print $a[$count];
}

print $a[1] . $a[2] . $a[3] . $a[4] . $a[5];
948デフォルトの名無しさん:2009/06/06(土) 16:01:28
>>945
PHP 4.4.3では2009-02-01と出るな・・・・。
まったくPHPってヤツは。
949946:2009/06/06(土) 16:39:34
>>947
一気に連結するのでなく、逐次です
950デフォルトの名無しさん:2009/06/06(土) 16:52:37

foreach($a as $tojoin){
 $a = $joined . $tojoin;
}
よりも
$joined = join('', $a);
の方が遅いってこと?なら研究の余地があると思うが。

joinは内部的に配列を追ってるから、そのコストを人間が
負担するのでは比べる意味がない。
951デフォルトの名無しさん:2009/06/06(土) 17:09:04
ほとんどの場合、その程度の速度差を気にしたところで何の意味もない
952デフォルトの名無しさん:2009/06/06(土) 17:36:18
一応計測結果です
http://hcw.sblo.jp/pages/user/m/article?article_id=29631051&stq=session%3A%3A%3A%3A3a93f213efaaaa7db99f1d7175ada485

「.」で連結する度にその分のメモリを確保しているのか、参照する時に一度にメモリを確保するのか

もし前者だったらとんでもないロスになりますから、もしそうだったら何かjoinに代わる手法はあるのか

その辺りの情報が知りたくて質問させて頂きました
953945:2009/06/06(土) 17:38:33
>948
2009-02-08になったのはPHP5.2.6@FreeBSD。
まったくPHPってヤツは。。。
954952:2009/06/06(土) 17:56:11
すみません

>>952
>とんでもないロス

は言い過ぎました。

ある程度のロスがあるので、気持ち的にちゃんとした処理が簡単に出来るならしておきたい

に訂正しまふ
955デフォルトの名無しさん:2009/06/06(土) 18:14:47
>>952
あのさあ・・・・。
連結作業があって、それをそのままドンと出すのと、
配列チマチマ作る作業が先にあって、それからjoinするのとじゃ手間が全然違うでしょ。
それでも通常と配列にはほとんど差がでてないという。

逐次データが出てくるような場合は '.'、元々配列ならjoinの方が早いっていうのは
当たり前のような気がするが。

ためしに配列作ってそれを '.'で繋ぐってテストスクリプト作ってみ。

あとこういうのはクラス化するとどこでロスが出るか分からないから>>950みたいに
裸でスクリプト書くのが普通。

そもそも君が知りたいのはjoinのコストと'.'のコストでしょ?全然テストになってない。
テストスクリプト作り直し。
956デフォルトの名無しさん:2009/06/06(土) 18:18:21
質問

リモートホストをサニタイズ無しで
表示するのって危険?
957デフォルトの名無しさん:2009/06/06(土) 19:22:34
大事なのは、リモートホストの直接菜表示が危険かどうかではなく、
それが何故危険かどうかわからないことだ
958デフォルトの名無しさん:2009/06/06(土) 20:30:46
>>955
お願いします、PHP以外のCやC#とかをいじってから言って下さい

C#には文字列連結用のクラスまでデフォルトで用意されてるんですが…
959デフォルトの名無しさん:2009/06/06(土) 21:10:21
>>958
他の何言語を持ち出してきても結論は変わらないでしょ?
それと>>955がCやC#をいじったことがない前提で話を
しているのはなぜ? w
960デフォルトの名無しさん:2009/06/06(土) 21:20:24
>>959
メモリ確保時のロス、リスト構造、ポインタ、PHPのメモリコピーのタイミングなどの話が全く出てこないので、他言語の事を上げさせていただきました

正直、ここまで話にならないとは思いませんでした
961デフォルトの名無しさん:2009/06/06(土) 22:44:04
>>960
話にならないのはお前のテストコードだろ。
俺は元々C書きだ。
お前が本当にC書きなら、メモリ確保やポインタがどうなってるか知りたい場合ソースコード
読むのが普通だろ。何やってんの?

> メモリ確保時のロス、リスト構造、ポインタ、PHPのメモリコピーのタイミングなどの話

PHPのテストコードレベルでそんな話出てくるわけ無いだろ。
962デフォルトの名無しさん:2009/06/06(土) 23:14:44
>>961
失礼しました。コードを書き直しましたが、これで良かったですか?

http://hcw.sblo.jp/pages/user/m/article?article_id=29631051&stq=session%3A%3A%3A%3A521c5f1096213206131ec5d0622a3c5e

本当に連結されてるのか分からないので一応str_replaceを入れましたが、
無くても同じような結果でした

てかあのコードのどこが問題だったのか分からんが、配列joinの話なんだからリスト構造とポインタの話ぐらい出るだろ
963デフォルトの名無しさん:2009/06/06(土) 23:41:46
>>962
おい・・・・・このテストスクリプトって無駄なjoinを繰り返してないか・・・?
他人にお話にならないとか抜かすのは100年早いと思うぞ。

でだ。単純に、

> for ($ii=0; $ii<$cnt; $ii++) {
> > $sb1 .= $str;
> }
と、
> $sb2 ='';
> $sb2 = join('', $test_array);
とを比較してみたら、これでもやっぱり配列の方が遅かったな($test_arrayは用意してある)。
何か問題を感じたらこういう根本的なとこから追っておくのが普通だろ。
964デフォルトの名無しさん:2009/06/06(土) 23:45:39
まてまて、これは公平な試験じゃないな。片側だけ配列にアクセスしてる。

> for ($ii=0; $ii<$cnt; $ii++) {
> > $sb1 .= $test_array[$cnt];
> }
と、
> $sb2 ='';
> $sb2 = join('', $test_array);
だとjoinの方が早い。

結論:
・'.' と joinはjoinの方が早い。
・配列を使った連結と使わない連結は、使わない連結の方が早い(当たり前だわな)
965962:2009/06/07(日) 00:05:10
配列を使わない方が速いに決まってるってのが分からんのですが

実際にどんな処理をしてるのかは知りませんが、
join時に配列の各要素を回ってメモリサイズを計算

メモリ確保

結合

の方が
一回一回メモリを確保で結合していくよりも速くないですか?

まあ勘違いしてるかもしれんので、今度時間のある時にでもCで確認してみます
966965:2009/06/07(日) 00:11:08
一応

>>965で言ってる配列は、ポインタを格納した配列です。
PHPは値を書き換える時点でメモリをコピーするらしいので、
多分ポインタで持ってるのではないかなと

この時点で間違ってるんかな…
967966:2009/06/07(日) 00:57:22
ああああ変なこと言ってる

>>966は無視してくださいスレ汚しすみません
968デフォルトの名無しさん:2009/06/07(日) 01:03:05
まぁぶっちゃけると、そんなこと気にしてる暇があったらコード書け、と。
今の時代、早いコードより見やすいコードのほうが重要
969デフォルトの名無しさん:2009/06/07(日) 05:59:02
ここで遅い、早い言っている人はそれがクリティカルなプログラムをphpで作っているんだw
970デフォルトの名無しさん:2009/06/07(日) 06:01:27
>>965
> 配列を使わない方が速いに決まってるってのが分からんのですが

配列をシークするコストがなくなるからな。文法無視して例を書くと、

foreach(1..100 as $loop){ $a .= 'abc' }
foreach(1..100 as $loop){ $a .= $b[$loop] }

どっちが早いか明白だろ?

> 一回一回メモリを確保で結合していくよりも速くないですか?

仮にPHPがそう設計されてるとして、結合だけに関してはな。
ただ、君のテストコードだとjoinは配列使ってて'.'は配列使ってないので
、配列のコストがjoinには掛かる。だから、「君のテストコード」
の場合ではjoinの方が早いとは限らない。

>>966
だ・か・ら、

ソース嫁、と。

>>968
そうでない場面もあるよ。まあPHPでは少ないけど。
971デフォルトの名無しさん:2009/06/07(日) 06:40:08
>>969
誰がそんなこと言ってるんだ?
972デフォルトの名無しさん:2009/06/07(日) 11:47:39
>>970
> ただ、君のテストコードだとjoinは配列使ってて'.'は配列使ってないので

.で逐次連結するか、すべて一時配列に格納して最後にjoinするか、
そういう前提でどっちが効率的なのか、って質問だろうに。

勝手なテスト書いてクソの役にもたたない結論出されてもね。
973デフォルトの名無しさん:2009/06/07(日) 12:00:11
言われてるのは、何のためにそこまでテストしたいんだってのがぶれ過ぎてるってことじゃないの?

例えば>>962のコードでは
$var2[] ='a';
ってことをやって計測してるけど、本当にこれが最善の配列の作り方なのかとか、
例えば連結する文字列が固定なのであれば
join('', array('a', 'a', 'a', 'a'))
なんて書き方も可能なのでそっちとの比較もしてみるとか、
考慮に入れてもいいような事がいろいろあるはず。

その辺が甘々なのに、ちっちゃなパフォーマンスにこだわるのが違和感バリバリ。
974デフォルトの名無しさん:2009/06/07(日) 12:10:59
というか、joinよりimplodeの方が速度出るんじゃなかったっけ?
その辺から地道に頑張れ
975デフォルトの名無しさん:2009/06/07(日) 12:26:12
joinはimplodeのaliasだぞ。
976デフォルトの名無しさん:2009/06/07(日) 12:33:52
あら。ほんとだ。
差が出るのはsplitとexplodeか。(正規表現の解釈で?)

うん。おれが地道に頑張る
977デフォルトの名無しさん:2009/06/07(日) 12:44:21
          _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|:;
                   |ニ⊃|  |⊂ニ| || ,|/
                   |_. └ー┘ ._| ||/
                   ヘ 「 ̄ ̄ ̄| /
978デフォルトの名無しさん:2009/06/07(日) 12:45:32
相変わらずそのAAは発達しないんだな
979デフォルトの名無しさん:2009/06/07(日) 13:02:35
テストコードを書いた者ですが、
もともとはC#で言う「StringBuilder」を作りたかったのであのようなコードになりました
書き方が悪かったですね

まあ多分色々勘違いしてると思うので大人しくソース眺めてみます
980デフォルトの名無しさん:2009/06/07(日) 15:57:01
>>960
> 正直、ここまで話にならないとは思いませんでした

この流れ、どう読んでもお話にならないのは自分の方だから、
社会に出て身の程を知った方がいいよ。
981デフォルトの名無しさん:2009/06/07(日) 16:07:23
PHPのスレだなあ

とりあえず、>>979のしたかった話と、大方のレスのレベル(階層)がずれてるのは確かだろ。
文字列連結の、PHPの実装上最も速い方法は 「.」 での連結なのか?っていう疑問。
んで、ただ単にCの階層で具体的な話をする(できる)奴がいなかったってだけじゃないか
# 本人が挙げたテストコードが、その階層以前の問題だったってことも大きいんだろうけど

>>960の煽りはいただけないが、>>980の煽り返しは明らかにレベル(次元)が低い、と思う。

ちなみに俺はPHPのソースコードはダウンロードしたことはあるが読んだことない。
982デフォルトの名無しさん:2009/06/07(日) 19:30:07
需要があるみたいなので、そろそろ次スレ頼む
983デフォルトの名無しさん:2009/06/07(日) 19:32:09
>>981
>ただ単にCの階層で具体的な話をする(できる)奴がいなかった
>ってだけじゃないか

>>961が指摘してることを理解してから出直しな
984デフォルトの名無しさん:2009/06/08(月) 13:07:04
>>945
2/1は日曜なんだから次の日曜は8日で当たり前じゃないのか?
985945:2009/06/08(月) 21:33:48
願わくは984にもう少しスレを遡る勇気あらんことを。
986デフォルトの名無しさん:2009/06/09(火) 09:00:33
何だよ性格ひねくれてんな
987デフォルトの名無しさん:2009/06/09(火) 12:44:40
>>984
2/1の次の日曜は8日なんだが、'next sunday'は1日になったり8日に
なったりするからやっぱりPHPはこういうトコ困ったちゃんだな〜って流れだよ。
988デフォルトの名無しさん:2009/06/09(火) 13:23:18
そういう時は "+1 day" してから訊ねるといい。
989デフォルトの名無しさん:2009/06/09(火) 14:03:16
php4とか旧世代の遺物を使ってんのが悪いんだろ
990デフォルトの名無しさん:2009/06/09(火) 14:09:42
>>989
客のサーバにPHP4しか入ってない(んで触れない)こととか普通にあるからなぁ。
991デフォルトの名無しさん:2009/06/09(火) 15:44:13
うちでもメインのサーバーはPHP4だよw
今度PHP5の新サーバーを立てたけど、まだまだPHP4には頑張ってもらわないとw
992デフォルトの名無しさん:2009/06/09(火) 21:40:12
PHP5に入れ替えても完全に動くって補償があるならいいけど
今とりあえず動いてるなら4使い続けちゃうよね
993デフォルトの名無しさん:2009/06/10(水) 06:50:20
サーバーで動かしてるサービスが複数あるから
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をちょこっと使う必要があるから、そのあたりの関数作ったりして、少し憂鬱になる

サポートとっくに切れてるんだから新しくしてよと
996デフォルトの名無しさん:2009/06/11(木) 23:31:58
今回、実験してみたんだけど、
その国が15:00前後になるように
リンクを投入すると、一番クリック数が
多くなるみたいね。
997デフォルトの名無しさん:2009/06/12(金) 01:21:44
わかんないことがあったんで、
アメリカの掲示板に英語で質問したら
すぐに解決した。2ちゃんねるはもういらない。
998デフォルトの名無しさん:2009/06/12(金) 05:53:41
>>997
2chじゃなくてMLとかだろjk・・・。
999デフォルトの名無しさん:2009/06/12(金) 13:07:44
糞スレ終了
php板に帰れよ
1000デフォルトの名無しさん:2009/06/12(金) 13:11:20
?>
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。