08/02/27 20:15:02
>>445
SSIって手もあるよ
447:nobodyさん
08/02/27 20:37:33
>>446
ありがとうございます。
勉強してみます!
448:nobodyさん
08/02/28 00:23:44
ど素人の質問です。
以下のPHPを作ったところ、画面が真っ白になりました。
真っ白=エラー無しと思い、tablenameを確認したところデータが入っていませんでした。
>>407と同じエラーかと思い、>>408を確認したところONになっていました。
自分では原因がわからないため、どなたかご指摘願えないでしょうか。
<作っているつもりのもの>
別ページのフォームから送信(reg)されたデータを、データベースに入れるPHP。
環境…SQL=PostgreSQL OS=Linux PHP=5.2.5
確認…FireFox
$con = pg_connect('dbname host user password');
$a = $_POST["a"];$b =$_POST["b"];$c = $_POST["c"];
if(isset($_POST["reg"])){
$sql = "select max(log) from tablename";
$result = pg_query($con,$sql);
$array = pg_fetch_array($result);
$new_log_no = $array[0] + 1;
$sql = "select current_timestamp";
$result_date = pg_query($con,$sql);
$in_date = pg_fetch_array($result_date);
if(isset($_POST["b"])){ $d = $b; } else { $d = $c; }
$sql = "insert into tablename (log,a,d,_in_date)
values('$new_log_no','$a','$d','$in_date')";}
else{ header("Location: menu.php"); }
if(!$result){ echo "送信に失敗しました";}
449:nobodyさん
08/02/28 00:40:01
Apacheのログは?
あとプログラムのどこまで実行したら真っ白になるか切り分けてみたら?
450:nobodyさん
08/02/28 01:14:23
>>449
レスありがとうございます。
AccessLogはこうなっていました。
127.0.0.1 - username [28/Feb/2008:00:59:35 +0900] "GET /test/in.php HTTP/1.1" 200 555
127.0.0.1 - username [28/Feb/2008:00:59:41 +0900] "POST /test/in_date.php HTTP/1.1" 200 5
in.phpがフォーム、in_dateが問題のPHPです。
よくわからないですが、データベースに問い合わせていない?気がするので調べてみます。
451:nobodyさん
08/02/28 01:43:16
php として動作してないだけじゃ?
httpd.conf とか確認してみたら?
452:448
08/02/28 02:15:26
>>451
httpd.confは本を参考に次のように設定追加してます。
AddType application/x-httpd-php .php
453:nobodyさん
08/02/28 02:48:59
あとは、デバッグの基本中の基本。チェックライト入れまくる
454:nobodyさん
08/02/28 14:23:55
つーか、LoadModuleしてるのか?
455:448
08/02/28 19:24:05
亀レスになってしまい申し訳ありません。
$sql = "insert into tablename (log,a,d,_in_date)
values('$new_log_no','$a','$d','$in_date')";}
の部分のSQLに対し
pg_query($con,$sql);
を設定するとテーブルにデータを追加することが出来ました。
しかし作成されたデータは中身が空でしたorz
insertが動いてるのでPHPとデータベースの連携は取れてると思います。
>>454
Loaded Modulesを調べた所次の通りの結果でした。
mod_php5, mod_setenvif, mod_so, mod_auth, mod_access,
mod_alias, mod_userdir, mod_actions, mod_imap, mod_asis,
mod_cgi, mod_dir, mod_autoindex, mod_include, mod_status,
Momod_negotiation, mod_mime, mod_log_config, mod_env, http_core
456:nobodyさん
08/02/28 19:36:50
>>449
457:nobodyさん
08/02/29 10:18:45
つーか、まずはHTMLしかないphpを書いて試すとか
白紙のときにブラウザの機能でソース見るとどうなってるとか
いろいろやってんのかな
458:nobodyさん
08/03/05 16:03:25
だいぶ前にログナンバーを引っ張り出して重複せずに+1したいと
言っていたものですがa+モードとファイルロックのタイミングで
何とか実現できました。
その後に続くwモードのファイルーオープンで
ログ数を調整しようと思ったのですが
この処理を付けるとログが全部消えてしまいます。
何か間違えていますか?
459:458の続き
08/03/05 16:05:57
//指定行数以上のログの削除
$delfilename = ('card-walin.txt');
$dellines = file($delfilename);
$delcountlines = count($dellines);
$yojyou = $delcountlines - 2;
$delhandle = fopen($filename, "w");
$delnewlog = "";
flock($delhandle,LOCK_EX);
for ($i = $delcountlines; $i <= $yojyou; $i--) {
array_unshift($delnewlog, $dellines[$i]);
}
fwrite($delhandle,$delnewlog);
flock($delhandle,LOCK_UN);
fclose($delhandle);
460:458の改正
08/03/05 16:41:48
すいません、これで。
ログ二行以上ならログの先頭から余剰分消していくと言う感じで
//指定行数以上のログの削除
$delfilename = ('card-walin.txt');
$dellines = file($delfilename);
$delcountlines = count($dellines);
if ($delcountlines > 2) {
$yojyou = $delcountlines - 2;
} else {
$yojyou = 0;
}
$delhandle = fopen($delfilename, "w");
flock($delhandle,LOCK_EX);
$delnewlog = "";
for ($i = $delcountlines; $i <= $yojyou; $i--) {
fwrite($delnewlog, $dellines[$i]);
}
flock($delhandle,LOCK_UN);
fclose($delhandle);
461:nobodyさん
08/03/05 16:42:58 bSWg3SQN
実行スクリプトまでのサーバーのフルパスを下記のように取っております
この書き方だとファイル名test.phpを他の名前にするたびに$this_script_nameを書換えないといけません
ファイル名を書換えてもソースを変えずにフルパスを取得する書き方を教えてください
$this_script_name = 'test.php';
$full_path = ereg_replace($this_script_name ,'' ,$_SERVER['SCRIPT_FILENAME']);
462:nobodyさん
08/03/05 16:58:07 OQixiW/q
レンタルサーバ・無料スペースに依存せずにPEARを使いたいのですが・・・
ググってみると”必要ファイルをコピーして ini_set や .htaccess を使えば良い”
との事ですが、どこまでが必要ファイルなのか良く分かりませんでした
(ローカルにインストールしたPEARディレクトリ丸ごとホームディレクトリにコピーなのか
installコマンドでダウンロードしたファイルだけコピーなのか)
質問は最初の一行の通りなのですがPEARを使うにはどのファイルが必要なのでしょうか?
463:nobodyさん
08/03/05 17:09:24
>>461
dirname(__FILE__)
464:nobodyさん
08/03/05 17:16:55 bSWg3SQN
>>463
おおお できました
これだけで出来るとわ・・・
ありがとうございました
465:nobodyさん
08/03/08 00:22:24
掲示板の削除なんですが下記操作してからファイルロックかけて書き込むと
場合によっては重複しませんか?
if ($_POST['delete']) {
for ($i = 0; $i < count($lines); $i++) {
$items = explode("\t", $lines[$i]);
if ($items[0] == $_POST['delradio'] && $items[4] == $_POST['delkey2'] || $items[0] == $_POST['delradio'] && 'masterpass' == $_POST['delkey2']) {
array_splice($lines, $i, 1);
}
}
}
466:nobodyさん
08/03/08 07:01:18
>>465
if (isset($_POST['delete']) && $_POST['delete']) {
foreach ($lines as $key => $value) {
$items = explode("\t", $value);
if ($items[0] == $_POST['delradio'] && ($items[4] == $_POST['delkey2'] || 'masterpass' == $_POST['delkey2'])) {
unset($lines[$key]);
}
}
}
書き込みの部分を見ないとなんとも言えない
467:466
08/03/08 11:35:25
if($_POST['deletion']){
$deletionlogname = ('card-walin.txt');
$deletionloglines = file($deletionlogname);
$deletioncountloglines = count($deletionloglines);
$deletionlognumbers = $deletioncountloglines - 1;
$deletionfopen = fopen($deletionlogname, "w");
flock($deletionfopen,LOCK_EX);
for($i=0; $i<$deletionlognumbers; $i++){
$deletionlogitems = explode("\t", $deletionloglines[$i]);
if($deletionlogitems[0]==$_POST['deletionradio'] && $deletionlogitems[3]==$_POST['deletionkey'] || $deletionlogitems[0]==$_POST['deletionradio'] && 'masterpass'==$_POST['deletionkey']){
continue;
}else{
fwrite($deletionfopen,$deletionloglines[$i]);
}
}
flock($deletionfopen,LOCK_UN);
fclose($deletionfopen);
}
468:nobodyさん
08/03/08 11:41:55
$deletionlogname = ('card-walin.txt');
何これ
469:465
08/03/08 11:42:09
>>467は>>465が書いたものです、アンカー打ち間違えた・・・・・
んでこれは記事の固有IDとパスが一致した行を削除と言う流れで
書いてるんですがどうも訳わからん記事まで削除されてしまいます。
>>465の質問とあわせてアドバイス頂けないでしょうか?
470:465
08/03/08 11:43:33
>>468
ログの名前です、
変数名の英語的意味めちゃくちゃなのは
とりあえず別の変数と重ならなくさせるためなので
ご勘弁を。
471:nobodyさん
08/03/08 11:44:26
パスワードがどれかすら分からんし
472:465
08/03/08 11:44:56
$number\t$name\t$comment\t$deletionkey\t$time\n
ログの並びはこんな感じです。
473:465
08/03/08 11:46:30
$deletionlogitems[0]がパスワード、
POST['deletionradio']が記事の固有IDになります、
説明不足ですいません。
474:nobodyさん
08/03/08 11:51:30
なんでログの件数ー1だけforでループしてんの?
475:465
08/03/08 11:56:53
>>474
その部分もしログが0だった場合とか書いてませんね、迂闊でした。
ログの記事数のカウントが0から始まるのでそうやってみたのですが・・・・・
476:nobodyさん
08/03/08 12:01:17
訳分からん記事ってどういうの?
477:465
08/03/08 12:06:56
関係ない別の固有IDの記事まで消えるんですよね、
例えば記事が3つあって、3つめの記事で固有ID3の記事を削除したら
1つめの記事も同時に消えたりします。
478:nobodyさん
08/03/08 12:08:50
1つめの記事が消えないこともあんの?
479:465
08/03/08 12:17:38
>>478
今試したら記事3つのログで2つめの記事消したら
3の記事も同時に消えました。
つかその後、削除ボタン押したら全部消えたw
どうも記事固有IDとパスワード一致しなかった場合書き換えしないと言う
処理が抜けてたようです。
ただこれを直しても記事の同時消えが直る気がしない・・・・
ロジック的には大体上にあげたプログラムである程度あってるのでしょうかね。
480:nobodyさん
08/03/08 12:26:00
データベースにおいて、データは物理的に削除するのではなく、
フラグ変更することをお薦めする。
481:465
08/03/08 12:30:46
>>480
表示するかしないかで処理するということですか。
482:nobodyさん
08/03/08 14:00:31
>>481
データベースの場合だ
ファイルの場合は消した方がいいよ
速度変わってくるし
483:nobodyさん
08/03/08 14:14:06
じゃ別に今言うべき話じゃないだろw
484:nobodyさん
08/03/08 14:15:28
>>483
俺が言ったんじゃないw
485:nobodyさん
08/03/08 14:46:24
まず
||と&&の使い方を覚えよう
466でも書いたけど(最初のifで要らん部分あるけどw)
ループ中にある
if ($items[0] == $_POST['delradio'] && $items[4] == $_POST['delkey2'] || $items[0] == $_POST['delradio'] && 'masterpass' == $_POST['delkey2']) {
これは変です(処理的には通るけど)
if ($items[0] == $_POST['delradio'] && ($items[4] == $_POST['delkey2'] || 'masterpass' == $_POST['delkey2'])) {
やりたい事は多分これ
んで、POST内容は意図したものがきてるの?
486:nobodyさん
08/03/08 14:52:21
>>484
お前に言ってないw
487:465
08/03/08 16:30:22
なにやらすごい間違いをしてました・・・・・・・・・
$items[4]がパス格納部じゃなくて$items[3]でした・・・・・・・・
今から皆さんにご指摘頂いた部分の修正に入ります、
本当にすいませんでした。
488:nobodyさん
08/03/08 16:36:16
>>486
俺にか?
489:465
08/03/08 16:38:20
なんだか喧嘩させてしまったようで申し訳ない・・・・・
490:nobodyさん
08/03/08 17:05:38
架空請求の詐欺師が特定されてるよw
URLリンク(2ch.pne.jp)
【ユビキタス銀河】 詐欺師プログラマー 武田洋幸
スレリンク(antispam板)l50
491:nobodyさん
08/03/08 17:42:02
何度も投稿すいません、掲示板で書き込んだ後ブラウザの更新ボタン押すと
もう一度書き込まれてしまうのですがこれを防止するのは2重書き込み防止処理だけでいいのでしょうか?
これだとたまに別の人が書き込んだ後に更新押した場合
書き込まれちゃいますよね。
皆さん過去ログの内容走査処理したりしてるのでしょうか?
492:nobodyさん
08/03/08 17:53:28
>>491
書き込んだ後ブラウザを強制的に閉じるようにしたら更新できなくなるよ
493:nobodyさん
08/03/08 18:01:26
そんな~、ドラえも~ん!
494:nobodyさん
08/03/08 18:26:21
a.html←フォーム
b.php←post先
c.php←投稿完了しました表示
b.phpで投稿完了したら
header('Location : URLリンク(example.com)');
これでa.htmlまで戻るとかで戻らない限り2重投稿はある程度防げる
495:nobodyさん
08/03/08 18:29:46
なるほど、そういうことでしたか、取り乱しました。
html作成せずにphp1つだけで全部やろうとしてもややこしそうですね・・・・・
496:nobodyさん
08/03/08 18:50:31
>>495
別にhtml作らなくてもできるけど
ファイルは分けたほうが後々良いよ
497:nobodyさん
08/03/08 21:58:57
>>495
だまされるな!
ドラえもん呼ぶのが正解だ
498:nobodyさん
08/03/08 23:16:31
htmlってどうやって作るんでしたっけ?
なんかリファレンス読んでも見つからないのですが。
499:nobodyさん
08/03/09 01:35:03 BZEq18rG
target.phpをインラインフレームで表示するためのページをget.phpとします
その際にをtarget.phpへ送るリファラを URLリンク(example.com)<)" を追加すればいいと書いてあったのですが、
どのように追加したらいいのかがわかりません
location みたいな書き方が思い浮かんだのでやってみましたができませんでした。
正しいやり方を教えてください。お願いします。
-------------------------------------
【get.php】
<?php
header("Referer: URLリンク(example.com\r\n)<)
500:nobodyさん
08/03/09 02:10:54
>>499
【get.php】
<?php
echo '<iframe src="target.php?referer='.$_SERVER["HTTP_REFERER"].'"></iframe>';
?>
【target.php】
<?php
echo $_GET["referer"];
?>
501:nobodyさん
08/03/09 02:31:20 BZEq18rG
>>500
せっかく答えていただいたのに恐縮ですが、
それはget.phpで取得したリファラをtarget.phpへgetメソッドで渡す方法ですよね
私が知りたいのは、
get.phpでtarget.phpを開くけれども、
target.phpで取得されるリファラはget.phpではなく、URLリンク(example.com) にしたいということなのです
印象の良くない言葉なので使いたくはなかったのですが、つまり、リファラ偽装ということです
書き方悪くてすいません
502:nobodyさん
08/03/09 02:41:06
>>501
URLリンク(example.com)
これは固定値かそれともget.phpで取得できる値かどっち?
get.phpで取得するリファラの値なら方法は無いよ?
get,php内でgetのリクエストをtarget.phpに宛てに投げて
その時のヘッダにリファラ偽装して渡すとかなら可能だけど
503:nobodyさん
08/03/09 03:08:23 BZEq18rG
>>502
説明不足で本当にすいません
固定値です
504:nobodyさん
08/03/09 04:55:14
>>503
ファイルに対してアクセスあった場合
強制的に.htaccessとかでSetEnvとかかなぁ・・・
もしiframeのが別のサイトなら
getのリクエスト投げた方が早い
505:nobodyさん
08/03/09 05:16:16
変数に0入れてその後の分岐にNULLかどうかとか入れたら
0はNULLやfalseと判定されますか?
その変数を変数-1としても-1とはならない?
506:nobodyさん
08/03/09 05:24:57
===で比較すれば判定されない。
変数=0
変数=変数-1としたら変数の中身は-1になる。
507:nobodyさん
08/03/09 05:29:10
型の自動変換に頼った比較は避けた方がベター。
508:nobodyさん
08/03/09 05:31:25
どうもすいません、ありがとうございました。
509:nobodyさん
08/03/09 14:05:48 BZEq18rG
>>504
いろいろなアドバイスありがとうございます
target.phpが別のサイトなら、
target.phpのソースは
<?php
echo $_SERVER["HTTP_REFERER"];
?>
なのは弄りようがないわけですが、
target.phpの $_SERVER["HTTP_REFERER"]の値をURLリンク(example.com)であると認識させるためには、
get.phpからどうやってgetのリクエストを投げればいいのでしょうか
510:nobodyさん
08/03/09 14:17:24
>>509
GETと環境変数は別
511:nobodyさん
08/03/09 14:34:13 BZEq18rG
>>510
ありがとうございます
つまり、getでリクエスト投げても、相手で表示される環境変数は変わらないわけですよね
どうすれば
get.phpでインラインフレームでtarget.phpを表示し、
target.phpの $_SERVER["HTTP_REFERER"]の値をURLリンク(example.comt)にできるのでしょうか
やり方がさっぱりわからないのです
512:nobodyさん
08/03/09 15:24:27
>>511
getでリクエスト投げる時にリファラ偽装すれば
リファラには固定値を入れる事ができる
だがインラインフレームでやるのは無理
それをインラインフレームでやる必要あるの?
どうしてもやりたいなら
.htaccessにSetEnvってのがあって
それを使ってtarget.phpにアクセスがあった場合
強制的にリファラを書き換えてやれば良い
513:nobodyさん
08/03/09 16:02:31 BZEq18rG
>>512
インラインフレームでしようとしていた理由は、
自分がやりたいことを考えた時に一番実現しやすそうだと思ったからです
それが無理ならばインラインフレームでやることはありません
>getでリクエスト投げる時にリファラ偽装すれば
ここのやり方を教えてもらえないでしょうか
getはわかりますが、リファラ偽装の部分がわからないのです
514:nobodyさん
08/03/09 16:26:44
>>513
pearのhttp_requestかcurlが楽じゃないかな
普通にfsockopenとかでopenして投げる事もできるけど
<?php
$request .= "GET / HTTP/1.0\r\n";
$request .= "Host: localhost.jp\r\n";
$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
$request .= "Accept: */*\r\n" .
"Referer: URLリンク(hogehoge.jp)" .
"User-Agent: DoCoMo/2.0 Fa2(c100;TB;W28H15)\r\n";
$request .= "\r\n";
$request .= "\r\n";
$fp = fsockopen("yahoo.co.jp", 80, $errno, $errstr, 30);
fputs($fp, $request);
$response = "";
while (!feof($fp)) {
echo fgets($fp, 4096);
}
fclose($fp);
?>
こんな感じでやふーのトップをもってこれる
515:nobodyさん
08/03/09 16:49:24 BZEq18rG
>>514
ありがとうございます
私のくどい質問に回答続けてくれた方に感謝します
516:nobodyさん
08/03/10 01:54:10 HGPlOVh9
PHP + MySQL でスレッド式掲示板を作りました。
スレッド毎にテーブルを作成し、そのテーブルにコメント(&投稿者名など)を記録、
すべてのテーブルを管理するテーブルに最終投稿日時などを記録して、スレッド順位などを決めます。
以下、コメントを投稿した時の部分のスクリプト。
$comm = addslashes($_POST['comm']); //コメント
$id = addslashes($_POST['id']); //テーブルID
$name = addslashes($_POST['name']); //投稿者名
if($_POST['sage'] == NULL){$sage = 0;} else {$sage = 1;}
if($name == NULL){$page_disp = "名前を入力してください。";
} else {
if($comm == NULL){$page_disp = "本文を入力してください。";
} else {
insert_comment($id,$name,$comm,&$seq,$res_dbcon,&$result); //スレッド(テーブル)にコメントを書き込み
if($result == FALSE){$page_disp = "投稿に失敗しました。";
} else {
update_temp_table($id,$sage,$seq,$res_dbcon,$result);//管理テーブルに投稿日時などを記録
$page_disp = "投稿しました。";}}}
PCからのアクセスと、DOCOMO、auからは期待した通りの動作をしていますが、softbank携帯からのみ、動作がおかしくなっています。
症状としては、$name、$commといった変数を受け取れず(?)、テーブルには各カラムのNULLになったレコードが追加される。
テーブルの更新、レコードの追加は行われているので、CURRENT TIMESTAMPなどはちゃんと入っている。
管理テーブルは更新されているので、各変数のNULLのチェックは通過している。
という状態です。スクリプト上におかしい箇所などあるでしょうか?
ちなみにPHP、MySQLの勉強は先月始めたばかりで、この掲示板のスクリプトは、本などを読んで作ったオリジナルのものです。
よろしくお願いいたします。
517:nobodyさん
08/03/10 02:14:45
すみません。サブルーチンの中身を書いてなかったです。
function insert_comment($tbl_id,$name,$comm,$seq,$dbcon,$result){//コメント追加
$l_sql = "SELECT count( * ) FROM `".$tbl_id."`";
$l_result = mysql_query($l_sql,$dbcon);
$l_row = mysql_fetch_array($l_result);
$seq = $l_row[0] + 1;
$f_host = gethostbyaddr(getenv("REMOTE_ADDR"));
$sql = "insert into `".$tbl_id."` (c_seq, c_time, c_name, c_comm, c_host, c_del_flg) VALUES (".$seq.", NOW( ), '".$name."', '".$comm."', '".$f_host."', '0' )";
$result = mysql_query($sql,$dbcon);
}
function update_temp_table($tbl_id,$sage,$seq,$f_dbcon,$f_result){//スレッド更新(管理テーブル更新)
if($seq == 300){ $del_flg = 1;} else { $del_flg = 0;} //規定レス数に達したスレは終了
$sql = "update t_temp_table set c_count_comment = ".$seq." , c_del_flg = '".$del_flg."' where c_table_id = ".$tbl_id;
$f_result = mysql_query($sql,$f_dbcon);
}
518:nobodyさん
08/03/10 02:20:25
>>516
softbankのチェックした機種は何?
多分表示側の問題だとは思うけど
それと、1スレッド1テーブルはやめた方が良い
ファイルベースの設計なら1スレッド1ファイルの方が良いが・・・
519:516
08/03/10 02:40:11
機種はちょっと分からないんですよね。
ログ見てみたらソフトバンクだな、ってのが分かったというだけで。
しかも、その方が問い合わせフォームからメールも送ってくれたんだけど、
それがまた見事に文字化けしていて全く見れない状態です。
(これもまたDOCOMO、auは正常動作。)
1スレッド1テーブルが良くないというのは、パフォーマンスとかCPU占有とかいう話でしょうか?
素人考えで、一つのテーブルのみが異常にレコード数多くなるよりいいかな、と思ったのですが…
520:nobodyさん
08/03/10 02:58:57
ちょ,それはない
521:nobodyさん
08/03/10 03:56:42
>>519
旧Vodafone機種とかにはまともに送れないのとかあるからねー
そこらへんが携帯対応のめんどくさい所
1つ要素追加しようとした時に全部のテーブル構造変えるほうが手間
あとデフォ設定でCPUがP4の3Gでメモリ2Gなマシンでも
1テーブル2000万件とかいれても平気だから1テーブルに入れろ
DB設計は色々と勉強した方が良いよ
522:nobodyさん
08/03/10 05:18:59
超初心者用ってあるのに全然わからない。・゚・(ノД`)・゚・。
2ヶ月ぐらいやってるけどなにをどうやっていいやら・・・
とりあえずHTMLを少しやってたのでPHPに挑戦してみたんだが
難しい。そして、どう使うのかがよくわからん。
PHPスーパーサンプル集って本を買って本の進行通りにやってるが
だからなに?って感じでおわってしまう。
まず最初にこんにちはを画面に表示させた。うむ。
フォームはあらゆるところで使われるので重要ということで
フォームもやってみた。うむ。
いま、フォームで送信されたデータを関数で色々条件をつける
もしくは処理をするってのやってるんだけど、それも具体的によくわからん。
説明には、パスワードを入力とか普段サイトで使ってるようなことで使う
みたいなことは書いてあったけど、実際自分でつかえるかなーと疑問。
何をどうしたらいいか、もっと分かりやすい本、もしくはページはないか
しってたらお願いします。できれば、私はこう使ったというのを実体験で
いってくれると分かりやすいです。m(_ _)m
523:nobodyさん
08/03/10 06:26:17
>>522
その手の質問きたら俺は毎回ここをオススメしてる
宣伝と思われそうだがw
URLリンク(www.phppro.jp)
初心者には普通にオススメ
あと何か作ってみたいものを見つけるのが良いんじゃないかな?
んでこれを作るには何が必要で
どんな事をしなきゃいけないのかとか
あとは同じようなスクリプトは
どんな風にしてるのかを調べるのも良いかな
524:nobodyさん
08/03/10 18:52:10
>>523
すごくよかったですm(_ _)m
私が買った本より説明が分かりやすく理解しやすかったです。
とりあえず、このページを読破し実際にやってみようと思います。
525:nobodyさん
08/03/11 03:36:14 xCa4blgr
すません。ある関数の返り値をvar_dumpしたら
object(stdClass)(1) { ["array"]=> "test"}
みたいな感じでオブジェクトで返ってきました。
配列arrayの中の"test"という文字列を取り出すためにはどうしたらよいのでしょうか?
ちなみにjson_decode()です。upgrade.phpを利用してassocをTRUEにしているのに配列ではなくオブジェクトで返されてしまって困っています。
526:nobodyさん
08/03/11 03:42:27
$obj->array
527:nobodyさん
08/03/11 15:31:16 xCa4blgr
>>526
ありがとうございます。
528:nobodyさん
08/03/11 20:58:03 LKhchWrt
PHP5のsimplexml_load_fileを使ってWordPressのRSSフィードを読み込もうと
しているのですが、フィード内の <content:encoded> といったエレメントが
読み込まれません。
どうも「:」がエレメント名に含まれていると、PHPはそれを見落としてしまうよう
なのですが、同じような経験をされた方いらっしゃいますでしょうか?
529:nobodyさん
08/03/11 22:34:53
PHPって有名なプログラミングですよね?
今度の4月から大学(情報工学科)に通うんですけど
教授とかに聞いても大丈夫ですよね?
530:nobodyさん
08/03/11 23:38:41
そうそう、有名なプログラミングだよ。
531:nobodyさん
08/03/12 01:15:12
PHP で HTML のブロックをコメントアウトコメントアウトするのって
↓でええんか?
<?php if(false){ ?>
…
<?php } ?>
532:nobodyさん
08/03/12 01:22:22
<?php if(false): ?>
...
<?php endif; ?>
なんでこの書き方って普及してないの?
533:nobodyさん
08/03/12 01:29:31
>>532
その書き方のメリットを教えてくれ
534:nobodyさん
08/03/12 09:26:44
くだしつで失礼します。
外部からのアクセスでPHPに情報を送り、それをPHPが一度Textファイルに保持した上で
他のアクセスがPHPからそれを受け取るという処理を行っています。
チェックは連続して行っていて情報が無ければ「NoEntry」という結果を返しています。
(保持した情報は消えます)
(処理中、データはロックしています)
今現在そのチェック処理を2秒に1回の頻度で行っているのですが、
一般論の範囲でPHPはどれくらいの負荷までなら普通に耐えられるのでしょうか?
可能であれば上記のチェック処理を1秒に2・3回行いたいと思っています。
使用しているサーバはさくらインターネットのプレミアムコースです。
PHPのバージョンは、、すみません。詳しく分からないのですが初心者解説サイトの命令のみ使っています。
2秒に1回のチェックですが、実際にデータを保持し送信するペースは1時間に1回ほどです。
535:nobodyさん
08/03/12 10:53:22
>>534
チェックの方法にもよると思うけど
file_existsかなんかでチェックしてるって事?
536:nobodyさん
08/03/12 10:58:25
よく分からんけどcronみたいな定期的な処理実行を無限ループでやってるということか?
他のアクセスがあった時点でファイルがあるかチェックするんじゃだめなの?
537:nobodyさん
08/03/12 11:11:37
すみませんでした。補足します。
繰り返しアクセスしているのは外部のプログラムで、PHPはそれに対して反応を返しています。
PHP内部では繰り返しの処理はしていません。
SaveパラメータでHTTPアクセスされると「A」という文字をPHPが記録します。
LoadパラメータでHTTPアクセスされると、今PHPが保持してる「A」という文字をEchoで返し、「A」は消します。
この時、保持している文字がなければ「NoEntry」を返します。
現状2秒に一度Loadパラメータでアクセスしています。(文字があるかチェック)
その間に複数のSaveパラメータでアクセスされると「A,B,C」と同時に保持して、
Loadパラメータが来るごとに、古いものから順に1文字ずつ返します。
ただ通常、1時間に1~2回、多くても10回ほどのSaveパラメータのアクセスしか無いため
ほとんどはLoadパラメータのアクセスを受信し続けている状態です。
このLoadパラメータを、現状の2秒に1度から、1秒間に2~3回にしたいなと考えております。
538:nobodyさん
08/03/12 11:15:08
>>537
そのLoadパラメータとやらの書き方次第だと
多分問題は無いと思うけどねー
539:nobodyさん
08/03/12 11:28:02
処理負荷にもよるけど2,3リクエスト/秒なんて余裕だから大丈夫かと
540:534
08/03/12 11:52:49
なるほど、助かります。ありがとうございました!
やはりPHPの性能はCGIとは比べものになりませんね。
541:nobodyさん
08/03/12 17:51:48
phpで出力した内容をhtmlで出力するのって
普通にfwriteとかで作成すればいいのでしょうか?
542:nobodyさん
08/03/12 19:13:32
file_put_contentsでおk
543:nobodyさん
08/03/12 21:40:52
>>541
ファイルに書き出したいなら>>542のを使えば良い
表示させるだけならechoなりでhtml書いたのを表示すればいい
544:nobodyさん
08/03/13 04:03:55
どうもありがとうございました、助かりました。
545:nobodyさん
08/03/14 16:59:59 P2EP3hdl
simplexml_load_fileを使い必要な部分を抜き出し下記のようなオブジェクトを取得しましたが
ループ文を使い値と属性を取得しようとすると、$nameという配列を作る行で
Warning: Illegal offset type となります。オブジェクトの属性と値の取り方を間違えているのでしょうか?
$xml
SimpleXMLElement Object
(
[id] => 2
[title] => hogehoge
[spec] => 500
)
foreach($xml as $a => $b) {
if ($a == 'id') {
$id = $b;
}
if ($a == 'title') {
$title = $b;
}
}
$name[$id] = $title; ←エラー
546:nobodyさん
08/03/14 17:41:35
>>545
print_rよりver_dumpのがオススメ
$idと$titleをdumpする事をおすすめする
var_dump($id,$title);
てかそのループしなくても良いと思うんだが?
$name[$xml->id] = $xml->title;
547:nobodyさん
08/03/14 19:16:02 P2EP3hdl
>>546
ありがとうございます
$name[$xml->id] = $xml->title;
これだと同じエラー内容となりました
ver_dumpしたところ下記のように出てきたのですが、さらにオブジェクトが続いているということでしょうか?
object(SimpleXMLElement)#9 (1) {
[0]=>
string(1) "2"
}
object(SimpleXMLElement)#8 (1) {
[0]=>
string(8) "hogehoge"
}
548:nobodyさん
08/03/14 19:34:29
最近は、YAMLとJSONばっかりで
XMLを使っていない。使おうとも思わない。
つかうのは外部とのシステムでXMLを
使うことを強制された場合ぐらいだな。
549:nobodyさん
08/03/14 20:27:50 i8C7NkG0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "URLリンク(www.w3.org)">
<html xmlns="URLリンク(www.w3.org)">
<head>
<title>Gallery</title>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
</head>
<body>
<div align="center">
<br />
<?php include("../../koukoku.php"); ?><br />
<?
$image = "URLリンク(***.com)" . $_GET['no'] . ".gif";
if(file_exists($image)){ print "<img src=\"$image\">"; }
?>
</div>
</body>
</html>
こんな感じでURLリンク(***.com)をページの真ん中に表示したいのですが画像がされません。
画像がローカルパスなら表示されるのですがどこが悪いのか教えてもらえませんでしょうか?
550:nobodyさん
08/03/14 20:32:53
質問です。
よければ教えてください。
echo 45 * 1.4;
echo "<br>";
$a = floor(45 * 1.4);
echo $a;
echo "<br>";
というプログラムで、結果が
63
62
となるんですけど、原因がわかりません…
63が正解なのですが、なぜなんでしょう?
実際は変数が入るので、結果も変動して小数点以下の数値も出るのでfloorしていますが、
なぜかこの数値の時だけ結果にずれが…
551:nobodyさん
08/03/14 20:54:07
>>550
典型的な、浮動小数点誤差の問題だね。
一般的にコンピュータは数値を二進数に変換して処理する。
1.4という数値は二進数では近い数字は表現できても、
1.4そのものは表現できない数値なんだ。(小数点以下が無限に続く)
よって 45 × 1.3999・・・という計算になる。
当然答えも62.9999・・・になる。
あとはechoのとき、62.9999・・・というほぼ63という値なら、
それを63にして表示しているということだろう。
公式サイトにも書いてあるが。
URLリンク(www.php.net)
552:549
08/03/15 12:13:27
聞く場所違いましたかな・・・汗
他で聞いてみます 失礼しました。
553:nobodyさん
08/03/15 15:19:04
>>552
php関係なくね?
554:nobodyさん
08/03/15 17:15:03
for内でもう一度forつかうと$iの値が干渉しあうのですが
$iって$aとかにする事は可能でしょうか?
555:nobodyさん
08/03/15 17:22:41
$A = file_get_contents("ファイル");
としてるだけなのに標準出力にファイルの内容が表示される@さくら
エロい人解決方法を教えてください。
556:nobodyさん
08/03/15 18:41:49
>>554
for文って何ぞや?から改めて調べてみるとよろし
>>555
そんなことはありえない。
557:nobodyさん
08/03/15 22:02:20
>>554
頑張って$iだけを使うように工夫するのが定石
558:nobodyさん
08/03/15 23:28:03
<br/>\nってどういう意味?
なんで改行が二つあるの?
559:nobodyさん
08/03/15 23:35:04
それぞれ違う改行。
意味を調べろ。
560:nobodyさん
08/03/16 01:00:46
>>556 >>557
ちょっとログ分の画像掲示板のhtml出力しつつ
その1ページ分にすべてのページへのリンクを作ったりと複雑なので
whileで代用しました、ありがとうございました。
後、もう一つ聞きたいのですが
.=で処理したデータを継ぎ足していってhtml出力すると
ソースで改行が■になったりしてしまいます。
後々の事を考えて見栄えよく整形したいのですが
どんな要因が考えられるのでしょうか?
561:nobodyさん
08/03/16 01:13:28
>>560
> どんな要因が考えられるのでしょうか?
メモ帳でLF改行を見てるだけ、とか。
562:nobodyさん
08/03/16 01:23:50
>>561
すいません、まさにそのとおりなんですがtxtファイルに
phpproの講座のとおりEUC-JPとLFで設定してます。
改行をCR/LFにしたらちゃんと見えたんですが
EUC-JPとLFだとwindows使いには不便なのでしょうか?
後、ログにtxtファイルを使うと外部から見えてしまうと聞いたのですが
何がお勧めなのでしょうか?
563:nobodyさん
08/03/16 01:30:50
>>562
ログにtxt~とか媒体が問題じゃないよ。
ドキュメントルート以下におけば外部から見られる危険性は当然ある。
564:nobodyさん
08/03/16 01:58:38
あれ?そうでしたか。
過去cgiとかにしとけといわれた思い出があるんですが。
565:nobodyさん
08/03/16 02:22:24
>>564
その説は、ごく限られた人しか .htaccess でごにょごにょできなかった時代とか
.htaccess の書き方を説明するのがめんどくさいとかの産物なので、
せめて .log とか .dat で終わる名前のファイルにして deny from all に設定。
というか、>>563。
>>561前半は Shift_JIS の地雷を踏みまくるほうがよっぽど不便だと思う。
566:565
08/03/16 02:23:29
アンカーミスった。>>562前半、ね。
567:nobodyさん
08/03/16 02:41:19
htmlの投稿フォームからphpにデータ送ると
phpの中身がテキストデータとして開かれててしまいます。
phpに同じフォームデータを書いて送信したら普通に処理できてたんですが
どうしたものでしょうか?
568:nobodyさん
08/03/16 14:32:57
日本語でおk?
569:nobodyさん
08/03/16 19:12:01
html出力した内容に含まれてる投稿フォームから
phpにその内容を飛ばして処理しております。
本文がない場合、名前&パスワードをクッキーをセットして
1行目のフォームに送り返してるんですが名前欄に何も出ません。
名前欄のvalue値に
phpプログラムを使用して受け取ったクッキーを表示するコードを書いてるんですが
1行目フォームのようにhtmlファイルにphpコード書いても意味なかったでしたっけ?
570:569
08/03/16 19:19:19
ややこしくなってしまいました、
要するにログをhtml出力したファイル内にあるフォームに
クッキーの受け渡しってできるんですか?
書き込みを処理するphpからクッキー発行しただけでは駄目なんですよね?
571:nobodyさん
08/03/16 19:31:40
できるよ
572:569
08/03/16 19:44:08
すいません、お手数ですがどのようにすればよいのでしょうか?
>>569を書き込んでから今までログをhtmlで出力する掲示板のサンプルを見回ってたら
<input value="">のvalue記述さえ無しにクッキーが表示されてるものが
あってどんな方法を使ってるか知りたくて。
573:nobodyさん
08/03/16 20:02:28
名前欄に何も出ないっていう現在のコードを出してみて。入力と共に。
574:nobodyさん
08/03/16 23:54:38 BE:147567375-2BP(1)
>>569
出力されたhtmlファイルの拡張子はphp?それともhtml?
出力されたファイルがhtmlであれば
サーバの設定が基本的な設定のままなら
cookieなんて出せないやんJavaScriptとか使えば別だが
phpであれば
<input value="<?php echo $_COOKIE['name'];?>">
とかすれば出るが
575:nobodyさん
08/03/17 00:03:56
拡張子はhtmlです、
それで元々作っていたのは総phpで<input value="<?php echo $_COOKIE['name'];?>"> が出来てて
htmlにデータ書き出すようにしてからそれが通用しなくなったので混乱しておりました。
ただここだと
URLリンク(3d.skr.jp)
出来てるのはなぜなんでしょう?
576:nobodyさん
08/03/17 00:10:47 BE:303567089-2BP(1)
>>575
そこはjavascriptでクッキーをセットしてる
577:nobodyさん
08/03/17 00:19:25
なるほど、万人には無理ですかhtmlでは。
とりあえずクッキーの部分は飛ばして別の部分作ります。
578:nobodyさん
08/03/17 00:27:11 BE:84324645-2BP(1)
function l(e){
var P=getCookie("pwdc"),N=getCookie("namec"),i;
with (document) {
for(i=0;i<forms.length;i++){
if(forms[i].pwd)
with(forms[i]){
pwd.value=P;
}
if(forms[i].name)
with(forms[i]){
name.value=N;
}
}
}
};
onload=l;
function getCookie(key, tmp1, tmp2, xx1, xx2, xx3) {
tmp1 = " " + document.cookie + ";";
xx1 = xx2 = 0;
len = tmp1.length;
while (xx1 < len) {
xx2 = tmp1.indexOf(";", xx1);
tmp2 = tmp1.substring(xx1 + 1, xx2);
xx3 = tmp2.indexOf("=");
if (tmp2.substring(0, xx3) == key) {
return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1)));
}
xx1 = xx2 + 1;
}
return("");
}
こんな感じだな適度に直せばいける
579:nobodyさん
08/03/18 16:47:11 npoe+Lzf
URLリンク(www.phppro.jp)
のプログラムですが、
URLリンク(localhost)
だと「入力された値は数字ではありません。」と表示されるのですが
URLリンク(localhost)
だと文字化けしてしまいます。
本来「あなたの年齢は:22才です。」と表示されると思うのですが。
何が原因と考えられますか?
580:nobodyさん
08/03/18 17:12:58
>>579
コードうp
581:nobodyさん
08/03/18 17:15:35
ちなみにこちらの環境で実行したら後者も正しく表示された
mb関係かhtmlspecialcharsの文字コードの設定か?
文字化け文字列も出すと何かわかるかも
582:579
08/03/18 18:00:26 npoe+Lzf
レスありがとうございます。
、「、ハ、ソ、ホヌッホマ。ァ22コヘ、ヌ、ケ
とでます。
583:nobodyさん
08/03/18 18:15:19 sNjVpZ9l
WordPressで困っています。
サイドバーをカスタムしたくてsidebar.phpを弄っているのですが、カレンダーなどを取り除いてアバウトやその他をとりつけたいのですが、
どう記述するべいいのかわかりません。
カレンダーを消すことには成功したのですが、他のコンテンツをサイドバーに入れるには何を記述すればいのでしょうか。
584:nobodyさん
08/03/18 21:06:15
>>583
WordPress (ワードプレス) その6
スレリンク(blog板)
こっちのがいいんでない?
585:nobodyさん
08/03/18 21:53:51
>>579
ブラウザ上で右クリック→エンコード→日本語 (EUC)
でおk
ま、もう解決しちゃってるだろうけどw
586:579
08/03/18 23:02:38 npoe+Lzf
>>585
全然解決できてなかったのでこのスレにはりついてしましたw
ありがとうございます!うまくいきました!