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

【PHP】質問スレッドpart19【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/07/16 07:12ID:KvHeypq/
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


■本家
 http://www.php.net/

■日本 PHP ユーザ会
 http://www.php.gr.jp/

■PHP マニュアル
 http://www.php.net/manual/ja/

■PEAR マニュアル
 http://pear.php.net/manual/ja/

過去スレ, 関連スレ等>>2-4


抜けているものがあったら補足願います
075675204/08/03 17:24ID:???
>>753
できました。ありがとうございます。
0757nobodyさん04/08/03 17:31ID:???
>>755
750です。
回答ありがとうございます。

メモリにキャッシュ、というのは、2度目以降の読み込みを想定していました。
functionだとメモリ上に常駐してくれるのかな、と。
includeはテンプレートを読み込むっていうイメージがあるもんで。

> 素の処理コードをまんまincludeしてるのかな?
そうです。
よく考えると、functionの方がコードとしては追いやすいですよね。
外部へは時間の関係で今のまま出しますが、
少しずつ、手直ししていくことにします。
重ねてありがとうございました。
0758nobodyさん04/08/03 17:58ID:???
>>754
ん
0759nobodyさん04/08/03 18:08ID:???
質問なんですが、皆PHPをはじめたときどうやって勉強しましたか?
1文ずつ覚えていったり一つ何かを作ろうとしたり・・・
俺の場合は本買ってまず掲示板作ろうととりかかりましたが
勉強のやり方はあっているでしょうか?
0760軟式PHP04/08/03 18:35ID:???
>>759
合ってるやり方なんて無いよ。自分で見つけるものさ。
自分が作りたいものを目指して勉強するのがいいんじゃないかな。
076175904/08/03 19:06ID:???
必死に掲示板を作っているけど
ロックのかけ方もわからないし、クッキーすら全く・・・
出来たものも微妙です・・・
0762軟式PHP04/08/03 19:13ID:???
最初はそんなもんじゃないかな。
ロックの概念とか頭に入れてるだけでもマシな方かと。
0763nobodyさん04/08/03 19:26ID:???
>>759
一番最初はcgiの拡張子をphpにしてエラーが無くなるまで頑張ったよ
0764Imo ◆.jC7ANgFY. 04/08/03 19:27ID:???
大まかなところから考えていく。これがコツ。たとえば掲示板に書き込む処理なら、
「掲示板に書き込む」
 「内容のチェック」
  「必須項目チェック」
   「内容が空欄であればエラー」
  「最大文字長チェック」
   「それぞれにあった文字数以上であればエラー」
  「不正文字チェック」
   「\x00を除去する」
   「改行を\nに統一する」
    「\r\nを\nに、\rを\nに置換する」
   「問題のある文字(タグなど)を置換する」
  「改行をタグに変換」
 「ファイルの書き込む」
  「ファイルを開く」
  「ファイルをロックする」
  「ファイルを読み込む」
  「データを追加する」
  「ファイルに書き込む」
  「ファイルのロック解除」
  「ファイルを閉じる」
1つ1つの細かいところは簡単。でも、漠然としてるから難しく感じる。
まぁとはいってもロックはちゃんと理解していないとだめだけどね。

# でもちゃんとしたロックをできている人はphpプログラマーでは少数
# 今度ホームページでも作ってそれについて書こうかな、
0765nobodyさん04/08/03 20:12ID:???
phpまともに理解していない糞コテが何言ってんだか
0766nobodyさん04/08/03 20:16ID:???
>>757
>メモリにキャッシュ、というのは、2度目以降の読み込み

この辺あたりから同じプログラムが連続して処理された場合の
キャッシュのようなものがあると考えてるのだと思われるのだが、
PHPはJavaのように何らかのアプリケーションサーバが常に
起動してる訳じゃなくて、基本的には1回こっきりで閉じている。
但しその1回の中での同一の処理については、効率化のための
処理が行われている。

httpdのモジュールとして運用した場合は若干違うのだが、
CGI版の挙動を調べてみると判りやすいだろう。
# CLIの方がもっと判りやすいか。

「同じプログラムが連続して処理された場合のキャッシュ」については
PHP Accelerator、Zend Performance Suite(Zend Accelerator)、
PECLに移された APCなどのプロダクトが関連するので、それを調べること。
076774504/08/03 20:47ID:???
747氏の方法で解決と思いきや、
第三引数を指定しない場合にエラーになってしまいます。

function mb_ereg($str1,$str2,&$str3=""){

とするとエラーになってしまうし。
どうしたものでしょう?

参照渡しの場合は初期値の設定は不可?
0768Imo ◆.jC7ANgFY. 04/08/03 21:19ID:???
>>767
完全な実現は無理だと思うのですが、とりあえず
mb_eregを呼び出すときにmb_ereg($str1, $str2, &$str3);
定義の方をfunction mb_ereg($str1,$str2,$str3="")
にすることによってある程度実現は可能です。
0769Imo ◆.jC7ANgFY. 04/08/03 21:26ID:???
>>765
じゃぁこれをもってこのスレから立ち退きますね。
少なくとも次スレまでは、
0770nobodyさん04/08/03 21:34ID:29Vzu5Ve
フォルダ内のファイルを表示するプログラムを作りたい場合、どのような関数を使えばいいですか?
0771nobodyさん04/08/03 21:42ID:???
(´Д`;) まにゅある見ようぜ
わざわざ日本語に訳してくれてんだし
077274504/08/03 21:42ID:???
>>768
ありがとう。
今はテストできる環境がないので、明日試してみます。
077377004/08/03 21:49ID:29Vzu5Ve
readdirですね。スマソ
0774nobodyさん04/08/04 15:24ID:???
flock($fp,LOCK_EX)
でロックかけたあと、ロックを外すにはどうすればいいのですか?
0775nobodyさん04/08/04 15:28ID:???
>>774
で、オマイはマニュアルのflockのページを見たのかと。
077677404/08/04 15:32ID:???
スマン、解除の方法見落としていた・・・
0777nobodyさん04/08/04 15:39ID:+l+GCo7r
774にロックをかけるにはどうすれば良いのですか?
0778軟式PHP04/08/04 16:14ID:???
flock( fopen(">>774","r"), LOCK_EX );
0779nobodyさん04/08/04 16:27ID:???
>>778
774のファイルハンドルはいずこへ…。
0780nobodyさん04/08/04 16:43ID:T7C0bXmt
PHPを使って、フォームから数字を入れて、たとえば5と入れたら0〜5までを表示させるプログラムを教えてください。
0781nobodyさん04/08/04 16:47ID:???
<?php

$no = 5;
for ($i=$no ; $i >= 0; $i--){
print $i;
}
?>

これでダメなのか?
0782nobodyさん04/08/04 16:54ID:T7C0bXmt
だめでした_| ̄|○
フォームの処理は
<?php
echo $_POST["名前"];
?>
でいいんですよね
0783軟式PHP04/08/04 16:59ID:???
フォームの書き方にもよるよ。
method属性指定してなかったらデフォはGETで送られるし。
0784nobodyさん04/08/04 17:03ID:???
>>780
フォームで入力した値を取得して、
適正な値(正の数値、整数等々)かどうか確認して、
for構文を使って初期の値(0)から、入力値まで
カウントアップ(例示のでは+1)して、echoする。
初期値とカウントアップ、適正値の条件などは容易に
変更できるようにパラメータ設定としておくのが定石。
0785軟式PHP04/08/04 17:03ID:???
<?php
$iNo = intval($_REQUEST["名前"]);
for( $i = 0; $i <= $iNo; $i++ )
{
print $i."<br>";
}
?>
一応答えおいとく。
0786nobodyさん04/08/04 17:04ID:T7C0bXmt
学校の課題なんですが・・・。

フォームから正の整数を入力して送信すると、1からその数字までの整数の
並び方を表示するPHPスクリプトを作れ。フォームの入力はテキストフィール
ドやメニューを使ってもよい。入力が0以上かどうかのチェックも行え。
0787軟式PHP04/08/04 17:05ID:???
て、宿題丸投げかよ・・・○| ̄|_
0788nobodyさん04/08/04 17:07ID:T7C0bXmt
ああ!!
さっきのできました!
でも”5”の指定なしはどうすればいいんでしょう・・・?
0789nobodyさん04/08/04 17:08ID:T7C0bXmt
あああ!
できました!!どうもありがとうございました!!
0790nobodyさん04/08/04 17:14ID:???
書き込む前に考えろや

こチな!のAA貼っとけや
0791nobodyさん04/08/04 17:16ID:T7C0bXmt
小一時間考えました○| ̄|_
4人で・・・
すみません。
0792nobodyさん04/08/04 17:16ID:???
>>788
課題を貰ってるのは君らだけなんだから、
授業を受けてる生徒内で解決するか
その課題に書いてある条件をここに列挙しろよ。
マルチ先にしか書いてない条件なんて、他の人は判らん。

でも先生も、このスレとPHP-usersと丸投げMLぐらいは読んでると思うぞ。
0793軟式PHP04/08/04 17:20ID:???
>>792
>でも先生も、このスレとPHP-usersと丸投げMLぐらいは読んでると思うぞ。
確かに読んでそうだな・・・(藁
0794nobodyさん04/08/04 17:41ID:???
正しい回答見本
http://pc5.2ch.net/test/read.cgi/php/1047225437/420-421
0795nobodyさん04/08/04 17:59ID:???
てか、このレベルの課題って・・・何年生?低学年か?
0796軟式PHP04/08/04 18:09ID:???
しかも4人がかり。中学生かな。
0797nobodyさん04/08/04 18:11ID:???
ていうか学校の授業ってサーバサイドスクリプトの勉強なんかするんだ
普通はCとかスタンドアロンアプリケーションなんだけどな
0798nobodyさん04/08/04 18:12ID:???
時代が違うんだよおじちゃん
0799nobodyさん04/08/04 18:16ID:???
専門学校だたりして?
0800nobodyさん04/08/04 18:17ID:???
専門であのレベルだとしたら行く価値全くねーな
0801軟式PHP04/08/04 18:19ID:???
俺が高校の時はCOBOLだったが。DIVISION萌え。・゚・(ノ∀`)・゚・。
0802nobodyさん04/08/04 18:20ID:???
オレモー
IDENTIFICATION DIVISION
0803nobodyさん04/08/04 18:28ID:???
WORKING-STORAGE SECTION
0804nobodyさん04/08/04 18:30ID:???
大文字はやめてくれよ
加齢臭オヤジども
0805nobodyさん04/08/04 18:32ID:???
>>804
おまえは77レベルで変数定義してな
0806nobodyさん04/08/04 18:38ID:???
プログラミングとか、ネットマナーとか、独学じゃなくて
誰かに教えてもらう時代になったんだな
0807nobodyさん04/08/04 18:41ID:+l+GCo7r
$_SESSIONを利用した場合にリンクによるGETによりPHPSESSIDが
盗まれた場合に同一ドメインまたはサーバー上のPHPが利用出来れば
$_SESSIONの内容を拾得する事が可能であると想うのですが、
このリスクをさける為にはsession.use_only_cookies=1にする以外の
手はないのでしょうか?
0808nobodyさん04/08/04 18:48ID:???
言いたいことは分かるが
>同一ドメインまたはサーバー上のPHPが
この辺の日本語がおかしい

0809nobodyさん04/08/04 18:50ID:???
日本語の添削始めちゃったよ
0810nobodyさん04/08/04 18:56ID:???
うわぁぁぁん;;文字サイズ13pxなのにかなりデケーヨ;;
0811nobodyさん04/08/04 19:01ID:???
[<A href="<?php echo "$script?action=new"; ?>" target="_self">新規投稿</A>]
[<A href="<?php echo "$script?action=search"; ?>" target="_self">検索</A>]
[<A href="<?php echo "$script?action=admin"; ?>" target="_self">管理室</A>]

にしているのですが、$actionに変数が格納されません、なぜでしょうか?
0812nobodyさん04/08/04 19:09ID:oguY/FCP
>>811
実際のブラウザ上でアンカーのhrefは何になってる?
081381104/08/04 19:10ID:???
ごめんなさい、”いつのまにか”ちゃんと表示されました・・・
本当迷惑かけてごめんなさい・・・釣ってきます、、
0814nobodyさん04/08/04 19:20ID:???
なんだ register_globals の問題かと思った。
0815nobodyさん04/08/04 19:36ID:5xfxrndz
入力されたデータをDBに書き込みたいんですが、
普通にINSERT文をクエリー発行すると
複数ユーザに同時に書き込みされた時に
DBアクセスが著しく遅くなってしまいます。
同時アクセスを防ぐ方法として、
一個のフラグのようなファイルを作ってみたのですが
どうも確実に同時書き込みを防いでくれません。
その辺を便利に防いでくれる関数はないでしょうか?
それか、便利な防ぎ方が載っているサイトがあれば教えて下さい。
0816nobodyさん04/08/04 19:53ID:???
テーブル構造が悪いんじゃなかろうか?
0817nobodyさん04/08/04 19:55ID:???
ぽまいら、>>791はXPでテトラプログラミングをしている先進的な学校の生徒でつよ

>>807
ついでにcookieもssl-secureにしておけば多い日も安心。

>>815
まずはDBのチューニングかな。
その前にスクリプトのチューニングが必要かも知れんけど:-p
その後で、使っているDBのロック機能を調べてみれ。
PHP側だけで排他制御するのはあんまりお勧めできない。
一箇所でも忘れたら全部パー。それでもあえてやるならflock関数かな。
0818nobodyさん04/08/04 19:57ID:???
同時アクセスの制御自体はデータベースサーバがやってくれるわけだし
俺もテーブル構造が悪いんだと思う
0819nobodyさん04/08/04 20:09ID:???
ていうか
テーブルのロックするsql文あったでしょ
0820nobodyさん04/08/04 20:11ID:???
みんな他人の回答も読もうぜ。
0821nobodyさん04/08/04 20:27ID:???
あくまでアクセスブロックで防ぐとして、

ブロックされた人には
「只今、混みあっています。少々時間が経ってから再度アクセスください。」
とかってエラー出すのだろうか?
082280704/08/04 20:55ID:+l+GCo7r
SESSION機能を使っている時にIPの確認は毎回行っているのですが、
他に個人を識別するのに役に立つ情報などは何かあるのでしょうか?。

>>808
ハード一台で複数のドメインを管理している貧乏サーバーとか
あるかな、とひねくれた発想を^^;。
サーバー上でSESSIONがファイルとして保存されている場所が
同じであればドメインが異なってもアクセス出来てしまうのでは
ないかという事も考えてみました^^;;。
ひねくれすぎですね・・・。

0823nobodyさん04/08/04 20:59ID:???
IPアドレス+UserAgent+MACアドレス

とか。

仕様的にはMACアドレスだけでも(ルータレベルまでは)識別できるはずだけど、
インターネット上には同じMACアドレスが山ほどあるみたいだからね。
0824104/08/04 21:00ID:???
クッキーについて教えてください
0825nobodyさん04/08/04 21:02ID:+6UXuj/L
すいません、ちょとお聞きしたいのですが、
今、PHPとPostgresSQLとで、プログラムを作ってるんですが、
DBから得たresultから、1行づつデータを読み込む部分での質問です。

たとえば、5行のresultがあるとして、
3行目まで読み込んだところで、ポインタをまた1行目に戻したい場合、
関数は何を使えばいいのですか?

sybase_data_seek を使ってもうまくいかず(PHPのバージョンが足りてないのかも知れませんが)
MySQLなら、mysql_data_seekという関数があるようですが、
Postgresの方には、同じような役割の関数はないのでしょうか?

開発環境を変えることができないことを前提で、
どなたか教えてほしいです。
0826nobodyさん04/08/04 21:11ID:???
> MySQLなら、mysql_data_seekという関数があるようですが、
> Postgresの方には、同じような役割の関数はないのでしょうか?

sybase_data_seek
0827nobodyさん04/08/04 21:25ID:???
質問読まずに書き込む
PEARのDB.php使って結果を配列に格納すれば無問題
0828nobodyさん04/08/04 21:57ID:???
>>824
ttp://www.mr-ito.com/guide.html
0829nobodyさん04/08/04 22:29ID:???
PHP+MySQLで掲示板作ったのですがコメントの部分がたまに文字化けするのはなぜでしょうか?
文字コードもEUC-JPにコンバートしてるのですが、たまーに文字化けしてしまいます。
ご教授よろしくお願いします。
083082504/08/04 23:12ID:???
>>826
それは、PHPのバージョンがいくつから使えるんですか?
試してみたのですが、エラーでたんですけど・・・。

0831nobodyさん04/08/04 23:23ID:???
>>830
PostgreSQLを使うのにsybaseの関数を何故使うのか、ということだと思うのだが。
元質問の話に戻すと、まぁ、なんだ。おまいもマニュアル嫁。
PostgreSQL関係の関数って高々70個くらいだろ。
0832nobodyさん04/08/05 00:46ID:jHqBsTPN
>>829
とりあえずここ見て設定確かめろ
http://tsuttayo.sytes.net/php/char_trn/
0833nobodyさん04/08/05 01:20ID:???
会員制の掲示板を作ったとして、
その人がログインしているかどうか確かめることってできますか?
ID、PASSを入力してログインするとログインしている人の名前が出るとか・・・
またブラウザを閉じるとその人の名前が消えたり・・・
0834nobodyさん04/08/05 01:38ID:???
何もかもダメダメだな
0835nobodyさん04/08/05 02:45ID:???
マニュアルから逆引きの方法教えてください・・・
0836nobodyさん04/08/05 03:06ID:???
Parse error: parse error, unexpected $ in 94って何すか?
特にミスっている場所ないのですが・・・
0837nobodyさん04/08/05 03:14ID:???
>>833
cookieかsession
083883604/08/05 03:15ID:???
ちなみに文はこれです
<?php
$data = file($gdata);
$count = count($data);
for ($i=0;$i<=$count;$i++){
list ($idr,$passr,$lvr,$expr,$char,$winr,$loser,$hpr,$atcr,$defr,$masr,$dexr) = split( ",", $data[$i]);
if ( $id != $idr ){
if ($i == 1){
print " <OPTION value=$idr selected>$idr</OPTION>";
}else{
print " <OPTION value=$idr>$idr</OPTION>";
}
}
?>
0839nobodyさん04/08/05 03:15ID:???
>>836
ミスってなきゃエラーでねぇよ
0840nobodyさん04/08/05 03:19ID:???
これで満足?

<?php
$data = file($gdata);
$count = count($data);
for ($i=0;$i<=$count;$i++){
list ($idr,$passr,$lvr,$expr,$char,$winr,$loser,$hpr,$atcr,$defr,$masr,$dexr) = explode( ",", $data[$i]);
if ( $id != $idr ){
if ($i == 1){
print " <OPTION value=\"$idr\" selected>$idr</OPTION>";
}else{
print " <OPTION value=\"$idr\">$idr</OPTION>";
}
}
}
?>
084183604/08/05 03:23ID:???
まだまだ欲求不満ヽ(;´д`)ノ
(ちなみにexplodeてなんだろ)
0842nobodyさん04/08/05 03:31ID:???
正規表現いらないときはsplitよりexplodeのほうが高速

http://php.s3.to/man/function.explode.html
084383604/08/05 03:33ID:???
なるほどさんくす!
しかしエラーが一向に消えない・・・
0844nobodyさん04/08/05 03:34ID:???
94行目付近がこのソースなんだろ?
084583604/08/05 03:36ID:???
88 </TR>
89 </TBODY>
90</TABLE>
91</FORM>
92</CENTER>
93</BODY>
94</HTML>


_| ̄|○
0846nobodyさん04/08/05 03:38ID:???
どこかの } が足りないと思われ
ちなみに838のソースはforを閉じてないぞ
084783604/08/05 03:45ID:???
>>846
あり! '}'忘れてました(*´д`)
ifとforが同じ列だったんで分かりづらかったようです><
有難うございました^^
0848nobodyさん04/08/05 04:34ID:???
一つのプログラム文を複数にわたって使うやりかた・・・
どうだっけ?w
084984804/08/05 04:37ID:???
例えば

print "あいうえお";
print "かきくけこ";

上の二つを呼び出す文
085083604/08/05 04:47ID:???
<?php
print " <TD bgcolor=#ffffff align=center><SELECT size=1 name=getyou>";
$data = file($gdata);
$count = count($data);
for ($i=0;$i>=$count;$i++){
list ($idr,$passr,$lvr,$expr,$char,$winr,$loser,$hpr,$atcr,$defr,$masr,$dexr) = split( ",", $data[$i]);
print $idr;
if ( $id != $idr ){
if ($i == 0){
print " <OPTION value=$idr selected>$idr</OPTION>";
}else{
print " <OPTION value=$idr>$idr</OPTION>";
}
}
}
?>


ヒロシです。
上の文を作ってみましたが、$idrに変数が格納されません・・・。
0851nobodyさん04/08/05 04:53ID:???
>>848
何したいのかわからん

>>850
データに、 $idr に対応する部分あるか?
085285004/08/05 05:01ID:???
解ケツ!
forの不等号が反対でした!
0853初心者04/08/05 05:02ID:???
変数はブラウザを閉じない限りはずっと格納された状態なんでしょうか?
0854nobodyさん04/08/05 05:05ID:???
>>853
スクリプトが実行されている間のみかと(初期化しない限りは
0855初心者04/08/05 05:07ID:???
1ページ目で、変数を$Aに入れる
2ページ目で変数を$Bに入れる
3ページ目で$Aと$Bを表示させる
$Aはカラッポ、$Bにはちゃんと入ってる。。。
という現象です・・・
■ このスレッドは過去ログ倉庫に格納されています