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


抜けているものがあったら補足願います
0611nobodyさん04/08/01 16:03ID:6iApVh2k
<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>

これに<CATEGORY Num="03">その他2</CATEGORY>を書き込みたいのですが
</ITEM>の後ろにしか書込めません。
</ITEM>の手前にポインタを移動する方法を教えて下さい。
fseekっていうのじゃ無理ですよね?
0612nobodyさん04/08/01 16:15ID:???
>>610
マニュアルには書いてないと思うがな
知らない奴が出しゃばるな!
0613Imo ◆.jC7ANgFY. 04/08/01 16:24ID:???
>>611
ちょっとヒント。
ob_start関数、これを使えばseekのようなことはできないとしても
期待した結果に持っていくことはできますよ。
0614Imo ◆.jC7ANgFY. 04/08/01 16:30ID:???
>>609
両方可能ですよ。

それと参考までに、
2次元配列使うときは必ず{}でかこまなければなりません。
もしも「echo "ほげ$hoge[1][0]ほげ";」と書いた場合は
echo 'ほげ' . $hoge[1] . '[0]ほげ';と等価になり
「ほげArray[0]ほげ」と出力してしまいます。
echo "ほげ{$hoge[1][0]}ほげ";と書くのが正しい方法です。
0615Imo ◆.jC7ANgFY. 04/08/01 16:40ID:???
>>606
マニュアルには以下のようにかかれています。
「複数のファイルや複数のPHPブロックで分割してクラス
を定義定義することは できません。」

とはいっても似た処理として、
extends(クラスの継承)を使う方法がありますので
そちらを一度は見てみる価値はありそうです。
0616nobodyさん04/08/01 17:08ID:???
>>605
アフォか。そんな言語使用イヤ過ぎる。
普通にやれよ。

funciton hoge($params)
{
require_once('hoge.func.php');
return hoge($params);
}
061761104/08/01 17:12ID:6iApVh2k
>>613
マニュアルには出力のバッファリングを有効にするとあるのですが、
これでポインタ移動できるんでしょうか?
「ob_start ポインタ」でググってもそれらしき記述が見つからないのですが、、、
0618Imo ◆.jC7ANgFY. 04/08/01 17:48ID:???
>>617
一応こんなことができますよ。

ob_start();
echo <<<EOM
<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>
EOM;
$data = ob_get_clean();
echo substr_replace($data,
"<CATEGORY Num=\"03\">その他3</CATEGORY>\n",
strrpos($data, '</ITEM>'), 0);
0619nobodyさん04/08/01 18:03ID:???
>>615
マニュアルのそれは昔に読んだんですよね
funcitonをclass内に読み込み方法があればclass外のfunciton
と競合しないですむので理想的と考え質問したのですが、
それは出来ないみたいですね。
extendsを調べてみます^^ありがとうございます。

>>616
require_once()とinclude_once()の差はエラー時の処理の差で
しかないと記憶しているのですが違いましたか?
アフォな理由を説明してくれ!
062061104/08/01 18:11ID:6iApVh2k
>>618
すいません説明不足でした。
送信されてきた<CATEGORY Num="03">その他2</CATEGORY>を

<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>
と書かれているxmlファイルに書き足したいのです。
0621nobodyさん04/08/01 18:12ID:???
>>619
何でそこに反応するかな。

> return hoge($params);
のように以降の処理を普通に実装すりゃいいだけだろう。
0622Imo ◆.jC7ANgFY. 04/08/01 18:23ID:???
>>620
いったんファイルをすべて読んでしまってから書き換えて出力するしかありませんね。
文字の挿入に関してはsubstr_replaceを見ておくといいかと思います。

# fseekで位置を移動するにも場所を知る必要性があるのであらかじめ全部読み取ったほうがいいです。
# fseekの場合</ITEM>に上書きしてしまいますし、、、
0623nobodyさん04/08/01 18:41ID:???
>>621
あぁ、funciton内で他のfuncitonを呼ぶのがですね^^;。
requireするファイルを絶対パスで実行されると不都合なファイルが
あるからなんですが構造として美しいものではありませんね。
062461104/08/01 18:52ID:???
>>622
色々と試してみます。
ありがとうございました。
0625nobodyさん04/08/01 20:05ID:???
掲示板を作ろうと思うんですけど、下記のやり方が思いつきません
・2重投稿の防止
・連続投稿の防止
・書き込みした内容の編集
・書き込みした内容の削除

当方激しく初心者です;;
もしよければアドバイスお願いします・・・
0626nobodyさん04/08/01 20:11ID:???
>>625
>・2重投稿の防止
>・連続投稿の防止
>・書き込みした内容の編集
>・書き込みした内容の削除
この機能を除いた掲示板はもうできたのか?
062762504/08/01 20:13ID:???
>>626
はい、それはできました。
0628nobodyさん04/08/01 20:16ID:???
どういう方法で書き込み内容を記録してるかわかんないから答えられない
062962504/08/01 20:18ID:???
名前,タイトル,メール,コメント

みたいな感じかな・・・
0630nobodyさん04/08/01 20:19ID:???
編集も削除もシーケンスでID振らないとどの書き込みか特定できないだろ
063162504/08/01 20:20ID:???
シーケンス!?
すまん、初めて聞いた_| ̄|○
0632nobodyさん04/08/01 20:22ID:???
>>625
PHPの掲示板スクリプト配ってるところを検索してソースを見ろ。
初心者なんだからソースパクれ!
0633nobodyさん04/08/01 20:47ID:???
「連番」かな

どのようして削除、編集するコメントを
指示するのか考えなかった?
0634nobodyさん04/08/01 22:16ID:2fDXisU0
拡張子が.phpのファイルにcgiを呼び出して表示させるのは、どうしたらいいですか?
0635nobodyさん04/08/01 22:21ID:???
拡張子が.phpのファイルに・・・
っておかしな言葉だな。
<?
require("hogehoge.cgi");
?>
であかんのかい?
063663404/08/01 22:28ID:2fDXisU0
これだと、cgiファイルの中身が表示されてしまいます。
実行結果を表示させたいのですが。
0637nobodyさん04/08/01 22:32ID:???
>>634
>>507
0638nobodyさん04/08/01 23:03ID:???
log.cgiの中身を全て削除したいのですが
どうすればよいでしょうか?
0639nobodyさん04/08/01 23:12ID:???
mysql_queryで長いクエリー送るとSyntax Error返してくる。
そのクエリーをphpMyAdminで送ったら正常動作する。
そういう経験ありますか?今これではまってます。助けて。
MySQLサーバーは3.23, phpは5.00ダー。
0640Imo ◆.jC7ANgFY. 04/08/01 23:14ID:???
>>639
セミコロンはずしてみましたか?
0641Imo ◆.jC7ANgFY. 04/08/01 23:16ID:???
>>639
もしかして複数行送ったりとかしてないですよね?

>>638
削除するならば
@unlink('./log.cgi');

0Byteにするならば
fclose(fopen('./log.cgi', 'w'));
064263904/08/01 23:19ID:???
メッサ複数行送ってる。ダメなのね。ありがとさん・・・。
064363404/08/01 23:23ID:2fDXisU0
えー、やはり変わらず、cgiの中身が表示されてしまいます。
507さん教えてください。
0644nobodyさん04/08/02 02:36ID:???
中身を削除するって言ってるんだから0byteにするしかないだろ・・・
これだから厨コテは
0645nobodyさん04/08/02 03:13ID:???
昨日のレスで最もホームランなのは>>612だな。
0646nobodyさん04/08/02 03:52ID:???
来る奴来る奴奇天烈で差が無いなか結構味わいのあるとこ選考したなw
つーかあれクラス内の関数とか言ってるし関数とメソッドの区別がついとらんだけやろ
最初理解不能だったので、グローバルスコープ要素をクラスメンバにしようっていう
発想の凄まじさは認めたいが、、なんかどの初心者も俺を置いて遥か彼方に旅立っ
ていってしまうよ
0647nobodyさん04/08/02 04:05ID:???
>>638
やったことあると思うが開いてるならゼロにftruncateすればいい。
ついでにこれを機会にマニュアル読むようになったほうがいいよ。
0648nobodyさん04/08/02 05:24ID:???
いやいや、log.cgiがファイルとは書いてないな
意外と・・・
0649nobodyさん04/08/02 08:23ID:???
<INPUT type="submit" name="action" value="書き込み">

#記事書き込み処理
if ($action == "書き込み"){
if ($name == ""){
print " </CENTER>ERROR:名前が記入されていません";
}elseif ($comment == ""){
print " </CENTER>ERROR:コメントが記述されていません";
}else{
if ($subject == ""){
$subject = "無題";
}else{}

}
}


書き込みボタンを押したんだが記事書き込み処理
が無反応です。なぜかactionに書き込みが入らない模様・・・
ナゼダ!!!!!!!!!!!
0650nobodyさん04/08/02 08:36ID:???
関数って引数を処理し結果を返す命令群の総称だった気がするんだが・・・
メンバ関数と呼ばれるケースもあるしな
0651nobodyさん04/08/02 08:39ID:???
>>649
$_POST['action'],$_GET['action'],$_REQUEST['action']
のどれかの中身を覗いてみそ
065264904/08/02 09:01ID:???
全てカラッポですた><
0653nobodyさん04/08/02 09:06ID:???
>>652
ん、フォームの方かな^^;
<INPUT type="submit" name="action" value="書き込み">
だけ書いてもダメだよ

<form method='POST' action='filename'>
<INPUT type="submit" name="action" value="書き込み">
</form>

としましょう
065464904/08/02 09:15ID:???
<FORM method="POST" action="<?php echo $PHP_SELF; ?>">
<INPUT type="submit" name="action" value="書き込み">
</FORM>

とりあえずFORMです・・・
これでもぬるぽ_| ̄|◎
065564904/08/02 09:17ID:???
あ、鯖にうpしたらできました^^;
どうやら使っているPHPエディタが問題のようです;;
ありでした〜
0656nobodyさん04/08/02 09:21ID:???
ファイルロック機能の動作テストをしようと思たのですが、
PHP全体は、ひとつのプロセスが終ってから次のプロセスを実行するのでしょうか?
テキストファイルに、ただ10000回ほど読み込んだ物をまた上書きするだけのスクリプトを書き、
3,4窓で同時に回したのですが、どうも終ってから動き出しているような気がしてなりません。
ファイルロック用の関数を外した場合でも同じようでした。
そもそもテストの仕方が間違っているのかもしれません;;
環境はWindowsXP、AnHttpd、PHP4.3.2です。(同じPC、同じブラウザ)

また、正しいファイルロックのテストの方法を教えていただけたら幸いです…。
0657nobodyさん04/08/02 09:36ID:???
>>655
そのPHPエディタって何? ほんとにエディタと関係あるのか?
065865504/08/02 09:42ID:???
DzSoft PHP Editor(体験版)です
0659nobodyさん04/08/02 09:57ID:???
>>656
まず WindowsXP、AnHttpd、PHP4.3.2 を
*BSDもしくはLinux、Apache 1.3.31、PHP 4.3.8 に変えてはどうでしょう?
#OSはともかく、httpdとPHPはマジ。

で、ロックをかけたとき、書き込み中、ロックを解除したときに何らかの出力をさせると良いかと。
あと書き込み中にusleep()してわざと処理に時間がかかるようにすると分かりやすいかも。
flock($fp, LOCK_UN);し忘れてるってのは無しの方向でよろ。
0660nobodyさん04/08/02 09:58ID:???
<?php
#記事の読み込み
$message = file($logfile);
$count = count($message);
if ($count>=$page){
$count = $page;
}
for ($i=0;$i < $count;$i++){
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2) = split( ",", $message[$i]);
print " <FONT size=2>$no2</FONT><INPUT type=checkbox name=edit value=$no2> <font size=bSize color=$tCol><b>$title2</b></font>";
if ($mail != ""){
print " <FONT size=2>投稿者:<A href=mailto:$mail2>$name</A></FONT><BR>";
}else{
print " <FONT size=2>投稿者:$name2</FONT><BR>";
}
print " <font size=bSize color=$color>$comment2</font>";
}
?>

HTML内に上を記述するとページが何も表示されなくなりました・・・
なぜでしょうか・・・
0661Imo ◆.jC7ANgFY. 04/08/02 10:02ID:???
>>660
if ($count>=$page){
$count = $page;
}
ここで$countがリセットされているようですよ。
0662nobodyさん04/08/02 10:02ID:???
>>659
有難う御座います。まずはApacheを入れてみる事にします。
0663Imo ◆.jC7ANgFY. 04/08/02 10:08ID:???
>>656
それと正しいファイルのロック方法は
$fn = fopen($file, 'w');
flock($fn, LOCK_EX);
fwrite($fn, $data);
fclose($fn);
ではなく
$fn = fopen($file, file_exists($file) ? 'r+' : 'w+');
if (flock($fn, LOCK_EX)) {
ftruncate($fn, 0); rewind($fn);
fwrite($fn, $data);
} else {
// ロック失敗
}
fclose($fn);
ですよ。ロックは失敗する可能性もあります。
0664nobodyさん04/08/02 11:01ID:FFy40LXR
初めて質問します。
cgiとphpを使っていますが、

cgiファイルを使って、一部phpファイルを使いたいです。
たとえばcgi掲示板の中にphp表示(例えば別の掲示板も表示)するとか・・・

ご指導ください。
0665nobodyさん04/08/02 11:09ID:???
外部コマンドとして呼び出して結果を表示すればよい。
0666nobodyさん04/08/02 11:13ID:???
>>663
ロックに失敗するのって例えばどんな場合?
0667nobodyさん04/08/02 11:16ID:???
>>662
バグフィクスされてるのでPHPを4.3.8にするのも忘れずにがんがってください。
下記URIがApacheとPHP4.3.8のインストールに良さげと思った。
ttp://allabout.co.jp/career/database/closeup/CU20031114/

ちなみにイモ回答者の言うことは微妙に間違ってるから信じちゃだめですよ。
0668nobodyさん04/08/02 12:49ID:???
下の2枚の画像合わせて見ると立体に見えるらしいのですが
http://members.home.nl/saen/Special/Zoeken.swf
PHPで実現するにはどうすればよいのでしょうか?
0669nobodyさん04/08/02 12:54ID:???
>>668
3回氏ね
0670nobodyさん04/08/02 13:04ID:???
>>668
Ming
0671nobodyさん04/08/02 13:11ID:???
セッション情報をクリアしたいのですが、
セッションIDだけはクリアせずそのまま使用したいのですが
何かいい方法はないでしょうか?

現在はsession_unsetを使ってクリアしようとしています。
067266004/08/02 13:43ID:???
>>661
if ($count>=$page){
$count = $page;
}

もし$pageより$countのがでかければ
$countに$pageを代入したいのですが・・・
067366004/08/02 13:51ID:???
お・・・できてました・・・

しかしこんなバグが残ってしまいました
Aを書き込みする、Bを書き込みすると更にAが書き込みされる・・・
なーぜだああああああああああ
067466004/08/02 13:58ID:???
$message = file($logfile);
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2) = split( ",", $message[0]);
if ($no2 == ""){
$no = 1;
}else{
$no = $no2+1;
}

if ($name != $name2 && $comment != $comment2){
$put = implode(",", array($no,$name,$mail,$subject,$comment,$time,$host,$color,$pass));
$message = file($logfile);
$fp = fopen($logfile, "a");
rewind($fp);
fputs($fp, "$put\n");
if($max <= sizeof($message))
$num = $max - 1;
else
$num = sizeof($message);
for($i = 0; $i < $num; $i++){
fputs($fp, $message[$i]);
}
fclose($fp);
$taju = 0;
unset($message);
}else{
$taju = 1;
}
0675nobodyさん04/08/02 13:59ID:???
丸投げヤメロ
0676nobodyさん04/08/02 14:01ID:FFy40LXR
>>665
cgiの外部コマンドでphpを呼び出せるそうですが、
出来るんですね。ただ解説しているサイトがない・・・_| ̄|○
0677nobodyさん04/08/02 14:06ID:???
`php file.php`
0678nobodyさん04/08/02 14:23ID:FFy40LXR
>>677

#!/usr/local/bin/perl
$command = `php file.php?q=php&hl=ja&lr=lang_ja`;
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>結果</TITLE></HEAD>\n";
print "<BODY BGCOLOR=\"#ffffff\">\n";
print "$command\n";
print "</BODY></HTML>\n";

でよろしいでしょうか?
0679nobodyさん04/08/02 14:28ID:9GDxpHGw
PHPを使用して、JPEGイメージにコメントヘッダを書き込むには
どうしたら良いですか?
068066204/08/02 14:31ID:???
>>663
サンプルコード有難う御座います。
ロック機能本体についても勉強中です。

>>667
半日かけてなんとかApach導入できました(汗
結果、恐らく今度は同時に動いており、ロック外した状態でリセットされまくりでした。良かったです。
0681nobodyさん04/08/02 14:36ID:lglFWosb
PHP4.3で、画像ファイルの添付メールを送るにはどうしたら良いですか?
<input type="file">形式で、アップロードされた画像は添付できるのですが
元々サーバ上にある特定の画像を添付してメールしたいのです。
0682nobodyさん04/08/02 14:58ID:???
>>681
アップロードされた画像を添付できるなら、もともとある画像の添付もわけないと思うが、
ひょっとしてアップロードされた画像をメール配送するスクリプトをどこかでひらってきただけか?
なんか、丸投げのヨカソ。
PEARのMail_mimeでも使えばよろしいかと。
0683nobodyさん04/08/02 15:03ID:N/tiSL6x
下記のHPを見るとき、http://www.bridal-vip.co.jp/ 時々、開けないときがあります。
表示されないとき、上記のHPを見ると以下のようなソースが書いてありました。このようなHPを多くの人が見れるように改善するときに、最小限の修正をするとしたら、どういった改善方法をとれば、いいのでしょうか。詳しくは、ソースを見てください
0684nobodyさん04/08/02 15:21ID:???
>>679
5万で教えてやるよ。
0685>>67404/08/02 15:23ID:???
わかんね
0686nobodyさん04/08/02 15:42ID:???
phpの文字列の実装ってどうなってるんでしょ。
長さは保持してるのかいな。
最初に確保されるメモリーのサイズは?
CopyOnWriteで実装されてるのか、そうじゃないのか。
0687nobodyさん04/08/02 15:46ID:???
>>686
つかマニュアル嫁よアホが。確保されているメモリのサイズはデフォで8Mだ。
068868104/08/02 15:46ID:???
>>682
凡ミスで、送れていなかっただけでした…。
PEARを使わずに出来れば良いのだけれど(便利で結局使うが)
0689nobodyさん04/08/02 15:48ID:???
>>681
PEAR使わないなら自分でBoundaryを作ってマルチパートに埋め込んで
送るしかないなぁ。俺は一応その手のライブラリ作ってるけどPEARのが便利だね( ´-ω-)y‐┛~~
勉強にはなったけど。
0690nobodyさん04/08/02 16:01ID:???
初歩的な質問なんですが
aとwの違いってなんですか?
0691nobodyさん04/08/02 16:07ID:???
マニュアル読んでも意味がわからなかった?
0692nobodyさん04/08/02 16:31ID:???
#記事削除
if ($action=="記事削除"){
$fp = fopen($logfile, "w");
$message = file($logfile);
fclose(fopen("$logfile", 'w'));
if($max <= count($message)){
$num = $max - 1;
}else{
$num = count($message);
}

for($i = 0; $i < $num; $i++){
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2,$color2,$pass2) = split( ",", $message[$i]);
if ($number==$no2){
if ($inpass==$pass2){
fputs($fp, $message[$i]);
}else{
$nopass=1;
}
}
}
fclose($fp);
}

記事削除する文打ったつもりなんだが
「記事削除」を押すとパス違ってても全ての記事が消えてしまう・・・
HELPME!!!
0693Imo ◆.jC7ANgFY. 04/08/02 16:36ID:???
>>644
マニュアルには以下のように書いてありますので
私の書いた処理でもファイルを0Byteすることはできます。

'w' 書きこみのみでオープンします。
ファイルポインタをファイルの先頭に置き、
"ファイルサイズをゼロにします"。
ファイルが存在しない 場合には、作成を試みます。
0694nobodyさん04/08/02 16:41ID:???
>>671
マニュアルのセッションの章を全部読んでください。

>>679
PHPの関数には無いようなので、JPEGのフォーマットを調べて
ファイル関数群を使って書き込むことになります。
誰か作って公開してるかも知れんけどね。

>>686
実装が気になる場合はソース嫁
0695Imo ◆.jC7ANgFY. 04/08/02 16:46ID:???
>>679
EXIFブロックならばexif_read_dataを使って読むことができますよ。
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氏がいるからアホの言いがいが無いな…。
また明日な。・゚・(ノ∀`)・゚・。
■ このスレッドは過去ログ倉庫に格納されています