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

【PHP】ID出さなくても質問OKなスレ【初心者歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/03(火) 01:09:36ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
04134102009/05/07(木) 23:34:13ID:???
僕は一応html4系とxhtml1.0と1.1で、しかもstrictとtなんちゃらで使えるタグと属性を口頭で全部言えるぐらいの知識しか持ちません
xhtml1.0 strictで使えるタグの数もパッと言えるぐらいの知識です
0414nobodyさん2009/05/08(金) 00:10:55ID:???
じゃ言ってみてくれ
04154102009/05/08(金) 00:13:27ID:???
>>414
76個
04164102009/05/08(金) 00:14:07ID:???
ちなみにhtml4.1 strictとxhtml1.0 strictで使えるタグは同じです
0417nobodyさん2009/05/08(金) 00:16:17ID:???
はよ全部言えよ
0418nobodyさん2009/05/08(金) 01:36:40ID:???
なんだよ質問じゃなくただの知ったかかよ
0419nobodyさん2009/05/09(土) 08:57:00ID:???
4択問題をcsvに記録していくスクリプトを作っています。
csvに下のように書き込まれるようにしています。

名前,答え,答え,答え,答え,答え,(改行)
名前,答え,答え,答え,答え,答え,(改行)
名前,答え,答え,答え,答え,答え,(改行)

複数の人が同時に行うと、下のようにデータが混ざってしまいますよね?

Aさん,答え(Aさん),[Bさん参入で改行]
Bさん,答え(Bさん),答え(Bさん),答え(Aさん),答え(Aさん),答え(Bさん),

実際に試してみるというのがやりにくい問題なので、何を勉強しないといけないか
教えていただけますか。
そもそもCSVでこの手の記録をやろろうとするのはどうなんでしょうか。
0420nobodyさん2009/05/09(土) 09:09:56ID:???
flock
0421nobodyさん2009/05/09(土) 10:00:00ID:???
>>419
コード書いてもらわないと的を得た回答はでないよ
0422nobodyさん2009/05/09(土) 17:18:10ID:???
以前$_SERVER["DOCUMENT_ROOT"]のことでググったときに
DOCUMENT_ROOTの値が実際の値とは違う場合がある事例を見ました。
とすると<base>タグやスクリプト内で絶対パスを作るときにこの変数を使うのは
危険な可能性もあるんでしょうか。
$rootPath = $_SERVER["DOCUMENT_ROOT"];
$a = $rootPath."/sample";
<base href="{$rootPath}">
また$_SERVER["DOCUMENT_ROOT"]以外にルートパス(?)を取得する方法はありますか?
0423nobodyさん2009/05/09(土) 17:40:17ID:???
aru
0424nobodyさん2009/05/09(土) 18:05:56ID:???
そのDOCUMENT_ROOTの値が実際の値とは違う場合がある事例を知らないけど
その事例がわかれば対応できないか?
0425nobodyさん2009/05/09(土) 23:32:39ID:???
DOCUMENT_ROOTって、
public_htmlとか、
htdocとかのこと?
0426nobodyさん2009/05/10(日) 00:07:15ID:???
>>425
知らない奴に聞いてねえよ
ロムってろks野郎
04274192009/05/10(日) 00:07:59ID:???
概略はこんな感じです。最初のifで名前の処理をした後は、最初の問題提示が
一番下のelseから始まり、まず二つ目のifに入り、その後は最初のelseの中をぐるぐるやって、
問題がなくなったら終了するような仕様です。今のところflockはあてずっぽうに入っている状態です。
15問あったとしてAさんがそれを終えるまでのすべてにろっくをかけておかないといけないのでしょうか。
複数の人が同時に問題を解けるようにしたいのですが。
if($_POST["id"] =="999"){
$file_name = "record.txt";
$file = fopen($file_name, "a+") or die("OPENエラー $file_name");
flock($file, LOCK_EX);
中略(解答者の名前の書き込み)
fputs($file, $time);
flock($file, LOCK_UN);
fclose($file);
}

if (is_numeric(@$_POST['answer']) || $_POST['id'] == "2"){
$file = fopen($file_name, "a") or die("OPENエラー $file_name");
flock($file, LOCK_EX);
if(intval(@$_POST['k']) == "0")
{
中略(正誤判定)
fputs($file, $string);
flock($file, LOCK_UN);
fclose($file);
中略(問題提示とPOST)
}
04284192009/05/10(日) 00:11:40ID:???
スクリプト後半です。長いので細かいところは省略してありますが、
本物は期待通り動くことは動きます。
**********
else {
$file_name = "record.txt";
$file = fopen($file_name, "a") or die("OPENエラー $file_name");
flock($file, LOCK_EX);
中略(正誤判定)
fputs($file, $string);
flock($file, LOCK_UN);
fclose($file);
//////全問終了
if($question[0] == ""){
echo "<br><br>終了です!";
中略
$file_name = "record.txt";
$file = fopen($file_name, "a") or die("OPENエラー $file_name");
flock($file, LOCK_EX);
$string = $array.",";
$time = $time."\n";
fputs($file, $string);
flock($file, LOCK_UN);//同時アクセスを防ぐロックを解除
fclose($file);
}
else{
中略(問題提示とPOST)
}
} }
else {
$fname = "voc.csv";
$data = file($fname);
中略(問題提示とPOST)}  }
0429nobodyさん2009/05/10(日) 00:12:13ID:???
>>427
マジレスするとflock($file,LOCK_UN)はいらない
なぜならfcloseでファイルが閉じられるから
0430nobodyさん2009/05/10(日) 03:06:05ID:???
>>427
> 複数の人が同時に問題を解けるようにしたいのですが。
全問終了時だけファイル操作(とロック)すればいいと思うんですよね。
04314192009/05/10(日) 07:43:14ID:???
>>429
ありがとうございます。

>>430
ありがとうございます。

そうですね。最後に一気に書き込む仕様にしておけばいいですよね。
今の仕様ですと、最初のelseの中でぐるぐると出題するごとに
各問題に対する回答者の答えを一つ一つ書き込む
仕様なので(<私の理解が間違ってなければ)、おそらく複数の人が
回答すると419のようにデータ混じるのではないかと思っています。
途中の回答を回答者ごとに一時的にどこかにためておけばいいんですね。

テンポラリーファイルを回答者ごとに別々に作成して回答を一時的に格納し、
最後にひとつの記録用ファイルに書き込むというのを今考えたんですが、
これどうでしょうか、他にもっといいやり方があるでしょうか?
0432nobodyさん2009/05/10(日) 12:07:35ID:glvoYFM0
掲示板の親記事にコメントすると
その親記事にコメントが表示されますが
これってどういうアルゴリズムなんでしょうか?
0433nobodyさん2009/05/10(日) 12:14:49ID:???
全てはデータ構造
データ構造が決まればそれに合わせてプログラムがコーディングされるだけ。
0434nobodyさん2009/05/10(日) 20:17:25ID:kteLIAQk
携帯電話で対応機種を判別するWebページをphpで作っています。
エラーは出ずに動作はしたのですが、対応機種に一致しているはずなのに
一致判定を通ってくれません。
判定条件が間違っているのかもしれませんが、自分ではさっぱりわからないので
ご指摘を頂ければと思います。

【test.php】
<?php

$userAgent = $_SERVER['HTTP_USER_AGENT'];
$deviceList = file("DeviceDisplay.csv");

foreach ($deviceList as $key => $value)
{
rtrim($value);
list($name, $agent) = explode(',', $value);
print $name."<br />";
print $agent."<br /><br />";
if ((strstr($userAgent,$agen))!= false){
print "おk";
break;
}
}
print $userAgent."<br />".$agent;
}


【DeviceDisplay.csv】
903i,D903i

よろしくお願いします。
0435nobodyさん2009/05/10(日) 20:18:00ID:???
>>434
PEAR使えば?
0436nobodyさん2009/05/10(日) 20:21:35ID:???
$value= rtrim($value);

じゃないか?
0437nobodyさん2009/05/10(日) 20:34:37ID:???
$getUA = $_SERVER['HTTP_USER_AGENT'];
$f = file("DeviceDisplay.csv");

foreach ($f as $k=>$v){
list($name, $ua) = explode(',', rtrim($v));
if ($getUA == $ua) {echo "csvに記録されてました";}
}
0438nobodyさん2009/05/10(日) 20:45:09ID:???
>>437
===
0439nobodyさん2009/05/10(日) 20:45:11ID:???
> if ((strstr($userAgent,$agen))!= false){
$agent

なんかいろいろあるな
04404342009/05/10(日) 20:55:16ID:kteLIAQk
>>435-439
ご指摘ありがとうございます!
今回は自力でやりたいのでがんばってみます。

改行を消したのにそれを代入してないのと、
==で判定、そして決定的な綴りミスですね・・・orz
以上を踏まえてリベンジしてきます。
0441nobodyさん2009/05/12(火) 10:24:23ID:???
1.ファイルがない時は作成し、ある時は追加モードでオープン。
2.ファイルが新規作成された時は、chmod 0666
という処理をしたいです。

fopen($filePath, 'a')でファイルオープンした時に、
新規作成されたかどうかが分かれば簡単にできると思うのですが、
できません。
どのようにすれば目的の処理ができるでしょうか?
0442nobodyさん2009/05/12(火) 10:34:06ID:???
file_exisitsでだめなん?
0443nobodyさん2009/05/12(火) 10:54:04ID:???
chmodで失敗したらファイルがないでいいじゃん
0444nobodyさん2009/05/12(火) 10:54:47ID:???
マジレスするとファイルの作成&書き込み時にfile_exisitsなどはやめた方が良い
0445nobodyさん2009/05/12(火) 11:07:09ID:???
flockと組み合わせればfile_exisitsはアリかと
0446nobodyさん2009/05/12(火) 11:18:38ID:???
>>444
何故に?
0447nobodyさん2009/05/12(火) 11:32:33ID:???
>>445
chmod するしないぐらいなら、そんなに神経質にならなくても良いと思うが。
0448nobodyさん2009/05/12(火) 21:45:37ID:???
>>446
ファイルがあるかな?
ファイルがないなー
よーしファイルをつくるぞー
ちょーーとまったーワシが先にファイルを作るでぇ〜ゲヘゲヘ
よっしゃーワシが先にファイル作成完了〜〜大勝利〜〜〜
、、、さーーって、さっき調べた時にファイルなかったから、作るかな,,,
作成、っと、、、ん?今、なんか、違和感を感じたが、、、、なんだったんだ???
0449nobodyさん2009/05/12(火) 21:47:19ID:???
file_exisits使うのはネタに見えてしまうw
0450nobodyさん2009/05/12(火) 21:54:39ID:???
file_existsの何が悪いのかkwsk
0451nobodyさん2009/05/12(火) 22:36:38ID:???
>>448
今回はaモードでopenだから関係ないじゃん。
0452nobodyさん2009/05/12(火) 23:01:41ID:???
俺的にはスクリプトでパーミッションを弄る動作はダメコードだと考えている
0453nobodyさん2009/05/12(火) 23:06:33ID:???
だからfile_existsの何が悪いのよ
適当なこと言わないでよ
0454nobodyさん2009/05/12(火) 23:06:47ID:???
別にいいやん。
ただWindowsだとchmodできんのはチト不便。
0455nobodyさん2009/05/12(火) 23:10:17ID:???
>>453
まず貴様がfile_existsって問題ない理由を述べればいいよ
0456nobodyさん2009/05/12(火) 23:13:14ID:???
>>455
マニュアルに使用上の注意について書いてないじゃない
0457nobodyさん2009/05/12(火) 23:15:59ID:???
また荒らしかよ
0458nobodyさん2009/05/12(火) 23:18:11ID:???
0666ってことはログファイルか
0459nobodyさん2009/05/14(木) 21:19:26ID:???
なんだってー
0460nobodyさん2009/05/15(金) 06:59:21ID:???
結局file_existsが駄目な明確な理由を誰も上げられないんですね
2chなんて所詮口だけ野郎ばっかりか・・
0461nobodyさん2009/05/15(金) 07:11:40ID:???
何を今更
0462nobodyさん2009/05/15(金) 08:06:57ID:???
>>460
ホント期待できなくなったね。
昔と違って、OK waveとか知恵袋とかあるし、まともな連中はそっちの方を見てるのかな。
0463nobodyさん2009/05/15(金) 08:18:07ID:???
>>460
このスレにはニートとフリーターしかいないんだからしょうがないよ
それにPHPはバカ専言語だから優秀な人間は興味を示さないし
0464nobodyさん2009/05/15(金) 08:23:51ID:???
>>463
たしかにPHPなんて使えても所詮WEB開発が関の山だからねw
そのWEB開発にしても最近はRubyとかPythonが台頭してるわけだからPHPを好んで使ってる奴は
アレとしか言いようがないね
0465nobodyさん2009/05/15(金) 08:24:53ID:???
何を今更
0466nobodyさん2009/05/15(金) 08:30:41ID:???
とまぁここまで全部>>460の自作自演なんだけどね
0467nobodyさん2009/05/15(金) 08:34:55ID:???
どこでRubyとPythonが台頭してるんだ?
0468nobodyさん2009/05/15(金) 08:36:49ID:???
>>467
地球上のどこかで
0469nobodyさん2009/05/15(金) 08:40:09ID:???
>>467
お前の知らない外の世界でだよ
まったくこれだから警備員は(ry
0470nobodyさん2009/05/15(金) 08:40:41ID:???
じゃちょっと示してみ
0471nobodyさん2009/05/15(金) 08:41:47ID:???
釣られてソース厨出現ww
0472nobodyさん2009/05/15(金) 10:14:37ID:???
>>460
仰る通りニートとフリーターの憩いの場なんで帰っていただけませんか?
0473nobodyさん2009/05/15(金) 12:25:37ID:???
>>460
じゃあこのまま使い続けてください
誰も止めはしませんので^^
0474nobodyさん2009/05/15(金) 13:22:36ID:???
過疎杉sage
0475nobodyさん2009/05/16(土) 22:47:21ID:???
可変変数って大抵他の書き方した方がスマートでわかりやすいソースになると思うんだけど、
一体どういうときに使えばいいのだろう?
0476nobodyさん2009/05/16(土) 23:33:14ID:???
>>475
特に使う必要はない。
perlであったから、いれてみました、ってだけ。
0477nobodyさん2009/05/16(土) 23:42:36ID:???
>>476
じゃperlではどのように使われてるの?
0478nobodyさん2009/05/16(土) 23:45:50ID:???
それは老人にきいてください

Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
0479nobodyさん2009/05/16(土) 23:48:44ID:???
お前は知らないんかw
0480nobodyさん2009/05/17(日) 00:49:35ID:???
>>475
配列をextractで展開するのと似たようなことが出来るかな。

$arr = array('a'=>'b', 'c'=>'d', 'e'=>'f');
foreach($arr as $key=>$value){

${$key} = $value;

}
んで、最終的に例えばテンプレートファイルを
include 'template.html'
とか呼んでやれば、テンプレート内で展開した変数を使えたりとか?
これだけだったらextractすればいいけど、配列のキーの特定の文字だけ展開したくない場合とか、
(例えば、先頭がアンダーバーで始まってるものは展開しないとか)
条件をつけて展開できるかな。
0481nobodyさん2009/05/17(日) 06:43:27ID:???
本日も過疎。
最新50に1週間も前のレスが表示されるってどんだけww
0482nobodyさん2009/05/17(日) 11:51:52ID:???
この板ではよくあること
0483nobodyさん2009/05/17(日) 22:52:05ID:???
俺が常駐してるスレなんて連続20レスほど保守あげ
しかも俺の
0484nobodyさん2009/05/18(月) 02:39:12ID:???
本番マシンで、エラーを表示させたくない場合、
ini_setと
error_reportingと
どっちを使うの?
0485nobodyさん2009/05/18(月) 02:49:39ID:???
display_errorsじゃねーの?
0486nobodyさん2009/05/18(月) 03:04:08ID:???
>>485
書き方は?
0487nobodyさん2009/05/18(月) 03:05:27ID:???
display_errorsってディレクティブでしょう?
ディレクティブってphp.iniにしか設定できないんでしょう?

レンタルサーバーなので、pnp.iniはいじれない環境です。
なので、php.iniをいじらなくてもできる方法を教えてください
0488nobodyさん2009/05/18(月) 03:11:25ID:???
じゃhtaccessでok
0489名無し募集中。。。2009/05/18(月) 03:28:45ID:wP2DRNT9
ini_set('display_errors','on')
0490nobodyさん2009/05/18(月) 10:16:50ID:???
情報小出しうぜえ
0491nobodyさん2009/05/18(月) 10:36:42ID:???
小出しにしたほうがなんだかミステリアスでいいじゃないか
0492nobodyさん2009/05/18(月) 20:39:24ID:???
>>490
自閉症のあなたがたの
質問能力を鍛えてあげているのです。

営業にまわったとき、
「情報の後だしウゼエwww」
とかって見込み客に言うんですか??
0493nobodyさん2009/05/18(月) 20:40:09ID:???
>>489
これでいいの?
0494名無し募集中。。。2009/05/18(月) 20:53:48ID:wP2DRNT9
今決まってることを先に全部伝えれば余分な工数が圧縮できるので
納期も見積もりも低く抑えることができるわけで
積極的な答えを引き出したいなら客も小出しにはしないけどな
0495nobodyさん2009/05/18(月) 20:55:50ID:???
>>494
それであなたは営業に回ったときに、

「情報の後出しウゼエwww」

とかって見込み客に言ってるの?
0496nobodyさん2009/05/18(月) 21:34:39ID:???
<a href="XXX">vvv</a>

これで、XXXにユーザーからの入力値を入れるんだけど、
javascriptのコードを書かれると
そのまま実行されるんで、
サニタイズしたいんだけど、専用関数あるの?
0497nobodyさん2009/05/18(月) 21:41:15ID:???
サニタイズ言うな
0498nobodyさん2009/05/18(月) 21:42:52ID:???
>>496
ttp://jp.php.net/htmlspecialchars
0499名無し募集中。。。2009/05/18(月) 21:47:19ID:wP2DRNT9
>>495
「今決まってることを先に全部伝えてもらえれば余分な工数が圧縮できますよ 」
って言うけど
0500nobodyさん2009/05/18(月) 22:14:26ID:???
>>498
それだとサニタイズできないでしょ。
0501nobodyさん2009/05/18(月) 22:53:23ID:???
>>500
・・・・え? 何がしたいの?
0502nobodyさん2009/05/18(月) 23:01:36ID:???
<a href="javascript:[ここにjavascriptのコード]">vvv</a>


こう書かれると、htmlなんとかでは
サニタイズできないでしょう?

だからjavascriptって文字をかけない
ようにしなければならないんだけど、
これって正規表現使ってゴリゴリ書かないと
だめなの?
0503nobodyさん2009/05/18(月) 23:03:28ID:???
error_reporting(0);

これって使わないの?
0504nobodyさん2009/05/18(月) 23:11:09ID:???
>>502
実際にそこに何が入るのか知らんが、入力値を分解してURL作ればいいだけの話じゃないの?
0505nobodyさん2009/05/19(火) 02:17:09ID:???
ログファイルの中味を見られないようにするために、
拡張子を.phpにしようと思います。

これだと、たとえブラウザで直接ファイルを指定しても、
拡張子が.phpなのでPHPファイルとして実行しようとするので
(そして中味はPHPのスクリプトでなくて単なるテキストファイルなので)
見られないというわけです。

でもパーミッションが書き込み可能になっていると
問題ありますか?
0506nobodyさん2009/05/19(火) 02:28:01ID:???
ドキュメントルート外や.htaccessでアクセスできないようにする方が吉
拡張子phpは最後の手段
0507nobodyさん2009/05/19(火) 02:31:21ID:???
>>505
発想は悪くないんだがとりあえず試してみ。たぶん思ったのと違う結果になるw
あとパーミッションはあまり気にするな。共用鯖じゃsafemodeでも無い限りどーにもならん。
0508名無し募集中。。。2009/05/19(火) 03:02:13ID:qJyAGOVK
PHPは<??>で囲まない部分はHTMLと同じ扱いだからなw
0509nobodyさん2009/05/19(火) 10:05:00ID:???
>>495
素直に謝って今後そうすることが無いようにすればいいのに
開き直ってそんなこと言ってるから未だにろくな仕事が出来ねえんだよ。
0510nobodyさん2009/05/21(木) 17:42:51ID:???
php_browscap.ini は商用利用可能なのでしょうか。
その他の制限があったりしないか不安なので質問です。
よろしくおねがいします。
0511nobodyさん2009/05/22(金) 00:11:50ID:???
教科書に、

「 magic_quotes_gpc がONになっているときは、
stripslashes を使ってエスケープを取り除く」

と書いてあるのですが、そんなことをするよりも、
ini_set
とかで、
magic_quotes_gpc をOFF
にするほうが
いいのではないですか?
0512nobodyさん2009/05/22(金) 00:13:11ID:???
>>511
いいと思います。
■ このスレッドは過去ログ倉庫に格納されています