トップページ⇒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


抜けているものがあったら補足願います
0696Imo ◆.jC7ANgFY. 04/08/02 16:49ID:???
>>692
$fp = fopen($logfile, "w");
$message = file($logfile);
ここの部分がおかしいですよ。
069769204/08/02 17:03ID:???
あり、とりあえずいろいろ修正して

#記事削除
if ($action=="記事削除"){
$message = file($logfile);
fclose(fopen("$logfile", 'w'));
if($max <= count($message)){
$num = $max - 1;
}else{
$num = count($message);
}

for($i = 0; $i < $num; $i++){
print "1 $no2 2 $number 3 $inpass 4 $pass2";
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2,$color2,$pass2) = split( ",", $message[$i]);
if ($number==$no2 && $inpass==$pass2){
}else{
$fp = fopen($logfile, "w");
rewind($fp);
fputs($fp, $message[$i]);
fclose($fp);
}
}
}

にしたのですが、記事が消えません;;
パスあってるのに〜;;
0698Imo ◆.jC7ANgFY. 04/08/02 17:03ID:???
>>692
ファイルを開いているときの0Byteにする場合はftruncate関数を使います。
ファイルを開いていない場合は'w'モードで開くだけで0Byteになります。
'w'モードで開いた時点でファイルは0Byteになります。
その後にファイルを読み込むと0Byteの文字列が返されることになります。
0699Imo ◆.jC7ANgFY. 04/08/02 17:08ID:???
>>697
私がふとそのまま書いたらこんな感じになります。
とはいってもこれを直接使うといろいろ面倒なので
このソースを見て何かを得てみてください。
あくまで参考までに、、、、

$fn = fopen($logfile, 'r+');
if ($fn and flock($fn, LOCK_EX)) {
  $data = explode("\n", trim(file_get_contents($logfile)));
  $data = array_slice($data, 0, $max);
  $hit = preg_grep("/^$number,.*,$inpass\$/", $data);
  if (count($hit)) {
    $hitnum = array_keys($hit);
    unset($data[$hitnum[0]]);
    ftruncate($fn, 0); rewind($fn);
    fwrite($fn, implode("\n", $data));
  } else {
    echo '該当する記事がないかパスワードが違います';
  }
} else {
  echo 'ファイルが開けなかったかロック失敗';
}
@fclose($fn);
070069704/08/02 17:10ID:???
シラナイ命令文イパーイでシボンヌ_| ̄|○

    ||
   (  )
   ∪ ∪
    ∪∪
0701Imo ◆.jC7ANgFY. 04/08/02 17:16ID:???
>>700
あえてあなたの書いたコードを修正するならばこう。
でもファイルロック処理とかしていないから込み合う
サイトではデーターが消えたりします。

// 記事削除
if ($action=="記事削除"){
  $message = file($logfile);
  $fp = fopen($logfile, 'w');
  if($max <= count($message)){
    $num = $max - 1;
  }else{
    $num = count($message);
  }
 
  for($i = 0; $i < $num; $i++){
    // print "1 $no2 2 $number 3 $inpass 4 $pass2";
    list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2,$color2,$pass2) = split(",", $message[$i]);
    if ($number==$no2 && trim($inpass)==trim($pass2)){
      // 該当記事
    }else{
      fputs($fp, $message[$i]);
    }
  }
  fclose($fp);
}
0702軟式PHP04/08/02 17:17ID:???
>>693
まぁアホは相手にしなさんな。・゚・(ノ∀`)・゚・。
0703nobodyさん04/08/02 17:22ID:???
>>701
ありです><
なんとかできました(*´д`)ハァハァ
(trimてなんだろ・・・)
0704nobodyさん04/08/02 17:23ID:???
マニュアルを見る癖をつけろ
0705軟式PHP04/08/02 17:23ID:???
trimとかchopとかは覚えとけよ。・゚・(ノ∀`)・゚・。
http://www.php.net/manual/ja/function.trim.php
0706nobody04/08/02 17:25ID:tyWsL5gt
アマゾンのWebサービスからXMLを取得し、SimpleXMLでデータを引き出そうと思っています。
環境はPHP5、WindowsXPpro、Apache2.0です。

例えば、
ttp://xml-jp.amznxslt.com/onca/xml3?t=webservices-20&dev-t=webthreads&locale=jp&KeywordSearch=Amazon&mode=books-jp&type=lite&page=1&f=xml
上記で取得したXMLから、

foreach($xml->Details as $details){
echo $details->ProdctName;
}

などのようにデータを取り出すことはできましたが、取得したXMLのなかで、
著者名(Author)など、各詳細情報(Details)内でも複数あるデータについて
foreachなどでデータを取得することができません。
単純にキーを指定して、$details->Authors->Author[2] などのようにすれば
データは取れるのですが、ループで取得できないとなんとも不便です。
とりあえずこんな感じに書いてみましたがうまく動作しません。

foreach($xml->Details as $key => $details){
echo $details->Manufacturer;
foreach($details->Authors as $authors){
echo $authors->Author;
}
}

これだと著者名の最初1件しか拾えません。countなどでAuthorを数えてみても
正しくカウントされないようです。
これはこういう仕様なのでしょうか?
なにか間違った記述をしているのでしたらご指摘いただけると助かります。
よろしくお願いいたします。
0707Imo ◆.jC7ANgFY. 04/08/02 17:27ID:???
>>703
fileで読み込んだ配列はどうしても最後に"\n"が入ってしまうからtrimで除去したんですよ。
パスワードのあとに","が入っているプログラムなら大丈夫なのですが、、、
070870304/08/02 17:29ID:???
そういえば一番後ろにpassがあったような_| ̄|○
本当にアリガトー><

PS.目的別PHPハンドブックを読んでいるがワカンネェ
0709Imo ◆.jC7ANgFY. 04/08/02 17:30ID:???
$details->Authorsが複数存在してるのではなく
$details->Authors->Authorが複数(配列として存在している)のならば
こうあるべきでは?

foreach($details->Authors->Author as $authors){
  echo $authors;
}
0710軟式PHP04/08/02 17:32ID:???
今日はImo氏がいるからアホの言いがいが無いな…。
また明日な。・゚・(ノ∀`)・゚・。
0711nobodyさん04/08/02 17:32ID:???
>>699
一瞬でもにでもファイルを 0バイトにすると外部から読み込みが入ると怖いのであまり 0バイトには
しない方が安全だと思う。
やるとすれば以下のような感じかな。実用するならもう少しエラーチェックを真面目にするけど。

if (fwrite($fn, implode("\n", $data))) {
  ftruncate($fn, ftell($fn));
}

あと、fopen で開いているファイルを file_get_contents で開くのはちょっと好きでは
ないので、以下の方法で読み込むとか。

$data = fread(filesize($logfile));
0712nobodyさん04/08/02 17:34ID:???
>>708
ひとまずWebの日本語マニュアルでも、殆ど問題ない。
http://php.s3.to/man/
0713Imo ◆.jC7ANgFY. 04/08/02 17:37ID:???
>>711
でもその方法でやると後半部分のデータがくずれたりしますよ。
すべての部分(書き込みするために読み取る部分と、書き込みする部分)で
ロック処理をしておけばよっぽどのことがない限り大丈夫なはずです。

file_get_contentsはphpでは推奨しているといかなくとも、
「OSによっては高速になる」との記述もあります。
まぁちょっとの差でしょうけどね。

# それとちょっと間違えてるよ
# $data = fread($fn, filesize($logfile));

0714軟式PHP04/08/02 17:40ID:???
>>711
|Д`)
0715nobody04/08/02 17:43ID:tyWsL5gt
>>709
レスありがとうございます。
本当だ。できました。ありがとうございます。

こんな簡単なことに気が付かないとは恥ずかしい・・・。
071671104/08/02 18:25ID:???
>>711 で rewind を忘れていた。本当は fwrite の結果を取得してから
if 文を行った方が安全だけど。

rewind($fn);
if (fwrite($fn, implode("\n", $data))) {
  ftruncate($fn, ftell($fn));
}

>>713
後半部分のデータがくずれるというのがよく分からない。
そのために、ftell で書き込み終わったファイルポインタの位置を取得して、
それ以降の部分を切り捨てている。

fwrite から ftruncate までの間に別からファイルの読み込みがあった場合は
確かにくずれるかもしれないけど、0バイトで読み込まれるよりはましだと
思ったということで。

一瞬でもファイルを 0バイトにしたいくないのは、fwrite で失敗、例えば
HDD のディスクが一杯になったりして、ftruncate でファイルを 0バイトに
した後にfwrite が失敗したりするとファイルは 0バイトで止まってしまうと
いう問題もあるからだけど。

711 で書いた fread の引数は確かに間違い。
ただ、fopen で既にファイルを開いていた場合は file_get_contents よりは
fread で全部読み込んだ方が早いのは確か。一応、ベンチマークを取って
確認した。
fopen から fclose までの一連の処理を行うよりは file_get_contents の方が
早いけど。
071768604/08/02 18:37ID:???
>>687
"最初に確保されるサイズ"ってのは文字列オブジェクト一つのことなんですけど。
あとデフォで8Mってのはmax_limitのこと?
これは「確保できる最大メモリーサイズ」であって、
どこにも「最初に確保されるサイズ」ってかいてない。
それとも別のオプションがあるのかな。

とりあえず適当に実験してみたところphpの文字列はC文字列で、長さは保持しない感じ。
この辺はあまり気にしてもしょうがないんだが。
0718nobodyさん04/08/02 18:51ID:???
PHPを使ってHTMLやPDFの内容を
動的に画像生成したいのですが、可能でしょうか?
0719nobodyさん04/08/02 19:05ID:???
>>718
PHPはファイルを読み込むことができます。
PHPは画像生成をすることができます。
718はhtmlやPDFのレンダリングエンジンを作ることができます。
結論 -> 可能です。
0720nobodyさん04/08/02 19:07ID:???
ある会員登録の登録フォームで無料メールアドレスでの登録を拒否するようにしたいのですが、
どんな風にスクリプトを書けばいいでしょうか。
流れだけでもわかりませんか?
0721Imo ◆.jC7ANgFY. 04/08/02 19:12ID:???
>>716
そこでそのようなことをしなければならないようじゃ、
それをしてもデーターの後半はくずれてしまいますよ。
と言いたかっただけですよ。

私は一般共用サーバーで使うことを前提にしてやっている
のでそこまで考えていませんが(HDDがいっぱいになるとか、、、

私も調べてみましたがまぁそうっぽいですね。
ファイルサイズがかなり巨大になってくると逆になりますが。
file_get_contentsは引数が少なくて個人的に好きです。
というよりかネットワーク処理のときにfreadの第二引数に
だまされて避けてるだけですが、(ローカルでは問題ありません

# FreeBSD+PHP4.3+PHPAで10000回ループさせた結果
# fopen&fclose:    0.253ms
# fread:         0.223ms
# file_get_contents: 0.335ms
0722nobodyさん04/08/02 19:17ID:???
>>720
無料メールアドレスのリストを作成し、入力されたメールアドレスを比較すればいいです。
有料メールアドレスのリストでもいいですよ。
0723Imo ◆.jC7ANgFY. 04/08/02 19:19ID:???
>>717
でも文字列中に"\x00"も含められるということは文字の長さを保持しているわけだし、
変数といわれても型がいろいろあるわけで、最低10Byteは消費しているなと思ったり。
推測なんでなんともいえませんが、
0724Imo ◆.jC7ANgFY. 04/08/02 19:24ID:???
>>720
私だったらこんなの書きますよ。

$deny = array('hotmail.com', 'mail.goo.ne.jp');
list($mail_user, $mail_domain) = explode('@', $mail, 2);
if (in_array($mail_domain, $deny)) {
  die('別のアドレスで登録してくださいませ');
}

072567904/08/02 19:33ID:???
レスありがとうございます
>>684
高いっす
>>694
知り合いから頼まれて作っているのですが(携帯用待ち受け画面サイト)、
端末に合わせて自動的に画像を拡大縮小してほしいということで
 元ファイル読み込み→GDでリサイズ→imagejpegで出力
という処理をしています(ファイルとしては書き出していません)。
で、携帯のほうで転送不可にしたいということで、ドコモ用・au用で
違った転送不可フラグを書き込みたい、と。
やはり一度書き出さないと無理なのでしょうか?
気合入れてググってきます・・・。
>>695
そのexif_read_data()の逆の関数があればラクなんですけど・・・
exif_write_data($image,"comment","hogehoge");みたいな。
0726Imo ◆.jC7ANgFY. 04/08/02 19:39ID:???
>>725
packでがんばって処理するしかないようですね。
とりあえずJPEGのフォーマット関連のサイト、書いときますね。
ttp://www02.so-net.ne.jp/~koujin/jpeg/jpeg.html
ttp://www.yk.rim.or.jp/~mamo/Computer/DS-7/exif.html
ttp://www2.airnet.ne.jp/~kenshi/exif.html

ここは消えてるけどweb.archiveになら残ってるからアドレスだけ
ttp://www.ba.wakwak.com/~tsuruzoh/Computer/Digicams/exif.html
0727nobodyさん04/08/02 19:58ID:???
>>722さん>>724さんレスありがとー

今のところhotmailが対象なのですが、他のメールも登録を考えた方がいいかな?と
思ってるので、そのリストを作成してみます。

ソースの提示もしていただき感謝です。
今のスクリプトへうまく組み込めればいいのだけど、最近php始めたもので^^;
参考にしてやってみます!

0728nobodyさん04/08/02 22:18ID:???
flockでロックしているファイルを、
file()で読み込もうとするとどうなりますか?
flockを使うならファイル処理はfopenで揃えた方がいいでしょうか?
0729nobodyさん04/08/02 23:11ID:lHZ4GoiW
>>725
二つアドバイス。

一つ目
生成されるファイルサイズに気をつけてね。
vodafoneのV3/4シリーズは、ファイルサイズ最大6Kbyteだ。
QVGAサイズで6Kbyteは早漏圧縮率を上げないとね。

二つ目
QVGA対応端末の中には、Webアクセス時、QVGAサイズの画像を表示できない端末があります。
そやつらは、vodafoneだったら四分割、ezwebだったらダウンロードさせるしかないです。

0730nobodyさん04/08/02 23:17ID:lHZ4GoiW
おながいします。
千通ちかいメールを送る必要があります。
Mail::send()を使おうと思ってるんですが、sendmailで送るのと、smtpで送るのとで、速度面ではどちらが高速でしょうか?
ちなみに、MTAはqmailです。
0731nobodyさん04/08/02 23:41ID:d5GNjYEU
変数に文字列が入ってるんですが、最初から20文字までを表示したいプログラムって、どのように組んだらいいのでしょうか?
for分を使ってカウントしようとしたのですが、文字そのものをカウントできなくて困ってます。

よろしくお願いします。
0732nobodyさん04/08/02 23:42ID:8RF4q1S0
フォームからメール送信時のBccについて質問させて下さい

$to = '[email protected]';
$bcc = "[email protected]";
$from = "[email protected]";
$title = "sampletitle";
$headers = "From: $from\r\n";
$headers .= "Bcc: $bcc\r\n";
$msg = file("./mailtxt.txt");
$msg = implode("",$msg);
mb_send_mail($to,$title,$msg, $headers);
のように書いてtoの他にbccでも送信したいのですが
送信されません、マニュアルをみるとmb_send_mail()はヘッダの区切りが\nになっていましたが
mail()の方は\r\nになっていましたので両方試しましたがダメなのはそこではなさそうなのですが
どこがおかしいかご指摘いただけますか。

旧サンのコバルトのraQ550、Apache/1.3.20+php4.0.6です。
0733nobodyさん04/08/02 23:47ID:???
ポカーンな質問でとても申し訳無いのだけども...

スクリプト内部に"->"という記述があるのだけども
これってどんな意味があるのかどうかご教授を...

余りにも漠然としたワードなんで
ググっても全くヒットしなかったデスん('A`)
0734nobodyさん04/08/03 00:00ID:7JP71wHz
>>733
http://www.php.net/manual/ja/language.oop.php
0735nobodyさん04/08/03 00:02ID:???
phpとクラスとかオブジェクトとかで検索すると
出てくるんでないかあい?
0736nobodyさん04/08/03 00:05ID:???
>>731
substr()
0737nobodyさん04/08/03 00:57ID:???
>>734 >>735
なるほど!
クラスを用いた時のメンバ変数やメソッドにアクセスする為の
演算子という事が少しずつ分かってきました

激しく目から鱗です、謝々!!
0738nobodyさん04/08/03 01:30ID:???
アロー演算子な
0739nobodyさん04/08/03 02:10ID:OM2Aei59
コンストラクタでnewしてそのクラス内で
$this->オブジェクト->メンバ名
としても
Object->メンバ名
となってしまうんですが、どこがおかしいのでしょうか?
0740nobodyさん04/08/03 02:22ID:Q+9yurzP
その「Object->」はどっから出てきたんだ?
具体的なエラーメッセージor挙動を書きなさい
074173904/08/03 02:29ID:OM2Aei59
すいません、言葉足らずでした(^^;
設定情報を格納するクラスをつくっていて、
他のクラスのメンバにそのクラスのオブジェクトを生成・代入し、
print "なんたらかんたら$this->オブジェクト->メンバ名";
みたいな感じで出力させたところ、何故か出力が
Object->メンバ名
になってしまうのです。
一応C++をやっていたのですが、PHPではpublicなメンバみたいなのは使えなかったりするのでしょうか?
0742軟式PHP04/08/03 09:13ID:???
<?php
/*-----親クラス-----*/
class Oya{
//メンバ変数
var$musukoObj;
//メンバ関数
function Oya(){
$this->musukoObj = new Musuko;
print$this->musukoObj->GetData();
}
}
/*-----子クラス-----*/
class Musuko{
//メンバ変数
var$data;
//メンバ関数
function Musuko(){
$this->data = 100;
}
function GetData(){
return $this->data;
}
}
//--クラス定義終了
$objOya = new Oya();
?>
100が出力されるけど、こういうことではない?
0743軟式PHP04/08/03 09:14ID:???
あ、タブで区切っちゃってた。・゚・(ノ∀`)・゚・。
適当なところにスペースよろしく。
0744Imo ◆.jC7ANgFY. 04/08/03 10:39ID:???
>>741
print "なんたらかんたら{$this->オブジェクト->メンバ名}";
こうやってみたらいかが?
0745nobodyさん04/08/03 13:20ID:WVIz7Nic
PHP4.1.2時代に作ったプログラムを4.3.8用に修正したんだけど、
PHPのバージョンを4.3.8に上げる前に、
プログラムは前もって4.3.8に修正したヤツを
現行のサーバーに入れようと思ってます。

文法をより適切に修正しただけで、新しい関数などは用いてはいないので
4.3.8用に修正したプログラムでも4.1.2で動くかと思ったら、
一箇所ダメなところが。
「mb_ereg()」関数が4.1.2時代にはまだ「mbereg()」としてしか存在していなかったようで、
mb_ereg()関数を呼び出しても未定義と怒られる。
なので、

function mb_ereg($str1,$str2,$str3){
return mbereg($str1,$str2,$str3);
}

のような感じで関数をとりあえず定義してバージョンアップ前まではお茶を濁そうと思っていたら
三番目の引数が問題でうまく動かない。

mb_eger("(hoge)$",$data,$regs);

とした場合に正規表現にマッチした部分を$regs[1]として
取り出すことができなくなってしまうのでお手上げ。

なので、「mb_ereg()」と自作した関数をそのまま「mbereg()」関数に
リンク(エイリアス?)するような方法はないでしょうか?
074673904/08/03 13:36ID:???
>>742-744
レスどうもです!

>>742,743
やっちゃいますよね、それ。
内容は大体そんな感じです。
結局のところ、原因は・・・

>>744
まさにこれでした!
便利さには危険が付きまとうんですね(笑

皆さん、どうもありがとうございました。m(_ _)m
0747Imo ◆.jC7ANgFY. 04/08/03 14:19ID:???
>>745
たとえばこんな感じ?

function mb_ereg($str1,$str2,&$str3){
return mbereg($str1,$str2,$str3);
}
074874504/08/03 14:27ID:???
>>747
なるほど、参照渡し。
PHPで参照渡しってほとんど使ったことなかったから思い付きませんでした。
ありがとうございます。助かりました。
0749nobodyさん04/08/03 15:05ID:???
ていうか参照渡しとすぐ分かるだろうに・・・
0750nobodyさん04/08/03 15:27ID:KxZQfxxV
ググってもよく分からないので有識者の方にお聞きします。

いままで、結構な規模のPHPプログラムをincludeを使って書いています。
このソースを外部に公開することになったのですが、
functionを使う感覚でincludeを使って処理を別ファイルに書き出していたので、
プログラム的にちょっとみっともないかな、と思っています。

ですが、問題はここではなくて、
includeとfuctionで同じ(ような)処理を呼び出す場合、
処理スピードが違う等のメリットはあるのでしょうか?
functionではメモリにキャッシュされるような気もするのですが、
それに関するドキュメントが見つかりませんでした。

メリットが特になければ、
「スピードには問題ない!」で押し通そうと思っているのですが...
0751nobodyさん04/08/03 15:41ID:???
セッション情報をクッキーでブラウザに渡すとき、
Set-Cookie ヘッダは session_start() 関数を実行するときに表示されているんでしょうか?
環境は 4.3.6 + FreeBSD のレンタル鯖です。
0752nobodyさん04/08/03 16:03ID:BfqwKzi+
ApacheとTomcatを連携させている所にPHP4.3.8をインストールして
HTMLに<?php include("test.jsp"); ?>と記述してみたのですが、
test.jspのソースがそのまま表示されてしまいます。
Apacheのhttpd.conf中のAddType application/x-httpd-phpに
「.jsp」を追加してみたのですがだめでした。

JSPのファイルからJSPをインクルードする方法なら簡単なのですが、
どうしてもHTMLからJSPをインクルードしたいんです。
JSPを表示する方法が分かる方がいたら教えてください。
0753nobodyさん04/08/03 16:11ID:???
>>752
>>488
0754nobodyさん04/08/03 16:17ID:???
>>749
「人生いろいろ、会社もいろいろ、社員もいろいろだ」 
小泉純一郎首相様が言ってました。
0755nobodyさん04/08/03 16:47ID:???
>>750
取り合えずPHP4が前提でいいのかな?
「メモリにキャッシュ」をどのようにイメージしてるかが
ちょっと不明だが、サブプログラムのincludeでも
メインプログラム上のfunctionでの記述でも実行前に
メモリに取り込まれるのは変わらない。またこれは、
includeの箇所が実際に実行されるされないに関わらない。
スピードに関わるとしたら、includeの場合はファイルのopenや
close等の処理などで、塵も積もれば的な差異が出る可能性はある。
しかしその程度は瑣末な事。

>functionを使う感覚でincludeを使って処理を別ファイルに書き出し
素の処理コードをまんまincludeしてるのかな?
「公開」の目的とするものによっては、きちんと追いやすいコードに直すべきだよ。
includeはライブラリ然としたものを読み込むべし。
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:???
てか、このレベルの課題って・・・何年生?低学年か?
■ このスレッドは過去ログ倉庫に格納されています