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

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

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

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

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

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

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

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0295nobodyさん2009/02/22(日) 22:01:33ID:???
例外が発生するポイントは、beginかexecか調べた?
0296nobodyさん2009/02/22(日) 22:03:13ID:3nGhqmkB
>>295
例外は発生しないにょ

ずーーーっと実行中のままになって、
最後にはタイムアウトになるんだにょ

PHPのデフォルトタイムアウトが60秒だから
60秒でタイムアウトになるにょ
0297nobodyさん2009/02/22(日) 22:04:43ID:???
>>296
おいおい、
例外にならなかったら、falseが設定されるでしょうが。
例外をcatchして捨ててるだけでしょうが。
0298nobodyさん2009/02/22(日) 22:06:21ID:???
beginTransactionでオートコミットモードがオフになる。
execに失敗する。
もう一度、beginTransactionをかけるが、既にbeginされてるので例外発生
で、またループ。
beginをループの外に出すかcatchしたときにロールバックしてみたらどうかね
0299nobodyさん2009/02/22(日) 22:13:32ID:???
EC-CUBEのカスタマイズで1000万て安い?
ちなみに1年、5人担当
0300nobodyさん2009/02/22(日) 22:15:02ID:3nGhqmkB
>>297
そしたら、catchの中で、
例外をprintするように改造して
もう一回試してみるよ
0301nobodyさん2009/02/22(日) 22:15:38ID:3nGhqmkB
>>299
一人当たり200万円しかもらえないじゃん
0302nobodyさん2009/02/22(日) 22:17:17ID:3nGhqmkB
例外を補足するようにコードを改造してみました。

一番下のところに

catch (PDOException $e) {
print( $e->getMessage());
}

って入れただけですけど。

そしたら、以下のようになりました。
0303nobodyさん2009/02/22(日) 22:19:02ID:3nGhqmkB
1.php

Fatal error: Maximum execution time of 60 seconds exceeded in
C:\1.php on line 21

(さっきと同じ結果)


--------------------------------------------------------
2.php

SQLSTATE[HY000]:
General error: 5
database is locked
There is already an active transaction
There is already an active transaction
There is already an active transaction

Fatal error: Maximum execution time of 60
seconds exceeded in C:\2.php on line 28

--------------------------------------------------------
2.phpについて、いままで出ていなかった
例外がレポートされるようになりました。
0304nobodyさん2009/02/22(日) 22:22:34ID:3nGhqmkB
>>298
exec ってオートコミットモードがONでないと使えないのですか?

もしかして、

$sql="UPDATE tb1 SET value = value + 1 WHERE id = '1'";
$sth = $dbh->prepare($sql);//プリペアードステートメント
$sth->execute();//エクスキュート

とかってやればOK?
0305nobodyさん2009/02/22(日) 22:26:36ID:???
そうじゃなくて、begin済みなのにbeginするなってこと。
1.phpで例外が出ないで無限ループするのはおかしいからチェックしてみ
0306nobodyさん2009/02/22(日) 22:29:18ID:3nGhqmkB
>>305
biginをループの外に出したら意味ないのでは?

だってリトライできなくなるし。
0307nobodyさん2009/02/22(日) 22:31:48ID:???
>>306
ろーるばっくすればいいじゃん
>>298さんが正解でしょ
0308nobodyさん2009/02/22(日) 22:34:36ID:3nGhqmkB
とりあえずわけわかんなくなってきたので、
改造済みのコードを改めてはります。
0309nobodyさん2009/02/22(日) 22:35:58ID:3nGhqmkB
1.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}
$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
sleep(1);
}
catch (PDOException $e) {



print( $e->getMessage());
$oDbCxn->rollback();
}
}
?>
0310nobodyさん2009/02/22(日) 22:46:19ID:???
1.php側はループさせると、テストにならんから、
実行中のsleepだけでいいことにして、ループ外した方がよさげ。

それから、ロック以外の例外の時も無限ループしちゃうわけで・・・
まぁ、テストだからいいけど。
0311nobodyさん2009/02/22(日) 22:47:07ID:???
例外分かってないのでは?
0312nobodyさん2009/02/22(日) 22:48:00ID:???
トランザクションも怪しいw
0313nobodyさん2009/02/22(日) 23:08:50ID:3nGhqmkB
>>310
そしたらループはずしてみようかな?
0314nobodyさん2009/02/22(日) 23:17:01ID:3nGhqmkB
よく考えたら、ロールバックしろ、とかいうアドバイスは無意味だな

だってdatabase is lockedっていうエラーが出ているわけだから、
トランザクションをゲットできていないわけだから、
そもそもロールバックなんかしないわけで。
0315nobodyさん2009/02/22(日) 23:19:21ID:3nGhqmkB
ソースコードを改変したので、
3.phpと4.phpということにしました。

3.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

try {
$oDbCxn->beginTransaction();

$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
sleep(1);
}
catch (PDOException $e) {
print( $e->getMessage());
$oDbCxn->rollback();
}
?>
0316nobodyさん2009/02/22(日) 23:20:11ID:???
>>315
前よく「質問」って書いてた人?
0317nobodyさん2009/02/22(日) 23:20:13ID:3nGhqmkB
4.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
// Update failed. Wait a while before trying again in the next loop
print( $e->getMessage());
$oDbCxn->rollback();

}
}
?>
0318nobodyさん2009/02/22(日) 23:22:14ID:3nGhqmkB
3.php −> 4.php
という順番で実行する流れです

3.php −>10秒待つ
4.php −>待たないですぐに実行
0319nobodyさん2009/02/22(日) 23:22:53ID:3nGhqmkB
実験結果

3.php エラー無し
カウントアップは成功している

4.php
SQLSTATE[HY000]: General error: 5 database is locked
カウントアップは成功している
0320nobodyさん2009/02/22(日) 23:36:10ID:3nGhqmkB
あれ?
もしかして、完成?
成功している??
0321nobodyさん2009/02/22(日) 23:38:30ID:???
>>314
なんか勘違いしてないかい?
0322nobodyさん2009/02/23(月) 00:01:27ID:DYtiHKsN
これでうまくいった

7.php −> 8.php
7.php wait 10seconds
8.php wait 0

7.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}
$bUpdatePending = true;
while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");
sleep(10);
$oDbCxn->commit();
$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
sleep(3);
$oDbCxn->rollback();
}
}
?>
0323nobodyさん2009/02/23(月) 00:02:02ID:DYtiHKsN
8.php

<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
sleep(3);
$oDbCxn->rollback();
}
}
?>
0324nobodyさん2009/02/23(月) 00:03:11ID:DYtiHKsN
でも、8.phpの最後のほうの、

sleep(3);
$oDbCxn->rollback();


これなんだけど、せっかくsleepを入れたのに、
sleepしているようすが見られない。

7.phpの実行が終わると、即座に
間髪いれずに、8.phpの実行も終了している。

なんでだ?
3秒待ってからロールバックしてるんじゃないのか?
0325nobodyさん2009/02/23(月) 00:03:49ID:DYtiHKsN
あと、トランザクションをゲットしていないのに、
ロールバックするという意味がわからん。

いったいどこに戻っているというのだ?
0326nobodyさん2009/02/23(月) 00:16:50ID:???
database is lockedはトランザクション自体ではなく、
その中のUPDATE文に対してのエラーである。
なので、トランザクション自体は開始されているので、
一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。
0327nobodyさん2009/02/23(月) 00:17:43ID:???
>一旦ろーるばっくでトランザクションを改めてトランザクションを開始している。
一旦ろーるばっくでトランザクションを閉じて、改めてトランザクションを開始している。
0328nobodyさん2009/02/23(月) 00:19:44ID:DYtiHKsN
>>326-327

なるほどねー
ようやくわかってきたわぁ
 きたわぁ
  きたわぁ
0329nobodyさん2009/02/23(月) 00:22:06ID:DYtiHKsN
やっぱあれだな。
SQLiteの4つのロックのうち、
すぐにロックを獲得できるのを、
明示的に書かないとだめだな。

$oDbCxn->beginTransaction();

↑これがダメってこと。
なぜなら、↑だと、デフォルトのロックが選択される。
SQLiteにおける、デフォルトのロックとは、defferd lockである。

これだと遅延するから、4つの処理をトランザクションではさみたい、
などという場合には不向き。
0330nobodyさん2009/02/23(月) 00:29:36ID:???
busy_timeoutの設定をするんじゃだめなのか?
0331nobodyさん2009/02/23(月) 00:45:25ID:DYtiHKsN
>>330
やったことある?
0332nobodyさん2009/02/23(月) 00:58:26ID:DYtiHKsN
もう一つの懸念。
SQLiteはNFSというファイルシステムを使っているマシンで実行すると
ぶっこわれるらしい。

NFSとはおもにUNIXで使われるファイルシステムらしい。
特にfreeBSDでよく使われるらしい。

自分が借りているレンタルサーバーはfreeBSDなので、
ひょっとしてSQLiteは使えないんじゃないか?
0333nobodyさん2009/02/23(月) 01:02:31ID:???
NFS使ってるレンタルサーバなんてないから安心しろw
0334nobodyさん2009/02/23(月) 01:02:40ID:???
http://jp.php.net/manual/ja/function.sqlite-open.php

>ヒント
>NFSパーティションにマウントされたSQLiteデータベースを処理すること は推奨されません。
>ロックに関してNFSは著しい問題があるので、 データベースを全くオープンすることさえできない可能性があります。
>ま た、成功した場合でも、ロックに関する動作は予測できない結果を生む可 能性があります。

だってさ。こっち調べるのが先じゃない?w
0335nobodyさん2009/02/23(月) 01:02:48ID:DYtiHKsN
SQLiteには、

deferred,
immediate,
exclusive

という3つの種類のロックがあるが、
どれを使うべきか?というのは、考えなくていいの?

$dbh->beginTransaction();

これを使うと、自動的に、デフォルトの、ロックが
選択される。SQLiteにおけるデフォルトのロックとは
deferred ロックである。

もし銀行口座などの実装をしたい場合、
exclusiveにしないとダメなのではないか?

また、immediateって、なんのためにあるんだ?
いつ使うんだ?
0336nobodyさん2009/02/23(月) 01:03:21ID:DYtiHKsN
>>333
よかった
0337nobodyさん2009/02/23(月) 01:07:02ID:???
ロックとトランザクションの違いを勉強してきたほうがいいんじゃないかな?
0338nobodyさん2009/02/23(月) 01:07:46ID:???
俺もそう思うw
0339nobodyさん2009/02/23(月) 01:29:03ID:???
こいつ前いたキティだろ
通報しましたとかsqlite関連で腐るほど書き込んでた
0340nobodyさん2009/02/23(月) 01:29:11ID:???
WikiとCMSってどう違うの
0341nobodyさん2009/02/23(月) 01:36:09ID:???
>>316をスルーしてる時点で確定
0342nobodyさん2009/02/23(月) 01:38:00ID:???
>>340
WikiもCMSの一種だよ
Wikiが他のCMSと違うのは、不特定多数によるサイト構築を主体とした構成になっている

つかPHP関係ないじゃん
0343nobodyさん2009/02/23(月) 02:23:27ID:DYtiHKsN
もしかしてwhileいらないんじゃないか?
sleepしてrollbackだけでいいんじゃないか?
0344nobodyさん2009/02/23(月) 03:33:25ID:???
こいつプログラム板の方とマルチだった
http://pc11.2ch.net/test/read.cgi/tech/1232712334/284-
0345nobodyさん2009/02/23(月) 03:44:00ID:???
派遣先の歓迎会などで、趣味を聞かれることがあります。
私の趣味は豊富で下記のとおりです。
・アニメ、エロゲ、同人誌、アニソン
・風俗、ストリップ鑑賞
・声優、秋葉系アイドルイベント参加

しかし、これを言うと、おそらくひかれてしまいます。。。
なんて言えばよいのでしょうか?

休みの日は何をしてる?と聞かれても、声優ライブの最前線で
サイリウムをもって、跳んでいるなんて言えません。
0346nobodyさん2009/02/23(月) 04:39:47ID:cBNbBaFX
$a = "aaa"

if(preg_match("/^[0-9]+$/",$a) == true){
echo "ok";
}else{
echo "dame";
}

でdameになってくれるのに(if(preg_match("/^[0-9]+$/",$a)でもいけた)、

if(preg_match("/^[0-9]+$/",$a) !== false){
echo "ok";
}else{
echo "dame";
}

だと$aを何にしても全部okになる・・
なんで><
0347nobodyさん2009/02/23(月) 04:40:33ID:cBNbBaFX
→$a = "aaa";
0348nobodyさん2009/02/23(月) 04:52:33ID:???
>>346
http://jp.php.net/preg_match
0349nobodyさん2009/02/23(月) 05:29:48ID:DYtiHKsN
<?php
try {
$oDbCxn = new PDO('sqlite:test1');
$oDbCxn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch (PDOException $e) {
die("Error connecting to DB");
}

$bUpdatePending = true;

while ($bUpdatePending) {
try {
$oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION");

// $oDbCxn->beginTransaction();
$oDbCxn->exec("UPDATE tb1 SET value = value + 1 WHERE id = '1'");

$oDbCxn->commit();

$bUpdatePending = false; // Exit the loop now the update has been done
}
catch (PDOException $e) {
print $e->getMessage();

$oDbCxn->rollback();
}
}
?>
0350nobodyさん2009/02/23(月) 05:30:39ID:DYtiHKsN
>>349
実行すると、なんでエラーになるの?

PHP5 + PDO + SQLite3
----------------------------------
database structure

id | name| value

1 | value| 5
-------------------------------
database name = test1

table name= tb1
0351nobodyさん2009/02/23(月) 05:33:14ID:DYtiHKsN
トランザクションをスタートするのに、
$oDbCxn->query("BEGIN EXCLUSIVE TRANSACTION");
はダメで、
$oDbCxn->beginTransaction();
なら良い、というのはおかしい。
なぜエラーになるの?
0352nobodyさん2009/02/23(月) 06:48:25ID:c878IibK
教えて下さい。

test.txt というutf-8のファイルがあって中に文とかphpの変数とかが書いてあります。
これをsjisのtest.phpで読み込み表示させたいのですがincudeだと文字化けします。
どうすれば表示できますか?
0353nobodyさん2009/02/23(月) 06:59:44ID:???
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" />
を吐いてやる
0354nobodyさん2009/02/23(月) 07:08:52ID:???
>>353
その知識で回答しようと思えるなんて素直に感心するよ
0355nobodyさん2009/02/23(月) 07:20:40ID:cBNbBaFX
>>348
自分なりに調べてみました><
mb_eregでは !== false でいけたので、それも一緒に比べてみたら
返り値のとこが、
mb_ereg
>正規表現に一致しないか、 エラーを発生した場合に FALSE を返します。
preg_match
>preg_match() は、エラーが発生した場合にFALSEを返します。
でした。
preg_matchは正規表現に一致しないときはfalseを返してくれないので、
!== falseがスルーされたということでよいのでしょうか?><
今まで全部!== falseでできると思っててそれでやってたので変更が大変ですが
preg_matchのときは==とか何もつけないバージョンでやっておきます><
ありがとうございました
0356nobodyさん2009/02/23(月) 07:29:25ID:???
>>352
逆だUTF-8の方
両方使いたいなら変換かけるべし
0357nobodyさん2009/02/23(月) 16:02:31ID:???
OS linux
PHP ver 5.2.5
連携 とくになし
<?
//------------------------------------------------
//ペット可否
//------------------------------------------------
function GetPet_F($int)
{
$res = "";
if($int=="0") $res = "不可";
else $res = "可能";
return $res;
}
print GetPet_F(0);
?>
以上ソースコードでsyntax error, unexpected $end出るんですが何が原因なんでしょうか・・・
03583572009/02/23(月) 16:02:51ID:yJ3BEx4Z
ID出すの忘れ
0359nobodyさん2009/02/23(月) 16:12:39ID:???
あれ、流出してる?
0360nobodyさん2009/02/23(月) 16:31:29ID:???
>>352
eval(mb_convert_encoding(file_get_contents('test.txt'), 'Shift-JIS', 'UTF-8'));

>>357
構文に間違いはないから
スクリプトのエンコーディングが mbstring.script_encoding と合ってないんでしょう
0361nobodyさん2009/02/23(月) 16:37:17ID:yJ3BEx4Z
可能の能抜いたらエラー出なかったです・・・
なんなのだろう
0362nobodyさん2009/02/23(月) 16:46:30ID:???
>>357
原因は、Shift Jisの5C問題だね。
能のShift Jisのコードが94 5C
5Cはバックスラッシュ(Shift Jisだと¥)なので、
PHPのパーサが、終わりのダブルクォーテーションを文字列と認識してしまう。
結果、文字列が閉じられていないと判断されて、エラーになる。
0363nobodyさん2009/02/23(月) 17:31:12ID:???
今時SJISでスクリプト書くやつなんていんの?

話は変わるが

echo '<table 〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜'.
'〜〜〜〜〜〜〜〜〜';

引継ぎでプログラムのソースコード見たらこうなってた
まじ簡便してくれ・・・orz
あと、同じ要領でechoでJavaScriptとか吐き出してるのもやめてくれ

クエリはまだ許せる

仕事でプログラムするときはほかの人にわかりやすいコードにしてください
これまじでお願い
0364nobodyさん2009/02/23(月) 17:59:46ID:???
--enable-zend-multibyte付けてmbstring.script_encodingを設定すりゃ
Shift-JISだろうが何で書こうがそいつの自由だ
雑談スレに行けクズ
0365nobodyさん2009/02/23(月) 21:03:10ID:cBNbBaFX
また質問させていただきます
$aa = "AA";
$bb = "bb";

$sql = "SELECT * FROM v001upfile WHERE :AA = :BB";
$result = executeQuery($sql);
$result->bindParam(":AA",$aa,PDO::PARAM_STR);
$result->bindParam(":BB",$bb,PDO::PARAM_STR);
$result->execute();

$row = $result->fetchAll();
$rows = count($row);

のようにすると、whereに該当するデータがなく、$rowsも0になってしまいます。いろいろしていると、
$sql = "SELECT * FROM v001upfile WHERE AA = :BB";
とするとデータが得られました。
どうやらwhere :AAのbindのパラメータ、PDO::PARAM_STR
で、'AA'とされてしまっているから?、だめのような気がするのですが、
解決策ありましたらよろしくおねがいします
0366nobodyさん2009/02/23(月) 21:21:42ID:???
>>365
それ駄目だ、俺も悩んだ
WHERE $AA = ?か、 ? = ?にしたよ
SELECTでbindValueとbindParamは使わない方がいいって
グーグル先生が言ってた
0367nobodyさん2009/02/23(月) 21:33:37ID:???
PDO::PARAM_STMT
0368nobodyさん2009/02/23(月) 21:36:22ID:???
カラム名にPARAM_STR使うなよ
アホかw
0369nobodyさん2009/02/23(月) 22:03:46ID:ikSisMyc
【OS名】CentOS 5.0
【PHPのバージョン】php5.2
【連携ソフトウェア】JavaScript Smarty
【質問内容】
ユーザがログインに成功したときにセッションに値をセットして
次にページにアクセスしてきた時にSmartyで値があるか確認して初期化処理

例:
{{if $smarty.session.foo == 'bar'}}
init(); //これはJScriptの関数
{{/if}}

をしたいんですけど、ブラウザを終了するとセッションまで破棄されてしまいます。
ご教授お願いいたします。
0370nobodyさん2009/02/23(月) 22:06:30ID:cBNbBaFX
>>366
sql文に直接変数入れる方法でしました。できました。
ありがとうございました
>>367,368
やってみたのですが、反応としては356とほぼ同じでした
マニュアルのパラメータ一覧のものをいろいろ代えてやってみたのですが
どうもうまくいきませんでした。
0371nobodyさん2009/02/23(月) 22:12:39ID:???
>>369
セッションはブラウザを終了すると破棄されるものです
継続したいならクッキーを使うといいよ
0372nobodyさん2009/02/23(月) 22:28:00ID:???
>>370
そのいろいろかえてやってみた、の中に正解が入ってないわけだな。
ビット和はとったのか。まぁ、いいや。メンドクセ
0373nobodyさん2009/02/23(月) 22:55:40ID:DYtiHKsN
なぜEXCLUSIVEはトランザクション開始直後に
ジャーナルファイルを作成しないのか?
0374nobodyさん2009/02/23(月) 22:59:36ID:???
アホか
03753692009/02/23(月) 23:03:42ID:???
>>371
PHPSESSIDをクッキーに格納する仕様と勘違いしてました。
ありがとうございました。
0376nobodyさん2009/02/24(火) 00:24:39ID:r/vu3Jnx
          ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <ココまでアホばかり
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
0377nobodyさん2009/02/24(火) 07:08:35ID:???
pdoで急にinsertできなくなった・・
エラーなしで何事もなく終わってるのに肝心のinsertだけできていない・・
0378nobodyさん2009/02/24(火) 07:37:15ID:???
俺なんてPHPMYADMIN全データ文字化けしちゃった。
何もいじってないのに意味不明
03793772009/02/24(火) 07:41:12ID:???
おお!すっかりphpmyadminの存在忘れてて
そっちでやったらカラムの数と値の数が合ってないよってエラーが出てきた!
凡ミスだった。�dクス
0380nobodyさん2009/02/24(火) 10:11:31ID:MqsJKVm4
画像のアップロード処理を作っているのですが、
$_['FILE']に入っているtypeはブラウザが送信するもので、
信用できないと聞きました。
そこで、アップロードされたファイルがJPEG、BMP、PNGであることを確認する方法を教えてください。
自分なりに考えてみたのは、
imagecreatefrom〜で、作成できるか確認するというものなのですが、これでもいいのでしょうか?
0381nobodyさん2009/02/24(火) 10:38:47ID:???
>>380
ttp://docs.sun.com/app/docs/doc/817-6000/6mldto822?l=ja&a=view
こういう記事を参考にして
phpでmimeタイプのチェッカーを作成するか
面倒なら外部アプリケーション(コマンド)を使用して
取得できる環境なら(おそらく色々制限がある)そうしたほうが確実で手っ取り早い
0382nobodyさん2009/02/24(火) 10:42:58ID:???
exif_imagetype
0383nobodyさん2009/02/24(火) 10:46:06ID:???
私の目標

Powered by 俺 って書けたらいいな><
0384nobodyさん2009/02/24(火) 10:52:41ID:???
getimagesizeで取得できるmimeじゃだめかな?
03853802009/02/24(火) 11:16:50ID:MqsJKVm4
レスありがとうございます。

>>381
恥ずかしながら、私には難しすぎて理解できません;
MIMEタイプについて学ぶ必要がありそうですね;;

>>382
>>384
なるほど、画像ファイルの場合はこういう専用の関数を使うといいのですね。

はじめの質問からちょっとずれてしまうのですが、画像以外の場合ではどんな方法があるのでしょうか?
たとえば、MP3ファイルの場合など。
PECLのFileinfo関数なんかは使えるのでしょうか?

後学のために教えてください。
0386nobodyさん2009/02/24(火) 11:24:58ID:???
そこまで分かってるなら、試すなりぐぐるなりすればいいと思うがw
0387nobodyさん2009/02/24(火) 11:29:20ID:???
家泊まってもいいって言われたのはフラグたったのかな?
0388nobodyさん2009/02/24(火) 12:52:56ID:???
>>385
$str = file_get_contents("example.mp3");
if (substr($str, 0, 3) == "ID3") { ... }
0389nobodyさん2009/02/24(火) 13:06:52ID:???
地味にこれが便利。

$mimetype = `file -bi $file`;
03903802009/02/24(火) 14:25:53ID:MqsJKVm4
>>386
それはそうなのですが、
たとえば、finfo_file()で得られる値は信用してよいのか、などがわからなくて;

>>388
なるほど、MP3の場合は、先頭にID3 タグの情報があるかどうかで判断できるわけですね。
しかし、MP3以外にも対応できる、もっと汎用的な方法はないのでしょうか?

>>389
linuxコマンドで取得するということでしょうか?
こんな方法もあるんですね!勉強になります。

続けて質問になってしまうのですが、ファイルサイズやファイル名などに関しても、
$_FILEの値は信用してはいけないのでしょうか?
その場合、安全な方法を教えてください。
0391nobodyさん2009/02/24(火) 14:56:33ID:???
>>390
画像だけならfreadして、どんな文字列から始まるかで判別する方法でいいんじゃないかな
JPG→\xff\xd8
PNG→\x89PNG\x0d
GIF→GIF87a or GIF89a
ビットマップは…しらねぇ('A`)
0392nobodyさん2009/02/24(火) 17:27:52ID:???
拡張子でいいじゃん。拡張子がjpgで中身がBMPとかだったら使う側の問題だろ
0393nobodyさん2009/02/24(火) 18:57:41ID:TovVFkKx
クレジット番号と、有効期限などをユーザーに入力させて、
照合(決済できるクレジットカードかどうか)するというASPってありますか?
普通にZEROとかの決済会社とかでは、決済せずに照合のみってできるんでしょうか?
0394nobodyさん2009/02/24(火) 19:01:33ID:???
>>393
CAFIS
0395nobodyさん2009/02/24(火) 19:03:02ID:TovVFkKx
>>394
早速ありがとうございます
調べてみます
■ このスレッドは過去ログ倉庫に格納されています