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

【PHP】下らねぇ質問はここに書き込みやがれ 41

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/03/06(火) 15:39:46ID:naBsdy1Z
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 40
http://pc11.2ch.net/test/read.cgi/php/1172151461/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0766nobodyさん2007/03/14(水) 16:38:46ID:???
>>759
ユーザがいつどのマガジンに入退会したかを記録しておけば、配送ごとにすべてのユーザに配送ログを残す必要なくなると思うが。
配送エラーがあると配送ログがつかない というのであれば逆にエラーが起きたときだけ特別にエラーログとればよいし。
0767nobodyさん2007/03/14(水) 17:28:36ID:???
>>759
つーか何を聞きたいのかよく分からない。
もう一回まとめてもらえる?
1つのテーブルにレコードが10万件あるデータベースで
ログ閲覧や管理にどういう問題があって、どうしたいと考えているの?
0768nobodyさん2007/03/14(水) 17:38:47ID:???
くだらない質問です
インデックスってどうやって張るの?
0769nobodyさん2007/03/14(水) 17:41:55ID:???
ALTER TABLE tablename ADD INDEX columname;
0770nobodyさん2007/03/14(水) 18:50:28ID:???
データベースについての勉強もせずに要求とな?

続きはmysqlかpgsqlスレへどうぞ
0771nobodyさん2007/03/14(水) 19:26:45ID:ouHfB1AQ
749さん それはPHP.iniを変えるんですか?
0772nobodyさん2007/03/14(水) 19:30:52ID:88VqriPk
質問です。
call_user_funcを使って任意のクラスのメソッドを呼ぶ事が出来ますが、
同様に任意のクラスのメンバを取得するにはどうすればいいでしょうか?
0773nobodyさん2007/03/14(水) 19:31:14ID:???
A09Fみたいな表記をA0と9Fか、0xA0と0x9Fの二つに分ける方法ありますか?
0774nobodyさん2007/03/14(水) 19:38:48ID:???
>>770
そんなことはわかってる
おまえうぜーな消えろ
07756592007/03/14(水) 19:51:48ID:hmkr7h9D
>>687
申しわけありません。したいことと、得られる結果が異なります。

<?php
$xmlstr = <<<XML
<cat>
<name>mike</name>
<name>tama</name>
<name>buchi</name>
</cat>
XML;

$xmlsrc = new SimpleXMLElement($xmlstr);
なんかする(これがわからん)
echo($xmlsrc->asXML());
?>
で、
<cat>
<name>mike</name>
<name>tama</name>
</cat>
って表示されるようにしたいです。
よろしくおねがいします。
0776nobodyさん2007/03/14(水) 20:55:19ID:???
>>734-736
うちのメール配信システムは1秒150通ですが^^
0777nobodyさん2007/03/14(水) 20:56:52ID:???
>>775
$xmlsrc … 入力
$xmldst … 出力

なのでecho($xmldst->asXML());すると
<?xml version="1.0"?>
<cat><name>mike</name><name>tama</name></cat>
と出る
0778nobodyさん2007/03/14(水) 21:01:07ID:???
>>775
unset($xmlsrc->name[2]);
07797752007/03/14(水) 21:32:40ID:hmkr7h9D
>>775
説明が下手で申しわけありません。
プログラムは、
データベースからXMLを読み込む。 -> XMLをSimpleXMLオブジェクトにする。
-> 入力値をXMLに入れる。 -> いろいろ処理をする。 -> 結果をXMLに入れ、データベースに書き出す。
という処理を繰り返し行っています。

入力値の要素数が変化するのですが、
要素数が増えるときは問題がないのですが、減ったときに余分な要素が残ってしまいます。
これをオブジェクトの名前の変更なしで消し去りたいんです。
XMLはだいたいこんな感じです。
<pet_shop>
<open_date>
<year></year><month></month><date></date>
</open_date>
<cat>
<name>mike</name><name>tama</name><name>buchi</name>
</cat>
</pet_shop>
0780nobodyさん2007/03/14(水) 23:08:24ID:???
DOM使ってremoveChild
0781nobodyさん2007/03/14(水) 23:29:59ID:???
>>773
ビット演算
0782nobodyさん2007/03/14(水) 23:30:30ID:qM9Gf/TM
質問です。
文字列"FF"から0xFFってしたいんですがどうしたらいいんでしょう?
くだらなくてすいませんがよろしくお願いします。
0783nobodyさん2007/03/14(水) 23:31:44ID:???
$string = 'FF';
$string = '0x' . $string;
07847822007/03/14(水) 23:46:09ID:qM9Gf/TM
>>783
それだと文字列の"0xFF"になりますよね?
16進数としての0xFFにしたいんです。
0785nobodyさん2007/03/14(水) 23:50:38ID:???
>>784
intにキャストするかintvalかければいいんじゃね
07867822007/03/15(木) 00:42:36ID:???
>>785
駄目でした。

でも色々試したら解決しました。
"0xFF" + 0x00
としたらいけました。
もうちょっとスマートなやり方はないのかな。。。

どうもありがとうございました。
0787nobodyさん2007/03/15(木) 00:43:25ID:???
10進数に直してから16進数に直せばいいんじゃね?
0788nobodyさん2007/03/15(木) 00:50:08ID:???
>>781
わかんないです(><; )

>>786
>>773のようなときはどうしますか?
0789nobodyさん2007/03/15(木) 00:51:42ID:???
>>788
substr
0790nobodyさん2007/03/15(木) 00:58:02ID:???
>>789
同じ関数を2つも並べて書くなんてアホっぽいじゃないですか
一発で配列にして返したりするのが欲しいんです
unpack("C*", $str)みたいな

はいろいろイジって頭おかしくなりかけたのでもう試しません
0791nobodyさん2007/03/15(木) 00:59:20ID:???
>>776
1秒150通でも十分に速いと思う。。。

ちなみに俺がXREAの有料鯖でPHPで組んだメール配信システムだと、
だいたい1秒で10〜20通くらいしか送れない。(朝の時間帯だから鯖は混んでないのに)

メールの宛先ごとに本文の内容が違うし、名前の差込処理などもやってるので、
単純にメールの送信処理だけじゃないからこんなに遅いのかな?
それとも、それを考慮したとしても遅すぎるだろうか・・・? みんな、どう思います?

ちなみに、メール送信処理部分(mb_send_mail)を除いたコードで処理時間を計測すると、
メール100通分の処理でも0.00…数秒しかかかってない。
すなわち、mb_send_mail()処理で大幅に時間を食ってるようだ。
0792nobodyさん2007/03/15(木) 01:15:24ID:???
>>791
mb_send_mailで時間がかかってるってのはどこまでの範囲なんだ?
メールを送信する処理自体はSMTP鯖だろうから一概にPHPが駄目と
はいえないと思う。

PHPはSMTP鯖のキューにメールを置くところまでしかやらないはずだから

・SMTP鯖のキューに置くまでの時間=PHPのメール処理
・キューからメールを吐き出す時間=SMTPのメール処理

となると思う。
0793nobodyさん2007/03/15(木) 01:53:18ID:???
>>790
$s = "A09F";
$a = array($s{0}.$s{1}, $s{2}.$s{3});
var_dump($a);

結果:
array(2) {
[0]=>
string(2) "A0"
[1]=>
string(2) "9F"
}
0794nobodyさん2007/03/15(木) 02:00:47ID:???
>>790
$s = "A09F";
$b = sscanf($s, "%2s%2s");
var_dump($b);

結果:
array(2) {
[0]=>
string(2) "A0"
[1]=>
string(2) "9F"
}
0795nobodyさん2007/03/15(木) 02:03:26ID:???
>>786
ちなみに数値で欲しければ
$s = "A09F";
$c = sscanf($s, "%2x%2x");
var_dump($c);

結果:
array(2) {
[0]=>
int(160)
[1]=>
int(159)
}
0796nobodyさん2007/03/15(木) 02:41:46ID:???
>>792
>・SMTP鯖のキューに置くまでの時間=PHPのメール処理

そうか??
俺の計測した感じだと、mb_send_mailはMTAからの返り値(成功かエラーか)を
受け取って初めて処理が完結してるようだけど?

つまり、
・SMTP鯖のキューに置いて、処理結果を受け取るまでの時間=PHPのメール処理(すなわちMTAの処理時間も包含)
0797軟式PHP2007/03/15(木) 02:43:00ID:???
>>790
自分で関数作ってしまうという手も。
<?php
$text = "9AD3EBA09F";

print "ORG:".$text."<BR>";
print "C0:".cutbin($text,0)."<BR>";
print "C1:".cutbin($text,1)."<BR>";
print "C2:".cutbin($text,2)."<BR>";
print "C3:".cutbin($text,3)."<BR>";
print "C4:".cutbin($text,4)."<BR>";

function cutbin( $text, $len )
{
$wrk = sscanf($text,join("",array_fill(0,($len+1),"%2x")));
return sprintf("%X",$wrk[$len]);
}

--結果--
ORG:9AD3EBA09F
C0:9A
C1:D3
C2:EB
C3:A0
C4:9F
?>
0798nobodyさん2007/03/15(木) 02:47:28ID:???
>メールを送信する処理自体はSMTP鯖だろうから一概にPHPが駄目とはいえないと思う。

ちなみに、仮にmb_send_mailの処理がMTAにキューを置くだけで完了するんだとしても、
とにかくmb_send_mail()の有無でスクリプト全体の処理時間が何十倍も違うので、
やはり>>791のような現象は、この関数の処理速度に起因しているのは間違いない。


>mb_send_mailで時間がかかってるってのはどこまでの範囲なんだ?
範囲もクソもないよ。だって、mb_send_mail()の行がある場合と、その行だけコメントアウトした場合とで
処理時間の差を計測したので、ズバリmb_send_mail()自体の処理時間が分かるわけだ。
07997922007/03/15(木) 03:29:33ID:mSGG4ywR
>>796
>>798

OH!なるほど。

ちなみにmb_send_mailの処理は内部的にどうなってるんだろうな?
もしSMTP鯖に置く処理がメインならやっぱり処理速度はSMTP鯖
のスペックなり設定でかなり変わってきそうだと思うんだけどどうだろう?
0800nobodyさん2007/03/15(木) 03:32:39ID:???
> mb_send_mail
PHP側の処理時間なんてほんの一瞬。
99%はsendmailのプロセス終了待ち時間。
PHP側ではどうしようもない。
SMTPのパフォーマンスをチューニング出来ない環境ならあきらめろ。
0801nobodyさん2007/03/15(木) 03:56:59ID:???
そういう場合、たとえばqmailだったらどこをどうチューニングすればいいんじゃろ??
0802nobodyさん2007/03/15(木) 05:06:10ID:???
さあ。受け付けたらキューに登録するだけにしてすぐに正常ステータスを返すようにするとか。
大改造だと思うけどどうなんだろうw
0803nobodyさん2007/03/15(木) 05:34:19ID:0Uy9YRyX
注文内容を自動的にメール送信するスクリプトを作成中です
画像つきで注文内容が一目でわかるようにしたいので 添付ファイルつきか
HTMLメールで送信したいと思っています
添付ファイルのほうがいいかな? と言う気がするのですが 添付ファイル
で送信するとして phpからhtmlデータをファイル化することなくメール送信
することは出来るのでしょうか?
(メール内に個人情報が入るのでファイルとして残したくないのです)

アホな質問ですいませんが ご回答いただけるとうれしいです
0804nobodyさん2007/03/15(木) 05:43:01ID:???
ifとswitchはどちらが高速ですか?
またforとforeachはどちらが高速ですか?
0805nobodyさん2007/03/15(木) 06:34:06ID:???
>>804
変わんない
0806nobodyさん2007/03/15(木) 07:43:32ID:???
>>804
気になるなら自分でテストできるじゃん
0807nobodyさん2007/03/15(木) 07:47:49ID:???
>>803
できるんじゃない?
0808nobodyさん2007/03/15(木) 08:56:58ID:???
>>803
お前、何をワケのわからんこと言ってるんだ・・・
メールとして送る時点で既にファイル化されてるわけだが。

保存されては困る個人情報なら、そもそも書くな。
0809nobodyさん2007/03/15(木) 09:31:44ID:7XZoL+s0
初めまして。
もの凄く初歩的な質問だと思いますが教えて下さい。

変数に代入する値はどんなものであっても、
phpスクリプトの内容に影響を及ぼさないのでしょうか?
出力時、SQL文の実行時とは別で。

例えば、セミコロンを入力されると、内部でステートメントを区切られちゃうとか。
if文とかを書かれるとそれが実行されちゃうとか。
これは流石にないと思いますが…
0810nobodyさん2007/03/15(木) 09:36:48ID:???
変数にはどんな文字列を入れてもOK☆
0811nobodyさん2007/03/15(木) 09:38:57ID:???
>>809
アホかお前。
そんな間抜けな言語あるか。

っていうかお前みたいな奴は絶対にeval関数を使っちゃダメだからな。
08128082007/03/15(木) 10:00:42ID:???
>>810
ありがとうございます。
安心しました。

>>811
ありがとうございます。
そうですよね、質問しててこんなんだったら成り立たないなとか思いました。
なんかエスケープ処理とかそういうのを検索してたらワケがわからなくなりまして。
絶対にeval関数使わない様にします。
0813nobodyさん2007/03/15(木) 10:18:55ID:???
>>803は今すぐプログラムやめたほうがいいよw
こんなのが同じPHPやってると思うだけで嫌気がするぜ
0814nobodyさん2007/03/15(木) 10:38:29ID:???
>>772
get_class_vars
08158032007/03/15(木) 11:03:47ID:???
すいません 日本語ができてないなためご迷惑をおかけしました
あとphpマニュアルを読まずに質問したのは浅はかだったと反省しております

>>808
「ファイル化されていないものは添付ファイルとして送信できない」という
ことでしょうか?
今調べると PEARのMail_Mimeで ファイル化されていないものを添付ファイル
として送ることが出来そうだと言うことがわかったのですが これを利用した
場合も 一旦サーバ内のどこかにファイルが作成されると解釈すべきなので
しょうか?

それとも mail関数で送信した内容は プレーンテキストを含め 全て一旦
サーバ内に保存されるという意味でしょうか?

表現力も読解力もなくて本当にすいません…


>>813
不快な思いをさせてしまい 大変失礼いたしました
0816nobodyさん2007/03/15(木) 11:43:23ID:???
>>815
元々画像ファイルがあればそのままバイナリで
読み込んで添付する事はできるしテキストもどこかに保存されるわけじゃない
メールとして送られるキュー状態を「ファイル化」というならともかく
何を持って「ファイル化」と言っているのか知らないが

問題はそんなことより注文したら画像付きのHTMLメールが
送られてくるなんてありがた迷惑も
甚だしいというところなんじゃないだろうか
商品を見てよし買おうというステップを踏んで買ってるのに
その画像が送られてきてもね
0817nobodyさん2007/03/15(木) 11:56:22ID:9KVNC1ES
($hoge['hoge'] == 'fuga') ? true : false;

この文って、excelのif関数の
=if(a1="fuga",true,false)

と同じなんですか?

ふと思いまして、突然質問してしまいましたが、よろしくお願いします。
0818nobodyさん2007/03/15(木) 12:06:27ID:bQrJdpxg
file_get_contentsでxmlファイルが403で開けないのですが回避策など
ありますでしょうか?
08198032007/03/15(木) 12:10:02ID:???
>>816
ご丁寧な説明ありがとうございます
そして説明がいまだに不十分であったことをお詫びいたします

添付したいファイルはHTMLです
画像を添付するのではなく HTMLを添付してそこに画像へのリンクを
挿入することで確認してもらう予定です
(当然ながら事前に確認してもらうフォームは設けております)

HTMLのデータを変数に設定してメール送信して その変数の内容がサーバに
保存されることなく HTMLの添付ファイルとして送信することが可能かどう
か知りたかったのです
(添付ファイルよりHTMLメールのほうがいいならそちらを検討しますが)

「買ったあとに画像を見せられても…」についてはおっしゃる通りかもしれ
ません
ただ 当方ではカスタマイズ商品を扱っており オプションが細かいことから
商品を受けたあとに「こんな感じで注文した覚えはない」と言うクレームが
発生しがちなのです
無駄なクレームを減らすために「あなたはこういった注文をしましたよ」と
いう わかりやすい確認メールを画像付きで送りたいと思っています
0820nobodyさん2007/03/15(木) 12:19:56ID:V8NaW7u1
>>818
xmlファイルの読み取り権限をチェックしろ
0821nobodyさん2007/03/15(木) 12:27:30ID:???
>>819
可能かどうかなら可能

ということでこの質問は終了とさせていただきます。
0822nobodyさん2007/03/15(木) 12:37:34ID:bQrJdpxg
>>820
RSSのxmlでブラウザでは開けるんだけどね
PHP側の問題ではないの?
0823nobodyさん2007/03/15(木) 12:50:26ID:wd/M4m1q
$array = array(
'a' => 'あああ',
'b' => 'いいい',
'c' => 'ううう',
'd' => 'えええ'
);

print $array['a'];
print $array['b'];
print $array['c'];
print $array['d'];

としたときに、$array['a']だけ出力されません。

$array = array(
'b' => 'いいい',
'a' => 'あああ',
'c' => 'ううう',
'd' => 'えええ'
);

としたら、$array['b']だけ出力されません。つまり、$array[0]が出力されないのです。

print_r($array);

とすると、出力されない値もちゃんと存在することが確認できました。この原因はなんなのでしょうか?ご存知の方、良ければご教示ください。
0824nobodyさん2007/03/15(木) 12:54:47ID:???
>>823
途中でarray_shiftを使っているとかでは?
0825nobodyさん2007/03/15(木) 12:58:11ID:wd/M4m1q
>>824
いえ、途中経過で$arrayはいじってません。
関数の引数として渡しているだけです。
0826nobodyさん2007/03/15(木) 13:11:17ID:???
>>823
出力結果の見方を間違ってるとかじゃ?
これってHTMLに出力してブラウザで見てるの?
0827nobodyさん2007/03/15(木) 13:24:21ID:???
>>819>>803
マジでお前にはプログラミングは向いてないから3秒以内に辞めたほうがいいと思う。
センスも無ければ、知識も無い。
自らメールなどの仕様を調べる努力もしない。
ダメだこりゃ。
0828nobodyさん2007/03/15(木) 13:25:31ID:???
粘着きもいです
0829nobodyさん2007/03/15(木) 13:59:33ID:???
情報小出しはご遠慮願います
0830虚弱PHP2007/03/15(木) 15:03:54ID:???
煽りはスルーでお願いします。

>>823
多分、単なる記述ミス。
記述ミスの可能性がないなら最小再現コードを貼り付けるべし。
>>823そのままでも再現するの?
0831nobodyさん2007/03/15(木) 16:54:10ID:???
class Cls {
  function ClassMethod() {
    print 'class:' . get_class($this);
  }
}
class Hoge {
  function __constuct() {
    ClsMtd::ClassMethod();
  }
}
$hoge = new Hoge();
の出力が
class: Hoge
となるんだけども、$thisのスコープはどうなってんのる。
0832nobodyさん2007/03/15(木) 16:56:50ID:zc90m/Wc
>>741です 今だに文字が?になります
UTF-8→EUC-JPに変更しても駄目でした
色々なサイトを参考にphp.iniを変えて
みたのですが文字が?なってしまいます

どなたかご教授を・・・
0833nobodyさん2007/03/15(木) 17:20:26ID:???
>>831
WinXP php5.2.1では何も表示されないぞ

問題あるなら環境かけよと
0834軟式PHP2007/03/15(木) 17:30:11ID:???
>>832
「 phpmyadmin skip-character-set-client-handshake 」
をキーワードにぐぐってもだめかい?
自鯖なら俺はnavicatとか使うタイプなのであんま詳しくわからんけど('A')
あと海外レン鯖でphpmyadmin使った時、マルチバイトが全部????になったけど
データベースや各テーブルなどの全ての照会順序をeucjpms_japanese_ciにして
データを入れなおしたら普通に表示されるようになったよ。
0835nobodyさん2007/03/15(木) 17:33:55ID:+HEWAk65
832です
急用が出来て携帯からです
Win XP 98SE でもダメ
0836nobodyさん2007/03/15(木) 17:34:56ID:???
>>832
データベースに入っている文字の時点で
化けているのか?
それとも表示だけば化けているのかによって
対応も変わる。

データベースに入れたデータも化けているのなら
phpmyadmin skip-character-set-client-handshake
で解決するはず。
一度データベースをきれいに消して作り直して
試してみれば?
0837nobodyさん2007/03/15(木) 17:35:54ID:???
>>832
その環境が特殊すぎて、もはやアドバイスすることが
ないぞ
0838nobodyさん2007/03/15(木) 17:41:04ID:???
>>831
__constuctとかClsMtdとかテキトーな事ばっか書いてんじゃねぇ。
あと本題はマニュアル嫁。
http://jp.php.net/manual/ja/language.oop5.basic.php
0839nobodyさん2007/03/15(木) 17:41:51ID:+HEWAk65
>>8341有難うございます
euc‐jpm…にはしたのですが…

スイマセン ハンドではググてませんでしたm(__)m
0840nobodyさん2007/03/15(木) 17:42:50ID:???
>>831
注意: 擬似変数 $this は、メソッドが静的にコールされた場合に
常に定義されるわけではありません。
しかし、はっきりしていることは: もしメソッドが別のオブジェクトから
静的にコールされている場合は $this が定義されるということです。
この場合、$this は呼び出し元のオブジェクトとなります。

0841nobodyさん2007/03/15(木) 17:45:49ID:+HEWAk65
>>836有難うございます
PHPMYADMIN内では?にはならず通常に表示されます

XP & 98SE
0842nobodyさん2007/03/15(木) 17:50:05ID:???
>>841
それって、DBにはちゃんと格納されているってことなのか?
なら、表示させようとしているページの方が問題じゃないのか

というか、phpmyadmin 内ではなく、sql を自分で発行して
テキストファイルに出力したりして確認したほうがいいぞ

0843nobodyさん2007/03/15(木) 18:01:34ID:???
クラスの中でコールバック関数を呼び出すことは無理ですか?

class aaa{
public static function rep($str) {
$s = preg_replace_callback("/([0-9a-z]+)/", self::callback(), $str);
return $s;
}

public static function callback() {
return "####";
}
}

echo aaa::rep("あいうabc123えお");

結果
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2,
'####', to be a valid callback
0844軟式PHP2007/03/15(木) 18:04:44ID:???
>>843
おしい。
$s = preg_replace_callback("/([0-9a-z]+)/", array("aaa","callback"), $str);
08458432007/03/15(木) 18:12:48ID:???
>>844
おお、できましたありがとう
関数名の指定がおかしいんだとばかり思っていじくりまわしてた
まさか配列で指定する方法があるとは
0846虚弱PHP2007/03/15(木) 18:27:54ID:???
>>845
callback という擬似的な型がある。
http://www.php.net/manual/ja/language.pseudo-types.php

あ、そうかPHPって基本的に型を意識しない言語だから、
普通の人はマニュアルに書いてある型も無視しちゃうのか。
0847nobodyさん2007/03/15(木) 20:24:22ID:/iEh48++
すいません質問です
削除機能がついたゲストブックを作っています

投稿する項目は name と comment があり、
$name|$commentとしてlog.txtの同じ行に書き込まれます。
次に投稿された内容は、前のコメント内容の次の行に書き込まれます。

admin.php という管理画面で、
log.txtから投稿された書き込み一覧を取得し、各行をforeachでループ処理させ、
その中から削除したい行を選択しつつ、del.php へ移動し、
選択された行を削除したいのですが、
del.php からの特定の行を削除する方法がわかりません
解決策を教えていただきたいです。
-----------
続きます
08488472007/03/15(木) 20:24:54ID:/iEh48++
admin.php

<?php
$filename = 'log.txt';
$line_list = file($filename);

foreach ($line_list as $line_number => $line) {
//各行をそれぞれ | で $name と $comment に分割
list($name, $comment) = explode("|", $line);
echo "名前: ".$name."<br>コメント: ".$comment."<br>";
//「削除する」が選択された行が第何行目なのかを把握し、del.phpに移動
echo "<a href=\"del.php?linenumber=$linenumber&mode=delete\">削除する</a><hr>";
}
?>
---------------------------------------------------
del.php

<?php
$filename = 'log.txt';
$line_list = file($filename);
$line_number = $_GET['line_number'];

//admin.phpで選択された行を削除したいのですが、ここからがわかりません どうかよろしくお願いします。
08498472007/03/15(木) 20:26:19ID:/iEh48++
すいません
インデントがありませんでした
見難くなってしまいました
すいません
0850虚弱PHP2007/03/15(木) 20:32:37ID:???
>>847
全部読み込んで、削除する行を消したら、全部書き込み。

DB使った方が楽だと思うよ。
SQLiteなら設定いらないしファイルベースだから面倒じゃないでしょ。
08518472007/03/15(木) 20:51:44ID:/iEh48++
>>850
アドバイスありがとうございます
全部読み込むというのはわかるのですが、
行の削除というやり方がわかりません
すいません
0852虚弱PHP2007/03/15(木) 21:25:20ID:???
>>851
1.行毎に読み込む
→削除する行は読み飛ばし
2.file()で配列に
→配列の指定行をunset
0853nobodyさん2007/03/15(木) 21:30:05ID:???
欠番作るなら良いけど、そうでない場合はライン指定だけで削除するのはキモイと思う
08548472007/03/15(木) 21:34:21ID:???
>>852
ありがとうございます
なんか光明が見えてきた気がします
精進します

>>853
キモイというのはどういうことですか?
スマートじゃないってことですか?
データの管理の仕方として危ういってことでしょうか?
0855虚弱PHP2007/03/15(木) 21:53:37ID:???
キモイかどうかはわからんけど、
確かに投稿したけど削除したのと、
投稿していないのは違った方がいい場合が多いよね。

結構定番なのは、「削除済み」フラグだけ立てといて、
実際の削除はいつかやるってのじゃないかな。
0856nobodyさん2007/03/15(木) 23:53:59ID:???
mixiのニュースってどっからとってるの?
社員が更新してるの?
0857nobodyさん2007/03/16(金) 00:23:25ID:Isw9h1zM
xss防ぐのにpreg_quoteつかったら駄目でしょうか?
08587902007/03/16(金) 00:36:59ID:???
>>793-795
>>797
sscanf()でできた
サンクス!
0859nobodyさん2007/03/16(金) 00:41:05ID:???
http://example/a/001/というところがあるとします。
001ディレクトリにはいろんなファイルが入っているとします。
このディレクトリのファイル一覧を取得したいと思いますがエラーで困ってます。

$dir = "./";
$file = scandir($dir);

↑このように相対パスで指定してやるとうまく動くのですが、

$dir = "http://example/a/001/";;
$file = scandir($dir);

↑のように絶対パスで指定してやるとワーニングでエラーが返されます。

scandirは相対パスでしか指定できないのでしょうか?
他にやり方がございましたらご教授お願いいたします。
08608592007/03/16(金) 00:41:36ID:h6PC42v/
IDだします。ごめんなさい。
0861nobodyさん2007/03/16(金) 00:43:05ID:???
>>859
""を''でもむり?
0862nobodyさん2007/03/16(金) 00:45:07ID:???
マヌアルに書いてある通り、普通だとURLは使えないんじゃないの?
0863nobodyさん2007/03/16(金) 00:56:04ID:h6PC42v/
レスをヒントにマニュアルをひいてみたらURLはPHP.iniの設定を変更しないと無理みたいですね。
相対パスであきらめます。
相談に乗って頂きましてありがとうございます。
0864nobodyさん2007/03/16(金) 02:42:03ID:???
>>859
その絶対パスってのは
/var/www/html/とかでは無いの?
0865nobodyさん2007/03/16(金) 03:31:28ID:/0oeqwmM
Vistaのローカルホストでfile,fike_get_contents系、ソケット系の関数にURLを指定すると、

Warning: file(http://localhost/...) [function.file]: failed to open stream:
接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
または接続済みのホストが応答しなかったため、確立された接続は失敗しました。

Fatal error: Maximum execution time of 60 seconds exceeded

ってなってしまうんだけど、Vistaじゃ出来ないでしょうかね?
環境は、ホームプレミアムでXAMPP 1.60aを使用(Apache/2.2.4,PHP/5.2.1)
php.iniの設定が変わってるわけでもないし、PukiWikiなんかは動くし、
サーバが原因なのかPHPが原因なのかだけでも分かると良いんですが
0866nobodyさん2007/03/16(金) 03:45:16ID:???
Vistaじゃ無理。PHPやるならMEが最適。
■ このスレッドは過去ログ倉庫に格納されています