【PHP】ID出さなくても質問OKなスレ【初心者歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/02/03(火) 01:09:36ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
0348346
2009/05/03(日) 07:49:18ID:???ひょっとして三項演算子ってifとelseでいいんじゃとか思うのは素人だからですね・・・
0349nobodyさん
2009/05/03(日) 10:06:03ID:???ありがとうございます。
実はここに書き込む前にこのページを検索して見つけてはいたのですが、どうやって記述すればよいのかまったくわかりません。
ためしにsmartyのなかに{html_select_date}とかいてみましたがそのまま出てきてしまいました 汗
まったくのど素人で申し訳ないのですがよろしくお願いします。
0350nobodyさん
2009/05/03(日) 10:30:25ID:???別にif-elseでいいよ
三項演算子は可読性が悪いから
会社とかだと大抵コーディング規約で禁止されてる
変数に入れられるのは結構いい場面もあるけどね
例にもあるように$_GETや$_POSTなんかをセットするときには便利
0352nobodyさん
2009/05/03(日) 10:37:40ID:???0353nobodyさん
2009/05/03(日) 10:43:38ID:???0354343=349
2009/05/03(日) 10:57:52ID:???これって平成〜年とか昭和〜年とか表示するドロップダウンリストをつくることはできないのでしょうか?
0356nobodyさん
2009/05/03(日) 13:04:05ID:???0357nobodyさん
2009/05/03(日) 13:21:09ID:???0358nobodyさん
2009/05/03(日) 15:01:30ID:???0359nobodyさん
2009/05/03(日) 15:06:48ID:???0360nobodyさん
2009/05/03(日) 16:44:20ID:???まぁバカでも組めるものを組ませるって考えはあるんだけどさ。
0363nobodyさん
2009/05/03(日) 17:06:02ID:???0364nobodyさん
2009/05/03(日) 21:25:24ID:???処理の途中で止まって(とめて)改行が行われないことがあります(あるとします)。その時に、ファイルの最後に
改行が入ってないことを検知して、改行をした上で新しいデータを次の行から作りたいんですが、
改行の有無はどうやったら検知できますでしょうか?今使っているエディタ(EmEditor)では
「↓」という記号で改行がマークされ、ググったりしましたが、どうしていいものやらよく
わかりません。
1,2,1,2,3,2[改行]
1,1,1,2,3,3[改行]
1,1,2,[処理ストップ、改行なしの行] <-- [改行]が無いことを検知して改行追加したい
常に改行を冒頭に入れるようにすると、データのない行ができて、のちのち面倒なので、
それは避けたいと思っています。
0365nobodyさん
2009/05/03(日) 21:31:37ID:???0366364
2009/05/03(日) 21:43:26ID:???$string = fgets($file, 1000);
var_dump($string);
dumpしても改行部分は空白になりますよね。
例えば、検索かけて、"\n"でマッチするんでしょうか?
0367364
2009/05/03(日) 21:56:26ID:???0368nobodyさん
2009/05/04(月) 13:26:07ID:0LqkTRhFfirefoxでは表示されてる。。。
php.iniの設定変更がいるのですか?
0369nobodyさん
2009/05/04(月) 13:40:32ID:???0370nobodyさん
2009/05/04(月) 13:53:15ID:0LqkTRhFそれでも表示されないまま。
HTMLやCSSの問題ですか?
0371nobodyさん
2009/05/04(月) 14:09:38ID:???それ疑う前に
ソースみて反映されてるかどうか確認してみなよ
0372nobodyさん
2009/05/04(月) 14:22:28ID:0LqkTRhFソースは以下です。
「list.php」
<html>
<body>
<form action="detail.php" method="POST">
<input type="image" src="img/detail.gif" name="submit" value="0001">
</form>
</body>
</html>
「detail.php」
<html>
<body>
<p>詳細情報</p>
<?php
print "submit:".$_POST["submit"]."<br>";
?>
取得情報:
<?php
print $_POST["submit"]."<br>";
?>
</body>
</html>
0373nobodyさん
2009/05/04(月) 14:34:18ID:???0374nobodyさん
2009/05/04(月) 15:14:34ID:0LqkTRhFtype="image"でなく、hiddenでPOSTしたらうまくいきました
phpinfo()で表示された値は位置情報だったんですね
0375nobodyさん
2009/05/04(月) 15:15:04ID:???0376nobodyさん
2009/05/05(火) 21:05:16ID:???よく不正アクセスの痕跡を見つけた と言ってますが・・・
0377nobodyさん
2009/05/06(水) 12:17:28ID:???(☆)(★)(◇)
(☆)(★)(◇)
(★)の部分は文字列、文字数共に不確定で1,2共に全く違う文章です。
(☆)(◇)の部分は文字列、文字数共に不確定ですが1,2共に同じ文章です
(★)の部分のみを切り取りたいのですがどうすればいいでしょうか?
0378nobodyさん
2009/05/06(水) 12:18:14ID:???(☆)(★)(◇)
(☆)(★)(◇)
↓
1.(☆)(★)(◇)
2.(☆)(★)(◇)
0380nobodyさん
2009/05/06(水) 12:27:01ID:???http://pear.php.net/package/Text_Diff/
こんなのとか
0383nobodyさん
2009/05/06(水) 13:20:24ID:???やっぱりこれじゃダメでした
改行していない場合同じ文字列の部分も違う物として取得されてしまいました
改行していない文章の差分を取得したいのですが無理でしょうか・・・
たとえば
aaabbccc
axxaabbbccac
の二つの文章があった場合
xxとbとaを取得したいのです
0384nobodyさん
2009/05/06(水) 13:31:31ID:???全て1文字ずつの配列にしたらしっかり判定されました
お騒がせしてすみません
0385nobodyさん
2009/05/06(水) 15:01:48ID:???MYSQLからデータ表示するコードください?
0386nobodyさん
2009/05/06(水) 15:06:38ID:???0387nobodyさん
2009/05/06(水) 15:36:58ID:???ありがとうです
あと、実行時にApache HTTPサーバーと表示させ落とされます
どうすればいいですか?
0388nobodyさん
2009/05/06(水) 15:42:54ID:???0390nobodyさん
2009/05/06(水) 16:48:50ID:GdRs26+o$url = 'xxxxx'; //ファイルのURL
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$filename = $path . 'test.lzh';
file_put_contents($filename, $data);
exec('lha e ' . $filename);
こんなかんじなのですが、
ファイル取得まではできているのですが、
解凍ができません;
どこがおかしいのでしょうか?
0393390
2009/05/06(水) 17:32:18ID:GdRs26+oレスありがとうございます。
展開先を指定したらちゃんと解凍できました;
スレ汚しすみません;;
せっかくなので聞きたいのですが、
外部からのファイル取得方法は上記でよいのでしょうか?
いちど変数に格納してfile_put_contentsで書き込むというのがなんだか回りくどい気がするのですが、
ほかに方法がありましたら教えてください!
0394nobodyさん
2009/05/06(水) 17:55:33ID:???組み込んでメモリストリームから、、、とかはこのスレの範囲外かな
0395nobodyさん
2009/05/06(水) 19:39:47ID:???fread/fwriteを繰り返した方がいい気もするが。
0396nobodyさん
2009/05/06(水) 23:04:45ID:XF4iBoH0PHPで記述する場合mysql_resultでいいのでしょうか?
0397nobodyさん
2009/05/07(木) 07:02:22ID:???'hoge' => 'hoge',
'fuga' => 'fuga'
);
$data = array(
0 => array(
'hoge' => 'hoge',
'fuga' => 'fuga'
),
1 => array(
'hoge' => 'hoge',
'fuga' => 'fuga'
)
);
このような配列を、前者のタイプか後者のタイプか判定したいのですが、
どのような方法が考えられますでしょうか?
よろしくお願いします。
0398nobodyさん
2009/05/07(木) 10:40:06ID:???0399nobodyさん
2009/05/07(木) 11:34:01ID:???0400397
2009/05/07(木) 12:28:43ID:???>>399
説明が足りず申し訳ありません。
2次元配列かどうか、というか、
1次元目(?)が連想配列なのか、単純な配列なのかを調べたいのです。
現在は、
if ( isset ( $data[0] ) )
だったら、後者というように判定しているのですが・・・
0401nobodyさん
2009/05/07(木) 12:35:38ID:???プログラマーならすぐ思いつくと思うが・・
0402nobodyさん
2009/05/07(木) 12:45:30ID:???多分、PHPには「単純な配列」って無いんじゃないかな。
http://php.morva.net/manual/ja/language.types.array.php
>PHP の配列は、実際には順番付けられたマップです。マップは型の一種で、 値をキーに関連付けます。
0404nobodyさん
2009/05/07(木) 13:25:21ID:???それは質問者が考えればいいことだし。
ただ、「普通の配列」ってのは無いってだけで。
歯抜けな配列も作れるし、キー値だけでチェックするのもかなりびみょー。
ところで配列のキー値がすべて整数かチェックする専用関数って何?
ざっと見た感じ見当たらないんだけど。
http://php.morva.net/manual/ja/book.array.php
0405397
2009/05/07(木) 13:25:50ID:???それはもちろん思いついたのですが、
もう少しスマートな方法はないかと思いまして・・・
return array_keys($array) !== range(0, count($array) - 1);
こんな方法があるのを知ったのですが、
これだと、
$array(
0 => 'hoge',
2 => 'fuga',
3 => 'piyo'
);
のように、配列が歯抜けになっている場合に一致しなくなりますし・・・
>>403
専用の関数とは何のことでしょうか??
0406nobodyさん
2009/05/07(木) 13:38:16ID:???制御構造使わないような方法のこと?
0407nobodyさん
2009/05/07(木) 18:30:34ID:???どなたか詳しく解説してくれませんか?
0408nobodyさん
2009/05/07(木) 18:37:19ID:???0410nobodyさん
2009/05/07(木) 23:13:30ID:???0411nobodyさん
2009/05/07(木) 23:28:15ID:???0412nobodyさん
2009/05/07(木) 23:31:35ID:???0413410
2009/05/07(木) 23:34:13ID:???xhtml1.0 strictで使えるタグの数もパッと言えるぐらいの知識です
0414nobodyさん
2009/05/08(金) 00:10:55ID:???0416410
2009/05/08(金) 00:14:07ID:???0417nobodyさん
2009/05/08(金) 00:16:17ID:???0418nobodyさん
2009/05/08(金) 01:36:40ID:???0419nobodyさん
2009/05/09(土) 08:57:00ID:???csvに下のように書き込まれるようにしています。
名前,答え,答え,答え,答え,答え,(改行)
名前,答え,答え,答え,答え,答え,(改行)
名前,答え,答え,答え,答え,答え,(改行)
複数の人が同時に行うと、下のようにデータが混ざってしまいますよね?
Aさん,答え(Aさん),[Bさん参入で改行]
Bさん,答え(Bさん),答え(Bさん),答え(Aさん),答え(Aさん),答え(Bさん),
実際に試してみるというのがやりにくい問題なので、何を勉強しないといけないか
教えていただけますか。
そもそもCSVでこの手の記録をやろろうとするのはどうなんでしょうか。
0420nobodyさん
2009/05/09(土) 09:09:56ID:???0422nobodyさん
2009/05/09(土) 17:18:10ID:???DOCUMENT_ROOTの値が実際の値とは違う場合がある事例を見ました。
とすると<base>タグやスクリプト内で絶対パスを作るときにこの変数を使うのは
危険な可能性もあるんでしょうか。
$rootPath = $_SERVER["DOCUMENT_ROOT"];
$a = $rootPath."/sample";
<base href="{$rootPath}">
また$_SERVER["DOCUMENT_ROOT"]以外にルートパス(?)を取得する方法はありますか?
0423nobodyさん
2009/05/09(土) 17:40:17ID:???0424nobodyさん
2009/05/09(土) 18:05:56ID:???その事例がわかれば対応できないか?
0425nobodyさん
2009/05/09(土) 23:32:39ID:???public_htmlとか、
htdocとかのこと?
0427419
2009/05/10(日) 00:07:59ID:???一番下の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)
}
0428419
2009/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:???マジレスするとflock($file,LOCK_UN)はいらない
なぜならfcloseでファイルが閉じられるから
0430nobodyさん
2009/05/10(日) 03:06:05ID:???> 複数の人が同時に問題を解けるようにしたいのですが。
全問終了時だけファイル操作(とロック)すればいいと思うんですよね。
0431419
2009/05/10(日) 07:43:14ID:???ありがとうございます。
>>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エラーは出ずに動作はしたのですが、対応機種に一致しているはずなのに
一致判定を通ってくれません。
判定条件が間違っているのかもしれませんが、自分ではさっぱりわからないので
ご指摘を頂ければと思います。
【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
よろしくお願いします。
0436nobodyさん
2009/05/10(日) 20:21:35ID:???じゃないか?
0437nobodyさん
2009/05/10(日) 20:34:37ID:???$f = file("DeviceDisplay.csv");
foreach ($f as $k=>$v){
list($name, $ua) = explode(',', rtrim($v));
if ($getUA == $ua) {echo "csvに記録されてました";}
}
0439nobodyさん
2009/05/10(日) 20:45:11ID:???$agent
なんかいろいろあるな
0440434
2009/05/10(日) 20:55:16ID:kteLIAQkご指摘ありがとうございます!
今回は自力でやりたいのでがんばってみます。
改行を消したのにそれを代入してないのと、
==で判定、そして決定的な綴りミスですね・・・orz
以上を踏まえてリベンジしてきます。
0441nobodyさん
2009/05/12(火) 10:24:23ID:???2.ファイルが新規作成された時は、chmod 0666
という処理をしたいです。
fopen($filePath, 'a')でファイルオープンした時に、
新規作成されたかどうかが分かれば簡単にできると思うのですが、
できません。
どのようにすれば目的の処理ができるでしょうか?
0442nobodyさん
2009/05/12(火) 10:34:06ID:???0443nobodyさん
2009/05/12(火) 10:54:04ID:???0444nobodyさん
2009/05/12(火) 10:54:47ID:???0445nobodyさん
2009/05/12(火) 11:07:09ID:???0448nobodyさん
2009/05/12(火) 21:45:37ID:???ファイルがあるかな?
ファイルがないなー
よーしファイルをつくるぞー
ちょーーとまったーワシが先にファイルを作るでぇ〜ゲヘゲヘ
よっしゃーワシが先にファイル作成完了〜〜大勝利〜〜〜
、、、さーーって、さっき調べた時にファイルなかったから、作るかな,,,
作成、っと、、、ん?今、なんか、違和感を感じたが、、、、なんだったんだ???
■ このスレッドは過去ログ倉庫に格納されています