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

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

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

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

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
01771732010/06/05(土) 01:04:39ID:WrJc7rsM
返された文字列の文字コードを調べて、mb_convert_encodingで解決できました。
下らねぇ質問失礼しました。
0178nobodyさん2010/06/05(土) 01:09:02ID:???
>>175
mb_detect_order でぐぐってみてくれ。

>>176
問題はdocblockの文字化けじゃないの?
そらすまんかった
0179nobodyさん2010/06/05(土) 02:53:33ID:???
>>169
読み込みと書き込みの間でトランザクションが途切れているのが不整合の原因

$f = fopen('file', 'r+');
if (!flock($f, LOCK_EX)) die 'ロックできなかった';
/* ここで読み込み&書き込み */
fclose($f);

flock($f, LOCK_UN) は書き込みバッファの関係上、理由がなければ使わない
flock()自体はシステムコールのflock(),fcntl(),LockFileEx()を呼んでるだけなので
よっぽど古いファイルシステムや処理系じゃなきゃ信頼していい
01801792010/06/05(土) 03:04:11ID:???
最も外側にロック用ファイルでロックしていたのを見落としていた、ごめん
1行目の指摘は無視してくれ
0181nobodyさん2010/06/05(土) 03:07:11ID:???
>>178
別にBOMつきのエンコードでうまく動作するなら文字化けの対処方法を書いてもいいよ。
けどそれじゃだめじゃん。
0182nobodyさん2010/06/05(土) 05:26:44ID:???
>>169
ロックファイルは存在してるかどうかだと思ってたんだが
file_exsists で true なら待機みたいな
0183nobodyさん2010/06/05(土) 05:33:06ID:???
そのやり方は良くあるだめなパターンだよー
0184nobodyさん2010/06/05(土) 05:34:29ID:???
>>181
UTF8Nはいいけど彼の文字化けはどうすんだよw
つまり >>164 だろ
PHPの設定とか完全に意味不明
0185nobodyさん2010/06/05(土) 05:36:54ID:???
>>183
どして?ぜひ理由を
0186nobodyさん2010/06/05(土) 05:44:08ID:???
>>185
大丈夫な時
A             B
存在チェックOK
ロックファイル作成
              存在チェックNG

ダメな時
A             B
存在チェックOK
              存在チェックOK
ロックファイル作成
              ロックファイル作成
0187nobodyさん2010/06/05(土) 05:45:25ID:???
>>184
横?でしかもうろ覚えですまんが、
今UTF-8じゃないならスクリプトのエンコードをUTF-8に変更する時に設定変えないとだめじゃないっけ
0188nobodyさん2010/06/05(土) 06:02:52ID:???
>>186
ダメな時(B)のロックファイル作成が通るって事?
fopen() のモード x みたいな感じを想定してた。
> 書き込みのみでオープンします。ファイルポインタをファイルの先頭に置きます。
> ファイルが既に存在する場合には fopen() は失敗し、 E_WARNING レベルのエラーを発行します
> ファイルが存在しない場合には新規作成を試みます。

flockとかがアレなのはアレなんで,つまりそう言うのはDBゲホゲホ
0189nobodyさん2010/06/05(土) 06:03:58ID:???
>>187
internal encoding の事かー!!
0190nobodyさん2010/06/05(土) 08:09:37ID:???
>>188
それに頼るならわざわざfile_existsする必要なくね?
0191nobodyさん2010/06/05(土) 13:48:58ID:???
0192nobodyさん2010/06/05(土) 13:57:26ID:dqtCuv4f
以前も、PHP+MYSQLで質問させていただいたものですが良い方法が見つからないので
何方か力を貸してください。
SELECT文からtest内の値をarray関数に入れたいのですが良い方法ありますでしょうか。
mysql_fetch_arrayだと、idとtestをarrayにいれるだけで結果を全て入れる方法が
見つからない状況です。
実際には下記のように値を入れたいのです。
$a = array (aiue, okaki,kuke );
---------------------------------
| id | test |
---------------------------------
| 01 | aiue |
---------------------------------
| 02 | okaki |
---------------------------------
| 03 | kuke |
0193nobodyさん2010/06/05(土) 14:11:06ID:???
Adobe のDreamweaverCS5で開発やってる人っている?
どーも、ついに本格的にCS5でPHPのコードヒントとか関数リファレンス、
動的な部分もプレビューしてくれたりとか、プロジェクト管理もできるようです。

今エクリプスなんだけど、ちょっと乗り換えてみたいんだけど、使ってる人いたら感想とか聞きたい。
0194nobodyさん2010/06/05(土) 14:22:16ID:???
>>192
http://php.net/manual/ja/pdostatement.fetchall.php
0195nobodyさん2010/06/05(土) 14:57:38ID:???
うゎ、>>192じゃないけどfetchAll()知らんかったーorz
foreachでループしてfetchしてた…
0196nobodyさん2010/06/05(土) 15:03:14ID:???
foreachじゃなくてwhileだった
01971692010/06/05(土) 15:06:11ID:zOlNlPcy
ファイルロックについてレスしてくださった方、ありがとうございます。
現在>>179さんのアドバイスに従い、LOCK_UNの記述を削除してテスト中です。
念のため、rとwでわけていたのもr+で一度に処理するようにしてみました。

ロックファイルを使用する場合は>>188のやり方がいいんでしょうか?
これでダメだったら試してみます。
ほんとはDB使った方がいいのは百も承知なんですが、
既にサイトが稼働してるおかげで勉強&システム移行してる余裕が・・・

どうもありがとうございました。
0198nobodyさん2010/06/05(土) 15:12:55ID:???
>>186
普段DB使ってて、ファイルでのデータ管理は経験ない素人が適当なこと言って悪いけど、
ロックファイル作成後、書き込み時にロックファイルを確認すればいいんじゃない?
ロックファイルが複数あったら、先に作成されたほうだけを有効にするとか。
0199nobodyさん2010/06/05(土) 17:06:14ID:dqtCuv4f
>>194
ありがとうございます。とりあえずサンプルみて頑張ります。
(こんな関数しらんかった…)
0200質問1/22010/06/05(土) 18:17:47ID:w09PCQyp
検索させようと思ってますが、某所参考に書いたらDBの中身全部出てきてしまった。よろしくご指導願います
PHP5 & MySQL5.0
<?php
$mysql_dbs = mysql_connect("host", "user", "pass");
mysql_select_dB("db-name");
$debug = false;
if($debug) print_r($HTTP_POST_VARS);
$query = "SELECT * FROM table";
if(!empty($Col0)) {
$Col0 = addslashes($Col0);
$where = "Col0 MREGEXP '$Col0' && ";
}
if(!empty($Col5)) {
$Col5 = addslashes($Col5);
$where .= "Col5 MREGEXP '$Col5' && ";
}
0201質問2/22010/06/05(土) 18:18:54ID:w09PCQyp
if(!empty($where)) {
$where = substr($where, 0, -4);
$where = "WHERE " . $where;
}
$query .= $where;
if($debug) {
print "<BR><BR>";
print $query;
}
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
if($num_rows == 0) $message = "該当するデータはありませんでした";
else $message = $num_rows . "件ヒットしました";
?>
検索結果<br>
<?=$message?>
<table border=1><tr><td>名前</td><td>住所</td></tr>
<? while($row = mysql_fetch_assoc($result)): ?>
<tr><td><?=$row[Col0]?></td><td><?=$row[Col5]?></td></tr>
<? endwhile; ?>
</table><a href="input.html">再検索</a>
</body>
</html>
0202nobodyさん2010/06/05(土) 18:29:58ID:???
$Col0と$Col5がないんじゃ?
0203nobodyさん2010/06/05(土) 18:30:23ID:???
古くさいコードだな
0204nobodyさん2010/06/05(土) 18:35:44ID:???
某所ってどこなんだよ
0205nobodyさん2010/06/05(土) 18:47:16ID:IfiEpjR7
【OS名】
 Ubuntu 9.10
【PHPのバージョン】
 5.2.10
【連携ソフトウェア】
 MySQL
【質問内容】
 SQLインジェクションを防ぐためには、プリペアードステートメント(PDOのbindParam)を
 使うだけで十分なんでしょうか?
 怖いので、今はhtmlspecialchars($text, ENT_QUOTES)というのをやってから
 プリペアードステートメントを使ってINSERTやUPDATEをしてます。
0206nobodyさん2010/06/05(土) 19:37:59ID:???
>>205
htmlspecialcharsをそこで使うのは間違い
0207nobodyさん2010/06/05(土) 19:47:38ID:???
bindParamは変数をバインドするだけだから関係ない
prepareね

http://php.net/manual/ja/pdo.prepare.php

説明じっくりよんでみ
0208nobodyさん2010/06/05(土) 20:08:07ID:IfiEpjR7
>>206
PHPMyAdminでデータベース内を覗いて、保存されたデータを見てみると
「<」のような文字がたくさんあって、容量的に「<」という1文字より多くなるし
ぱっと見て読みにくいので、使い方が間違ってるかなと思ってました。

「エスケープ」する必要があると聞きましたが、htmlspecialcharsというのは
エスケープとは違うんでしょうか?

>>207
あ、そうです。prepareです。
例えば、

$sql = "INSERT INTO testtable (testcolumn) VALUES (:testcolumn)";
$stmt = $db->prepare($sql);
$stmt->bindParam(':testcolumn', $_POST['data1']);
$stmt->execure();

という風にやってます。
「基礎からのPHP」という本で学んだやり方です。
これだけでSQL対策は十分ですか?

よろしくお願いします。
0209nobodyさん2010/06/05(土) 20:09:02ID:IfiEpjR7
「SQL対策」は「SQLインジェクション対策」の誤りでした。すみません。
0210nobodyさん2010/06/05(土) 20:12:56ID:XPkr7TFj
>>200
http://php.dori-mu.net/source/source.php?src=search/search.phps
これ見てやったんだろう?
これおれうごいたから。
お前どっかぬけているんだよ。
まずは元ソースが動くか試してみな
0211205、208です2010/06/05(土) 22:46:24ID:IfiEpjR7
SQLインジェクションとXSSを混同してたようです。
いろいろ調べてみて自分で理解したことを書いてみます。

・DBに保存するとき
  SQLインジェクションの対策としてプリペアードステートメント(PDO::prepareなど)が必要
  それを使えばhtmlspecialcharsは不要

・ブラウザに出力するとき
  XSSの対策としてhtmlspecialcharsを使う

これで合ってますでしょうか?
プリペアードステートメントを使わない場合、htmlspecialcharsでは代わりになりませんか?
0212nobodyさん2010/06/05(土) 23:00:07ID:???
マニュアルをちゃんと読んだらどうなんだ
PDO使ってるならPDOのメソッド一覧あるんだから1つずつどういうものがあるか確認するぐらいしなさいよ

>プリペアードステートメントを使わない場合、htmlspecialcharsでは代わりになりませんか?
http://www.php.net/manual/ja/pdo.quote.php

htmlspecialcharsはxss対策に使うものでsqlインジェクション対策に使う関数ではありません
0213nobodyさん2010/06/05(土) 23:08:36ID:bkBaLixK
質問です

28habcpt918のような英数字の組み合わさった文字列を
最後の数字の部分だけ00918のように頭に0を加えて5桁にしたいのですが、
文字列のパターンはabc123や987xyz12のようにさまざまです。

つまり、
28habcpt918なら28habcpt00918、
abc123ならabc00123、
987xyz12なら987xyz00012のようにしたいです。

アドバイスお願いします
0214nobodyさん2010/06/05(土) 23:11:27ID:???
>>213
正規表現でいいじゃん
0215nobodyさん2010/06/05(土) 23:25:25ID:IfiEpjR7
>>212
すみません、既に読んでます。
お尋ねしたいのは以下の2点です。

・プリペアードステートメントを使えば、SQLインジェクションの対策としては完璧ですか?

・SQLインジェクションを防ぐ方法はプリペアードステートメントを使うのが良いのはわかりますが、
 htmlspecialcharsを使う方法が代わりにならない理由は何ですか?
 (数値が期待される部分では、その部分に用いる値をintval()で数値化する方法もダメですか?)
0216nobodyさん2010/06/05(土) 23:32:48ID:???
>>215
>プリペアードステートメントを使えば、SQLインジェクションの対策としては完璧ですか?
いいえ
プリペアードステートメントとは簡単に言えばSQLを高速に実行するための準備のことなので
sqlインジェクションとは関係ありません
PDO::prepareはこの準備をしつつSQLインジェクション対策を同時に行うメソッドです

>・SQLインジェクションを防ぐ方法はプリペアードステートメントを使うのが良いのはわかりますが、
> htmlspecialcharsを使う方法が代わりにならない理由は何ですか?
xssとsqlインジェクションとではエスケープすべき文字列が異なるからです
02172132010/06/05(土) 23:34:04ID:bkBaLixK
>>214
つまりどう書けばいいんですか?
0218nobodyさん2010/06/05(土) 23:37:11ID:???
>213
preg_match("/[0-9]+$/", $str);
0219nobodyさん2010/06/05(土) 23:37:52ID:???
>>213
$str = "28habcpt918";
$length = count($str) - strlen((int)strrev($str)) - 1;
$format = sprintf("%05d", strrev((int)strrev($str)));
echo substr($str, 0, $length) . $format;
0220nobodyさん2010/06/05(土) 23:39:11ID:Jla4xmZF
お願いします。
文字列のある部分だけ置き換えたいのですが、

1)12345-12345-123-a
2)aaa-aaa-aaa-12345-a

の2つの文字列があるとき、結果を
11111-123-a
11111-12345-a
と置き換えしたいです。


$AAA = preg_replace('/(.*?)-(.*?)-a/','11111-(.*?)-a',$AAA);
と記述したのですが、結果は、

11111-(.*?)-a
11111-(.*?)-a
になってしまいます。初歩的で申し訳ありませんが、
希望の動作にするためにはどう記述すればいいか宜しくお願いします。
02212132010/06/05(土) 23:46:34ID:bkBaLixK
>>219
すごいです
感動しました
02222192010/06/05(土) 23:47:44ID:???
$lengthがおかしかったから訂正

$length = count($str) - strlen((int)strrev($str)) - 1;

$length = strlen($str) - strlen((int)strrev($str));
0223205、208です2010/06/05(土) 23:54:22ID:IfiEpjR7
>>216
レスありがとうございます。

> プリペアードステートメントとは簡単に言えばSQLを高速に実行するための準備のことなので
> sqlインジェクションとは関係ありません
> PDO::prepareはこの準備をしつつSQLインジェクション対策を同時に行うメソッドです

知りたいのは、プリペアードステートメントの本来の目的ではなく、
「SQLインジェクション対策として十分か」ということです。

> xssとsqlインジェクションとではエスケープすべき文字列が異なるからです

htmlspecialcharsでは「\」がエスケープされないのが問題ということですね。
疑問が解消できました。
02242132010/06/05(土) 23:54:48ID:bkBaLixK
>>219
文字列の最後が0の場合うまくいかないようです
0225nobodyさん2010/06/06(日) 00:06:05ID:???
>>220
http://php.net/manual/ja/function.preg-replace.php
0226nobodyさん2010/06/06(日) 00:06:32ID:???
>>224
もう正規表現でええやん。

$str = '28habcpt918';
if (preg_match('/([0-9]+)$/', $str, $matches)) {
$format = sprintf('%05d', $matches[1]);
echo $format;
}
02272192010/06/06(日) 00:21:03ID:???
>>224
失礼
全然考えてなかった
intにキャストしてるから頭にある0が消えちゃう

>>226さんので取れるからそれでおながいします
0228nobodyさん2010/06/06(日) 00:26:42ID:???
>>223
> 「SQLインジェクション対策として十分か」ということです。
そらおまえさん用意されてる関数を信じないで何を信じるの?
そんなに心配ならDBの資料あさって自前でエスケープしたらいいんとちゃうの?
0229nobodyさん2010/06/06(日) 00:41:50ID:???
>>228
SQLインジェクション対策に有効だということはわかっていても
「十分」有効なのか「ある程度」有効なのかわからないということです。

プロが作ったサイトでも対策に失敗している場合があるようなので、
素人にとっては自分勝手に信じるのが怖いのです。
そのため、他者の裏付けを求めてお尋ねした次第です。

「信じないで何を信じるの?」ということは、つまり「信じていい」ということですね。
ありがとうございました。
0230nobodyさん2010/06/06(日) 00:43:05ID:???
>>220
$a = "12345-12345-123-a";
$b = explode("-", $a);
echo "11111-" . $b[count($b)-2] . "-" . $b[count($b)-1];
0231nobodyさん2010/06/06(日) 00:48:24ID:???
>>229
> プロが作ったサイトでも対策に失敗している場合があるようなので、
それは関数のせいじゃなくて単にエスケープ忘れてるだけ
プロといっても人間だからね
大手サイトとかにもなると作りが複雑になるし
ちゃんと規約決めて工程を遵守して多人数でやってる場合はバグも出にくいけどコストがかかる
PHPなんかはコスト重視だから設計もなしに適当にやってるとこは潜在的なバグがいっぱい
0232nobodyさん2010/06/06(日) 00:50:27ID:???
>>229
あなたはSQLインジェクション対策の有効性について
慎重な意見を求めているようだけど、逆に他者の裏付けがあれば安心出来るのか?
そんなに心配なら自分で納得いくまでとことん調べるしかないだろう。
02332202010/06/06(日) 00:51:00ID:uQxRO+T3
>>225
ありがとうございます。
すいません読んでみましたが、初心者なのでよくわからなかったです。
$n形式という方法ですか?
0234nobodyさん2010/06/06(日) 01:00:02ID:???
>>233
第二引数の置き換えのところで正規表現使ってるけどここは使えない。
マッチしたものをここで参照する場合$nもしくは\\nと書く。
マッチした全体が$0(\\0)になり、以降()で囲ったところが順番に$1(\\1)、$2(\\2)と入っていく。
まぁ>>220は第一引数の正規表現もおかしいので第二引数の置き換えを変えたところでどうにかなるわけではないが。
正規表現のお勉強は正規表現スレへどうぞ。
http://pc12.2ch.net/test/read.cgi/tech/1268979408/
ただそのケースだと初心者にとって難解な正規表現を使う必要もないので、
>>230を参考に組み立てたほうがよい。
0235nobodyさん2010/06/06(日) 01:20:34ID:???
>>232 独学者なら他人の意見が欲しいものだよ
0236nobodyさん2010/06/06(日) 01:54:28ID:???
他の人の意見聞くのはいいだろうけど、聞いた上で自分なりに勝手に解釈して納得してるのはどうなんだ?
それなら聞く必要ない気がするけどさ。
0237nobodyさん2010/06/06(日) 02:11:20ID:???
くだ質で排他的なのはイクナイ。
02382202010/06/06(日) 02:32:34ID:uQxRO+T3
>>230
出来ました!ありがとうございます!
0239nobodyさん2010/06/06(日) 11:18:37ID:???
sqliteのpdoをソフトウェアで再現するやつありますか。
ワードプレスを動かしたいのですが
0240nobodyさん2010/06/06(日) 11:19:21ID:lMgRzA8F
sqliteのpdoをソフトウェアで再現するやつありますか。
ワードプレスを動かしたいのですが
0241nobodyさん2010/06/06(日) 11:51:52ID:???
>>240
http://wordpress.org/extend/plugins/pdo-for-wordpress/
0242nobodyさん2010/06/06(日) 12:16:08ID:???
>223
SQLインジェクションを予防するのに、
 ・「SQLインジェクションを予防するための関数」と
 ・「XSSを予防するための関数だけど、たまたまSQLインジェクションも防止できるような気がする関数」
どっちを使うかって話だよ。
つうか、「\がエスケープされないから危険」という思考は、要は裏で「SQLに混じって危険なのはコレとコレとコレと…」と候補を自分で考えてるだろ。
「危険な要素を弾く」はセキュリティ対策として非常に危険なので(見落としがあるとアウト)、自己の判断で行なうのを極力避けるべき。

俺を含めPHPプログラマの9割がカスなのは事実だが、言語自体の開発者や標準ライブラリの設計者は優秀だし、しっかりテストもされてる。
だから、「2chの意見と標準ライブラリどっちを信じるか」ならば、標準ライブラリを信じたほうが絶対にいい。
0243nobodyさん2010/06/06(日) 12:24:40ID:lMgRzA8F
>>241
pdoドライバが必要になります。なしで使える方法無いですか。
0244nobodyさん2010/06/06(日) 12:29:00ID:lMgRzA8F
これがOFFで
;extension=php_pdo_sqlite.dll
こっちがONで
extension=php_sqlite.dll
extension=php_sqlite3.dll
動く方法ないですか
0245nobodyさん2010/06/06(日) 12:40:03ID:lMgRzA8F
ここの人がデータベースなしでwordpress動かす方法やってるけど。
未完成



http://polygon-blog.blogspot.com/2010/03/posql-for-wordpress.html
0246nobodyさん2010/06/06(日) 12:47:37ID:???
posqlは一応データベースの一種だぞ
wordpressのソースをハックすればどうにでもなるが
あんな長いのを見るのもめんどくさいしな
ちゃんと抽象化されてて他のスクリプトへの影響が最小限の作りになってて
DB操作用のクラスなんかがあってそのファイルだけいじればOK
みたいなかんじの作りになってたら修正も簡単なんだけど
wpのソースなんて見たことないしシラネ
0247nobodyさん2010/06/06(日) 13:15:59ID:lMgRzA8F
>>241のpdo sqliteをpure PHPで動かせればいいのですが。pdo sqliteの代替え。
0248nobodyさん2010/06/06(日) 13:39:02ID:???
代替が読めない子か
0249nobodyさん2010/06/06(日) 13:57:01ID:???
犠牲になったのだ
0250nobodyさん2010/06/06(日) 14:22:36ID:???
入力画面、確認画面、完了画面の3つのphpで構成したいのですが、
入力画面から確認画面に遷移する際のバリデーションは、どこに実装すべきでしょうか?
0251nobodyさん2010/06/06(日) 14:42:53ID:???
>250
確認画面と完了画面の両方。
コピペはあり得ないので、外部ファイルに関数の形で定義する事になるな。
0252nobodyさん2010/06/06(日) 15:00:52ID:???
>>251
そうなると、確認画面で入力エラーになったら、入力画面にリダイレクトさせることになるんですよね。
その場合の入力値って、セッションに保存しておくしかないのですか?
0253nobodyさん2010/06/06(日) 15:30:15ID:???
>252
確認画面にinput type="hidden"で仕込めばいい。

あと、入力された値がちょっと全角英数だったからとかいう理由で入力値を全部消滅させやがる糞フォームを作るような奴は地獄に落ちるべき。
普通にエラー表示するだけにしとけ。ブラウザバックで戻れば入力値は保持されてることが多いし。
確認画面にエラー内容と、ユーザーが入力したものがそのまま入ってる入力フォームが出てるのがベスト。
0254nobodyさん2010/06/06(日) 15:39:21ID:lMgRzA8F
PDO-SQLITEを
バイナリ(エクステンション)なしで
動かす方法ないですか。
0255nobodyさん2010/06/06(日) 16:37:25ID:B6xMlzjU
ブログなどで画像を表示する場合、
画像保存時に縮小画像を保存しておくのがいいのか
表示時に毎回縮小するのがいいのか、どっちでしょう?

全画像の縮小版をあらかじめ保存しておくと容量を喰いそうなので
表示のタイミングで縮小するのが良いと思ってますが、
縮小画像を削除するタイミングがわかりません。
0256nobodyさん2010/06/06(日) 16:47:41ID:???
>255
バッチで定期的に古いファイルを削除すれば?
実際には更新日時をいちいち判定するのは面倒くさいので、例えば月ごとにディレクトリ掘ってそこに置いといて、月イチで古い月のディレクトリを丸ごと削除とか。

保持しておくべきか動的に生成すべきかは画像の量と表示回数次第だろうね。
容量をざっくり見積もって、それが許容できそうな範囲なら静的に置く方が楽だと思う。
0257nobodyさん2010/06/06(日) 17:00:31ID:B6xMlzjU
>>256
なるほど。その方法いいですね。
でも考えてみれば、アクセスが多くなると毎回縮小するのは負荷がかかりますね。
容量的にいけそうだったらやっぱり静的なほうにしようと思います。
0258nobodyさん2010/06/06(日) 17:02:41ID:lMgRzA8F
縮小画像はつくっておくべきだな。
量が多いなら、3Mくらいの複数の書庫に詰め込んで呼び出せばいい。
実測も書庫の方が高速になる。
たとえば100個表示させるとすると、画像への100回オープンが発生するが。
書庫なら一回。
0259nobodyさん2010/06/06(日) 17:18:34ID:???
>>254
はいって何だよ。さっきから何度も。何がはいなんだよ。
出来もしねえ奴が軽々しくはいなんて言うんじゃねえよ。
だから申し訳ありませんじゃねえだろうよ。何が申し訳ねえんだよ。
本当に反省してんのかよ。
本当に今なら出来んのかよ。
口先だけの謝罪をするんじゃねえよ。
いい加減な気持ちでやってるんだったら今すぐ帰れよ。
だから以後じゃねえんだよ。俺は今の話をしてんだろうが。
今の反省も出来てねえ奴が勝手に未来語ってんじゃねえよ。
勝手に話を切り上げようとするなよ。失礼だろうが。
そんなにやりたくないんだったらだったら今すぐ辞めろお前。
0260nobodyさん2010/06/06(日) 17:45:19ID:???
すごい誤爆だな
0261nobodyさん2010/06/06(日) 17:54:19ID:???
>>259
なにそれ、縦読み?
0262nobodyさん2010/06/06(日) 18:15:18ID:???
つうかもはやスレ違いだろsqliteのやつ
0263nobodyさん2010/06/06(日) 18:16:23ID:???
>>262
あなた誤爆さん?
0264nobodyさん2010/06/06(日) 18:21:23ID:???
>>254
無い
もうコピペに突っかかるのは止めて大人しくしてくれ
0265nobodyさん2010/06/07(月) 03:15:18ID:???

>>170試したら、sex=manのデータが確かにサーバに渡ってないな。
これは、ブラウザの仕様?RFCの仕様なの?


0266nobodyさん2010/06/07(月) 03:25:38ID:???
複数のブラウザでためして結論出せば?
0267nobodyさん2010/06/07(月) 06:44:36ID:FJeCaP+n
最初から用意されているデザインテンプレート以外を使用したい場合などに、
自分でテンプレートを作成することになると思いますが、
その場合例えばDBから値を取り出してそれを表示するなんて場合、
DBから結果取得〜表示までのロジックをかかなければなりません。
一部用意されている関数で処理が省略できるとしても、
PHPを知らないとなりません。
そこであらかじめテンプレートで使われそうな処理(上記の例の場合、ある結果の取得から表示まで)を
関数単位で用意し、テンプレートではHTMLの構文に似たカスタムタグを使うことで、
テンプレートからHTMLに変換する際、カスタムタグを構文解析して対応した関数を呼び出そうと考えました。
こういう方法は一般的でしょうか?
構文解析方法ですが、正規表現を使って行っています。
0268nobodyさん2010/06/07(月) 07:40:10ID:???
>>267
Smartyとかテンプレートエンジン使うとかではダメなの?
もちろん、HTMLタグに似せたり、テンプレート側から呼び出せる機能を制限したい、ということであればあり得る方法だと思う。
0269nobodyさん2010/06/07(月) 10:11:02ID:???

告知させて。
現在のところあまり盛んに動いてるオンライン勉強会がないので
あたらしくグループつくりました。
オンラインでチャット・生中などいろいろ(未定)で
できれば毎晩だらだら勉強やる予定です。
熱意のある人いたらたまーに課題だしてってアプリ作るなんてのも
ありかなと思ってます。

初心者の人はもちろん、おれが仕切って教えてやるわって人も大歓迎です。


グーぐるグループ
「初心者歓迎 PHP勉強会 2ch発」
ttp://groups.google.co.jp/group/2ch-php
php.2ch@gmail.com

参加希望の人いたら、メールくださいな。
02702672010/06/07(月) 12:08:54ID:dndZJJbf
出先なのでIDが違うと思いますが>>267です。

>>268
レスありがとうございます。
Smartyはどういうものかよく知りません。
テンプレートエンジン自体どういうものかよくわからなくて・・・
ただMovableTypeを数年前に使っていて、
そこではテンプレート用のMT専用タグみたいなのが使えたので、
>>267のような仕組みになってるのかな?と思い実装しました。
そういう実装もありとのことなので少し安心しました。
テンプレートエンジンについても後ほど調べてみたいと思います。
0271nobodyさん2010/06/07(月) 14:06:21ID:hz9Zbx6T
PHPってLinuxに入れる時ってめんどくさいんだね
./configureの度にgccがないとか、libxml2がないとか、libpngがないとか、とにかくエラーばっか
自分centOS5.4使ってるんだけど、皆さんやっぱこういう風に色々とインストールしてPHP環境(ApacheとかMySQLとか)作ってるんですか?

以前yumで全部インストールしたんだけど、あまりにバージョンが全部古いんで今回最新版を全部入れようと思ったら予想外に時間と手間がかかって
それとも何か自分のやり方が間違ってるんですかね?
0272nobodyさん2010/06/07(月) 14:22:18ID:MuZbivCs
いくつかのサーバー用Linuxディストリビューションにおいては、LAMPがセットになって配布される。LAMPを1つのセットにすることで、OSのインストール時にLAMPの多くの設定・関連付けを自動的に行うことができ、サーバー管理者の手間を軽減させることができる。
http://ja.wikipedia.org/wiki/LAMP
0273nobodyさん2010/06/07(月) 14:39:38ID:???
>>271
yum install php
0274nobodyさん2010/06/07(月) 14:42:06ID:???
>>271
あと

> 以前yumで全部インストールしたんだけど、あまりにバージョンが全部古いんで今回最新版を全部入れようと思ったら
yum update
0275nobodyさん2010/06/07(月) 14:50:49ID:hz9Zbx6T
>>272
それはやっぱりyumでって事なんでしょうか?
自分は以前yumで全部入れたんですが、バージョンが古くて
PHPなんかも名前空間使いたかったので5.3が必要で

それともyum以外で何かインストールするパッケージがあるのでしょうか?
centOSは他のディストリビューションよりもサーバ型だと思うんですが


>>273
あぁ、やっぱyumで入れてるんですか?
確かcentOS5.4のPHPは確か5.1か何かで古くて自分でWindowsで作ったソースがエラーが出たりして最新版を入れようと奮起していまして
いやぁ、ほんと次から次に./configureでエラーが出まくってくれて、その度にダウンロード→./configure→make→make installの繰り返して・・・
相当萎えていました

こんなんじゃ企業で使うとき、クリーンインストールや新規PC等の度に1台につき設定が物凄い無駄な時間かかるなぁ、と思いまして
Windowsだとすぐだけど
0276nobodyさん2010/06/07(月) 15:15:25ID:hz9Zbx6T
>>274
あれ?
yum updateでPHPのバージョンとかも5.2とかにアップデートされるのでしょうか?
自分はyumでPHP環境を作る前に2度ほどyum updateをしたのですが、5.1.16とかの古いバージョンのままでした
php infoでも確認したつもりだったのですが
それかcentOSはそうなのでしょうか・・・

自分が勘違いしてたか、何かおかしな事をしたのかもしれませんね
■ このスレッドは過去ログ倉庫に格納されています