【PHP】下らねぇ質問はID出して書き込みやがれ 90
■ このスレッドは過去ログ倉庫に格納されています
0001●
2009/11/14(土) 17:31:22ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 89
http://pc11.2ch.net/test/read.cgi/php/1255263534/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0759nobodyさん
2009/12/02(水) 15:47:59ID:???0761nobodyさん
2009/12/02(水) 15:49:34ID:???>>751
とりあえずDBの種類を明記して。pgpoolってことはPostgreSQLでOK?
あとマニュアルの持続的な接続も見て。
http://jp2.php.net/manual/ja/pdo.connections.php
0762nobodyさん
2009/12/02(水) 15:51:06ID:???0764nobodyさん
2009/12/02(水) 15:56:38ID:???0766nobodyさん
2009/12/02(水) 16:05:01ID:???飽きないね〜
0768nobodyさん
2009/12/02(水) 16:18:41ID:???自分も知らないくせにそうなるかなーというレスが気にいらなかっただけで煽るただの餓鬼
>>757 >>759 >>760 >>763 >>765 >>766
煽りに煽りで返す阿呆集団
>>758
コネクションプーリングができるとググル先生が言ってるぞと言う厨房
>>756 >>761 >>762 >>764
まともな人間と見せかけてどこかで煽りに参加してる阿呆集団の一人
0769nobodyさん
2009/12/02(水) 16:24:33ID:???0771nobodyさん
2009/12/02(水) 22:07:55ID:???http://jp.php.net/manual/ja/pdo.installation.php
http://jp.php.net/manual/ja/pdo.configuration.php
0772nobodyさん
2009/12/02(水) 22:08:36ID:???ありがとうございます
0773nobodyさん
2009/12/03(木) 10:49:04ID:???0774nobodyさん
2009/12/03(木) 14:21:03ID:???スクリプトファイルを入出力と処理に分けて、
入出力側は fgets(STDIN) でコマンドライン入力を受け取り
処理側スクリプトを proc_open(), proc_close() するでどうだい
0775nobodyさん
2009/12/03(木) 14:59:54ID:5T9WpFv8$arr = array('test1'=>1, 'test2'=>2);
try {
echo $arr['test3'];
} catch (Exception $e) {
echo $e;
}
これだと普通にPHPのエラーが表示されてしまいます。(Undefined index test3)
こういう使い方はダメなんでしょうか?
例外処理について教えて頂けると助かりますm(__)m
0776nobodyさん
2009/12/03(木) 15:15:48ID:???0777nobodyさん
2009/12/03(木) 15:23:51ID:5T9WpFv8スレ題通り、くだらない質問かもしれませんが
マニュアルは読んでもイマイチ理解できなかったので教えてください。
例外をcatchするには、自分で例外を投げないといけないのでしょうか?
それだとぶっちゃけif文とかわらないですよね?
0778nobodyさん
2009/12/03(木) 15:34:32ID:???$arr['test3']を初期化するかerror_reporting(E_ALL ^ E_NOTICE)でもぶちこんどけ
0779nobodyさん
2009/12/03(木) 15:35:31ID:???0780nobodyさん
2009/12/03(木) 15:37:20ID:???0781nobodyさん
2009/12/03(木) 15:40:24ID:???安心させる為にあるだけ
0782nobodyさん
2009/12/03(木) 15:42:08ID:???あればあったで便利だな
そろそろ4系は葬ってほしいぜ
0784nobodyさん
2009/12/03(木) 15:51:02ID:5T9WpFv8予期せぬ値がキーに入った時の為の例外処理なわけで、初期化する位だったら例外処理も必要ないです。
というかサンプルコードが適当すぎですよね・・・すみません。
error_reportingは最終的にはオフにする予定ですが、今はまだ作成段階なのでエラー発見の為にも表示しなくてはなりません。
で、結局以下のように自分で例外を投げるようにしました。(サンプルなので、実際はこれだけのコードなら大人しくisset()使っておけば済む話なのですが。)
$arr = array('test1'=>1, 'test2'=>2);
try {
echo $this->check($arr, 'test3');
} catch (Exception $e) {
echo $e;
}
function check($arr, $index) {
if(!isset($arr[$index])) {
throw new Exception(sprintf('Undefined index %s', $index));
}
return $arr[$index];
}
>>783
全角はわざとです。見やすいほうがいいかと思い全角にしました。
0786nobodyさん
2009/12/03(木) 15:58:00ID:???0787nobodyさん
2009/12/03(木) 16:02:18ID:???0788nobodyさん
2009/12/03(木) 16:06:21ID:5T9WpFv8とても分かりやすいサイトを教えて頂きありがとうございます。
そのサイトに書かれているように、手動で「例外」を投げないと処理が実行されないという所で悩んでました。
JavaScriptだと自動で投げてくれるので、PHPもてっきりそうだと思って・・・。
万事解決です!お答えくださった皆様ありがとうございました!
0789nobodyさん
2009/12/03(木) 16:12:24ID:???エラーハンドラ使えばいいのに
0790nobodyさん
2009/12/03(木) 16:17:42ID:???無能ばっかだなワロスwww
0791nobodyさん
2009/12/03(木) 16:20:16ID:???0792nobodyさん
2009/12/03(木) 16:49:38ID:???0793nobodyさん
2009/12/03(木) 17:12:20ID:???0794nobodyさん
2009/12/03(木) 17:45:56ID:???0795nobodyさん
2009/12/03(木) 18:35:28ID:FkIkewDAphpと同じ階層に「a, b」というデータを記録していのですが
どういった記述にすればいいでしょう?
0796nobodyさん
2009/12/03(木) 18:36:04ID:9BLN2rJ9【PHPのバージョン】php5.26
【連携ソフトウェア】Services_Twitter
【質問内容】
Twitter上で動くbotを開発しています。
現在はbotはcronで毎分呼び出されてシェルスクリプト経由でphpに渡されるのですが、
人工知能のような汎用処理系を目指しているので実行時に膨大な数の設定ファイルを読み出すため、処理に負担をかけています。
現在の処理:cronからシェルスクリプト呼び出し->phpにファイルを渡す->設定ファイルを読み出す(連想配列に格納)->随時設定を配列からロードし利用する
の設定ファイルの読み出しで多大な時間をとられています。
これを解決するためにループ処理で常時スクリプトを実行(定期的に取得と返事のみ実行)という案を考えつきましたが、
このような事は可能でしょうか。可能ならば実装方法と留意点も教えていただけるとありがたいです。
0797nobodyさん
2009/12/03(木) 18:55:06ID:???1.GETパラメータを取得
2.ファイルを書き込み属性つきでオープン
3.ファイルに書き込み(なくてもいいが書き終わったらファイルをクローズ)
あとは調べろコードもらっても勉強にならん
0801nobodyさん
2009/12/03(木) 19:35:18ID:APsxzQ0B4.3.10 からサポートされた、sprintf フォーマットのロケールに依存しない
浮動小数点数表現 F と同じ動作を実現するにはどうしたらいいですか?
0802nobodyさん
2009/12/03(木) 19:45:06ID:???0804nobodyさん
2009/12/03(木) 21:04:31ID:DjsgAevRsjis,sjis-winに無い文字が含まれるとき、?になるときとならない時があって困ってます。
タイミングによって結果が変わるのも解せないんだけど、同じことで悩んでたりスマートな解決策わかる人いませんか。
0805nobodyさん
2009/12/03(木) 21:08:03ID:???0806nobodyさん
2009/12/03(木) 21:08:31ID:???0807nobodyさん
2009/12/03(木) 21:14:56ID:DjsgAevR元はUTF8なんですよ。TwitterAPI。
毎回結果かわるからconvert_encodingはだめだし。
>>806 の方法試してみます。
mb_encode_numericentityが使えそうな気がしてきた。
0808nobodyさん
2009/12/03(木) 21:19:13ID:???0809nobodyさん
2009/12/03(木) 21:29:47ID:R411r6ifWordPressでカテゴリーを表示する「wp-dtree」というプラグインがあるのですが、
カテゴリーが二階層以上になったとき、そのカテゴリーに所属する記事数の計算が合いません。
(例)
A は B の親カテゴリーです。
B は C, D の親カテゴリーです。
C というカテゴリーに 2 つの記事が紐づいています。
D というカテゴリーに 3 つの記事が紐づいています。
【標準の動作】
A (5)
└ B (5)
├ C (2)
└ D (3)
【WP-dtree】
A (10)
└ B (5)
├ C (2)
└ D (3)
子や孫のカテゴリーに所属する記事数まで、すべて足し合わせるようなコードになっているのが原因だと思いますが、
どう直せばいいのかわかりません。
よろしくお願いします。
wp-dtree のコード
http://www.happy-pass.jp/wp-content/plugins/wp-dtree/
0810nobodyさん
2009/12/03(木) 21:32:41ID:???0811nobodyさん
2009/12/03(木) 21:33:25ID:DjsgAevR出来ればutfにしたいけど、2ch専ブラで見るのでどうしても…
とりあえずUTF8とsjisのコード範囲調べます。
0812nobodyさん
2009/12/03(木) 21:33:57ID:???WordPress (ワードプレス) その14
http://pc11.2ch.net/test/read.cgi/blog/1254473826/
【 スクリプト改造依頼スレ】(丸投げ) part7再々
http://pc11.2ch.net/test/read.cgi/php/1222645553/
0814nobodyさん
2009/12/03(木) 21:38:58ID:DjsgAevRwpあんまり詳しくないけど、階層表現なら入れ子集合モデルが好きです。
0815nobodyさん
2009/12/03(木) 21:41:08ID:APsxzQ0BRHEL4のrpmが4.3.9で、そこから動かせない場合にはどうしようもないってことでしょうか。
0816nobodyさん
2009/12/03(木) 21:41:15ID:DjsgAevRUTF8上のShiftJISの範囲って、なんか飛び飛びでしたっけ?
0817nobodyさん
2009/12/03(木) 21:42:23ID:R411r6ifwp-dtree_gen-functions.php
の133〜135行目
foreach($children as $child){
$count += $child->category_count;
}
が原因のように考えられるのですが、どう直せばいいのかがわかりません。
下記は試しましたが、うまくいきませんでした。
【この3行を削除】
A (0)
└ B (0)
├ C (2)
└ D (3)
【$count = $child->category_count; に変更】
A (1)
└ B (2)
├ C (2)
└ D (3)
foreachという構文を使っていることに原因があるようにも思いますが、やはりどう直せばいいかがわかりません。
0818nobodyさん
2009/12/03(木) 21:46:57ID:R411r6ifの110〜132行目(参考)
function wp_dtree_get_count($nodedata, $treetype){
global $wpdb;
$idtranspose = wp_dtree_get_id_transpose();
$count = '';
if($treetype == 'cat'){
$catid = $nodedata['id']-$idtranspose['cat']; //DONT put this calculation in the parameter list. http://wordpress.org/support/topic/148638?replies=3
$catobj = get_category($catid);
$count = $catobj->category_count;
$children = get_categories( //a roundabout way to get the padded count of this category...
array(
'type' => 'post',
'child_of' => $catid,
'orderby' => 'ID',
'order' => 'DESC',
'hide_empty' => false,
'include_last_update_time' => false,
'hierarchical' => 1,
'exclude' => '',
'include' => '',
'number' => '',
'pad_counts' => 1
)
);
0819nobodyさん
2009/12/03(木) 21:48:26ID:???0820nobodyさん
2009/12/03(木) 21:49:19ID:???エンコード変換以外に必要なのは、実体参照になってるのを戻してやるぐらいか。
0822nobodyさん
2009/12/03(木) 21:52:49ID:R411r6ifこのプラグインを使うとカテゴリーをExplorer状に折りたたんで表示することができるんです。
同じようなプラグインはあるのですが、これが一番見た目はよくできているのです。
0823nobodyさん
2009/12/03(木) 21:54:33ID:R411r6ifそこで聞いてみます。すみません。
0824nobodyさん
2009/12/03(木) 21:55:55ID:DjsgAevRまさにそれ作ってます。
2chのAAで使われるような絵記号とか3/4スペースとかあるとおかしくなりませんか?
うちの環境だと、convert_enc〜が何も吐かない時と?を吐くときとランダムで、
DATサイズ合わないので困ってます。
ttp://labs.moene.ws/2wit/
0825nobodyさん
2009/12/03(木) 22:37:07ID:???$string = "abc"; //UTF-8でエンコードされた文字列
$length = mb_strlen($string,"UTF-8"); //文字数を取得
$return = "";
for($i = 0; $i > $length; $i++){
$return .= "?".mb_convert_encoding($str,"Unicode","UTF-8").";";
}
文字列を全部数値文字参照に変換するものを書いてみた
forの中にShift_JISの範囲内に入っているかを判別する式を書いて振り分ければ望んだ動作になるはず
0826nobodyさん
2009/12/03(木) 22:38:42ID:???は
$return .= "&#".mb_convert_encoding($str,"Unicode","UTF-8").";";
だ、ミス。
0827nobodyさん
2009/12/03(木) 22:40:00ID:???$return .= "&#".mb_convert_encoding($string{$i},"Unicode","UTF-8").";";
0828nobodyさん
2009/12/03(木) 22:44:49ID:???当然のように化けてた。
# Twitでも化けてたから(見た目は同じ?に置換)見慣れてしまってて気付かなかった。
コードは取れるだろうから素直にHTMLの数値参照に置き換えるのがベストなんだろうな
0829nobodyさん
2009/12/03(木) 22:44:55ID:ZvKoTbw+>>825-827
おおお。ありがとうございます!
ちょっくら試してみます。Unicode、考えてもいませんでした。
あとはUnicode<>ShiftJISの対照テーブルですね。
0830nobodyさん
2009/12/03(木) 22:48:50ID:???何かおかしいと思って動かしてみたら動かなかった。肝心の数値に変換するところを忘れてたわ何度もスマン
$return .= "&#".hexdec(bin2hex(mb_convert_encoding($string{$i},"Unicode","UTF-8"))).";";
0831nobodyさん
2009/12/03(木) 22:52:17ID:ZvKoTbw+そこなんですよね。
今の環境(PHP5.2.5)だと、?にすらならずにNULLで返ってくることがあるという。。。
さっき教示いただいた方法と、mb_encode_numericentityの方法とを試してみます。
SJISとのコード範囲が直接対応しないので今泣いてますw
>>830
ちゃんと脳内補完しておりました。いろいろありがとうございます。
もし躓いたらアドバイスいただけるとうれしいです。。。
0832nobodyさん
2009/12/03(木) 23:02:23ID:???↓
$return .= "&#".hexdec(bin2hex(mb_convert_encoding(mb_substr($string,$i,1,"UTF-8"),"Unicode","UTF-8"))).";";
マルチバイト考慮してなかったわ、、頭が回ってないな
0833nobodyさん
2009/12/03(木) 23:12:10ID:ZvKoTbw+Unicode.orgのJIS資料見てました。さんくすです。
0834nobodyさん
2009/12/04(金) 00:51:20ID:pWkVeJ5Lほんとうにありがとうございました。解決しました。
SJISのテーブルを配列で持って、in_arrayで判定していますが
ちょっとロス多いし重いので改善します。
0835nobodyさん
2009/12/04(金) 01:09:35ID:???$string = "【PHP】下らねぇ質問はID出して書き込みやがれ 90";
$length = mb_strlen($string,"UTF-8");
$return = "";
for($i = 0; $i < $length; $i++){
$now = mb_substr($string,$i,1,"UTF-8");
if(preg_match("/[\0-\ff]|[ -滌]|[漾-K]/",bin2hex($now)) == 1) {
$return .= $now;
}else{
$return .= "&#".hexdec(bin2hex(mb_convert_encoding($now,"Unicode","UTF-8"))).";";
}
}
正規表現で纏めると楽。
動かしてないからバグ含むかもしれないが
0836nobodyさん
2009/12/04(金) 01:10:53ID:???0837nobodyさん
2009/12/04(金) 01:23:42ID:pWkVeJ5Lあー。範囲をざっくりでよければそれが楽だし早そうですね。
かなり遅くなって、2000レスくらいあるとタイムアウトになるのでw
明日起きたら修正してみます。
本当に助かりました。ありがとう。
0838nobodyさん
2009/12/04(金) 01:28:11ID:pWkVeJ5L…あれ?
眠くて頭回ってないんですが、preg_replaceつかえばfor回さなくていけそうな気が。
起きたらやってみます。スレ汚しすみませんでした。
0839nobodyさん
2009/12/04(金) 01:51:51ID:???漢字の表にらめっこしてて気づいた。UTF-8の[漾-K]とsjisの[漾-K]は違う、と
なのでPHPに直接漢字を書いたら意味を成さない
mb_convert_encodingでshift_jis範囲外の文字をshift_jisに変換すると\x0-\xffの範囲に収まる文字に化けることに気づいたので
書いてみた。これで今度こそちゃんと動くはず
<?php
$string = "ここにsjis範囲外の文字を混ぜてみるといいよ";
$length = mb_strlen($string,"UTF-8");
$return = "";
for($i = 0; $i < $length; $i++){
$now = mb_substr($string,$i,1,"UTF-8");
$sjis = mb_convert_encoding($now,"Shift_JIS","UTF-8");
if(preg_match('/^[\x0-\xff]$/',$now) == 1) {
//半角文字はスルー
$return .= $now;
}else if(preg_match('/^[\x0-\xff]$/',$sjis) == 1) {
//半角文字ではないのにsjisに変換したら半角文字になったらsjis範囲外と判定
$return .= "?".hexdec(bin2hex(mb_convert_encoding($now,"Unicode","UTF-8"))).";";
}else{
//それ以外は対応していると判定
$return .= $now;
}
}
echo $return;
?>
0840nobodyさん
2009/12/04(金) 08:37:23ID:k0I4hXn9出勤途中なんであとでためしてみます。
現状の方法だと、sjisにあるunicodeのコード表を持っているためかメモリ•時間のコストが高いです。
最終的に一文字ずつの処理がネックにならなければいいのですが。。
0841nobodyさん
2009/12/04(金) 09:30:36ID:???変換できない文字もなんとかしたいなら
mb_substitute_character("long");
0842nobodyさん
2009/12/04(金) 09:57:19ID:bmPzZ+0rうわわわわ。1行で解決しちゃった。この関数知りませんでした。。。
本当にありがとうございます。
longで出した後に、該当だけpreg_matchで数値参照形式に置換しました。
速度も従来と同じですし快適です。
>>839, >>841 重ね重ね御礼です。ありがとうございました。勉強になりました。
0843nobodyさん
2009/12/04(金) 10:10:50ID:???うーん。よく見たら期待するunicode値がでないですね。。。
&#9992;になって欲しいところ、出力は&#2708;(U+2708)
0844nobodyさん
2009/12/04(金) 10:28:04ID:???0845nobodyさん
2009/12/04(金) 10:51:45ID:???0846nobodyさん
2009/12/04(金) 14:13:59ID:QlPFqhzQ$NewID=10;
$NewFile = @fopen("ID/"+$NewID+".txt, "w");
のようにファイル名の中に変数を用いたいのですが、どうすればいいのでしょうか?
0847nobodyさん
2009/12/04(金) 14:20:48ID:???0849nobodyさん
2009/12/04(金) 14:27:42ID:???0850nobodyさん
2009/12/04(金) 15:03:29ID:???0851nobodyさん
2009/12/04(金) 15:06:45ID:???0852nobodyさん
2009/12/04(金) 15:08:19ID:???これと
"ID/{$NewID}.txt"
これとかは許せるけど
"ID/".$NewID.".txt"
これだけは許せない。
0853nobodyさん
2009/12/04(金) 15:10:08ID:???0855nobodyさん
2009/12/04(金) 15:26:59ID:???0856nobodyさん
2009/12/04(金) 16:09:48ID:++QWFr0HPHP5.2.6で実行エラーが出るので、最新版5.3.1をインストールしました。
これでDOS上は問題なく動いたので、Apache(Localhostサーバー)を
試すため下記の phpinfo.php をFireFoxで実行したところ、PHPのバージョンが
5.2.6のままでした。
<?php
phpinfo();//上の行の <? タグが消えています
?>
php -v で確認したところ、やはりDOSでは5.3.1です。
これって、動作上の不具合は起きますか?(今のところ起きていませんが・・・)
0857nobodyさん
2009/12/04(金) 16:10:01ID:???変数展開必要かどうかで使い分けて欲しい。
0858nobodyさん
2009/12/04(金) 16:12:35ID:???■ このスレッドは過去ログ倉庫に格納されています