【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等)・フレームワークは各該当スレへ
0611nobodyさん
2011/11/18(金) 23:46:36.76ID:tf7WOWeBすみません
ただ単純に、画像を取得して例えばブラウザに表示させたいと思いまして
自分はcURLを使って全体を取得してテキスト文はDOM使って表示させたのですが、
画像の表示のさせ方が分からなかったもので
0613nobodyさん
2011/11/18(金) 23:57:18.17ID:???プロキシみたいなことしたいのかな
0614nobodyさん
2011/11/19(土) 00:01:05.04ID:djjAwZHJなるほど・・・
確かにそうですね
教えてくれてありがとうございます
ちょっと試してみます
0615nobodyさん
2011/11/19(土) 00:07:40.97ID:???0616nobodyさん
2011/11/19(土) 00:07:46.89ID:djjAwZHJデータベースやディレクトリに保存しようと思いまして
ブラウザは簡単なテスト環境と思いまして
0617nobodyさん
2011/11/19(土) 00:10:43.56ID:???0618nobodyさん
2011/11/19(土) 00:14:21.83ID:???0619nobodyさん
2011/11/19(土) 00:29:41.91ID:djjAwZHJハハハ、いや、エロ画像を集めるつもりはないのですが・・・
しかし訳がわからなくなってきました
cURLで取得したHTMLを(CURLOPT_RETURNTRANSFERを使用しているのでファイルには保存していません)、
DOMDocumentにてloadHTMLしてquery('//img/@src')などとしたし、
ブラウザに表示する場合はhttp://hoge.com/を付けるのまでは分かるのですが、
こっからどのような処理をすればディレクトリやデータベースに格納できるのでしょうか?
ザッと見、cURLやDOMDocument系にはそのような関数がないように思えるのですが
0621nobodyさん
2011/11/19(土) 00:40:35.70ID:djjAwZHJあぁ、やっぱそうなると>>611で質問したように、
file_get_contents()しかないんでしょうか?
0622nobodyさん
2011/11/19(土) 00:43:32.98ID:???0624nobodyさん
2011/11/19(土) 00:54:00.85ID:???0626nobodyさん
2011/11/19(土) 11:06:26.33ID:???0627nobodyさん
2011/11/19(土) 12:50:04.81ID:???0628nobodyさん
2011/11/19(土) 15:09:54.67ID:djjAwZHJマッチした値を排除するような使い方をしたいのですがどのようにすればいいのでしょうか?
foreach()で値を得て、それらを正規表現で・・・と思ったのですが
$iのように数字を使い、array_slice()を使うのかなとも思いましたが良く分かりませんでした
0630nobodyさん
2011/11/19(土) 15:28:21.89ID:???その場合はarray_slice($arr, $i-1, 1)とかのようにするのでしょうか?
それとも全く別の配列を作成し、マッチしなかったものをその別の配列に入れるのがいいのでしょうか?
0632nobodyさん
2011/11/19(土) 15:32:54.65ID:???自分は、他人(新人or後任者)が見てもわかりやすいように書いてるから、新しい配列に入れるね
自分一人だけだったら、いろいろなやり方試してみてもいいんじゃない?
0633nobodyさん
2011/11/19(土) 16:18:00.10ID:ZMwiibDDhoge()[0]
のような書き方はできないのでしょうか?
(hoge()は配列を返す)。
array_shift(hoge())
で、いちおうできるのですが、
ちょっとカッコ悪いので・・・
0634nobodyさん
2011/11/19(土) 16:19:02.24ID:???foreach($array as $key => $val )
if ($val % 2 == 0)
unset($array[$key]);
print_r ($array);
0636nobodyさん
2011/11/19(土) 16:44:31.71ID:???0637nobodyさん
2011/11/19(土) 18:58:14.72ID:X5SG6smtそういや6.xってどうなったんだ・・・?
0638nobodyさん
2011/11/19(土) 19:43:45.93ID:???0639nobodyさん
2011/11/20(日) 01:46:04.87ID:???もし、これが企業のプロジェクトだったらマネジメント層全員減給またはクビだぞ
0640nobodyさん
2011/11/20(日) 01:57:47.15ID:???0641nobodyさん
2011/11/20(日) 01:57:57.34ID:???0644nobodyさん
2011/11/20(日) 02:46:59.47ID:1V6hVVY4$result = mysql_query($sql);
で、取得したひとつのデータを変数に代入したいのですが
while(mysql_fetch_array($result)){処理}
みたいに書くしかないんでしょうか。
データ一件しかないのにwhileを使うのが気持ち悪いので
他の方法があればそちらを使いたいです。
0645nobodyさん
2011/11/20(日) 02:49:07.99ID:???とおもったら大抵のサイトがそういう説明になってたから理解しにくいものじゃなさそうだね
0649nobodyさん
2011/11/20(日) 12:59:03.75ID:???そろそろ…って声聞いて二年経ってんだよ
PHP6.0の開発自体は2005年から開始している
こっちはどこがどう変更されるのかピリピリしてんのによ
もう出すなよ、PHP5.2193くらいまでやればいい
0650nobodyさん
2011/11/20(日) 13:01:37.43ID:???php5.5の勘違いじゃないの?
0651nobodyさん
2011/11/20(日) 13:42:09.57ID:???0652nobodyさん
2011/11/20(日) 14:50:05.47ID:???0653nobodyさん
2011/11/20(日) 14:52:32.63ID:W2VBDeCoそのリンクが200なのか304なのか、404なのかといった具合にです
その為だけにcURLやfile_get_contents()でページごと取得するのも
無駄だと思いまして
get_headers()というのがあり試してはみましたが、一般的にはこれを使えばいいのでしょうか?
それとももっといい関数やライブラリががあるのでしょうか?
ステータスコードのみ取得して軽いというなものがあれば教えていただきたいです
0654nobodyさん
2011/11/20(日) 15:20:15.39ID:???0655nobodyさん
2011/11/20(日) 16:05:24.08ID:???get_headers() でok
やってることはみんなHEADメソッドで取得してるだけだからね
http://php.net/manual/ja/function.get-headers.php#example-3635
0656nobodyさん
2011/11/20(日) 16:30:35.68ID:???0659nobodyさん
2011/11/20(日) 17:33:26.93ID:???0660nobodyさん
2011/11/20(日) 17:50:25.85ID:???0661nobodyさん
2011/11/20(日) 18:38:59.27ID:???0662nobodyさん
2011/11/20(日) 19:21:24.75ID:8eiLpJTFhttp://buzzbaito.com/e/jt/2-5-22/
0663nobodyさん
2011/11/20(日) 19:25:25.11ID:???0664nobodyさん
2011/11/20(日) 19:30:43.75ID:???0665nobodyさん
2011/11/20(日) 21:03:59.96ID:hLo6zVzZ例えば登録商品の締め切り時間が三日後だったとした場合、
三日後にその商品の生存フラグのようなものをオフにしたいです。(フラグはDBに保存されている)
この期限フラグをオフにする処理はどのように実現できるのでしょうか
ユーザーの閲覧やデータの参照ごとに残り時間を確認してフラグチェックを毎回するのは流石に処理が重い気がします。
また、cronなどで自動的に寿命チェックスクリプトを回すのも商品数が増えた場合にパンクしてしまいます。
何かいい方法は無いでしょうか。
0666nobodyさん
2011/11/20(日) 21:20:22.93ID:???0667nobodyさん
2011/11/20(日) 21:21:08.01ID:???たかだか日付の比較程度を心配して、なんの処理が出来るんだっての。
flgだろうが日付だろうが何クロックちがうって程度っすよ。
0669nobodyさん
2011/11/20(日) 21:40:15.88ID:???フラグを使おうとしてたのは期限が残っているアイテムをDBから引っ張って一覧表示するのにDB負荷(メモリ等も)が軽くなるかなとの考えの下でしたが、
time() - 有効期限を事前に計算して生成日時との大小比較を条件にデータ取り出せば良かったですね
ありがとうございます
0670nobodyさん
2011/11/20(日) 21:57:23.50ID:vzLDxTjZhttp://api.jquery.com/jQuery.map/
みたいな関数はありますか?
PHPのarray_map()に加え、NULLが返されるとその要素を配列から取り除いてくれるような機能です。
やりたいことは、配列の各要素の文字列を正規表現で抜き出したものに置き換えて、
もしマッチしなかった場合はその要素を配列から取り除きたいのですが
arrayやpregの関数のところを見てもどれがその関数なのかわからなくて。
ひとつの関数では無理で複数の関数を組み合わせるとかforeachを使うとかですか?
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コードを表示
のように振り分けたいです。
■ このスレッドは過去ログ倉庫に格納されています