【PHP】下らねぇ質問はID出して書き込みやがれ 112
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/10/31(月) 05:11:09.81ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 111
http://hibari.2ch.net/test/read.cgi/php/1317232566/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0671nobodyさん
2011/11/20(日) 22:07:09.83ID:???$a = array(1,null,2);
var_dump($a);
function f($v) {if(null !== $v)return $v;}
$b = array_filter($a, 'f');
var_dump($b);
0672nobodyさん
2011/11/20(日) 22:32:27.44ID:vzLDxTjZarray_filter()でNULLの要素を除去するという
array_map()とarray_filter()との二つの関数を組み合わせないといけないんですねやっぱり
0673nobodyさん
2011/11/20(日) 23:33:46.09ID:???$arr = array(1,null,2,null,null,3,4) ;
$res = array_filter($arr, create_function('$val', 'return is_null($val) ? false : $val;'));
print_r($res);
Array
(
[0] => 1
[2] => 2
[5] => 3
[6] => 4
)
0674nobodyさん
2011/11/20(日) 23:40:35.18ID:???function filter($a){
$temp = array();
foreach($a as $v){
if (is_null($v)){
$加工 = 加工;
$temp[] = $加工;
}
}
$a = filter($a);
0675125
2011/11/20(日) 23:49:15.90ID:yTe92qw6PDOでプリペアドステートメントを使えばとりあえずおkということでいいんでしょうか?
0676nobodyさん
2011/11/20(日) 23:49:38.62ID:???を見ていただくとわかると思いますが、jQuery.map()は、
コールバック関数がNULLを受け取った場合(配列の要素がNULLだった場合)
ではなく、
コールバック関数がNULLを返した場合
に、その要素を配列から取り除く機能があります
0679nobodyさん
2011/11/21(月) 00:47:54.10ID:???0680nobodyさん
2011/11/21(月) 00:57:37.85ID:???ってかけるようになんないかな将来
0682nobodyさん
2011/11/21(月) 01:13:40.78ID:???0684nobodyさん
2011/11/21(月) 09:42:24.17ID:GGnSchRT$pass);
$sql = 'DELETE FROM table WHERE id = :id';
$stmt = $con->prepare($sql);
$stmt->bindParam(':id', $_POST['id']);
$stmt->execute();
この書き方でSQLインジェクションを防げているでしょうか?
0685nobodyさん
2011/11/21(月) 10:46:02.15ID:???日本語を扱い、かつテキストエディタで直接編集がしたくて、データ1件1行で処理したい。というデータなので
json_encodeは日本語が"\u3042\u3044\u3046\u3048\u304a"とエンコードされてしまうから直接編集の時に困り
serializeとvar_exportは直接編集に不向きで
SQLはテキストエディタで編集出来ません。
json_encode、serializeとvar_export以外に配列のデータを一行に、かつ日本語をそのままで確認出来るテキストに変換してくれる関数はありますでしょうか
又は、"\u3042\u3044\u3046\u3048\u304a"を"あいうえお"と変換するにはどうしたらよいのでしょうか
0686nobodyさん
2011/11/21(月) 11:13:26.27ID:cDijwsFNそのファイルをインクルードするじゃないですか。
classの場合、別のファイルにクラスが書いてあった場合
それを利用するのに特にインクルード的なことは
しなくても良いのですか?
0687nobodyさん
2011/11/21(月) 11:17:55.45ID:???はい
>>685
普通にテキストファイルで出力すればいい話でしょうか?
$text = "\u3042\u3044\u3046\u3048\u304a" ;
print mb_convert_encoding(preg_replace("/\\\\u([0-9a-zA-Z]{4})/e", "pack('H*','$1')",$text),"UTF-8","UTF-16");
0688nobodyさん
2011/11/21(月) 11:19:55.89ID:???http://php.net/manual/ja/language.oop5.autoload.php
0690nobodyさん
2011/11/21(月) 12:21:43.64ID:???\uxxxx形式をHTML 数値エンティティ形式に変換してから
$str = "あいう";
$convmap = array(0x0080, 0xffff, 0, 0xffff);
$encoding = "UTF-8";
echo $a = mb_encode_numericentity($str, $convmap, $encoding);
$convmap = array (0x0, 0xffff, 0, 0xffff);
$b = mb_decode_numericentity($a, $convmap, $encoding);
echo $b;
0691nobodyさん
2011/11/21(月) 15:02:41.44ID:???あれってイメージとしては、
インターフェースをつかさどるファミコンという親クラスがあって
そこにカセットというゲームシステムのつまった子クラスを刺す感じ?
で、なんやったらそのカセットにも拡張スロットが付いてて
カセットにいろいろなカセットを差したら、
同じゲームシステムで色々なキャラクターが楽しめるみたいな感じ?
で、別のゲームシステムのカセットにそのキャラクターカセット差したら
そのキャラクターで別のゲームシステムが遊べるみたいな感じ?
0694nobodyさん
2011/11/21(月) 15:37:00.68ID:???0695nobodyさん
2011/11/21(月) 15:39:32.40ID:???0696nobodyさん
2011/11/21(月) 15:44:45.94ID:???0699nobodyさん
2011/11/21(月) 16:46:49.12ID:???0700nobodyさん
2011/11/21(月) 18:11:05.02ID:p9LTZGBkforeach()内で、まずデータベースからフラグを確認し、TRUEであれば未処理、FALSEであればフラグを立てるとします
例えば
foreach ($abstractlinks as $link)
{
$flag = $prowl->flagCheck($link);
//If we have visited or scheduled to visit
if ($flag !== 0) {
continue;
}
$prowl->raiseFlag($link);
}
のようにです
この場合、2つの各関数毎に同じデータベースに接続しないといけませんが、
無駄なように思います
このような場合どのようにすればいいのでしょうか?
キャッシュというのもraiseFlag()にて更新を用いるので不可能なような気がします
効率的なDB接続法を教えていただけないでしょうか?
0701nobodyさん
2011/11/21(月) 18:13:41.26ID:???0702nobodyさん
2011/11/21(月) 18:16:12.29ID:???一度に必要な全部のデータをもってきてforeachして、
updateするIDをarrayに貯めといて、後でupdateじゃだめなの?
0703nobodyさん
2011/11/21(月) 18:29:21.66ID:???コネクションを保持しておく関数あるいはクラスを作って
コネクションプーリングするのが定石
必要なときに取得、不要になったら切断せずに返却、という流れで
0704nobodyさん
2011/11/21(月) 18:36:17.97ID:372LMnzXindex.htmlならAコードを表示させ、それ以外のURLならBコードを表示させるというように
index.htmlとそれ以外のhtmlで表示を変えたいです。
使われるURLによって表示の振り分けはできるのでしょうか。
振り分けについてはユーザーエージェントで振り分けることができるくらいの理解度しかありません。
0706nobodyさん
2011/11/21(月) 18:40:05.17ID:p9LTZGBkご回答ありがとうございます
ごめんなさい、自分の実力がないせいかイメージが沸きませんでした
リンクを100個とか入れた配列があり、
それを0:未訪問(デフォルト)、1.訪問予定、2.訪問済みのようにフラグを立てようと思っています
で、それぞれをまずフラグの値を確認し、0なら1に変更、2なら無視といったことをしたいと思っています
このような場合は配列に貯めて一気に更新させるにはどのようになりますか?
>>703
ご回答ありがとうございます
PDOを自分は使っているのですが、
$db = new PDO($dsn, $username, $passwd, $options);
を格納した関数を用意するだけでいいのでしょうか?
>必要なときに取得、不要になったら切断せずに返却
というのが自分にはスクリプトが浮かびませんでした
0707nobodyさん
2011/11/21(月) 18:43:27.40ID:???>このような場合は配列に貯めて一気に更新させるにはどのようになりますか?
それくらいupdateでググってみたら?
0708nobodyさん
2011/11/21(月) 18:46:26.37ID:???0709nobodyさん
2011/11/21(月) 18:53:06.18ID:???接続が一つだけでいいなら
function get_connection() {
static $pool;
if (!$pool) { $pool = /* 接続 */; }
return $pool;
}
ちなみにフラグを操作するだけだったらこれで済む
UPDATE table SET flag = 1 WHERE flag = 0
0710nobodyさん
2011/11/21(月) 19:00:15.72ID:372LMnzXinclude、requireも理解しています。
使われるURL(ファイル)で振り分けができるかどうかです。
現在のファイル位置がindex.htmlの場合は
Aコードを表示
↓
現在のファイル位置がindex.html以外になら
Bコードを表示
のように振り分けたいです。
0712nobodyさん
2011/11/21(月) 19:21:23.10ID:???REQUEST_URIでも絶対パスでもいいので
位置つかんで該当する場所ではコードを変えるようにしたいです。
0713nobodyさん
2011/11/21(月) 19:22:16.51ID:372LMnzXID表示わすれてました。もうしわけない
0714nobodyさん
2011/11/21(月) 19:36:20.75ID:cDijwsFN10月から数えて現在までの間を1ヶ月ごと選択できて
現在だと
2011月10月▼
2011月11月
と表示され、月が増えるごとに
2011月10月▼
2011月11月
2011月12月
2012月1月
2012月2月
と増えていく処理を作成したいのですが、
単純に30日ごとに増やせばいいというものでもなく
どう計算、処理していいか分かりません。
ご指導お願いします。
0715670
2011/11/21(月) 20:02:04.04ID:???ひとつの関数では無理で複数の関数を組み合わせるとかforeachを使うとか
になるんですね。どうもありがとうございました
0717nobodyさん
2011/11/21(月) 20:06:55.30ID:???DateTimeだったら 日を1とかにしといて DateInterval('P1M') やら modify('+1 month')
昔の方法だったら mktime( 0,0,0,$m+$i,1,$y)とか
2、 年と月を別の変数にして月足していって12超えたら年繰上げ
0719nobodyさん
2011/11/21(月) 20:32:24.70ID:372LMnzXすまん。甘えたわ。後は調べればわかります。
ありがとうございました。
0721nobodyさん
2011/11/21(月) 20:39:50.46ID:???ってだけで他意はありません
0722nobodyさん
2011/11/21(月) 20:42:24.85ID:???0723nobodyさん
2011/11/21(月) 21:25:32.28ID:???日数で足すな。月数を足してけ
やりかたはこの2ページ見ればできる
http://www.php.net/manual/ja/datetime.add.php
http://www.php.net/manual/ja/dateinterval.construct.php
0726nobodyさん
2011/11/21(月) 21:40:21.33ID:cDijwsFNdate_interval_create_from_date_string....
長い…
0727nobodyさん
2011/11/21(月) 22:39:24.86ID:vmm+j8qy{foreach from=$hoge item=val}
{php}{/php}
{/foreach}
というテンプレートで、
{php}{/php}内でvalにアクセスするには
どう書けばいいですかね?
0728nobodyさん
2011/11/21(月) 22:42:44.69ID:???0729nobodyさん
2011/11/21(月) 22:50:27.82ID:???print_r($this->get_template_vars('val'));
{/php}
スレ違い
0730nobodyさん
2011/11/21(月) 23:17:35.15ID:???0731nobodyさん
2011/11/22(火) 01:05:08.33ID:???<?php foreach ($hoge as $val) : ?>
<?php echo $val; ?>
<?php endforeach; ?>
でええっちゅうに
0732nobodyさん
2011/11/22(火) 01:29:26.20ID:???0733nobodyさん
2011/11/22(火) 01:52:41.16ID:???0734nobodyさん
2011/11/22(火) 07:49:03.06ID:???0735nobodyさん
2011/11/22(火) 08:51:45.91ID:???なんて便利なんだ!
とか
これ考えたやつすげえ!
とか
感じたことないんだが。
0736nobodyさん
2011/11/22(火) 09:13:09.27ID:???<?php include("header.html");?>で済む話だな。
0737nobodyさん
2011/11/22(火) 09:22:29.01ID:???0738nobodyさん
2011/11/22(火) 10:55:24.01ID:???ま、どのテンプレートエンジンもそうだけど、
PHPベタ書きよりはいい
0739nobodyさん
2011/11/22(火) 12:55:43.29ID:spTidUMWうん、だからスマーティを習得しようとしたとき、
スマーティに感動したというより
MVCに感動した
0740nobodyさん
2011/11/22(火) 13:03:39.72ID:???MとCは分離できてない。
0741nobodyさん
2011/11/22(火) 13:07:08.85ID:OIOakh7Vそうそう凄いって事はないだろ。
テンプレートエンジンでこれはすごいとかあるの?
0742nobodyさん
2011/11/22(火) 13:57:42.44ID:???結局、制作と開発の分離だけだとは思ってる。
複数人開発でも、ひとりでも、その部分は相当楽になった。
<?php ってかくか、{って書くかで、HTMLソースの見やすさは全然違うけどな。
ま、そこは慣れか。
0743nobodyさん
2011/11/22(火) 14:11:52.71ID:???ただのオーバヘッド発生源
0744nobodyさん
2011/11/22(火) 14:27:17.60ID:64j3oBDQPHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/json.so' - /usr/lib64/php/modules/json.so: undefined symbol: ZVAL_DELREF in Unknown on line 0
と警告が出ます。
直し方を教えて下さい
0745nobodyさん
2011/11/22(火) 14:40:40.14ID:???http://d.hatena.ne.jp/jksy/20110128/1296227136
コレで治るかは分からんが
0746nobodyさん
2011/11/22(火) 16:02:57.23ID:64j3oBDQ最新のPHPを入れた後に、pecl install jsonをするとおかしくなるようだ
PHPのセットアップに昔作ったスクリプトを使ったのが敗因か
0747nobodyさん
2011/11/22(火) 17:01:49.19ID:???関数から別の関数に値を渡して
その関数で渡された値を処理して、また別の関数に渡して・・
としていると、今関数に渡された値(配列)にどのようなデータ、配列のキーが入っているのかが分からなくなる事がよくあります
こういう状態を防ぐのによい方法がありましたら教えて欲しいです。
0750nobodyさん
2011/11/22(火) 17:41:38.13ID:???よけいにややこしくなる可能性も大w
0751nobodyさん
2011/11/22(火) 18:12:58.70ID:???真実は一つだけ
怒りは自然な感情
戦争・テロは無くならない
死刑には殺人の抑止力がある
虐められる側にも虐めの原因がある
自己チューな人間ほど自己愛が強い
などの命題の間違いとその論拠を解説
義務教育では絶対教えない最新合理主義哲学
感情自己責任論
0752nobodyさん
2011/11/22(火) 18:19:13.97ID:???まで読んだ
0753nobodyさん
2011/11/22(火) 18:25:47.38ID:/8xSqwNzex.現在の時間が2011/11/22 18;24;30なら22日18;24;30のミリ秒のタイムスタンプがほしいです。
どのようにすればよいでしょうか?
0754nobodyさん
2011/11/22(火) 18:36:13.34ID:t9MFvl4Kmicrotimeかなんかがすぐ出てくる
0755753
2011/11/22(火) 18:42:27.85ID:/8xSqwNzceil(microtime(true)*1000); で年月含めたタイムスタンプ(ミリ秒)
を取った後年月以外の値を0にした タイムスタンプ(ミリ秒)を用意して 前式から引き算で
目的の年月を含まないタイムスタンプ(ミリ秒)を取得しようとしてました。
しかし年月以外の値を0にした タイムスタンプ(ミリ秒)の取得ができません。
mktime(0, 0, 0, date("n"), 0); で 年月以外の値を0にした タイムスタンプ(秒)
なら取れるのですが、ミリ秒ではとり方がわからないです。
0758753
2011/11/22(火) 19:01:51.25ID:/8xSqwNzまずほしいタイムスタンプは、現在日時より年、月を除いたタイムスタンプです。
年月を含めたタイムスタンプだと桁数の関係上不都合があります
ex.1970年1月1日午前0時のタイムスタンプ(ミリ秒)が
102241660710だとします。
ほしいタイムスタンプはこのタイムスタンプから
1970年1月0日0時のタイムスタンプを除いた値です。
1970年1月0日0時のタイムスタンプが102240000000だとすると
求めるタイムスタンプは102241660710-102240000000=1660710です。
0760753
2011/11/22(火) 19:19:02.13ID:/8xSqwNz式で書いていただけませんか?お願いします。
0761nobodyさん
2011/11/22(火) 19:30:59.53ID:???0762nobodyさん
2011/11/22(火) 19:32:17.62ID:???桁数の問題で下駄履かせるなら、もっと最近じゃないと
桁数の問題として 何桁にしたいの?
数値が秒なんだから 7桁 9999999 までにしたいとして も 115日しか取れないよ?
0763nobodyさん
2011/11/22(火) 19:33:24.23ID:???↑これ意味がよく分かりません
0764nobodyさん
2011/11/22(火) 19:35:04.85ID:/8xSqwNzよろしくお願いします。
0765nobodyさん
2011/11/22(火) 19:42:35.73ID:/8xSqwNz$date = floor(microtime(true)*1000) - floor(mktime(0, 0, 0, date("n"), 0)/1000);
ですか?
ありがとうございます。試してみます。
0766nobodyさん
2011/11/22(火) 19:53:12.40ID:???$time = floor($mtime);
$date = mktime(date('H', $time), date('i', $time), date('s', $time), 1, date('d', $time), 1970);
echo ceil(($date + $mtime - $time) * 1000);
こうじゃね多分
0767nobodyさん
2011/11/22(火) 20:01:05.46ID:???現在時刻から 0時0分0秒の0月の同日 つまり先月の同じ日(一ヶ月まえですらない)を引いてて意味分かんない数値になってるし。
みんなが出してくれた式の意味分かんないんじゃない?
0768nobodyさん
2011/11/22(火) 20:10:41.90ID:???× 0時0分0秒の0月の同日 つまり先月の同じ日
○ 0時0分0秒の0月の同日 つまり昨年12月の同じ日
mktime(0, 0, 0, date("n"), 0)は
× 0時0分0秒の0月の同日
○ 0時0分0秒の同月の0日 つまり先月末
0769nobodyさん
2011/11/22(火) 20:11:36.29ID:???0770nobodyさん
2011/11/22(火) 20:24:31.09ID:???■ このスレッドは過去ログ倉庫に格納されています