【PHP】下らねぇ質問はID出して書き込みやがれ 109
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/07/28(木) 06:53:37.45ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 108
http://hibari.2ch.net/test/read.cgi/php/1309599473/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0261nobodyさん
2011/08/06(土) 03:15:41.34ID:???0262nobodyさん
2011/08/06(土) 08:48:42.39ID:???なんとつまらない書込みだろうか。
義務教育を終えていない小学生であったとしても
多少のヒネリを加えて書き込む事は容易いはずである。
しかしこの書込み内容からはその形跡は微塵も感じられない。
彼の脳に重大な障害が発生している事は誰の目にも明らかだろう。
恐らく彼は経済的な事情で十分な治療を受ける事が困難な状況に陥っているに違いない。
この一見無意味としか思えない彼の書込みは、
現在の医療システムの見直しを訴えたメッセージなのではなかろうか。
0263nobodyさん
2011/08/06(土) 09:13:45.97ID:???いままでbase64でデコードした事もあるんなら、その暗号の元が何だったかわかるんでね?
暗号について少しでも学んだ事があるんなら分かるはずだが、元と暗号化された後のサンプルが無い事には特定できない。
0264222
2011/08/06(土) 10:02:22.66ID:JkSTeXHr返信ありがとうございます。
再現してやってみたところやはりデッドロックっぽいことになっています。
デッドロックではないのかもしれませんが、select以外のクエリは受け付けません。
>>230でfatal errorを出した直後では*.sqlite-journalは存在しませんが、
同じデータベースで問題のないスクリプトからinsertやupdateをしようとすると、
*.sqlite-journalが作成され、max_execution_timeになったところで削除されます。
削除されたところで、insertやupdateを再び行うと同様の現象になります。
タイムアウトまで次の操作を受け付けず、次の操作を受け付けたところで、
タイムアウトまで何もしないためデッドロックっぽいことになっています。
Apacheを再起動したところで、ようやくinsertやupdateを受け付けてくれます。
0265255
2011/08/06(土) 14:46:21.36ID:Oz13PhNe処理はありきたりで、 アップロードフォーム>確認画面>登録・完了画面 という流れなんですが
確認画面でプレビューするとき元の画像が90度回転して表示されてしまいます
正確に流れを書くと
・確認画面で、画像がアップされたらtempディレクトリから保存用ディレクトリに移動(>>255で書いた処理:move_uploaded_file)
・その後、保存用ディレクトリに移動したファイルを引数にして 出力用.phpで出力
<img src="imgoutput.php?file=*********.jpg" />という形
・出力用.phpは以下
<?php
$file= $_GET['file'];
header("Content-type: image/jpeg");
readfile($file);
?>
これをやったところ、元は縦長だった画像が横回転して横長画像として表示されてしまいます
何が原因でしょうか? 何度も質問してすみません
0266255
2011/08/06(土) 14:51:45.80ID:Oz13PhNe<img>タグの中に入れずに、ブラウザで直接 http://******/imgoutput.php?file=******.jpg をURLとして開くと
正常に、縦長画像のまま表示されます
0268nobodyさん
2011/08/06(土) 18:14:44.06ID:???確認画面でプレビューするとき元の画像が90度回転して表示されてしまいます
元は縦長だった画像が横回転して横長画像として表示されてしまいます
何が原因でしょうか? 何度も質問してすみません
0269nobodyさん
2011/08/06(土) 18:20:04.43ID:???*.sqlite-journal が削除されるのなら
リクエスト終了時にトランザクションも終了している訳だ
その問題のないスクリプトとやらも晒して貰えないだろうか
できれば再現する最小のコードで
0270222
2011/08/06(土) 19:23:37.84ID:DEQATyEe返信ありがとうございます。
そしてすみませんでした。>>230は簡素化しすぎでした。
>>230の例だと問題ないことを確認しています。
実際のスクリプトは以下のようになっています。
1.まずDBを作ります a.php
<?php
$db = new PDO('sqlite:test.db');
$db->query('create table if not exists hoge (id integer not null primary key, foo text not null)');
?>
2.とりあえず中身を入れます b.php
<?php
$db = new PDO('sqlite:test.db');
for ($i = 0; $i < 100; $i++) {
$db->query('insert into hoge (foo) values ("aaa")');
}
?>
続く
0271222
2011/08/06(土) 19:30:52.48ID:DEQATyEe<?php
try {
$db = new PDO('sqlite:test.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$length = $db->query('select count(*) from hoge')->fetch(); //登録されてる件数を取得します
$offset = 0;
$db->beginTransaction(); //トランザクション開始
while ($length[0] > $offset) {
$sql = 'select id, foo from hoge limit 10 offset ' . $offset; //メモリを考慮して10件ずつ更新します
$stmt = $db->prepare('update hoge set foo = ? where id = ?');
foreach ($db->query($sql) as $row) {
$stmt->exec(array('/'.$row['foo'].'/', $row['id'])); //ここでわざとエラーしてます executeなら問題なく更新できます
}
$stmt = null;
$offset += 10;
}
$db->commit();
} catch (PDOException $e) {
try {
$db->rollBack();
} catch (PDOException $e) {
}
}
?>
4.2のb.phpを実行するとデッドロックっぽいことになってるのが確認できます。
こんな感じになります。最後のコードが長くなりすみません。
0274222
2011/08/06(土) 19:59:42.67ID:DEQATyEeprimary keyのことですか?
>>270の一番最初のスクリプトを見てもらえばわかりますが、
create table if not exists hoge (
id integer not null primary key,
foo text not null
)
としてるので重複はしてないです。
他のことを言ってるのならすみません。
0276222
2011/08/06(土) 20:00:56.10ID:???あ、すみません。意味がわかりました。
SQLiteではinteger型で主キーカラムはオートインクリメントになります。
0277222
2011/08/06(土) 20:35:12.85ID:DEQATyEehello()は存在しない関数です。
try {
$db = new PDO('sqlite:test.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
foreach ($db->query('select * from hoge') as $row) {
hello();
}
$db->commit();
} catch (PDOException $e) {
try {
$db->rollBack();
} catch (PDOException $e) {
}
}
どうやら、foreachで取るところの中でエラーが起きるとまずいようです。
PDO::queryの例として紹介されてるやり方なんですが、なぜこんなことに・・・
http://www.php.net/manual/ja/pdo.query.php
0278nobodyさん
2011/08/06(土) 20:43:13.64ID:???0280269
2011/08/06(土) 21:29:46.39ID:???確かに PDOStatement を foreach でイテレートした時だけロックが開放されてないな
https://bugs.php.net/report.php から報告した方がいい
$con = new PDO('sqlite:test.db');
if (!$con->query("SELECT 1 FROM sqlite_master WHERE type='table' AND name='t'")->fetch()) {
$con->query('CREATE TABLE t (c INT)');
}
$con->query('INSERT INTO t VALUES (1)');
foreach ($con->query('SELECT * FROM t LIMIT 1') as $row) {
trigger_error('abort', E_USER_ERROR); # test.db not unlocking
}
バフフィックスされるまでの回避策は
foreach($result as $row) {
を止めて
foreach ($result->fetchAll() as $row) {
または
while ($row = $result->fetch()) {
スタイルを利用するぐらいか
0281222
2011/08/06(土) 21:35:53.60ID:DEQATyEeありがとうございます。
PHPのバグなんですかね?
英語苦手ですが頑張って報告してみます。
回避策も載せていただきありがとうございます。
早速適用したいと思います。
0282nobodyさん
2011/08/06(土) 22:11:32.78ID:???catch (PDOException $e) {
}
でキャッチできますか?
0283215
2011/08/06(土) 22:15:48.14ID:1n84Kf7Nよろしくお願いいたします。
PHPからシェルスクリプトを実行したいのですが
想定通りの動作をしません。
PHPスクリプトindex.phpとシェルスクリプトtest.shは同じディレクトリ内
に配置しており、index.phpには以下のように記述してあります。
<?php
$cmd = "./test.sh";
$ret = shell_exec( escapeshellcmd($cmd) );
print $ret;
?>
test.shには以下のように記述してあり、アクセス権限は711になっています。
#!/bin/bash
echo "AAA"
上記で、PHPでAAAと出力して欲しいのですが、出力されません。
検証のため、C++で生成した以下のようなプログラムをindex.phpと同じディレクトリに配置し、
test.shと同じ方法でPHPから実行したら、想定通りにBBBが出力されました。
#include <iostream>
using namespace std;
int main( )
{
cout << "BBB" << endl;
}
問題点はどこでしょうか?
PHPのバージョンは 5.1.6 です。
0285nobodyさん
2011/08/06(土) 23:10:44.53ID:saM8zRUn複数サイトの記事を更新順にソートしたかったからitemを全部配列にしてから表示するようにしたんだよ
で、個別記事の横に取得元サイトも表示しようと思ったんだけど
item以下から元サイトの名前とかトップページのURLとか持ってこれるところがないんだよ
考えられたのは個別記事URLのドメインから判別して表示とかしかなかったんだけど無駄に長くなりそうだし
なんかいい方法ないかな?
初心者過ぎてわからん
0286nobodyさん
2011/08/06(土) 23:16:05.21ID:???お前は>>1を読み直すかこっちで聞け
http://hibari.2ch.net/test/read.cgi/php/1271172618/
0288nobodyさん
2011/08/06(土) 23:24:47.79ID:saM8zRUnありがとうそうする
0289nobodyさん
2011/08/06(土) 23:25:20.21ID:saM8zRUnありがとうそうする
0290nobodyさん
2011/08/07(日) 04:02:21.87ID:cdDi892z0291nobodyさん
2011/08/07(日) 04:10:41.25ID:???0292nobodyさん
2011/08/07(日) 04:14:09.81ID:???オブジェクト指向>>>>>>越えられない壁>>>>>>>猿>>>手続き型
ですよね?
0293nobodyさん
2011/08/07(日) 05:37:33.18ID:???オブジェクト指向カッコイイとか思っていいのは中二までですよ。
0296nobodyさん
2011/08/07(日) 09:03:45.79ID:???$this->m_instance[$priority] = array();
}
var_dump(array_keys($this->m_instance));
array(0) { }
これって凄く寂しい!
0297nobodyさん
2011/08/07(日) 09:12:23.34ID:???0298nobodyさん
2011/08/07(日) 09:22:50.30ID:???0299nobodyさん
2011/08/07(日) 09:26:21.42ID:???0301nobodyさん
2011/08/07(日) 09:35:42.91ID:FuUx9FA/$limit = time() * 60 * 60 * 24;
setcookie("hoge","hoge",$limit);
で普通に発行するとa.phpでは確認できるのですが
同じ階層や下の階層のb.phpやc.phpでは取得できません
同一サーバー内で上の階層でもない限り有効パスやドメインを指定しなくていいと思うのですが、なんででしょう
0303nobodyさん
2011/08/07(日) 10:38:51.89ID:???スゲー桁になってるけどw
0304nobodyさん
2011/08/07(日) 10:39:31.59ID:FuUx9FA/あああああああああ!!!!
0305nobodyさん
2011/08/07(日) 11:42:36.56ID:???2000年問題が小さい事よ
0306nobodyさん
2011/08/07(日) 11:49:17.10ID:???0315nobodyさん
2011/08/07(日) 15:06:51.68ID:???0317nobodyさん
2011/08/07(日) 17:26:35.32ID:???0318nobodyさん
2011/08/07(日) 18:09:04.88ID:???0319nobodyさん
2011/08/07(日) 18:14:28.43ID:???0320nobodyさん
2011/08/07(日) 18:29:45.47ID:???0321nobodyさん
2011/08/07(日) 18:32:43.69ID:???0322nobodyさん
2011/08/07(日) 18:35:25.19ID:???0323nobodyさん
2011/08/07(日) 21:07:53.36ID:???0324nobodyさん
2011/08/07(日) 23:32:41.12ID:???0325nobodyさん
2011/08/07(日) 23:33:52.83ID:???0326nobodyさん
2011/08/07(日) 23:41:19.64ID:???0327nobodyさん
2011/08/07(日) 23:51:57.43ID:???0328nobodyさん
2011/08/07(日) 23:54:49.59ID:???0329nobodyさん
2011/08/08(月) 00:42:16.32ID:???0330nobodyさん
2011/08/08(月) 01:15:47.57ID:???0331nobodyさん
2011/08/08(月) 02:20:33.57ID:???0332nobodyさん
2011/08/08(月) 03:11:13.54ID:z33upbGp就職できますか?
0333nobodyさん
2011/08/08(月) 03:30:34.84ID:???0335nobodyさん
2011/08/08(月) 06:27:40.45ID:z33upbGp毎日C言語、C++、Javascript、PHPのプログラムの
本を読んでプログラム作りまくって勉強しています。
なんせニートなんで時間はたっぷりあります。
今、23歳なんで30までには起業してみます。
だいたいどのプログラムも同じような感じですが、
htmlとネットワークの知識のいるphpに苦戦してます。
とりあえずブログサービスやSNSサービスをやってみたいです。
0337nobodyさん
2011/08/08(月) 07:22:55.16ID:z33upbGp日本の20代の若者ですら、パソコンにデジカメの写真を取り込めない人から
ゲーム作って売ってる人まで幅広い層がいます。しかし、初心者ともいえず、
上級者ともいえない中間層がネット上には居場所がないような気がします。
プログラムの解説サイトでも超初心者向けと理解不能な上級者向けの
両極端で中間層がない気がします。なのでそのプログラムなどの勉強してる
中間層を日本全国から集めたようなコミュニティーを作りたいです。
アメブロやmixiよりも匿名性を重視して情報の真偽を明確にする
コミュニティーを作ろうと予定してます。
友達同士で馴れ合いをするようなコミュニティーでなく主に情報の交換
が目的ですかね。
0338nobodyさん
2011/08/08(月) 07:33:12.50ID:???SEになりたいのかコミュニティ主催者になりたいのかどっちなんだ?
>>336は前者の意味で聞いたんだが。
0339nobodyさん
2011/08/08(月) 07:58:35.86ID:z33upbGpSEかな、コミュニティー主催者とかは全部大学生バイトとかに試験的
にやらせてみようかなと思ってます。
0340nobodyさん
2011/08/08(月) 08:06:38.30ID:???0341nobodyさん
2011/08/08(月) 09:38:24.91ID:???http://hibari.2ch.net/test/read.cgi/hp/1311593778/
0342nobodyさん
2011/08/08(月) 14:20:21.46ID:ZpEfNsVtglob 関数において、角括弧が含まれるファイルが返りません
角括弧が含まれるファイル名に一致させるにはどうすれば良いでしょうか
0344nobodyさん
2011/08/08(月) 14:34:23.42ID:4ZN6sWYKその処理の先頭から末尾まででいろんなPHP関数が使われてて、
どこかでエラーが発生したとき(falseが返って、以降のコードの実行が不可能になったとき)に
そのエラーを捕まえたいと思います
地道にやれば関数の返り値をいっこいっこチェックしていくべきなんでしょうが
そうではない方法で効率的にエラーを捕まえる方法はないでしょうか?
apacheのエラーログをチェックする以外の方法で、よろしくお願いします
0346342
2011/08/08(月) 14:51:54.71ID:ZpEfNsVtありがとうございます
以下のようにエスケープしてみましたが、一致しません
print_r(glob('\\[example.txt\\]'));
0349nobodyさん
2011/08/08(月) 15:44:19.78ID:???0350342
2011/08/08(月) 15:52:29.26ID:ZpEfNsVtそれは>>346と同じではないでしょうか
>>348
申し訳御座いません。間違えました
結果は同様に、[example].txt が返りません
print_r(glob('\\[example\\].txt'));
0353nobodyさん
2011/08/08(月) 16:09:12.40ID:???0356nobodyさん
2011/08/08(月) 16:21:35.10ID:???print_r(glob('[example].txt'));
print_r(glob('\[example\].txt'));
print_r(glob('\\[example\\].txt'));
結果
Array
(
)
Array
(
[0] => [example].txt
)
Array
(
[0] => [example].txt
)
0357nobodyさん
2011/08/08(月) 17:05:43.95ID:???echo 'これで改行される??\n';
0358nobodyさん
2011/08/08(月) 17:11:16.66ID:???globそのものは[]や{}はメタ文字の一種だろ
0359342
2011/08/08(月) 17:30:03.81ID:ZpEfNsVtこちらのファイルシステムの方に問題があるようですね
角括弧の部分は ? で代用することにします
有り難う御座いました
0360344
2011/08/08(月) 18:53:58.47ID:4ZN6sWYKありがとうございます、そういう機能があるのかと調べてみました。
が、公式のPHPマニュアルの例を見たら、結局該当箇所にtrigger_error()でエラーハンドラ呼び出してますよね
http://www.php.net/manual/ja/function.set-error-handler.php
これだと結局>>344で書いた「エラーが起こりそうな処理の返り値をチェックする」のと
労力的に変わらないですね(自分の理解が間違ってるのかもですが)
コードの任意の範囲内で起きたエラーを自動的に捕まえて、任意の処理を実行するみたいなのは
無理でしょうか?
try{}catch(){}も見たんですが、結局これも処理の途中でこまごまと
チェックしてthrow new Exception(); しなきゃいけないし。
SQLのトランザクションの場合は、try{.....}catch() の間でクエリエラーが発生したら
自動でロールバック処理してくれますが、これはDBがそこまで機能を実装してくれてるからってことかな…
■ このスレッドは過去ログ倉庫に格納されています