トップページ⇒php
1001コメント342KB

【PHP】下らねぇ質問はID出して書き込みやがれ 88

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/16(水) 09:39:37ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 87
http://pc11.2ch.net/test/read.cgi/php/1251447028/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0175nobodyさん2009/09/21(月) 12:28:34ID:c8BcA53t
>>174
文字列を渡すのか・・これはひどい
ありがとう
0176nobodyさん2009/09/21(月) 12:30:33ID:???
>>174
>>175
お前らは何を言ってるんだ
http://www.php.net/manual/ja/functions.anonymous.php
0177nobodyさん2009/09/21(月) 12:31:22ID:/inoxiUx
windowsでphp5.3を使いたいのですがスレッドセーフとかいうのが2種類あってどっちを使えばいいですか?
0178nobodyさん2009/09/21(月) 12:35:57ID:???
スレッドセーフにしたい時はスレッドセーフ版
スレッドセーフにしたくない時はノンスレッドセーフ版
0179nobodyさん2009/09/21(月) 12:37:46ID:/inoxiUx
Apache使ってるんですけどスレッドーセーフとスレッドセーフにしないを切り替えるにはどうしたらいいのでしょうか?
あとスレッドセーフにするとどうなるんですか?
0180nobodyさん2009/09/21(月) 12:38:49ID:???
それくらいはぐぐってください
0181nobodyさん2009/09/21(月) 12:38:54ID:c8BcA53t
>>176
javascriptなどで実装されている("(function(){〜})()"のような)スマートな使い方は出来ないかなあと思って質問しました
0182nobodyさん2009/09/21(月) 12:39:38ID:???
リンク先読んだの?
01831692009/09/21(月) 12:43:41ID:???
ご返信ありがとうございます。
>>171
@ではちょっと無理でした。
>>172
スタイルシートは出来る限り使わない方法を探しています。
通常は1秒もかからないんですがなぜかたまにタイムアウトに?
すべて自作ではなくPEARを使った処理なのでその内部をいじれるほどPHPに慣れてないので
なんらかの方法でスキップができればと思います。

0184nobodyさん2009/09/21(月) 12:52:24ID:c8BcA53t
>>182
読みました。

例2 変数への無名関数の代入
$greet = function($name)
{
  printf("Hello %s\r\n", $name);
};
$greet('World');
たとえばこれは変数に関数を代入していますが直接結果を代入したいのです。

このような感じで既存のコードを置き換えたいと思っています

function example(){
  return "aaa";
}
$test = example();//aaaが返り$testにaaaが代入される

↓
$test = (function(){//aaaが返り$testにaaaが代入される
  return "aaa";
})();//関数を()で囲って末尾の()で関数を実行している


ググったら無理なようであきらめます・・PHP6で実装されることを祈りながら
0185nobodyさん2009/09/21(月) 13:11:03ID:???
>>184
PHPは構文解析周りが貧弱なので諦めて下さい

俺も下記とかやりたいわ…
$a = new stdClass():
$a->b = function () {};
$a->b();
0186nobodyさん2009/09/21(月) 13:19:50ID:???
>>185
それはできるんじゃ?
0187nobodyさん2009/09/21(月) 13:40:18ID:rQWWzoEt
【OS名】win32
【PHPのバージョン】php5.3.0
【質問内容】
外部からGETで取得した値が数字でも、is_intで整数値じゃないと言われてしまいます。
外部から取得した値が整数かを調べる方法はありますか?
0188nobodyさん2009/09/21(月) 13:44:34ID:???
>>186
まじっすか!
と思ってPHP6のスナップショットまで確認したけどできないじゃないか
ぬかよろこびさせやがって畜生…
0189nobodyさん2009/09/21(月) 13:47:14ID:???
数値の12+34は46だが、文字の"12"と"34"を足すと"1234"になる。
文字の"1"と数値の1は本来は別物。PHPは必要に応じて自動で変換してくれるからあまり意識しないけどな。
is_intは1を許可し、"1"は許可しない、PHP内では珍しい関数(というか、両者を区別するための関数)

多分最速なのはctype_digit()。ただし、"009"とかが通るし"-10"は通らない。
あとは「整数値」のルール次第。たとえば、負の整数や0はどうするんだ?"009"は?(郵便番号とかなら有効だよな)
0190nobodyさん2009/09/21(月) 14:00:03ID:???
intvalで変換してif使って
0191nobodyさん2009/09/21(月) 14:14:12ID:rQWWzoEt
>>189,190
回答ありがとうございます。
自然数以外を弾きたかったので最初に ctype_digit() で数字以外を弾いて preg_match("/(^0)(\d)/" , "") で009等を弾くことにしました。
0192nobodyさん2009/09/21(月) 15:02:06ID:???
>>191
それだと動かないよ先頭に数字が付けば1が返る(1abcdもOKになる)
先頭に"-"も含めるなら /^-*[^0](\d)+$/
0193nobodyさん2009/09/21(月) 15:03:51ID:???
あーctype_digit()で弾いてるのか
でもctype_digit()の後にpreg_matchするならpreg_matchだけで済ました方がいいんじゃないかな
0194nobodyさん2009/09/21(月) 15:13:16ID:???
[^0]だと0以外何でもありになるから /^-*[1-9]\d+$/ だな
0195nobodyさん2009/09/21(月) 15:18:32ID:???
それ--11も受け付けるし2桁以上ないと受け付けないから /^-?[1-9]\d*$/ だろ
0196nobodyさん2009/09/21(月) 15:50:25ID:???
自然数と言ってるのにマイナス付けてどうする
$はD修飾子なしじゃ改行にもマッチするぞ
01971892009/09/21(月) 17:01:17ID:???
と、ご覧のように、正規表現は分かりづらい上にバグの原因にもなりやすい。
こんな下らん事で悩む時間が惜しい。>190に一票。
01981652009/09/21(月) 17:19:58ID:SD2dtHFE
だれか165お願いします。。。
0199nobodyさん2009/09/21(月) 17:22:27ID:???
ベストなんて無いよ
0200nobodyさん2009/09/21(月) 17:23:46ID:???
>>198
$_SERVERからとってるかなぁ

でも値のチェックはするべき。
0201nobodyさん2009/09/21(月) 17:49:34ID:uPBGfkai

あ
0202nobodyさん2009/09/21(月) 18:02:57ID:???
>>198
2がダメならいちいち書いた方がいいんじゃないか
02031982009/09/21(月) 18:30:02ID:FunJFz74
>>200
ドメインなんかをチェックすることを考えたら、
直書きのがパフォーマンスもいいしセキュリティ的にも安心なんですね。
サイト内検索の場合、どのページでも使うので手書きは避けたいのですが…。

>>202
やっぱりそうですか。
0204nobodyさん2009/09/21(月) 18:35:29ID:???
$_SERVER['PHP_SELF]を使わないで
$_SERVER['SCRIPT_NAME']を使っていれば良いと思う
もちろん値の確認は必要だが。
0205nobodyさん2009/09/21(月) 18:49:16ID:???
>>203
basename(__FILE__);で自分自身のファイル名が取れるよ
0206nobodyさん2009/09/21(月) 20:02:54ID:MAV91RaJ
自サーバのMACアドレスを知るにはどうしたらいいですか?
0207nobodyさん2009/09/21(月) 20:16:04ID:???
>>206
環境は?

ifconfigの結果から取得するとか。
0208nobodyさん2009/09/21(月) 20:17:07ID:???
ifconfig(windowsはipconfig /all)でコマンドから取得しれ
0209nobodyさん2009/09/22(火) 00:18:54ID:cla4TgUg
なんかさっき2ちゃんねらーっぽい4人組みと道ですれ違った
0210nobodyさん2009/09/22(火) 00:58:13ID:???
逝ってよし
オマエモナー

ってな会話でもしてたか?
0211nobodyさん2009/09/22(火) 02:17:23ID:???
鯖移転とか感謝厨とか話してたんじゃね?
0212nobodyさん2009/09/22(火) 11:42:42ID:Mwzzxg9y
テンプレートとデータを分けたときのキャッシュファイルの作り方がわかりません
大まかにどのような仕組みなのでしょうか?
0213nobodyさん2009/09/22(火) 12:06:16ID:???
どこでキャッシュするかによるな。一番外側でキャッシュするなら
例えばhoge.php?aaa=1&bbb=2とかいうページで(他に変数なし)、ユーザーによって表示内容が違ったりしないという前提で
 1.普通に処理して画面表示するが、ついでにhoge_1_2.htmlとかいうファイルに結果を書き出しておく
 2.アクセスが来たらパラメータに応じてhoge_?_?.htmlというファイルを探す。あればそれを読み込んでそのまま画面表示する
  なければ1同様に普通にに処理してファイルに書き出して画面表示する
 3.この際、htmlの方には有効期限を決めておく。読み込みの際に更新日時をチェックし、古かったら消す。
  あるいは、データが更新されるとかでキャッシュが無効になるタイミングがあるなら、その時に消すというルールでもいい。
という機構を実装するのが一番シンプル。
ファイルじゃなくてmemcacheとか使ってもいいし、phpに処理を渡さずにwebサーバだけでなんとかする手段もあるし
リクエストがあったその場で生成するんじゃなくてデータが更新された時点でHTMLを書き換える手もあるし、その辺は色々。

上記は「あるリクエストに対し、どういうHTMLが返るか」をキャッシュしたわけだが。
一歩内側でキャッシュするなら、「あるリクエストに対し、どういうデータがテンプレートに渡るか」だけをキャッシュする手もある。
さらに内側だと、「あるSQLに対し、どういうデータが返るか」をキャッシュしても速度は向上する。
0214nobodyさん2009/09/22(火) 12:13:10ID:???
ページをキャッシュしファイルかメモリかDBにURIとタイムスタンプを記録して
そのURIに次にアクセスがあったときにタイムスタンプと比較してライフタイム以下だったら
キャッシュを出力、越えてたりデータが更新されてたら新たに生成して出力しする、

民主に入れたならそれ位わからなきゃねw

0215nobodyさん2009/09/22(火) 12:15:21ID:???
この60年で日本が劣化したのは自民信者が原因だったことがよく分かった
0216nobodyさん2009/09/22(火) 12:16:32ID:???
そういうことにしておきたいってことがよく解った
02172132009/09/22(火) 12:29:14ID:???
キャッシュする戦術は使える容量やアクセス数、更新頻度次第。
「外側」の方がキャッシュされた時のレスポンス速度はいいが、組み合わせ数が増える。
(たとえば、10パラメータが10通りの値を取る時、一番外側でのキャッシュなら10^10通りのキャッシュが必要になる
 SQLをキャッシュする形式なら、各パラメータがそれぞれ独立で各1つのSQLにしか影響しないなら、10*10通りで済む)

組み合わせ数が増えると、キャッシュのヒット率が落ちるので、初回アクセス時のレスポンスが落ちる。
100通りしかパターンが無い場合と、10,000,000,000通りのパターンがある場合だと、「既にキャッシュがある確率」が段違いだからな。
SQLキャッシュだと、「4つのパラメータのうち3つは既出」という場合でもキャッシュの恩恵が受けられるので、速度が上がるというのもある。
0218nobodyさん2009/09/22(火) 12:33:16ID:6wpNucdw
>>204
ありがとうございます。
二つの違いについて詳しく調べてみます。

>>205
それを相対パスで指定すると良さそうですね。
セキュリティ面はどうか調べてみます。
ありがとうございます。
0219nobodyさん2009/09/22(火) 13:45:11ID:???
勉強になりました
ありがとうございます
0220nobodyさん2009/09/22(火) 13:48:04ID:HmGOH+g/
classとかの書き方や使い方を覚えたいのですが
コードサンプルが掲載されているわかりやすいサイトってありませんか?
国内でも海外でも問いません
0221nobodyさん2009/09/22(火) 13:48:55ID:???
あー、自分も知りたい。
綺麗なソースコードのある程度の規模のアプリとか。
0222nobodyさん2009/09/22(火) 13:50:51ID:???
フレームワークのソースはいいよ
オブジェクト指向を勉強したいなら一度Javaを勉強したほうがいい
0223nobodyさん2009/09/22(火) 14:06:04ID:???
>>220=>>221
0224nobodyさん2009/09/22(火) 14:43:52ID:dG0Jqx1c
質問です

http://host/test.php?=key[]=val1&key[]=val2で遷移しようとして
遷移先で$_GET['key']で受け取りたいのですが、val2のデータしか受け取りません

http://host/test.php?=key[]=val1&key[]=val2&key[]=val3と
3つ以上を受け渡そうとしても、val2、val3は取得しても同様に最初の1つ目を取得しないことが分かりました


どのようにすれば全てのデータを受け取れますか?
よろしくお願いします
0225nobodyさん2009/09/22(火) 14:46:27ID:???
『リファクタリング』読んどけ
結果を見るより、過程を見るほうが勉強になる。
0226nobodyさん2009/09/22(火) 15:03:12ID:???
key[] が問題
key[1] や key[2] とかで
0227nobodyさん2009/09/22(火) 15:07:23ID:???
>>224
?の直後の=は、ただ単にここに書いてる分だけのこと?
02282242009/09/22(火) 16:03:05ID:dG0Jqx1c
自己解決しました
配列の受け渡しはもう少し考えるべきでした
0229nobodyさん2009/09/22(火) 16:19:26ID:???
自己解決wwww
>>226-227、残念だな
0230nobodyさん2009/09/22(火) 16:52:20ID:???
>>228
一応、どう自己解決したのか書いて欲しい
0231nobodyさん2009/09/22(火) 21:28:48ID:???
値がこないとかいう前にvar_dampやprint_rしないのは何故なんだろう?
0232nobodyさん2009/09/22(火) 22:34:13ID:???
ごめんなさい、質問させていただきます
addressというテーブルを作りたく、以下のようにしました
フィールドレイアウトで、usernameは主キー、unamは漢字で設定したいのですが主キー、漢字の設定というのが分かりません
どのように書き換えれば良いのでしょうか?

<?php
try {
$db=new PDO('samples');
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$db->exec('CREATE TABLE address(
id INTEGER PRIMARY KEY
,username VARCHAR(50)
,password VARCHAR(32)
,unam VARCHAR(50)
)');
print('addressテーブルの新規作成に成功しました。');
} catch (PDOException $e) {
die('エラーメッセージ:'.$e->getMessage());
}
?>
0233nobodyさん2009/09/22(火) 22:34:42ID:???
まずスレタイを読んでくれ
02342322009/09/22(火) 22:35:27ID:qHgxG+da
すみません、ID出し忘れました
0235nobodyさん2009/09/22(火) 22:40:26ID:???
日本語はDBの文字コードをsjisなりujisなりutf8に設定していればテーブル作成時に指定せずとも入力できるよ
主キーの書き方は PRIMARY KEY (id)
02362322009/09/22(火) 23:42:40ID:qHgxG+da
>>235
ありがとうございます
この場合、
$db->exec('CREATE TABLE address(
username VARCHAR(50)
,password VARCHAR(32)
,unam VARCHAR(50)
,PRIMARY KEY(username)
)');
のように設定すればいいのでしょうか?
0237nobodyさん2009/09/22(火) 23:46:31ID:???
友愛のPHP
0238nobodyさん2009/09/23(水) 00:04:21ID:kQ5zUYAt
CREATE TABLE test (username VARCHAR(50),password VARCHAR(32))
というので、usernameにPRIMARY KEYを設定したいのですが、
CREATE TABLE test (username VARCHAR(50),password VARCHAR(32) PRIMARY KEY(username))
のように設定すればいいのでしょうか?
主キーの設定の仕方が分からないもので教えていただけたらと思います
02392382009/09/23(水) 00:05:48ID:kQ5zUYAt
ごめんなさい、live2chで上に書いていたものがそのまま記入されてしまいました
間違いです
無視して下さい・・・ごめんなさい
0240nobodyさん2009/09/23(水) 00:19:14ID:???
SQLって最初は難しいよね
0241nobodyさん2009/09/23(水) 00:21:49ID:???
仕事に必要なことだけテンプレ使っててもSQLは上達しないぜ

マニュアルサイトみて、実際にDBを弄りながら覚えるのが一番。
0242nobodyさん2009/09/23(水) 00:23:21ID:???
>>238
最初は、phpmyadmin でやってみたらいいと思う。
都度に発行したSQLが表示されるから参考になるよ。

>>240
MS Access とかあると理解早いんだけどなぁ。

SQL関係は情報ソースが浅いの多いのが難点だと思う。
実装が分散しているからね。共通点とツボを理解するには、
SQL92以降の、一般SQL規格を扱った参考書を読むといいと思う。
0243nobodyさん2009/09/23(水) 00:27:57ID:???
最初こそphpmyadminなんかに頼らないでSQLの基礎から学んだほうがいいと思うが
0244nobodyさん2009/09/23(水) 00:31:58ID:???
>>243
主キーって言ってる分にはテーブル構造ってコンセプトは理解してるんでしょ。
あとは記法の問題だからサンプルを得るには仕掛けに頼ってもいいんじゃん、
と思うけど。基礎から学ぶなら、実装を問わないSQLのコンセプトから理解した
方がいいとは思うけど、テーブル設計できる人がそこまで遡らなくてもいいと
思う。違う実装に移る前に、SQL**を一通りやったほうがいいとは思うけどさ。
0245nobodyさん2009/09/23(水) 00:32:34ID:???
記法の問題なら、記法を学べよw
0246nobodyさん2009/09/23(水) 00:41:59ID:???
俺はPHPやって、データベースの所で躓いて、「やべぇ、コマンドプロンプトって何だよ、SQLやらなきゃわけわからん」って感じでSQLやった
他にも設定とか訳分かんなかったし
だから、PHPが簡単で、早ければ2日で習得できるとか言うヤツの言う事は聞かないw
皆はSQLはどういう過程で勉強したの?
やっぱPHPとは別に勉強したでしょ?
0247nobodyさん2009/09/23(水) 00:46:56ID:???
勉強して覚えるのと経験して乗りこなすのとは全然違う。
0248nobodyさん2009/09/23(水) 00:48:45ID:???
ひどいゆとりを見た
0249nobodyさん2009/09/23(水) 00:50:08ID:???
>>246
実を言うと長門繋がりで・・・

まぁ仕事でも使うから設計あたりもちゃんと勉強したよ、うん。
0250nobodyさん2009/09/23(水) 00:54:47ID:???
SQLなんて勉強ってほどでもない
CREATE DROP SELECT UPDATE INSERT DELETE
こんだけ覚えれば趣味PHPで使う分には問題ないしな
PHPをある程度理解している中級者なら1日で覚えられる
もっと難しいことしたいならOracleの資格本でも読んでついでにとってみようって感じでおk
0251nobodyさん2009/09/23(水) 00:55:44ID:???
インデックスは?
0252nobodyさん2009/09/23(水) 00:56:43ID:???
長門って何だ?
0253nobodyさん2009/09/23(水) 00:56:52ID:???
1000レコード超えてからでいいんじゃねーの。
0254nobodyさん2009/09/23(水) 01:00:47ID:???
1000レコードて
0255nobodyさん2009/09/23(水) 01:00:52ID:???
>>252
http://ja.wikipedia.org/wiki/%E9%95%B7%E9%96%80%E8%A3%95%E4%B9%8B

有名な人だぞ
0256nobodyさん2009/09/23(水) 01:01:20ID:???
マジで?
皆SQLで詰まらなかったの?
俺は1週間は勉強したけど
0257nobodyさん2009/09/23(水) 01:03:03ID:???
んでこのベテラン俳優とSQLがどんな関係があるわけ?
0258nobodyさん2009/09/23(水) 01:04:25ID:???
SQL開発した奴だが・・・
しらなかったのか?
0259nobodyさん2009/09/23(水) 01:08:41ID:???
そうなんだ、ただ使ってるだけでそういうのは全然知識が無い
0260nobodyさん2009/09/23(水) 01:08:59ID:???
>>251
実装ごとに癖がある最たる機能だな。

ただインデックスの概念は標準SQL規格で覚えておいたほうがいいと思う。
0261nobodyさん2009/09/23(水) 01:23:26ID:???
SELECT シリアルコード
FROM データベース
WHERE コードデータ
RDER BY 攻性情報戦闘
HAVING ターミネートモード

というネタのことかと思ったのに誰だよ俳優の長門って
0262nobodyさん2009/09/23(水) 01:27:41ID:???
統合情報思念体がそんなしょぼいデータ管理システム使ってることに逆に驚いたわ
0263nobodyさん2009/09/23(水) 04:04:40ID:RxoSRe3u
utf-8Nのファイルにutf-8Nのファイルincludeしてるのですが
includeした場所にBOMが入ってしまって
どうしても取れないんだけど消す方法ありませんか?
0264nobodyさん2009/09/23(水) 04:18:19ID:???
UTF-8NってBOM無しじゃなかったっけ?
0265nobodyさん2009/09/23(水) 04:20:13ID:RxoSRe3u
BOM無しなのにBOMが入ってしまって困ってます
0266nobodyさん2009/09/23(水) 04:22:03ID:???
じゃエディタで保存し直せばとしか
0267nobodyさん2009/09/23(水) 04:23:33ID:RxoSRe3u
何度も保存しなおしてますが出ちゃうんです
0268nobodyさん2009/09/23(水) 05:43:23ID:???
それはおかしい。もう一度確認してみ。
0269nobodyさん2009/09/23(水) 09:46:42ID:???
エディタは決して明かせません。
皆さん、推測で頑張ってください、という所か。
0270nobodyさん2009/09/23(水) 10:32:55ID:???
正しい質問ができる奴は自力で正解に行き着けるからな。
質問スレには、何も考えてない質問者しか来ない。
0271nobodyさん2009/09/23(水) 11:10:49ID:???
>>265
理屈上あり得ないのだよ。

EmEditorを使いなさい。BOMありなしこれで見分けがつくし、きちんとした
エディタだ。

実際に、俺も同じ事やっているが、プログラムでそういう処理をしている
場合を除いて勝手にもともとあったファイルにBOMがつくなんて、そういう
挙動が許されるわけがない。

はっきりいってセキュリティホールとまではいかないが、異常な動作だ。
0272nobodyさん2009/09/23(水) 13:00:07ID:hkbr2oQC
エディタはテラパッドです
0273nobodyさん2009/09/23(水) 13:03:31ID:hkbr2oQC
>>270
なんとか調節して解決したが?何か
0274nobodyさん2009/09/23(水) 13:11:43ID:hkbr2oQC
>>271
ダウンロウドしたけど
レジストリいじるみたいなので気持ち悪いので捨てました
■ このスレッドは過去ログ倉庫に格納されています