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

くだすれPHP(超初心者用)3

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/10/25(木) 16:04:31ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
http://www.php.net/
http://jp.php.net/

---前スレのテンプレここまで---

前スレ: くだすれPHP(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1164617202/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 57
http://pc11.2ch.net/test/read.cgi/php/1193062236/
△▲ WebProg 初心者の質問 Part16 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1187729623/

完走したら、雑談スレで待機でどうでしょう
【総合】 Webprog板質問雑談スレッド 1
http://pc11.2ch.net/test/read.cgi/php/1131016915/
04554482008/02/28(木) 19:24:05ID:???
亀レスになってしまい申し訳ありません。

$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
0456nobodyさん2008/02/28(木) 19:36:50ID:???
>>449
0457nobodyさん2008/02/29(金) 10:18:45ID:???
つーか、まずはHTMLしかないphpを書いて試すとか
白紙のときにブラウザの機能でソース見るとどうなってるとか
いろいろやってんのかな
0458nobodyさん2008/03/05(水) 16:03:25ID:???
だいぶ前にログナンバーを引っ張り出して重複せずに+1したいと
言っていたものですがa+モードとファイルロックのタイミングで
何とか実現できました。
その後に続くwモードのファイルーオープンで
ログ数を調整しようと思ったのですが
この処理を付けるとログが全部消えてしまいます。
何か間違えていますか?
0459458の続き2008/03/05(水) 16:05:57ID:???
//指定行数以上のログの削除
$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);
0460458の改正2008/03/05(水) 16:41:48ID:???
すいません、これで。
ログ二行以上ならログの先頭から余剰分消していくと言う感じで

//指定行数以上のログの削除
$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);
0461nobodyさん2008/03/05(水) 16:42:58ID:bSWg3SQN
実行スクリプトまでのサーバーのフルパスを下記のように取っております
この書き方だとファイル名test.phpを他の名前にするたびに$this_script_nameを書換えないといけません
ファイル名を書換えてもソースを変えずにフルパスを取得する書き方を教えてください


$this_script_name = 'test.php';
$full_path = ereg_replace($this_script_name ,'' ,$_SERVER['SCRIPT_FILENAME']);
0462nobodyさん2008/03/05(水) 16:58:07ID:OQixiW/q
レンタルサーバ・無料スペースに依存せずにPEARを使いたいのですが・・・

ググってみると”必要ファイルをコピーして ini_set や .htaccess を使えば良い”
との事ですが、どこまでが必要ファイルなのか良く分かりませんでした
(ローカルにインストールしたPEARディレクトリ丸ごとホームディレクトリにコピーなのか
installコマンドでダウンロードしたファイルだけコピーなのか)

質問は最初の一行の通りなのですがPEARを使うにはどのファイルが必要なのでしょうか?
0463nobodyさん2008/03/05(水) 17:09:24ID:???
>>461
dirname(__FILE__)
0464nobodyさん2008/03/05(水) 17:16:55ID:bSWg3SQN
>>463
おおお できました
これだけで出来るとわ・・・
ありがとうございました
0465nobodyさん2008/03/08(土) 00:22:24ID:???
掲示板の削除なんですが下記操作してからファイルロックかけて書き込むと
場合によっては重複しませんか?

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);
}
}
}
0466nobodyさん2008/03/08(土) 07:01:18ID:???
>>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]);
  }
 }
}

書き込みの部分を見ないとなんとも言えない
04674662008/03/08(土) 11:35:25ID:???
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);
}
0468nobodyさん2008/03/08(土) 11:41:55ID:???
$deletionlogname = ('card-walin.txt');
何これ
04694652008/03/08(土) 11:42:09ID:???
>>467は>>465が書いたものです、アンカー打ち間違えた・・・・・
んでこれは記事の固有IDとパスが一致した行を削除と言う流れで
書いてるんですがどうも訳わからん記事まで削除されてしまいます。
>>465の質問とあわせてアドバイス頂けないでしょうか?
04704652008/03/08(土) 11:43:33ID:???
>>468
ログの名前です、
変数名の英語的意味めちゃくちゃなのは
とりあえず別の変数と重ならなくさせるためなので
ご勘弁を。
0471nobodyさん2008/03/08(土) 11:44:26ID:???
パスワードがどれかすら分からんし
04724652008/03/08(土) 11:44:56ID:???
$number\t$name\t$comment\t$deletionkey\t$time\n

ログの並びはこんな感じです。
04734652008/03/08(土) 11:46:30ID:???
$deletionlogitems[0]がパスワード、
POST['deletionradio']が記事の固有IDになります、
説明不足ですいません。
0474nobodyさん2008/03/08(土) 11:51:30ID:???
なんでログの件数ー1だけforでループしてんの?
04754652008/03/08(土) 11:56:53ID:???
>>474
その部分もしログが0だった場合とか書いてませんね、迂闊でした。
ログの記事数のカウントが0から始まるのでそうやってみたのですが・・・・・
0476nobodyさん2008/03/08(土) 12:01:17ID:???
訳分からん記事ってどういうの?
04774652008/03/08(土) 12:06:56ID:???
関係ない別の固有IDの記事まで消えるんですよね、
例えば記事が3つあって、3つめの記事で固有ID3の記事を削除したら
1つめの記事も同時に消えたりします。
0478nobodyさん2008/03/08(土) 12:08:50ID:???
1つめの記事が消えないこともあんの?
04794652008/03/08(土) 12:17:38ID:???
>>478
今試したら記事3つのログで2つめの記事消したら
3の記事も同時に消えました。
つかその後、削除ボタン押したら全部消えたw
どうも記事固有IDとパスワード一致しなかった場合書き換えしないと言う
処理が抜けてたようです。
ただこれを直しても記事の同時消えが直る気がしない・・・・
ロジック的には大体上にあげたプログラムである程度あってるのでしょうかね。
0480nobodyさん2008/03/08(土) 12:26:00ID:???
データベースにおいて、データは物理的に削除するのではなく、
フラグ変更することをお薦めする。

04814652008/03/08(土) 12:30:46ID:???
>>480
表示するかしないかで処理するということですか。
0482nobodyさん2008/03/08(土) 14:00:31ID:???
>>481
データベースの場合だ
ファイルの場合は消した方がいいよ
速度変わってくるし
0483nobodyさん2008/03/08(土) 14:14:06ID:???
じゃ別に今言うべき話じゃないだろw
0484nobodyさん2008/03/08(土) 14:15:28ID:???
>>483
俺が言ったんじゃないw
0485nobodyさん2008/03/08(土) 14:46:24ID:???
まず
||と&&の使い方を覚えよう
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内容は意図したものがきてるの?
0486nobodyさん2008/03/08(土) 14:52:21ID:???
>>484
お前に言ってないw
04874652008/03/08(土) 16:30:22ID:???
なにやらすごい間違いをしてました・・・・・・・・・
$items[4]がパス格納部じゃなくて$items[3]でした・・・・・・・・
今から皆さんにご指摘頂いた部分の修正に入ります、
本当にすいませんでした。
0488nobodyさん2008/03/08(土) 16:36:16ID:???
>>486
俺にか?
04894652008/03/08(土) 16:38:20ID:???
なんだか喧嘩させてしまったようで申し訳ない・・・・・
0490nobodyさん2008/03/08(土) 17:05:38ID:???
架空請求の詐欺師が特定されてるよw
http://2ch.pne.jp/img/jpg/w_h/img_cache_d_180941_1_1204957189_jpg.jpg

【ユビキタス銀河】 詐欺師プログラマー 武田洋幸
http://pc11.2ch.net/test/read.cgi/antispam/1204457908/l50
0491nobodyさん2008/03/08(土) 17:42:02ID:???
何度も投稿すいません、掲示板で書き込んだ後ブラウザの更新ボタン押すと
もう一度書き込まれてしまうのですがこれを防止するのは2重書き込み防止処理だけでいいのでしょうか?
これだとたまに別の人が書き込んだ後に更新押した場合
書き込まれちゃいますよね。
皆さん過去ログの内容走査処理したりしてるのでしょうか?
0492nobodyさん2008/03/08(土) 17:53:28ID:???
>>491
書き込んだ後ブラウザを強制的に閉じるようにしたら更新できなくなるよ
0493nobodyさん2008/03/08(土) 18:01:26ID:???
そんな〜、ドラえも〜ん!
0494nobodyさん2008/03/08(土) 18:26:21ID:???
a.html←フォーム
b.php←post先
c.php←投稿完了しました表示

b.phpで投稿完了したら
header('Location : http://example.com/c.php');

これでa.htmlまで戻るとかで戻らない限り2重投稿はある程度防げる

0495nobodyさん2008/03/08(土) 18:29:46ID:???
なるほど、そういうことでしたか、取り乱しました。
html作成せずにphp1つだけで全部やろうとしてもややこしそうですね・・・・・
0496nobodyさん2008/03/08(土) 18:50:31ID:???
>>495
別にhtml作らなくてもできるけど
ファイルは分けたほうが後々良いよ
0497nobodyさん2008/03/08(土) 21:58:57ID:???
>>495
だまされるな!
ドラえもん呼ぶのが正解だ
0498nobodyさん2008/03/08(土) 23:16:31ID:???
htmlってどうやって作るんでしたっけ?
なんかリファレンス読んでも見つからないのですが。
0499nobodyさん2008/03/09(日) 01:35:03ID:BZEq18rG
target.phpをインラインフレームで表示するためのページをget.phpとします
その際にをtarget.phpへ送るリファラを http://example.com とするにはどうしたらいいのでしょうか。
過去ログを探して、
ヘッダに ""Referer: http://example.com\r\n" を追加すればいいと書いてあったのですが、
どのように追加したらいいのかがわかりません
location みたいな書き方が思い浮かんだのでやってみましたができませんでした。
正しいやり方を教えてください。お願いします。
-------------------------------------

【get.php】
<?php
header("Referer: http://example.com\r\n");
?>
<iframe src="target.php">
</iframe>
-------------------------------

【target.php】
<?php
echo $_SERVER["HTTP_REFERER"];
?>
-------------------------------

get.phpの実行結果

http://****.jp/get.php
0500nobodyさん2008/03/09(日) 02:10:54ID:???
>>499
【get.php】
<?php
echo '<iframe src="target.php?referer='.$_SERVER["HTTP_REFERER"].'"></iframe>';
?>

【target.php】
<?php
echo $_GET["referer"];
?>
0501nobodyさん2008/03/09(日) 02:31:20ID:BZEq18rG
>>500
せっかく答えていただいたのに恐縮ですが、
それはget.phpで取得したリファラをtarget.phpへgetメソッドで渡す方法ですよね

私が知りたいのは、
get.phpでtarget.phpを開くけれども、
target.phpで取得されるリファラはget.phpではなく、http://example.com にしたいということなのです
印象の良くない言葉なので使いたくはなかったのですが、つまり、リファラ偽装ということです

書き方悪くてすいません
0502nobodyさん2008/03/09(日) 02:41:06ID:???
>>501
http://example.com
これは固定値かそれともget.phpで取得できる値かどっち?

get.phpで取得するリファラの値なら方法は無いよ?
get,php内でgetのリクエストをtarget.phpに宛てに投げて
その時のヘッダにリファラ偽装して渡すとかなら可能だけど
0503nobodyさん2008/03/09(日) 03:08:23ID:BZEq18rG
>>502
説明不足で本当にすいません
固定値です
0504nobodyさん2008/03/09(日) 04:55:14ID:???
>>503
ファイルに対してアクセスあった場合
強制的に.htaccessとかでSetEnvとかかなぁ・・・

もしiframeのが別のサイトなら
getのリクエスト投げた方が早い
0505nobodyさん2008/03/09(日) 05:16:16ID:???
変数に0入れてその後の分岐にNULLかどうかとか入れたら
0はNULLやfalseと判定されますか?
その変数を変数-1としても-1とはならない?
0506nobodyさん2008/03/09(日) 05:24:57ID:???
===で比較すれば判定されない。
変数=0
変数=変数−1としたら変数の中身は−1になる。
0507nobodyさん2008/03/09(日) 05:29:10ID:???
型の自動変換に頼った比較は避けた方がベター。
0508nobodyさん2008/03/09(日) 05:31:25ID:???
どうもすいません、ありがとうございました。
0509nobodyさん2008/03/09(日) 14:05:48ID:BZEq18rG
>>504
いろいろなアドバイスありがとうございます

target.phpが別のサイトなら、
target.phpのソースは
<?php
echo $_SERVER["HTTP_REFERER"];
?>
なのは弄りようがないわけですが、

target.phpの $_SERVER["HTTP_REFERER"]の値をhttp://example.comであると認識させるためには、
get.phpからどうやってgetのリクエストを投げればいいのでしょうか
0510nobodyさん2008/03/09(日) 14:17:24ID:???
>>509
GETと環境変数は別
0511nobodyさん2008/03/09(日) 14:34:13ID:BZEq18rG
>>510
ありがとうございます
つまり、getでリクエスト投げても、相手で表示される環境変数は変わらないわけですよね

どうすれば
get.phpでインラインフレームでtarget.phpを表示し、
target.phpの $_SERVER["HTTP_REFERER"]の値をhttp://example.comtにできるのでしょうか
やり方がさっぱりわからないのです
0512nobodyさん2008/03/09(日) 15:24:27ID:???
>>511
getでリクエスト投げる時にリファラ偽装すれば
リファラには固定値を入れる事ができる

だがインラインフレームでやるのは無理
それをインラインフレームでやる必要あるの?

どうしてもやりたいなら
.htaccessにSetEnvってのがあって
それを使ってtarget.phpにアクセスがあった場合
強制的にリファラを書き換えてやれば良い
0513nobodyさん2008/03/09(日) 16:02:31ID:BZEq18rG
>>512
インラインフレームでしようとしていた理由は、
自分がやりたいことを考えた時に一番実現しやすそうだと思ったからです
それが無理ならばインラインフレームでやることはありません

>getでリクエスト投げる時にリファラ偽装すれば
ここのやり方を教えてもらえないでしょうか
getはわかりますが、リファラ偽装の部分がわからないのです
0514nobodyさん2008/03/09(日) 16:26:44ID:???
>>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: http://hogehoge.jp/\r\n" .
        "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);
?>

こんな感じでやふーのトップをもってこれる
0515nobodyさん2008/03/09(日) 16:49:24ID:BZEq18rG
>>514
ありがとうございます

私のくどい質問に回答続けてくれた方に感謝します
0516nobodyさん2008/03/10(月) 01:54:10ID: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の勉強は先月始めたばかりで、この掲示板のスクリプトは、本などを読んで作ったオリジナルのものです。
よろしくお願いいたします。
0517nobodyさん2008/03/10(月) 02:14:45ID:???
すみません。サブルーチンの中身を書いてなかったです。

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);
}
0518nobodyさん2008/03/10(月) 02:20:25ID:???
>>516
softbankのチェックした機種は何?
多分表示側の問題だとは思うけど

それと、1スレッド1テーブルはやめた方が良い
ファイルベースの設計なら1スレッド1ファイルの方が良いが・・・
05195162008/03/10(月) 02:40:11ID:???
機種はちょっと分からないんですよね。
ログ見てみたらソフトバンクだな、ってのが分かったというだけで。

しかも、その方が問い合わせフォームからメールも送ってくれたんだけど、
それがまた見事に文字化けしていて全く見れない状態です。
(これもまたDOCOMO、auは正常動作。)

1スレッド1テーブルが良くないというのは、パフォーマンスとかCPU占有とかいう話でしょうか?
素人考えで、一つのテーブルのみが異常にレコード数多くなるよりいいかな、と思ったのですが…
0520nobodyさん2008/03/10(月) 02:58:57ID:???
ちょ,それはない
0521nobodyさん2008/03/10(月) 03:56:42ID:???
>>519
旧Vodafone機種とかにはまともに送れないのとかあるからねー
そこらへんが携帯対応のめんどくさい所

1つ要素追加しようとした時に全部のテーブル構造変えるほうが手間
あとデフォ設定でCPUがP4の3Gでメモリ2Gなマシンでも
1テーブル2000万件とかいれても平気だから1テーブルに入れろ

DB設計は色々と勉強した方が良いよ

0522nobodyさん2008/03/10(月) 05:18:59ID:???
超初心者用ってあるのに全然わからない。・゚・(ノД`)・゚・。
2ヶ月ぐらいやってるけどなにをどうやっていいやら・・・

とりあえずHTMLを少しやってたのでPHPに挑戦してみたんだが
難しい。そして、どう使うのかがよくわからん。

PHPスーパーサンプル集って本を買って本の進行通りにやってるが
だからなに?って感じでおわってしまう。

まず最初にこんにちはを画面に表示させた。うむ。
フォームはあらゆるところで使われるので重要ということで
フォームもやってみた。うむ。

いま、フォームで送信されたデータを関数で色々条件をつける
もしくは処理をするってのやってるんだけど、それも具体的によくわからん。
説明には、パスワードを入力とか普段サイトで使ってるようなことで使う
みたいなことは書いてあったけど、実際自分でつかえるかなーと疑問。

何をどうしたらいいか、もっと分かりやすい本、もしくはページはないか
しってたらお願いします。できれば、私はこう使ったというのを実体験で
いってくれると分かりやすいです。m(_ _)m
0523nobodyさん2008/03/10(月) 06:26:17ID:???
>>522
その手の質問きたら俺は毎回ここをオススメしてる
宣伝と思われそうだがw

http://www.phppro.jp/school/phpschool/

初心者には普通にオススメ
あと何か作ってみたいものを見つけるのが良いんじゃないかな?

んでこれを作るには何が必要で
どんな事をしなきゃいけないのかとか
あとは同じようなスクリプトは
どんな風にしてるのかを調べるのも良いかな
0524nobodyさん2008/03/10(月) 18:52:10ID:???
>>523
すごくよかったですm(_ _)m
私が買った本より説明が分かりやすく理解しやすかったです。

とりあえず、このページを読破し実際にやってみようと思います。
0525nobodyさん2008/03/11(火) 03:36:14ID:xCa4blgr
すません。ある関数の返り値をvar_dumpしたら
object(stdClass)(1) { ["array"]=> "test"}
みたいな感じでオブジェクトで返ってきました。

配列arrayの中の"test"という文字列を取り出すためにはどうしたらよいのでしょうか?

ちなみにjson_decode()です。upgrade.phpを利用してassocをTRUEにしているのに配列ではなくオブジェクトで返されてしまって困っています。

0526nobodyさん2008/03/11(火) 03:42:27ID:???
$obj->array
0527nobodyさん2008/03/11(火) 15:31:16ID:xCa4blgr
>>526
ありがとうございます。
0528nobodyさん2008/03/11(火) 20:58:03ID:LKhchWrt
PHP5のsimplexml_load_fileを使ってWordPressのRSSフィードを読み込もうと
しているのですが、フィード内の <content:encoded> といったエレメントが
読み込まれません。

どうも「:」がエレメント名に含まれていると、PHPはそれを見落としてしまうよう
なのですが、同じような経験をされた方いらっしゃいますでしょうか?
0529nobodyさん2008/03/11(火) 22:34:53ID:???
PHPって有名なプログラミングですよね?
今度の4月から大学(情報工学科)に通うんですけど
教授とかに聞いても大丈夫ですよね?
0530nobodyさん2008/03/11(火) 23:38:41ID:???
そうそう、有名なプログラミングだよ。
0531nobodyさん2008/03/12(水) 01:15:12ID:???
PHP で HTML のブロックをコメントアウトコメントアウトするのって
↓でええんか?

<?php if(false){ ?>
…
<?php } ?>
0532nobodyさん2008/03/12(水) 01:22:22ID:???
<?php if(false): ?>
...
<?php endif; ?>

なんでこの書き方って普及してないの?
0533nobodyさん2008/03/12(水) 01:29:31ID:???
>>532
その書き方のメリットを教えてくれ
0534nobodyさん2008/03/12(水) 09:26:44ID:???
くだしつで失礼します。
外部からのアクセスでPHPに情報を送り、それをPHPが一度Textファイルに保持した上で
他のアクセスがPHPからそれを受け取るという処理を行っています。
チェックは連続して行っていて情報が無ければ「NoEntry」という結果を返しています。
(保持した情報は消えます)
(処理中、データはロックしています)

今現在そのチェック処理を2秒に1回の頻度で行っているのですが、
一般論の範囲でPHPはどれくらいの負荷までなら普通に耐えられるのでしょうか?
可能であれば上記のチェック処理を1秒に2・3回行いたいと思っています。

使用しているサーバはさくらインターネットのプレミアムコースです。
PHPのバージョンは、、すみません。詳しく分からないのですが初心者解説サイトの命令のみ使っています。
2秒に1回のチェックですが、実際にデータを保持し送信するペースは1時間に1回ほどです。
0535nobodyさん2008/03/12(水) 10:53:22ID:???
>>534
チェックの方法にもよると思うけど
file_existsかなんかでチェックしてるって事?
0536nobodyさん2008/03/12(水) 10:58:25ID:???
よく分からんけどcronみたいな定期的な処理実行を無限ループでやってるということか?
他のアクセスがあった時点でファイルがあるかチェックするんじゃだめなの?
0537nobodyさん2008/03/12(水) 11:11:37ID:???
すみませんでした。補足します。

繰り返しアクセスしているのは外部のプログラムで、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回にしたいなと考えております。
0538nobodyさん2008/03/12(水) 11:15:08ID:???
>>537
そのLoadパラメータとやらの書き方次第だと
多分問題は無いと思うけどねー
0539nobodyさん2008/03/12(水) 11:28:02ID:???
処理負荷にもよるけど2,3リクエスト/秒なんて余裕だから大丈夫かと
05405342008/03/12(水) 11:52:49ID:???
なるほど、助かります。ありがとうございました!
やはりPHPの性能はCGIとは比べものになりませんね。
0541nobodyさん2008/03/12(水) 17:51:48ID:???
phpで出力した内容をhtmlで出力するのって
普通にfwriteとかで作成すればいいのでしょうか?
0542nobodyさん2008/03/12(水) 19:13:32ID:???
file_put_contentsでおk
0543nobodyさん2008/03/12(水) 21:40:52ID:???
>>541
ファイルに書き出したいなら>>542のを使えば良い
表示させるだけならechoなりでhtml書いたのを表示すればいい
0544nobodyさん2008/03/13(木) 04:03:55ID:???
どうもありがとうございました、助かりました。
0545nobodyさん2008/03/14(金) 16:59:59ID: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; ←エラー
0546nobodyさん2008/03/14(金) 17:41:35ID:???
>>545
print_rよりver_dumpのがオススメ

$idと$titleをdumpする事をおすすめする
var_dump($id,$title);

てかそのループしなくても良いと思うんだが?
$name[$xml->id] = $xml->title;
0547nobodyさん2008/03/14(金) 19:16:02ID: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"
}
0548nobodyさん2008/03/14(金) 19:34:29ID:???
最近は、YAMLとJSONばっかりで
XMLを使っていない。使おうとも思わない。

つかうのは外部とのシステムでXMLを
使うことを強制された場合ぐらいだな。
0549nobodyさん2008/03/14(金) 20:27:50ID:i8C7NkG0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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 = "http://***.com/gazou/01/" . $_GET['no'] . ".gif";
if(file_exists($image)){ print "<img src=\"$image\">"; }
?>
</div>
</body>
</html>

こんな感じでhttp://***.com/gazou/01/**.gifをページの真ん中に表示したいのですが画像がされません。
画像がローカルパスなら表示されるのですがどこが悪いのか教えてもらえませんでしょうか?
0550nobodyさん2008/03/14(金) 20:32:53ID:???
質問です。
よければ教えてください。

echo 45 * 1.4;
echo "<br>";
$a = floor(45 * 1.4);
echo $a;
echo "<br>";

というプログラムで、結果が
63
62
となるんですけど、原因がわかりません…
63が正解なのですが、なぜなんでしょう?
実際は変数が入るので、結果も変動して小数点以下の数値も出るのでfloorしていますが、
なぜかこの数値の時だけ結果にずれが…

0551nobodyさん2008/03/14(金) 20:54:07ID:???
>>550
典型的な、浮動小数点誤差の問題だね。

一般的にコンピュータは数値を二進数に変換して処理する。
1.4という数値は二進数では近い数字は表現できても、
1.4そのものは表現できない数値なんだ。(小数点以下が無限に続く)

よって 45 × 1.3999・・・という計算になる。
当然答えも62.9999・・・になる。

あとはechoのとき、62.9999・・・というほぼ63という値なら、
それを63にして表示しているということだろう。

公式サイトにも書いてあるが。
http://www.php.net/manual/ja/language.types.float.php
05525492008/03/15(土) 12:13:27ID:???
聞く場所違いましたかな・・・汗
他で聞いてみます 失礼しました。
0553nobodyさん2008/03/15(土) 15:19:04ID:???
>>552
php関係なくね?
0554nobodyさん2008/03/15(土) 17:15:03ID:???
for内でもう一度forつかうと$iの値が干渉しあうのですが
$iって$aとかにする事は可能でしょうか?
■ このスレッドは過去ログ倉庫に格納されています