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

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

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

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

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0262nobodyさん2010/02/24(水) 19:08:00ID:???
全部
0263nobodyさん2010/02/24(水) 19:51:17ID:QiKWkWLO
さきほどファイルのロック処理で問い合わせさせていただいた者です。

以下の記事の信頼性はいかがばかりでしょうか?
http://www.res-system.com/weblog/item/359

Linux + Apache(prefork) + PHP4 な環境で上記記事のスクリプトは利用可能ですか?


すみませんが、ご教示ください。
0264nobodyさん2010/02/24(水) 20:14:17ID:QiKWkWLO
具体的には以下のコードです。
安全でしょうか?

----------
$retry = 0;

$fp = fopen(CSV_FILE,'a');
stream_set_write_buffer($fp, 0);

while(!flock($fp, LOCK_EX)){
$retry++;
if ($retry > 5) {
return FALSE;
}
usleep(100000); // 0.1秒待つ
}

fwrite($fp, $line);

@flock($fp, LOCK_UN);
@fclose($fp);
0265nobodyさん2010/02/24(水) 20:17:39ID:???
>>261
ソースぐらい出しましょう
0266nobodyさん2010/02/24(水) 20:33:04ID:QiKWkWLO
たびたびすいません。ちゃんと書きます。

入力:
CSV_FILE → 対象となるCSVファイル
$line → 追記したい行

戻り値:
CSV追記成功時は TRUE、失敗時は FALSE。

// CSV追記処理
function csv_write($line){
$retry = 0;

$fp = fopen(CSV_FILE,'a');
stream_set_write_buffer($fp, 0);

while(!flock($fp, LOCK_EX)){
$retry++;
if ($retry > 5) {
@fclose($fp);
return FALSE;
}
usleep(100000); // 0.1秒待つ
}

fwrite($fp, $line);

@flock($fp, LOCK_UN);
@fclose($fp);

return TRUE;
}
0267nobodyさん2010/02/24(水) 20:54:36ID:???
retryなんて必要ない
1回目で書き込みが成功しない場合retryしても書き込みが成功するとは思えない
file_existsで書き込み対象があるか確認
is_writableで書き込み対象が書き込み可能か確認
0268nobodyさん2010/02/24(水) 21:12:31ID:???
オープンしてからロック待ちして*追記*だと、
まあ、いいこと無いわな。 
flock使わない方法使った方がいいよ。占有権とってからファイルオープンね。
0269nobodyさん2010/02/24(水) 21:17:40ID:???
しらんがアパッチのセーフモードと、スタンドアロンで同じ方法で
マルチスレッドやる方法教えてくれよ
0270nobodyさん2010/02/24(水) 21:19:33ID:???
ないからあきらめろ
元々phpはマルチスレッドに対応しとらん
cURL使った擬似的なものを紹介してるとこもあるが
そのモジュールすらはいってないなら手の施しようがない
ご臨終です
0271nobodyさん2010/02/24(水) 21:20:10ID:???
複数からファイルアクセスが起こるなら、sqliteやmysqlでいいんでは。
0272nobodyさん2010/02/24(水) 21:23:52ID:???
そうですか。わかりました
ありがとうございます
0273nobodyさん2010/02/24(水) 22:15:50ID:5FK8q+s6
$users = array('hoge' => 'geho', 'guest' => 'guest');
$u = $_POST['username'];
$p = $_POST['password'];
if ($u != '' && $p != '') {
if ($p == $users[$u]) $_SESSION['username'] = $u;
else unset($_SESSION['username']);
}

この連想配列を外部ファイルから出力させたいのですがさっぱりわかりませんorz
0274nobodyさん2010/02/24(水) 22:24:09ID:???
>>273
fgetcsvとかexplodeとか
0275nobodyさん2010/02/24(水) 22:33:41ID:???
>>235
亀レスだけど、__call()とか使ってたら、検索に引っかからないかもね。
0276nobodyさん2010/02/24(水) 22:39:19ID:???
ID:5FK8q+s6
説明がへたくそすぎるwwwww

ようするに中身が
hoge<>geho
guest<>guest
って書いてある外部ファイルを読み込んで
↓↓↓↓↓
$users = array('hoge' => 'geho', 'guest' => 'guest');
というように連想配列に格納したいってことだろ?

本質とは違うその下の部分に突っ込みたくなるじゃないか・・・
0277nobodyさん2010/02/24(水) 22:43:22ID:5FK8q+s6
>>274
ふむふむ。
参考になります。

>>276
あ、その通りです。
スクリプトを拾って自分なりに書き換えて遊んでるのですがうまくいかなくて・・・。
0278nobodyさん2010/02/24(水) 22:53:52ID:???
$data = file("外部ファイル");
$users = array();
foreach ($data as $row) {
$tmp = explode("<>", $row);
$users[$tmp[0]] = $tmp[1];
}
print_r($users);

動作は確認してないがこんな感じじゃないっすかね
0279nobodyさん2010/02/24(水) 22:58:45ID:???
rtrim
0280nobodyさん2010/02/24(水) 23:06:03ID:???
>>278
一行目が認識されないorz
0281nobodyさん2010/02/24(水) 23:12:02ID:eGz4iYXY
規制喰らってるので携帯から失礼します

$obj &= new ○○();

この&=はどういう意味があるんでしょうか?
0282nobodyさん2010/02/24(水) 23:12:49ID:???
認識・・・?
なんか超初心者っぽいな
エラーでてるならエラー書かないとエスパーは今不在だ
0283nobodyさん2010/02/24(水) 23:14:47ID:???
>>281
「PHP オブジェクトの参照渡し」でググってみればよいと思われ
0284nobodyさん2010/02/24(水) 23:17:04ID:eGz4iYXY
ありがとうございます!調べてみますね
0285nobodyさん2010/02/24(水) 23:19:20ID:5FK8q+s6
>>282
認識って違いましたねw
一行目のhoge<>gehoだけうまく読み込んでくれてないっぽいです。
エラーは出ていませんが・・・。
0286nobodyさん2010/02/24(水) 23:21:56ID:???
>>285
変数の中身を確認してみれ
0287nobodyさん2010/02/24(水) 23:22:58ID:???
BOMちゃうんか
0288nobodyさん2010/02/24(水) 23:23:17ID:HQ6IjQWg
ローカルな話題ですみません。

【OS名】Windows XP
【PHPのバージョン】PHP5.2.10 CLI

test.php
<?php
system("時間が掛かるプログラム.exe");
?>

test.phpを終了させた時、時間が掛かるプログラム.exeも終了して欲しいのですが
終了してくれません。何か終了させる方法はありますか?
0289nobodyさん2010/02/24(水) 23:26:53ID:5FK8q+s6
>>286
$users[$tmp[0]] = $tmp[1];
この辺?w

>>287
BOMってググってみたけど空白?
0290nobodyさん2010/02/24(水) 23:51:05ID:???
>>289
検討違い

$data = file("外部ファイル");
この後にprint_r($data);してみれ
0291nobodyさん2010/02/24(水) 23:54:55ID:dcz7C6Qu
LAMP環境という言葉を最近よく聞きますが、このスタイルで開発する場合、
apacheの公開用ディレクトリにphpファイルを置いてそれを直接編集しながら開発していくのが普通でしょうか?
あるいは、Java開発みたいに別の場所で編集して実行時にデプロイ、みたいなことをやるのですか?

現場でLAMP開発をされてる方はどのような流れで開発してるのでしょうか?教えてください。
0292nobodyさん2010/02/25(木) 00:04:07ID:5FK8q+s6
>>290
おお、そういう事でしたか。

んー確認してみましたが特に問題なかったですorz
0293nobodyさん2010/02/25(木) 00:04:20ID:???
>>288
終了させたときってどのタイミング?
phpが全て表示されたタイミングか
ブラウザを閉じた(他へ移動した)タイミングか
まぁたぶん後者なんだろうけど
両者に共通する点としてsystem関数使えるならプロセスをkillすればいいと思う
XP Proならtaskkillってコマンドがあるが
Homeだとないのでどっかから似たようなプログラムを探して持ってこればいいと思う
軽く探したがこんなのとか
ttp://www.vector.co.jp/soft/winnt/util/se401845.htm
後者のタイミングの場合普通ではこの処理を挟むことも不可能なので
JavaScriptのonBeforeUnloadイベントで終了時(移動時)に
ajaxかなんかで終了させてやるしかないかと思われ
02942932010/02/25(木) 00:06:50ID:???
ごめん上のリンク404出るわ
拡張子のとこhtmじゃなくてhtmlにすれば見れる
0295nobodyさん2010/02/25(木) 00:15:34ID:???
>>291
どちらでもできるから都合いいほうでやったらいいよ
LAMPに限った話なの?って感じもするけど
02962932010/02/25(木) 00:28:21ID:???
ごめん・・・CLIって見落としてたわ
全部忘れてちょうだい
ていうか普通にバッチ処理でいいんじゃ
0297nobodyさん2010/02/25(木) 01:23:21ID:oCMgk6uh
こんばんわ、メールがちゃんと送信できるように
while(!mb_send_mail(/*メール*/))
ってやるのって有効ですか?
0298nobodyさん2010/02/25(木) 01:24:46ID:???
回数を決めてやれ
一生終わらない可能性
0299nobodyさん2010/02/25(木) 01:47:39ID:???
C言語で可能なことなんですが。
char c;
int n = (int)c;
というキャストは出来ますか。
文字型を-128 〜 127に変換するってことです。
0300nobodyさん2010/02/25(木) 01:49:52ID:???
>>1
0301nobodyさん2010/02/25(木) 01:54:40ID:???
>>299
http://php.net/manual/ja/language.types.type-juggling.php
0302nobodyさん2010/02/25(木) 02:13:12ID:???
サナクス
0303nobodyさん2010/02/25(木) 02:24:52ID:???
(C 言語で行われるように) 数値に変換することで 一つの文字のコードを取得できると期待してはいけません。 文字と文字コードを相互に変換するには ord() および chr() 関数を使用してください。
0304nobodyさん2010/02/25(木) 02:59:45ID:QIQePhl3
$data = file("ttttt.txt");
$users = array();
foreach ($data as $row) {
$tmp = explode("<>", $row);
$users[$tmp[0]] = $tmp[1];
}
$tmp[0] = $_POST['username'];
$tmp[1] = $_POST['password'];
if ($tmp[0] != '' && $tmp[1] != '') {
if ($tmp[1] == $users[$tmp[0]]) $_SESSION['username'] = $tmp[0];
else unset($_SESSION['username']);
}

hoge<>geho
aaaa<>bbbb
1111<>2222

なぜか1111<>2222しかログインできない・・・。
何がいかないんでしょうか?
0305nobodyさん2010/02/25(木) 03:10:34ID:???
>>304
最後のだけ改行なしで終わってるんだろ
>>279
0306nobodyさん2010/02/25(木) 03:37:54ID:???
半角とEUC-jpが混在している文を、特定文字を置換すると
本来、区切れない部分を置換してしまうことがあります。
対処法はありますか。
ユニコード文字列みたいなのが出来ればいいですが。
一語が一つの配列入りしてれば
0307nobodyさん2010/02/25(木) 04:29:25ID:???
>>304
なんでforeachのブロックが終わったのに$tmp使ってるの?
その$tmpはforeach内のみで使うローカル変数でしょ
何やってるか理解できてないでしょ?
答え書いても分かるとは思えないけど

$data = file("ttttt.txt");
$users = array();
foreach ($data as $row) {
$tmp = explode("<>", $row);
$users[$tmp[0]] = $tmp[1];
}

この処理が終わった時点で
$usersは
$users['hoge'] = "geho";
$users['aaaa'] = "bbbb';
$users["1111"] = "2222";
こうなってるでしょ

セッション処理してるけど理解してないだろうしそこは省いて簡素化して続き書くと

if (isset($_POST['username']) && isset($_POST['password'])) {
if ($users[$_POST['username']] == $_POST['password']) {
echo "認証成功";
} else {
echo "認証失敗";
}
}
03083072010/02/25(木) 04:41:19ID:???
と説教たれといてなんだが色々間違えてたわ
ちょっと手直しする
0309nobodyさん2010/02/25(木) 05:13:07ID:???
別に間違ってなかったか・・・他の人が指摘してる通りrtrim挟んでなかったんだね

<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
N<input type="text" name="username" value="">
P<input type="text" name="password" value="">
<input type="submit">
</form>
<?php
$data = file("ttttttxt");
$users = array();
foreach ($data as $row) {
$tmp = explode("<>", rtrim($row));
$users[$tmp[0]] = $tmp[1];
}

if (isset($_POST['username']) && isset($_POST['password'])) {
if ($users[$_POST['username']] == $_POST['password']) {
echo "認証成功";
} else {
echo "認証失敗";
}
}
?>

array_key_existsとか使ったほうがいいかもしれないがとりあえず簡素化したものなのでこれで
あと本番ではエスケープ忘れずに
03103092010/02/25(木) 05:20:07ID:???
たびたびスマン・・・やっぱ>>309はよくない
何も入れなくても認証されてしまう
isset使ってるのが原因でもあるがやっぱarray_key_exists使って

if (isset($_POST['username']) && isset($_POST['password'])) {
if (array_key_exists($_POST['username'], $users)) {
if ($users[$_POST['username']] == $_POST['password']) {
echo "認証成功";
} else {
echo "認証失敗";
}
} else {
echo "認証失敗";
}
}

まぁ書き方は色々あるのでとごまかしつつ寝ます・・・
0311nobodyさん2010/02/25(木) 10:58:05ID:???
これはヒドイ・・
03122882010/02/25(木) 13:22:24ID:???
>>296
答えてくれてありがとう。
普通ならバッチ処理でいいのですが、今回はGUIを作っていまして。。

いろいろ試した結果
proc_open()で時間が掛かるプログラムを起動
proc_open()のオプションでbypass_shellをtrueにする
終了時にproc_terminate()
こんな感じでできました。
0313nobodyさん2010/02/25(木) 14:13:12ID:???
textareaにデフォルト値入れたいんだけど、中に何が入るか分からない場合htmlspecialcharsすべき?
0314nobodyさん2010/02/25(木) 14:13:44ID:5niKfpQR
ID表示忘れました
0315nobodyさん2010/02/25(木) 14:14:51ID:???
>>313
×すべき?
○すべきですか?
0316nobodyさん2010/02/25(木) 14:32:59ID:4W7DKvAc
MYSQL5.0を入れて、DBと連携してWEBアプリケーションを構築中なのですが、
MYSQLと接続をしようとしたところ、
Call to undefined function mysql_connect
と出て先に一向に進みません。

PHP5とMYSQLの相性の問題かと思ったのですが、
バージョン的にも問題がないようです。

他に原因として何が考えられますか?
0317nobodyさん2010/02/25(木) 14:35:00ID:4W7DKvAc
色々と構成をいじってしまったので、
とりあえず、サーバーを再起動して見てみます。
0318nobodyさん2010/02/25(木) 14:40:41ID:???
mysqlの拡張を読み込めてないだけやで
0319nobodyさん2010/02/25(木) 14:42:16ID:4W7DKvAc
再起動してみましたが、やっぱり症状変わらずです。

MYSQL単体だとログインが出来て、テーブルも作れます。
PHP5もphpinfo()で動作は確認しています。

やっぱり、接続中に何らかしらのトラブルが発生しているようです。
ネットワーク周りとかで、疑った方がいい設定値などありますか?
0320nobodyさん2010/02/25(木) 14:44:51ID:4W7DKvAc
>>318
mysqlが原因ですか・・・
DBサーバー関係が疎いので、色々やっているうちに、どこかの設定を間違っていじっていたかもしれません。
今から、再インストールしてみます。
ありがとうございます。
0321nobodyさん2010/02/25(木) 14:50:22ID:???
>>320
mysqlではなくphpのmysql用のモジュールが読み込めてないだけ
phpinfo()にMySQLの項目がでてこないと使えない
0322nobodyさん2010/02/25(木) 15:12:09ID:???
>>319
PHP5(2系3系)とMySQL5.xはdllの相性が悪い
5.2なら「php mysql 修正版 dll」でググレ
王道的な解決策は>>6のブログに書いてある
0323nobodyさん2010/02/25(木) 16:07:01ID:???
【OS名】linux
【PHPのバージョン】php5
環境は特に限定せず、普通のレンタル鯖等での動作を想定。

数値での++的な事をアルファベットでやりたいです。
a,b,c....と事前に配列で定義することなく、プログラム的にa,b,c....をループの中などで出力する方法はないでしょうか?
0324nobodyさん2010/02/25(木) 16:08:22ID:???
>>323
suretai
0325nobodyさん2010/02/25(木) 16:36:52ID:???
WindowsXPにPHPを入れてるのですが
PHPからウィンドウズのアプリ(.exe)を起動するにはどんな関数を使えばいいのですか?
アプリはPHPソースと同じ場所にあります。
0326nobodyさん2010/02/25(木) 16:37:13ID:???
>>325
suretai
0327nobodyさん2010/02/25(木) 16:39:28ID:gV6UoPDq
おっと、これは失礼。

WindowsXPにPHPを入れてるのですが
PHPからウィンドウズのアプリ(.exe)を起動するにはどんな関数を使えばいいのですか?
アプリはPHPソースと同じ場所にあります。
0328nobodyさん2010/02/25(木) 16:39:52ID:???
`hoge.exe`;
0329nobodyさん2010/02/25(木) 16:51:08ID:gV6UoPDq
>>328
いやそうやって書いてたんですがエラーでて(´・ω・`)
っておもってたんですがスペルマミスでしたwwwwwwwwwwwwwwwwwサーセンwwww
そして直して再度やってみたら、なんかブラウザが読み込み中のままで
サーバー側でアプリが起動してないんですが
他に何か気をつける点があったら教えてください
0330nobodyさん2010/02/25(木) 17:02:02ID:???
`GUIなアプリ.exe`; とかしてない?
0331nobodyさん2010/02/25(木) 17:02:30ID:???
サーバー側のログは?
0332nobodyさん2010/02/25(木) 17:10:15ID:gV6UoPDq
>>330
えっと普通のWinアプリなのでGUI的な感じですが・・・
>>331
ログどこにありますかログ。みてみます
0333nobodyさん2010/02/25(木) 17:24:18ID:???
GUIかよ
`〜` は文字出力して戻ってくるのが前提のコマンドだ。
もしサーバー側で実行が成功してるなら
そのphp、つまりhttpdの実行ユーザーで実行されている
デスクトップがそのユーザーのものじゃないからそのままじゃ出ないだろう
サービスの設定でデスクトップとの対話を許可するとかやれば出るかもしれない

実行してphpkら切り離すのは、、、&使えたっけ?forkしてexecとかか
0334nobodyさん2010/02/25(木) 17:31:33ID:gV6UoPDq
>>333
すごいありがとうございます。
確かに画面には出ていませんでした。。。
んでタスクマネージャみてみたらボタン押した回数分起動してましたww
すみません、サービスの設定はどうやってやるのですか?><
んで、サイトに書いてるようにexecやったらphpが抜けてこないっぽいので
切り離すやりかたを><
0335nobodyさん2010/02/25(木) 17:34:16ID:???
サービスは、、、マイコンピュータの右クリックから管理でサービス選んで
Apacheのプロパティ出してログオンのとこにあるデスクトップ〜をチェック
0336nobodyさん2010/02/25(木) 17:56:54ID:gV6UoPDq
>>335
できました!!!
タスクトレイのアイコン右クリのサービスでもOKでした。
おかげでアプリは見事に表示されました!!

で、これやっぱりアプリ終了させるまでexecで止まってるみたいですね。
アプリは起動されたら一連の動作を終えたら終了するようにするので
これはこれでOKかなとおもいました。

いろいろありがとうございました。
ほんと助かりました。。。
0337nobodyさん2010/02/25(木) 19:13:45ID:???
>>313
htmlspecialcharsは表示のタイミングで使うものなので
受け取った値をどう使うかによる
表示するのなら(そのタイミングで)使うべき
内部で処理するために使うだけならいらない
0338nobodyさん2010/02/26(金) 00:44:43ID:???
何言ってんだこの馬鹿は
0339nobodyさん2010/02/26(金) 01:11:20ID:???
スーパーチンピラタイム
0340nobodyさん2010/02/26(金) 02:35:11ID:L4Bq0Atm
>>305
rtrimを使わないといけないのは分かりましたが理解が出来ない・・・。

>>307
なんとなくでしか分かってないですorz
issetで書いた方がいいのでしょうか・・・?

>>310
一つ一つ理解して頑張っていきたいと思います・・・。
これで動きました。

ありがとうございます。
0341nobodyさん2010/02/26(金) 03:25:21ID:???
まぁはじめからうまくいくようなもんじゃないしガンガレ
0342nobodyさん2010/02/26(金) 07:56:53ID:???
>>340
http://jp.php.net/manual/ja/function.file.php
注意: FILE_IGNORE_NEW_LINES を指定しない限り、 配列に取り込まれた各行は行末文字も含みます。
行末文字を取り除きたい場合には rtrim() を使用する必要があります。

fileで配列に入った1行ずつの最後には改行が入ってるよってこと。
だからexplodeした最後の配列の中は
"geho[行末文字]"になっていて比較する"geho"とは違う文字列となってしまう。

こういうときは自分なら
hoge<>geho<>
aaaa<>bbbb<>
1111<>2222<>
と余分に<>を付けとく
0343nobodyさん2010/02/26(金) 11:11:53ID:AdOXrMqO
すんません。
昨日execがどーのとかって騒いでた基地外ですがまた質問させてください。
昨日の件はうまくいって感謝しています。んで、それの続きなんですが

echo "処理中";
exec('hoge.exe')
echo "<img src='hoge.jpg'>";

てな具合でボタンを押したらhoge.exeを起動してhoge.exeがhoge.jpgを作成して
作成したらhoge.exeは終了するのでhoge.jpgを表示するってストーリーなのですが
hoge.exeはjpgを作成するまでやや時間がかかるので、
ボタンを押したら"処理中"の文字を表示してからhoge.exeを起動したいのですが
何故か、hoge.exeが終了してから"処理中"が表示されてしまいます・・・
これどうしたら、先に処理中って文字を表示させることができますか?
0344nobodyさん2010/02/26(金) 11:14:02ID:???
flush
0345nobodyさん2010/02/26(金) 11:31:14ID:AdOXrMqO
>>344
でけましたありがとう。
ob_flush( );
flush( );
と両方しないとダメなんですね。
0346nobodyさん2010/02/26(金) 12:23:06ID:OgECULN1
【OS/PHPのバージョン】 WindowsXP / PHP 5.2.11
動画アップローダを作成しています。
動画・タイトルどちらが欠けてもエラーが出る様にしています。
しかしタイトルを未入力で、動画だけをアップした時、
何故かエラーが出ずphpがそのまま実行されて確認画面まで来てしまいます。
(動画も結局アップされていません)
これはphp.iniで設定された容量制限である100MBをオーバーしてしている場合のみで、
軽い動画ならうまく動作する様ですが…。
■up.html
<form action="up.php" method="POST" enctype="multipart/form-data">
動画 <input name="video" type="file"><br>
タイトル <input name="videotitle" type="text" size="30" value=""><br>
<input type="submit" name="up" value="アップする"></form>
■up.php
<?php
if (isset($_POST["up"])) {
$path = "./"
$video = $_FILES["video"]["name"];
$videotitle = $_POST["videotitle"];
if (!isset($videotitle)) {
error;//エラー処理(元のアップローダ画面に飛ばす)
exit();}
if (move_uploaded_file($_FILES['video']['tmp_name'],$path.$video) == false) {
error;//エラー処理(元のアップローダ画面に飛ばす)
exit();}
//確認画面処理〜
}?>

php.iniのファイルサイズ制限が効いていないのかと思い
直接ファイルサイズ if ($_FILES["video"]["size"] > 1000000) {〜} 等でチェックしましたが、
やはり大きい動画をアップするとこのエラーはスルーされてそのまま確認画面まで来てしまいます。
どこが間違っているのでしょうか?
0347nobodyさん2010/02/26(金) 12:35:10ID:???
$videotitle = $_POST["videotitle"];
if ($videotitle == "") {
0348nobodyさん2010/02/26(金) 12:35:36ID:L4Bq0Atm
>>342
ふむふむ。
file関数をバカにしてました・・・。

勉強になります。
03493462010/02/26(金) 13:40:42ID:OgECULN1
>>347
やってみましたが、やはり動画のアップがされた後確認画面が出ます。
仮に値を入れても、動画ファイルの容量が大きいと空の状態の確認画面が出て来てしまいます。
0350nobodyさん2010/02/26(金) 13:51:38ID:???
>>349
他にpostサイズの制限とかメモリ制限の設定があるから確認してみたら
$_FILES["video"]["error"]もご確認くださいませ
0351nobodyさん2010/02/26(金) 13:55:57ID:???
ポスト容量でかすぎの失敗のときに isset($_POST["up"])も falseでしょう。
そうすると、いきなり確認画面になるね。
03523462010/02/26(金) 14:04:45ID:OgECULN1
>>350
$_FILES["video"]["error"]確認しましたが空でした。
>>351
ネットで検索した所
「php.iniで設定したpost_max_sizeの値を超えると、該当の変数の値が消えてしまう」
というのがあったので、
「post_max_sizeを超える=動画をアップしていない状態」になるという事は何となく分かりました。

となると動画の容量がデカイ状態と動画ファイルを指定していない状態を同一の処理にするしか
無いという事でしょうか。
0353nobodyさん2010/02/26(金) 14:05:06ID:???
ごめん
0354nobodyさん2010/02/26(金) 14:08:58ID:???
>>352
小さいサイズの画像とかはアップできるん?
03553462010/02/26(金) 14:15:28ID:???
>>354
post_max_sizeあるいはupload_max_sizeを超えなければいける様です。
色々探してて次の様な記述見つけたのでとりあえずの対応策打っておきます。

>・php.ini で post_max_size > upload_max_size にしておかないと、
>スクリプト自体が強制終了して、$_FILES[...]['error'] を見てエラーメッセージを出せないので注意。
>・アップロード form において、hidden input の MAX_FILE_SIZE は
>type="file" な input より手前に書かないと適用されないので注意。

ありがとうございました。お騒がせしました。
0356nobodyさん2010/02/26(金) 17:13:48ID:pmFXcZ0U
MimeTypeのところで出てきたのですが、magicfileって何なのでしょうか?
単にmagicfileで検索しても名探偵コナンばっか出てくるし(苦笑)、それを検索から除去しても良く分かりませんでした
0357nobodyさん2010/02/26(金) 17:23:35ID:???
それはPHPの質問じゃなくApacheの質問くさいが(苦笑)
0358nobodyさん2010/02/26(金) 18:11:59ID:???
>>357
そうなんですか?
分かりました
ではApacheスレに移動します
0359nobodyさん2010/02/27(土) 14:37:21ID:96it23LZ
「PHPは厳密にはオブジェクト指向言語じゃない」
といわれるゆえんは何?

クラスも持ってるしクラスオブジェクトもつくれるしオブジェクト指向言語と呼ばれる資格は
十二分に兼ね備えていると思うんだが(´・ω・`)
0360nobodyさん2010/02/27(土) 14:52:54ID:???
後つけのオブジェクト指向だからでしょ
普通CといったらC++はささないけど
PHPといったらPHP3もPHP5もさすし名称的な問題もあるのかなぁと
今の状態はまだまだなんちゃってオブジェクト指向
オブジェクト指向としての機能が弱かったり足りなかったり
0361nobodyさん2010/02/27(土) 14:59:17ID:???
Javaやれば分かるよ
でも相対的な程度の違いであって
オブジェクト指向かそうでないかと言われれば「YES」になる
■ このスレッドは過去ログ倉庫に格納されています