【PHP】下らねぇ質問はID出して書き込みやがれ 93
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/02/15(月) 19:23:06ID:???過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0306nobodyさん
2010/02/25(木) 03:37:54ID:???本来、区切れない部分を置換してしまうことがあります。
対処法はありますか。
ユニコード文字列みたいなのが出来ればいいですが。
一語が一つの配列入りしてれば
0307nobodyさん
2010/02/25(木) 04:29:25ID:???なんで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 "認証失敗";
}
}
0308307
2010/02/25(木) 04:41:19ID:???ちょっと手直しする
0309nobodyさん
2010/02/25(木) 05:13:07ID:???<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とか使ったほうがいいかもしれないがとりあえず簡素化したものなのでこれで
あと本番ではエスケープ忘れずに
0310309
2010/02/25(木) 05:20:07ID:???何も入れなくても認証されてしまう
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:???0312288
2010/02/25(木) 13:22:24ID:???答えてくれてありがとう。
普通ならバッチ処理でいいのですが、今回はGUIを作っていまして。。
いろいろ試した結果
proc_open()で時間が掛かるプログラムを起動
proc_open()のオプションでbypass_shellをtrueにする
終了時にproc_terminate()
こんな感じでできました。
0313nobodyさん
2010/02/25(木) 14:13:12ID:???0314nobodyさん
2010/02/25(木) 14:13:44ID:5niKfpQR0316nobodyさん
2010/02/25(木) 14:32:59ID:4W7DKvAcMYSQLと接続をしようとしたところ、
Call to undefined function mysql_connect
と出て先に一向に進みません。
PHP5とMYSQLの相性の問題かと思ったのですが、
バージョン的にも問題がないようです。
他に原因として何が考えられますか?
0317nobodyさん
2010/02/25(木) 14:35:00ID:4W7DKvAcとりあえず、サーバーを再起動して見てみます。
0318nobodyさん
2010/02/25(木) 14:40:41ID:???0319nobodyさん
2010/02/25(木) 14:42:16ID:4W7DKvAcMYSQL単体だとログインが出来て、テーブルも作れます。
PHP5もphpinfo()で動作は確認しています。
やっぱり、接続中に何らかしらのトラブルが発生しているようです。
ネットワーク周りとかで、疑った方がいい設定値などありますか?
0320nobodyさん
2010/02/25(木) 14:44:51ID:4W7DKvAcmysqlが原因ですか・・・
DBサーバー関係が疎いので、色々やっているうちに、どこかの設定を間違っていじっていたかもしれません。
今から、再インストールしてみます。
ありがとうございます。
0321nobodyさん
2010/02/25(木) 14:50:22ID:???mysqlではなくphpのmysql用のモジュールが読み込めてないだけ
phpinfo()にMySQLの項目がでてこないと使えない
0322nobodyさん
2010/02/25(木) 15:12:09ID:???PHP5(2系3系)とMySQL5.xはdllの相性が悪い
5.2なら「php mysql 修正版 dll」でググレ
王道的な解決策は>>6のブログに書いてある
0323nobodyさん
2010/02/25(木) 16:07:01ID:???【PHPのバージョン】php5
環境は特に限定せず、普通のレンタル鯖等での動作を想定。
数値での++的な事をアルファベットでやりたいです。
a,b,c....と事前に配列で定義することなく、プログラム的にa,b,c....をループの中などで出力する方法はないでしょうか?
0325nobodyさん
2010/02/25(木) 16:36:52ID:???PHPからウィンドウズのアプリ(.exe)を起動するにはどんな関数を使えばいいのですか?
アプリはPHPソースと同じ場所にあります。
0327nobodyさん
2010/02/25(木) 16:39:28ID:gV6UoPDqWindowsXPにPHPを入れてるのですが
PHPからウィンドウズのアプリ(.exe)を起動するにはどんな関数を使えばいいのですか?
アプリはPHPソースと同じ場所にあります。
0328nobodyさん
2010/02/25(木) 16:39:52ID:???0329nobodyさん
2010/02/25(木) 16:51:08ID:gV6UoPDqいやそうやって書いてたんですがエラーでて(´・ω・`)
っておもってたんですがスペルマミスでしたwwwwwwwwwwwwwwwwwサーセンwwww
そして直して再度やってみたら、なんかブラウザが読み込み中のままで
サーバー側でアプリが起動してないんですが
他に何か気をつける点があったら教えてください
0330nobodyさん
2010/02/25(木) 17:02:02ID:???0331nobodyさん
2010/02/25(木) 17:02:30ID:???0332nobodyさん
2010/02/25(木) 17:10:15ID:gV6UoPDqえっと普通のWinアプリなのでGUI的な感じですが・・・
>>331
ログどこにありますかログ。みてみます
0333nobodyさん
2010/02/25(木) 17:24:18ID:???`〜` は文字出力して戻ってくるのが前提のコマンドだ。
もしサーバー側で実行が成功してるなら
そのphp、つまりhttpdの実行ユーザーで実行されている
デスクトップがそのユーザーのものじゃないからそのままじゃ出ないだろう
サービスの設定でデスクトップとの対話を許可するとかやれば出るかもしれない
実行してphpkら切り離すのは、、、&使えたっけ?forkしてexecとかか
0334nobodyさん
2010/02/25(木) 17:31:33ID:gV6UoPDqすごいありがとうございます。
確かに画面には出ていませんでした。。。
んでタスクマネージャみてみたらボタン押した回数分起動してましたww
すみません、サービスの設定はどうやってやるのですか?><
んで、サイトに書いてるようにexecやったらphpが抜けてこないっぽいので
切り離すやりかたを><
0335nobodyさん
2010/02/25(木) 17:34:16ID:???Apacheのプロパティ出してログオンのとこにあるデスクトップ〜をチェック
0336nobodyさん
2010/02/25(木) 17:56:54ID:gV6UoPDqできました!!!
タスクトレイのアイコン右クリのサービスでもOKでした。
おかげでアプリは見事に表示されました!!
で、これやっぱりアプリ終了させるまでexecで止まってるみたいですね。
アプリは起動されたら一連の動作を終えたら終了するようにするので
これはこれでOKかなとおもいました。
いろいろありがとうございました。
ほんと助かりました。。。
0337nobodyさん
2010/02/25(木) 19:13:45ID:???htmlspecialcharsは表示のタイミングで使うものなので
受け取った値をどう使うかによる
表示するのなら(そのタイミングで)使うべき
内部で処理するために使うだけならいらない
0338nobodyさん
2010/02/26(金) 00:44:43ID:???0339nobodyさん
2010/02/26(金) 01:11:20ID:???0340nobodyさん
2010/02/26(金) 02:35:11ID:L4Bq0Atmrtrimを使わないといけないのは分かりましたが理解が出来ない・・・。
>>307
なんとなくでしか分かってないですorz
issetで書いた方がいいのでしょうか・・・?
>>310
一つ一つ理解して頑張っていきたいと思います・・・。
これで動きました。
ありがとうございます。
0341nobodyさん
2010/02/26(金) 03:25:21ID:???0342nobodyさん
2010/02/26(金) 07:56:53ID:???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:???0345nobodyさん
2010/02/26(金) 11:31:14ID:AdOXrMqOでけましたありがとう。
ob_flush( );
flush( );
と両方しないとダメなんですね。
0346nobodyさん
2010/02/26(金) 12:23:06ID:OgECULN1動画アップローダを作成しています。
動画・タイトルどちらが欠けてもエラーが出る様にしています。
しかしタイトルを未入力で、動画だけをアップした時、
何故かエラーが出ず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:???if ($videotitle == "") {
0348nobodyさん
2010/02/26(金) 12:35:36ID:L4Bq0Atmふむふむ。
file関数をバカにしてました・・・。
勉強になります。
0349346
2010/02/26(金) 13:40:42ID:OgECULN1やってみましたが、やはり動画のアップがされた後確認画面が出ます。
仮に値を入れても、動画ファイルの容量が大きいと空の状態の確認画面が出て来てしまいます。
0350nobodyさん
2010/02/26(金) 13:51:38ID:???他にpostサイズの制限とかメモリ制限の設定があるから確認してみたら
$_FILES["video"]["error"]もご確認くださいませ
0351nobodyさん
2010/02/26(金) 13:55:57ID:???そうすると、いきなり確認画面になるね。
0352346
2010/02/26(金) 14:04:45ID:OgECULN1$_FILES["video"]["error"]確認しましたが空でした。
>>351
ネットで検索した所
「php.iniで設定したpost_max_sizeの値を超えると、該当の変数の値が消えてしまう」
というのがあったので、
「post_max_sizeを超える=動画をアップしていない状態」になるという事は何となく分かりました。
となると動画の容量がデカイ状態と動画ファイルを指定していない状態を同一の処理にするしか
無いという事でしょうか。
0353nobodyさん
2010/02/26(金) 14:05:06ID:???0355346
2010/02/26(金) 14:15:28ID:???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単にmagicfileで検索しても名探偵コナンばっか出てくるし(苦笑)、それを検索から除去しても良く分かりませんでした
0357nobodyさん
2010/02/26(金) 17:23:35ID:???0359nobodyさん
2010/02/27(土) 14:37:21ID:96it23LZといわれるゆえんは何?
クラスも持ってるしクラスオブジェクトもつくれるしオブジェクト指向言語と呼ばれる資格は
十二分に兼ね備えていると思うんだが(´・ω・`)
0360nobodyさん
2010/02/27(土) 14:52:54ID:???普通CといったらC++はささないけど
PHPといったらPHP3もPHP5もさすし名称的な問題もあるのかなぁと
今の状態はまだまだなんちゃってオブジェクト指向
オブジェクト指向としての機能が弱かったり足りなかったり
0361nobodyさん
2010/02/27(土) 14:59:17ID:???でも相対的な程度の違いであって
オブジェクト指向かそうでないかと言われれば「YES」になる
0362nobodyさん
2010/02/27(土) 15:25:22ID:???0363nobodyさん
2010/02/27(土) 15:35:27ID:???0364nobodyさん
2010/02/27(土) 17:10:35ID:???if ((>>360 == >>363 || >>361 == >>363)
echo ">>363=チンピラ乙";
}
?>
0366nobodyさん
2010/02/27(土) 17:23:24ID:???0367nobodyさん
2010/02/27(土) 17:36:39ID:???0368nobodyさん
2010/02/27(土) 17:56:19ID:AeZrDmue【PHPのバージョン】php5.26
【連携ソフトウェア】apach2.2
【質問内容】
これまで相対パスしか使ったこと無くてドキュメントルートから上にファイル置いたとき、
どんな風に指定すればいいのかわからないよっ
誰かおしえて
0369nobodyさん
2010/02/27(土) 17:59:24ID:???0370nobodyさん
2010/02/27(土) 18:01:01ID:???0373nobodyさん
2010/02/27(土) 18:43:19ID:???0374nobodyさん
2010/02/27(土) 19:04:06ID:???あと例外投げないのが嫌ならエラーハンドリングすればいいのでは?
0375nobodyさん
2010/02/27(土) 20:03:19ID:???正しくアクセスできないわけだけど、 $this-> をつけなくてもエラーが返されないって点はこわくね?
うっかり $this-> を付け忘れるとそのメソッド内限定の変数として扱われ、クラスプロパティの値は
全く変えられなくなる。それでいてエラーとかは表示されないわけだからバグ混入の原因にもなる。
以前クラスを作った際にクラスプロパティの値が何やっても変更されなくて数時間の格闘の末
プロパティに$this->を付け忘れただけということが判明した。本当に恐ろしい体験だったぜ・・・
0376nobodyさん
2010/02/27(土) 20:03:56ID:???チンピラだから仕方がない
>>374
>あと例外投げないのが嫌ならエラーハンドリングすればいいのでは?
本人でないがそれじゃ意味ない罠
わざわざそういうことをしないために元々サポートされるものなんだから
0378nobodyさん
2010/02/27(土) 20:18:20ID:???しなくてもいいししてもいい
例外投げてくれたほうがいいと思うならすればいいじゃない
言語に使われるんじゃなくて言語を使わなくちゃだめだよ
0379nobodyさん
2010/02/27(土) 20:36:48ID:???0380nobodyさん
2010/02/27(土) 21:13:23ID:???デストラクタでファイルをクローズするのはお行儀のいいプログラムだと思う?
デストラクタを使えば確実にファイルをクローズすることができるし
0381nobodyさん
2010/02/27(土) 21:21:12ID:???0382nobodyさん
2010/02/27(土) 21:28:15ID:???0383nobodyさん
2010/02/27(土) 21:30:36ID:???0384nobodyさん
2010/02/27(土) 22:07:39ID:???サンクス、この調子でいってみるノシ
ところで"rb+"オプション(読み書きモード)付きでファイルをオープンしたあとflock()で排他ロック。
ファイルを読み込んで処理を施したあと再度上書き保存して排他ロックを解除、
というシナリオを考えているんだけど最後にファイルを上書き保存する際に
一度ファイルをまっさらにする方法って無い?
"rb+"モードだとポインタを先頭に戻して書き込んでも以前のファイルの内容が残ってしまうんだよね。
たとえば"rb+"モードで長文開いたあと短文を保存すると短文のあとに以前の長文の残骸が残って
しまう。
書き込み前に一瞬だけ排他ロックを外して"w"オプションでファイルに書き込めばこの問題は
解決できるんだけど一瞬排他ロックを外した瞬間にそのファイルがいじられてしまう可能性だって
ゼロではない。
う〜ん・・・、どうすればいいんだろう・・・
0385nobodyさん
2010/02/27(土) 22:14:17ID:???0387nobodyさん
2010/02/27(土) 23:17:37ID:???【PHPのバージョン】5.2.5 - SafeMode
【質問内容】
phpで送信されてきたidとpasswordをListファイルにあるidとpasswordで照合させたいのですが
外からListファイルを読めないようにするにはどうしたら良いのでしょうか。
0389388
2010/02/27(土) 23:21:14ID:???0390nobodyさん
2010/02/27(土) 23:42:50ID:wtKSisfTatpagesを使用してるのですが、ドキュメントルートより上におくって無理っぽい><
0392nobodyさん
2010/02/28(日) 04:50:09ID:???atpagesならDB使えるしそっちでも
0394nobodyさん
2010/02/28(日) 10:54:11ID:???【PHPのバージョン】5.2.5
【質問内容】
借りているサバでcronが使えないのでローカルの
タスクスケジューラーを利用してhttp経由で定期的に処理させたい
タスクがあります。
<?php
$URL="http://xxx.com/index.php"
file_get_contents($URL);
?>
上のようなコードでレンタサーバ上のPHPファイルは
実行されるでしょうか?
もし駄目ならフォームを作っておいて
フォームの変数に実行の権限を与えて
JSでdocument.form.fname.onsbmit();
してやればいいのかなと考えているのですが
判然としません。
0395nobodyさん
2010/02/28(日) 11:06:27ID:???0396nobodyさん
2010/02/28(日) 13:06:03ID:???0397nobodyさん
2010/02/28(日) 13:22:02ID:LiqVmvoYその配列を値のファイルの更新時間が新しい順にソートしたいのですが全く考えが浮かびません。
何か方法がありましたらお答え頂けると嬉しいです。
0398nobodyさん
2010/02/28(日) 13:24:39ID:???0399nobodyさん
2010/02/28(日) 13:24:42ID:???0400nobodyさん
2010/02/28(日) 13:28:01ID:LiqVmvoYありがとうございました。やってみます。
0401nobodyさん
2010/02/28(日) 13:33:10ID:???0402nobodyさん
2010/02/28(日) 13:34:15ID:???しかし、同じのを複数回呼び出すので効率悪い。
確定した値つかうのを推奨。
0403nobodyさん
2010/02/28(日) 13:36:13ID:???0404nobodyさん
2010/02/28(日) 13:38:36ID:???晒せや
■ このスレッドは過去ログ倉庫に格納されています