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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2012/11/20(火) 18:02:45.99ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

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

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
0899nobodyさん2013/01/03(木) 00:06:28.30ID:g593pwmY
>>898
ありがとうございます。
foreachを使い、
>>893 で教えていただいたように順番を変更しました。
serializeを使うとキャッシュがある時に表示しなくなるので外してみました。
キャッシュ有りでもキャッシュを読んでくれないのですが、
何がまずいのでしょうか?
0900nobodyさん2013/01/03(木) 00:07:54.37ID:g593pwmY
$memcached = new Memcache;
$memcached->connect("localhost", 11211);
if (($row = $memcached->get("bookcache")) !== false) {
//$row = unserialize($row);
foreach($row as $row2){
$menu1_0_title = $row2["book_title"];
$menu1_0_no = $row2["book_no"];
$menu1_0_chosha = $row2["book_chosha"];
if(empty($menu1_0_chosha)){
$menu1_0_chosha = "不明";
}
echo "<li><a href=\"./".$menu1_0_no.".html\">".$menu1_0_chosha." - ".$menu1_0_title."●</a></li>\n";
}
}else{
$my_Row = mysql_query("SELECT book_id,book_no,book_title,book_chosha FROM book_table ORDER BY book_id DESC LIMIT 0,50",$my_Con);
while($row = mysql_fetch_array($my_Row)){
$menu1_0_title = $row["book_title"];
$menu1_0_no = $row["book_no"];
$menu1_0_chosha = $row["book_chosha"];
if(empty($menu1_0_chosha)){
$menu1_0_chosha = "不明";
}
echo "<li><a href=\"./".$menu1_0_no.".html\">".$menu1_0_chosha." - ".$menu1_0_title."▲</a></li>\n";
}
//$row = serialize($row);
$memcached->set("bookcache", $row, MEMCACHE_COMPRESSED, time() + 600);
}
0901nobodyさん2013/01/03(木) 22:44:43.30ID:???
>>900
具体的に何をキャッシュしたいの?
0902nobodyさん2013/01/03(木) 23:13:48.39ID:g593pwmY
>>901
DBのクエリ結果をキャッシュに保存したいんです。
0903nobodyさん2013/01/03(木) 23:32:49.29ID:???
>>902
1レコード?
複数レコード?
型は?
キャッシュできるのはどういうデータ型?
0904nobodyさん2013/01/03(木) 23:43:17.12ID:???
>>903
複数レコードです。
book_id (int)
book_no (varchar)
が英数字で

book_title (varchar)
book_chosha (varchar)
が日本語です。

全てUTF-8にしています。
0905nobodyさん2013/01/04(金) 13:21:05.26ID:???
下がったら倍プッシュロングに限るぜ
0906nobodyさん2013/01/04(金) 13:25:26.40ID:???
おっと、誤爆した
0907nobodyさん2013/01/04(金) 13:58:21.41ID:???
>>904

>>900
$memcached->set("bookcache", $row, MEMCACHE_COMPRESSED, time() + 600);
は複数レコードのデータになってんの?

あと、型はarrayだろ
DBのデータ型はどうでもいい
memcacheはresourceじゃなきゃ自動でシリアライズするみたいだから、
arrayならそのままでよさそうだな
0908nobodyさん2013/01/04(金) 23:49:31.57ID:EuFkCruD
mod_expiresのキャッシュ機能とPHPのsmartyのキャッシュ機能ってどう違うのでしょうか?
わかりやすく説明していただけないでしょうか?
0909nobodyさん2013/01/05(土) 00:03:01.67ID:jcFksBli
すいません質問を変えます。

mod_expiresのキャッシュ機能はレスポンスヘッダーにexpiresフィールドを付加してブラウザ側にキャッシュさせるものですよね?
つまり、あるデータベースにアクセスするページがあるとして、このページに「初めて」ユーザが5000人アクセスしてきた場合、
5000回データーベースにアクセスすることになるってことですよね?
2回目以降はブラウザのキャッシュが使われると思いますが最初は必ずどのユーザもデーターベースにアクセスすることになるっていう認識でいいでしょうか?

逆にsmartyのキャッシュ機能はテンプレートファイルごとにキャッシュした場合、
あるデーターベースにアクセスするページにユーザがアクセスしてきた場合、
その一人目のユーザのアクセス時にはデーターベースを読み込みにいきますが、そこで出力結果のキャッシュが生成されるので、
2回目以降のユーザはそのキャッシュを読みにいくことになるので、
結果的にはDBに負荷がかからないのはsmartyのキャッシュ機能という認識でよろしいでしょうか?

長文で申し訳ございません。
ご回答よろしくお願い致します。
0910nobodyさん2013/01/05(土) 00:08:53.67ID:???
mod_expires
>ユーザの指定した基準に基づいた Expires と Cache-Control HTTP ヘッダの生成
ブラウザのキャッシュは有効期限が切れたらサイトから再取得するが
その有効期間を伸ばしたりようはブラウザのキャッシュをHTTPヘッダをいじって制御する

SmartyやPHPのキャッシュ
<?php echo "hello"; ?>
これの実行結果はhelloだが毎度phpにアクセスして実行すると効率が悪いので
実行結果(この場合はhello)だけをhtmlなんかの別ファイルや変数(メモリ)にキャッシュしておくような仕組み
0911nobodyさん2013/01/05(土) 00:12:15.27ID:jcFksBli
>>910
ありがとうございます。
SmartyやPHPのキャッシュのほうは、それは個々のユーザに対して行われるのですか?
>>909でもいってるように、たとえば一人目のユーザがアクセスしてきてキャッシュが生成されますよね?
次の2人目のユーザがアクセスしてきた場合はそのキャッシュが使われるのでしょうかか?
それとも2人目のユーザは2人目のユーザでまた別にキャッシュが生成されるのでしょうか?
0912nobodyさん2013/01/05(土) 00:16:07.99ID:???
>>909-910
mod_expiresが動的コンテンツをキャッシュできるかは知らんけど
だいたい>>909の認識でいいんじゃない
使用目的と照らし合わせるとその選択肢ではsmartyのキャッシュ機能で正解かと
0913nobodyさん2013/01/05(土) 00:18:15.74ID:???
>>912
ですよね。
ご回答本当にありがとうございました。
0914nobodyさん2013/01/05(土) 00:23:50.22ID:???
memcached使えば?
0915nobodyさん2013/01/05(土) 00:30:07.52ID:???
>>914
そんなのあるんですか・・
調べたらみたらすごそうですね
勉強してみます
ありがとうございました
0916nobodyさん2013/01/05(土) 05:43:45.67ID:???
>>911
当然共通
共通ではないならキャッシュの意味ない
0917nobodyさん2013/01/05(土) 08:45:32.85ID:???
>>916
ですよね。。
安心しました
ありがとうございました
0918nobodyさん2013/01/05(土) 11:12:27.29ID:???
ユーザーごとのマイページとかに工夫なしにそれやると、他人のマイページが・・・ってことになるので注意
まぁ、そんなアホなことする人いないかw
0919nobodyさん2013/01/05(土) 11:49:11.83ID:JD7D6E3p
条件によって、HTTPステータスコード403をブラウザに返し
アクセス禁止するような処理を
header('HTTP/1.0 403 Forbidden');
により実行してますが、Chromeでは
「ウェブページへのアクセスが拒否されました」というメッセージが表示されるものの
Firefox 17.0.1では真っ白の何も書かれてないページが表示されます。
IE(version 9)でも別のページより推移してきた場合は
拒否された旨のメッセージが表示されますが
リロードしたときに真っ白の何も書かれてないページが表示されます。
ブラウザによって対応・非対応があるのでしょうか?それとも何か他に対処法があるのでしょうか?
0920nobodyさん2013/01/05(土) 11:57:24.44ID:???
ヘッダ出力したあと何かechoしてみたら?
0921nobodyさん2013/01/05(土) 12:00:03.05ID:???
404だと、大抵サーバー側が出力したエラーメッセージが表示されるのはよく知ってるはずだ

403だと、サーバー側のエラーページを表示するかブラウザーが持ってるエラーメッセージを表示するかが、
ブラウザーやその設定によって異なる
0922nobodyさん2013/01/05(土) 12:04:29.78ID:???
挙動をすべてのブラウザーで統一するには
403ではなく200でアクセス拒否のエラーページを表示するしかない
0923nobodyさん2013/01/05(土) 12:05:07.27ID:???
>>920
回答ありがとうございます。
echo 'test';をheaderのあとに入れてみたところ、
いずれのブラウザでもtestとだけ出力されます。
Chromeで表示されていた「ウェブページへのアクセスが拒否されました」は
表示されなくなりました。

>>921
回答ありがとうございます。
あああー なるほど。そういうことですか。
でも何も表示されないというのは、どっちのメッセージを表示しようとしてるんだろ。。
0924nobodyさん2013/01/05(土) 12:06:46.17ID:???
>>922
回答ありがとうございます。
やはり自作ページを表示したほうが安全ですかねー。
0925nobodyさん2013/01/05(土) 12:55:35.56ID:???
>>921=>>922だけど、
ヘッダーだけ出力するということは
空白ページを出力するのと同じことだよ
ヘッダーはユーザーには見えないからね
0926nobodyさん2013/01/05(土) 13:04:06.42ID:???
>>925
ヘッダさえ出力すればあとは全部ブラウザが勝手に
エラーページ生成してくれるもんだと思ってました。
ありがとうございました。エラーページ自作することにします。
0927nobodyさん2013/01/05(土) 13:32:29.08ID:???
良回答乙
0928nobodyさん2013/01/05(土) 13:41:23.46ID:???
自画自賛乙
0929nobodyさん2013/01/05(土) 22:26:54.88ID:EDQDuImz
質問です。
あるページからpreg_matchで任意の文字列を取得してすべて表示するにはどうしたらいいでしょうか?
URLを全て取得したいのですが、下の例では1つしか取得できません…

$url = "http://example.com/test.html";;
$html = @file_get_contents($url);
$html = mb_convert_encoding($html,mb_internal_encoding(),"auto");
if(preg_match("/<a href='(.*?)'>/i",$html,$matches)){
echo $matches[1];
}
0930nobodyさん2013/01/05(土) 22:27:26.77ID:???
preg_match_all
0931nobodyさん2013/01/05(土) 22:37:08.27ID:???
良回答乙
0932nobodyさん2013/01/05(土) 22:50:09.82ID:???
ちょうど似たようなの作ってた
<?php
$url="http://ava.pmang.jp/clans/ranking?page=1&;type=clan";
$html = file($url,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
$htmlsource = "";
foreach($html as $key => $val){
$htmlsource .= trim($val);
}
preg_match_all("/<a href=.*?>/", $htmlsource, $linkarray);

print_r($linkarray);
?>

こんな感じにしたよ
0933nobodyさん2013/01/05(土) 23:07:32.50ID:EDQDuImz
>>930
ありがとうございます!良回答乙!
0934nobodyさん2013/01/06(日) 00:00:47.21ID:???
>>933
お前が言うな
0935nobodyさん2013/01/06(日) 04:53:35.66ID:???
つうか参考のリンクは関連関数なんだからマニュアルもちっと隅々まで見ろ
0936nobodyさん2013/01/06(日) 10:41:48.60ID:???
年末年始memcachedについて質問をした者です。
皆さんのアドバイスのおかげでまともにキャッシュが応答するようになりました。

どうやらもっと早い時期に動くようになっていたようなのですがNginxのリバースプロキシが応答している事に気付かずにあれこれ悩んでいたのですが、先程ふと思い立ってプロキシの有効期間を1分にして動作確認を行ったところページ内のmemcacheは全て正常に動作していました。

あとはmemcached、リバースプロキシ、expiresヘッダそれぞれの有効期間を調整するだけです。

本当にありがとうございました。
0937nobodyさん2013/01/06(日) 19:45:56.02ID:???
良質問者乙
0938nobodyさん2013/01/06(日) 22:21:55.72ID:5o7VoGpS
【OS名】Free BSD
【PHPのバージョン】5.2.17
【質問内容】
PHPでmecabを利用し、名詞を抽出したいです。

<?php
$mecab = mecab_new();
$str = 'MeCab extensionのインストールは大変だった。私は猫が好きです。猫カフェに月2回は行っています。最近は寒いですね。明日は洋服を買いにルミネに行きたいです。2013年になりましたね。今現在、JavaScript、PHP、Javaを勉強しています。';

//名詞を格納する配列
$noun_array = array();


if($node = mecab_sparse_tonode($mecab, $str)){
while ($node){
$node_array = mecab_node_toarray($node);
if($node_array["stat"] != 2 && $node_array["stat"] != 3 && preg_match("/名詞/", $node_array["feature"])){
print "OK";
}else{
print "NO";
}
$node = mecab_node_next($node);
}
}

?>

このようなプログラムを書きましたが上手く動きません。

print $node_array["feature"];
をするとちゃんと'名詞'が含まれた文字列も出力されるのですが。
0939nobodyさん2013/01/06(日) 22:24:44.53ID:???
出来るわけねえだろそんなの・・・と思ってググってみたら出来るんだなこれ
すごいな
0940nobodyさん2013/01/06(日) 22:25:06.70ID:???
>>938
どこまで想定通りでどこから想定外の出力が出ているのか切り分けてみては
0941nobodyさん2013/01/06(日) 22:30:08.87ID:???
まずメカブのサンプルからやれよ
0942nobodyさん2013/01/06(日) 23:27:44.59ID:5o7VoGpS
>>940
print $node_array["feature"];
を試すと、名詞が含まれる文字列も出力されるのですが、

if($node_array["stat"] != 2 && $node_array["stat"] != 3 && preg_match("/名詞/", $node_array["feature"])){

ここのpreg_match("/名詞/", $node_array["feature"]) が上手く行かなくてエラーになっているみたいです。

色々試したのですが、自分ではどうしたらいいか分からなくて
0943nobodyさん2013/01/07(月) 00:09:23.17ID:???
またmecabか
0944nobodyさん2013/01/07(月) 00:31:54.96ID:???
もしかして配列
0945nobodyさん2013/01/07(月) 00:42:10.19ID:???
基礎もできてないのにいきなりメカブとか
0946nobodyさん2013/01/07(月) 02:39:33.50ID:???
>>942
本当に入っているなら文字コードじゃね
0947nobodyさん2013/01/07(月) 08:53:43.44ID:???
>>946
文字コードの問題でした。
ありがとうございます!
0948nobodyさん2013/01/07(月) 09:10:23.71ID:???
くだらない
馬鹿しかいない
0949nobodyさん2013/01/07(月) 10:03:22.02ID:???
高度な問題だ 文字コードだけにwwwwwwww
0950nobodyさん2013/01/07(月) 10:25:03.76ID:???
高度とコードを掛けたわけですか。
ハイレベルでハイグレードな大ネタですね。
0951nobodyさん2013/01/07(月) 12:24:50.64ID:???
キャラの使い分けが高度だ
キャラクターコードだけにw
0952nobodyさん2013/01/07(月) 13:19:05.57ID:???
次スレは くだらねぇギャグはここに書き込みやがれ 125でいいですか?
0953nobodyさん2013/01/07(月) 13:42:27.90ID:???
高度なギャグはここに云々で
0954nobodyさん2013/01/07(月) 14:03:54.38ID:???
【PHP】高度なコードはID出して行動しやがれ 125
0955nobodyさん2013/01/07(月) 14:08:23.67ID:???
次スレが不要だということは分かった
0956nobodyさん2013/01/07(月) 14:30:38.19ID:???
こうドヤ顏で言ってます
0957nobodyさん2013/01/07(月) 18:46:56.49ID:d/5dHw2t
PHPの連想配列の値に配列指定することってできますか?

$array1 = array();
$value = array(1, 1);
$array1['test'] = $value;

みたいにできるのか教えてください。
0958nobodyさん2013/01/07(月) 18:47:54.41ID:???
その書いたコードそのまま試せばわかるじゃん
0959nobodyさん2013/01/07(月) 19:57:11.12ID:???
>>958
今実行できる環境がなくて……
0960nobodyさん2013/01/07(月) 20:03:41.17ID:???
http://codepad.org/NOl3vkwT
0961nobodyさん2013/01/07(月) 20:46:09.62ID:???
あした
0962nobodyさん2013/01/07(月) 20:56:11.14ID:???
悪質質問者乙
0963nobodyさん2013/01/07(月) 21:13:30.13ID:???
>>967
マヌアルに書いてあるじゃん
0964nobodyさん2013/01/07(月) 21:16:50.33ID:???
誰にレスしてんだよ
0965nobodyさん2013/01/07(月) 23:31:28.47ID:Ba3rRhi9
a=100% b=22% hogehoge=xx% c=3%
↑の文字列のから「100」と「22」と「3」(数字は変動します)を取り出そうと思い
下記の文を書きましたが、最初の1つしか取り出さないようです。
複数取り出すにはどのようにしたらよいでしょうか?

$content = "a=100% b=22% hogehoge=xx% c=3%";

preg_match("/\=([0-9]{1,3})%/", $content, $matches);
echo $matches[1];
echo $matches[2];
echo $matches[3];
0966nobodyさん2013/01/07(月) 23:51:13.96ID:???
言葉を慎みたまえ
0967nobodyさん2013/01/08(火) 00:00:52.34ID:???
俺だ!
0968nobodyさん2013/01/08(火) 08:49:10.00ID:???
>>965
preg_match_all
0969nobodyさん2013/01/08(火) 13:47:14.17ID:???
このスレが必要な質問は出てこないな
0970nobodyさん2013/01/08(火) 13:52:33.09ID:???
いつもくだらない質問をする側のくせに何を言ってるんだ
0971nobodyさん2013/01/09(水) 00:33:10.56ID:5kmbCoak
質問1.
たまに引数に class名 変数名 のようにしてある関数を見ますがこれはそのclassのインスタンスを要求しているということしょうか?

class TestClass{ public $i; }

class Main{
function test (TestClass a){
$a->i = 0;
}
}

こんな感じのものです。

質問2.漠然とした質問ですみません。
関数を指定したあとにさらに関数を指定してあるコードを見かけますがあれは何なのでしょうか?

$this->instance->methodA()->methodB();

のようなコードです。考えられる要因を教えて欲しいです。
0972nobodyさん2013/01/09(水) 00:56:00.67ID:???
メソッドチェーンの場合もある
0973nobodyさん2013/01/09(水) 01:37:10.16ID:???
>>971
タイプヒンティング
ttp://php.net/manual/ja/language.oop5.typehinting.php
0974nobodyさん2013/01/09(水) 07:04:25.96ID:5kmbCoak
>>972-973
こんな曖昧な質問に答えて下さってありがとうございました!
無事理解できました。
0975nobodyさん2013/01/09(水) 17:37:43.70ID:ZlJTdZpn
同じファイルに1万回アクセスあるか、
1万のファイルに1回ずつアクセスがあるとします。

この場合、後者の方がサーバの負荷がかかるって
聞いたのですが、本当ですか?
0976nobodyさん2013/01/09(水) 17:40:33.13ID:???
そりゃキャッシュが効けば物理的にアクセスしなくて済むしな
0977nobodyさん2013/01/09(水) 17:44:12.16ID:ZlJTdZpn
ということはドメインや利用者を分けたい場合、
1つのファイル上で分岐すれば良いだけなんですね。
利用者ごとにファイルを生成して
そこからシステム用のファイルにincludeするbフかと思っていbワした。
0978nobodyさん2013/01/09(水) 17:57:26.82ID:???
!?
0979nobodyさん2013/01/09(水) 18:18:21.26ID:???
前提となるシステムが書いてないから何の話かさっぱりわからんw
0980nobodyさん2013/01/09(水) 18:32:40.05ID:???
Wordpressのマルチブログ機能を使ってみろ
サイトもDBで管理して、設定ファイルが増えるわけじゃない
0981nobodyさん2013/01/09(水) 18:52:24.30ID:???
>>980
次スレよろ
0982nobodyさん2013/01/09(水) 22:18:29.47ID:???
>>981
すまん。何度か試しているが無理だった・・・
0983nobodyさん2013/01/09(水) 22:29:37.60ID:???
建てるわ
0984nobodyさん2013/01/09(水) 22:32:00.89ID:???
【PHP】下らねぇ質問はID出して書き込みやがれ 125
http://kohada.2ch.net/test/read.cgi/php/1357738303/
0985nobodyさん2013/01/09(水) 22:37:18.43ID:???
乙華麗
0986nobodyさん2013/01/09(水) 23:11:09.56ID:DiImble8
質問です、file_get_contents()などでhttpのpost送信したいんですが、
ただのテキストの送信は上手くいってるんですが、画像を送信する時はどうしたら良いんでしょうか?
こんな感じでやっているんですが…

$graph_url = "https://graph.facebook.com/";. $album_id . "/photos?access_token=" . $access_token;
$postdata = http_build_query(
array(
'source' => '/img/test.jpg',
'message' => "写真を画面遷移なしで投稿します。"
)
);
$opts = array('http' =>
array(
'method'=> 'POST',
'header'=> 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = json_decode(file_get_contents($graph_url, false, $context));

見ての通りfacebookのapiへの操作なんですが、その部分はおいといてhttp-post送信での画像送信はどうしたら良いんでしょう
よろしくお願いします
09879862013/01/09(水) 23:27:16.12ID:DiImble8
pearを使うと良いっぽいですね
そちらを試してわからなかったらまた質問させてもらいます、スレ汚しすみませんでした
0988nobodyさん2013/01/09(水) 23:34:53.29ID:???
最近質問者が固定になってんな
似たような質問の続きだし

勢いみても2chの衰退が激しい
0989nobodyさん2013/01/10(木) 00:10:31.15ID:???
>>975
ファイルを開いて読んで閉じる処理が重いし、
大量にファイルがあるフォルダーを開くのが重い
0990nobodyさん2013/01/10(木) 01:03:39.51ID:???
>>989
それ、答えになってない
開いて読んで閉じる回数はどちらも1万回
1ファイルだとしても大量にファイルがあるフォルダーのうちの
1ファイルかもしれない

だからキャッシュだってば
さらにAPCとか使ってれば中間コードキャッシュもある
0991nobodyさん2013/01/10(木) 01:40:26.82ID:???
次スレいらない
お開きにしましょう
0992nobodyさん2013/01/10(木) 02:23:37.86ID:???
>>991
>>989と同じ人かな?
0993nobodyさん2013/01/10(木) 03:32:28.03ID:???
WPがこれだけはやったのも、無料というのはあるだろうけど
MTと比べてPHPでページを生成するから早いってのもあると思う。
MTはいちいち静的なファイル作ってたし。
0994nobodyさん2013/01/10(木) 03:50:31.79ID:???
wordpressって、どうやって金儲けしてるんだろう?
09959902013/01/10(木) 05:18:01.81ID:???
性的なファイルなら負けない
0996nobodyさん2013/01/10(木) 10:14:05.67ID:???
>>994
有償サポート
09979902013/01/10(木) 10:30:07.68ID:???
性的な意味で
0998nobodyさん2013/01/10(木) 15:17:14.98ID:???
てす
レス数が950を超えています。1000を超えると書き込みができなくなります。