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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/06/14 14:36ID:???
・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


抜けているものがあったら補足願います
0331nobodyさん04/06/24 22:45ID:???
>>330
Apacheの設定次第
よくあるのは.phpsとか
0332nobodyさん04/06/24 22:46ID:???
>>330
IEのtext/plainをHTMLとして表示するステキ仕様ってオチは無しの方向でよろ。
0333nobodyさん04/06/24 23:03ID:???
せっかくshow_sourceてな関数があるのでそっちを使えば便利なのに。
parse errorが出た時に重宝してる。
0334nobodyさん04/06/24 23:05ID:WjPQG3mJ
>>333

ほーほー

どうもありがとう。調べてみます。
0335nobodyさん04/06/24 23:42ID:???
>>328
http://www.php.net/manual/ja/language.operators.errorcontrol.php
これだ。
0336nobodyさん04/06/25 00:13ID:QzuvB6xt
教えてください。
a.phpというスクリプトに
<?
readfile("http://hoge.com/hoge.php?a=1&b=2");
?>
と記述してスクリプトを動かすとError 0がでるのに
<?
header("Location: http://hoge.com/hoge.php?a=1&b=2");
?>
と書くとうまく動きます。どうしてでしょうか。
0337nobodyさん04/06/25 01:06ID:???
>>336
「@readfile()という名前でコールされない限り、 エラーメッセージが表示されます」
だそうです。
0338nobodyさん04/06/25 11:22ID:ydrfhQOC
初歩的な質問なんですが
ファイルに書き込むときはfwriteとfputsのどちらがいいのでしょうか。
教えてください。よろしくお願いします
0339nobodyさん04/06/25 11:28ID:???
>>338
http://www.php.net/fputs

意味わかるか。
0340nobodyさん04/06/25 11:28ID:???
>>338
マニュアル嫁
0341nobodyさん04/06/25 13:58ID:???
ちょっと便乗質問

echoとprintの決定的な違いってなんでしょうか

マニュアル読んだけどわかりませんでした
0342nobodyさん04/06/25 14:13ID:???
echo $a,$b
print $a,$b (だめ)
0343nobodyさん04/06/25 15:16ID:???
でも
print "$a$b"; はできるよ?
0344nobodyさん04/06/25 15:29ID:???
その話っていつも「男は黙ってecho」で終わっちゃうんだよね
0345nobodyさん04/06/25 15:44ID:???
>>343
それだと引数としては1個。print $a.$bと等価。

0346nobodyさん04/06/25 17:39ID:???
PHP4.2.2です
phpinfo() の出力結果を横取りしてファイルにでも落としたいんだけど
どうしたらいいかな
0347nobodyさん04/06/25 17:47ID:???
ttp://jp.php.net/manual/ja/ref.outcontrol.php
0348nobodyさん04/06/25 18:00ID:???
>>346
php -i > hoge.txt
0349nobodyさん04/06/25 18:02ID:???
echo "hoge" > /dev/null
0350nobodyさん04/06/25 18:10ID:???
>>346
http://jp.php.net/phpinfo
マニュアルを隅々と嫁。特に下の方
035134604/06/25 18:24ID:???
>>350
できた!
<? ob_start(); phpinfo(); fwrite( fopen("unko.html",'w'), ob_get_contents() ); ?>
0352nobodyさん04/06/25 18:28ID:76ADPduI
Perlでの正規表現ってPHPでも使えますか?
$sub =~ s/^Re://g;
$sub =~ s/\[\d+\]\s?//g;
$com =~ s/<br>/\r> /ig;

PHPで使えないんであればどう書き直せばいいのか教えてくださいm(_ _)m
0353nobodyさん04/06/25 18:30ID:???
$sub =~ s/^Re://g;
$sub =~ s/\[\d+\]\s?//g;
$com =~ s/<br>/\r&gt; /ig;
こうでした……
0354nobodyさん04/06/25 18:36ID:???
preg_matchとか
gはallだなぁ
0355nobodyさん04/06/25 18:48ID:???
>>353
こんなかんじでね?
gはデフォで、マッチさせる数を制限したいときだけpreg_replaceの第四引数で指定する。
$sub =preg_replace( '/^Re:/', '', $sub);
$sub = preg_replace('/\[\d+\]\s?/', '', $sub);
$com = preg_replace('/<br>/i', '\r&gt; ', $com);

つーかマニュアル嫁。
ttp://jp.php.net/manual/ja/ref.pcre.php
ttp://jp.php.net/manual/ja/function.preg-replace.php
035635204/06/25 19:08ID:???
355さんありがとうございます

マニュアル調べたりしたんですけど、Perlがよくわからなくてできませんでした_| ̄|○
0357nobodyさん04/06/25 19:18ID:???
はじめまして。
phpでhead.txtを取得してスレッド一覧を表示するプログラムを作っています。

head.txtの内容はご存知かと思いますが、「9999999999.dat<>スレタイ(数)」という感じになっています。
「9999999999.dat」と「スレタイ(数)」はsplitで分割できたのですが、そこから「スレタイ」と「数」を取得するにはどうすればいいのでしょうか?

今は、
「(」で分解して、配列の最後を取得し、「)」より前を取得して・・・→数
「(」より前を最後を除いて連結・・・→スレタイ
とやっているのですが、これだと処理に時間がかかりそうな気がしてしまいます。

正規表現などで簡単にやる方法はないのでしょうか?
どなたか教えてくださいm(__)m
035835704/06/25 19:19ID:???
sageてしまったorz
0359 ◆.jC7ANgFY. 04/06/25 19:35ID:???
>>357
preg_match('`^(\d+)\.dat<>(.*)\((\d+)\)$`', $line, $match);
こんな感じでは?
[1] スレッドID、[2] スレッドタイトル、[3] レス数
0360nobodyさん04/06/25 19:46ID:???
>>357
俺もそういうの作ったが、なぜsubject.txtを読みに行かない?
それで1行毎に<>でsplitして表示すればいいじゃん
0361nobodyさん04/06/25 19:46ID:???
>>357
ケツから最初の"("をサーチ。そこから")"まで、もしくはケツの1つ前の範囲がスレ数。
スレ名称は頭から、ケツから最初の"("の手前の範囲。そのままだと多分
スレ名称とスレ数の間にセパレータのスペースが入ってると思うけど。

しかし、subject.txtは鯖ごとに微妙に作りが違うというというワナ。
0362nobodyさん04/06/25 19:50ID:???
>>357
というか、それsubject.txtだろ
head.txtはそんなことかいてない
0363nobodyさん04/06/25 19:53ID:???
勘違いだと俺も思って、解釈した。
http://pc5.2ch.net/php/head.txt
http://pc5.2ch.net/php/subject.txt
0364nobodyさん04/06/25 20:14ID:???
>359
できました。
ありがとうございます!

>360、>362
subject.txtの間違いでした。
すいませんm(__)m
0365nobodyさん04/06/25 22:40ID:???
phpとjavascriptの連携をさせたいのですが、可能でしょうか。
具体的にはjavascriptにて取得した画像サイズなどの情報をphpへ
渡したいのです。
<img>タグを使う方法以外で何かありますか?
0366nobodyさん04/06/25 22:49ID:???
>>365
可能。javascriptでPOSTするデータを
作ってformで送ってやればよい。

><img>タグを使う方法以外で何かありますか?
?
0367nobodyさん04/06/25 22:57ID:???
どうもー。
POSTするってことは、
ページの遷移があるってことですか?
0368nobodyさん04/06/25 23:11ID:???
>>367
そうですよ。html+Javascriptのhttpdとの通信手段は
自ずとそんな感じ。別フレーム切ってユーザが見ている
コンテンツのページは遷移してないように見せるのは
最近PHP-usersにも話題が出てましたね。
ActionScriptとかjavaアプレット、ActiveXなんか
使うと別ですけど。(それも話題に上がってたかな)
036923904/06/26 01:26ID:???
>>288
遅くなりましたがサンクスです
0370カポコン04/06/26 02:39ID:???
どうもです
0371nobodyさん04/06/26 06:20ID:???
>>368
あー、やっぱりそうなっちゃいますか。
配布したいので、やっぱり
imgタグからphpを呼び出してgetで渡した方が
良さそうですね。
ありがとうござい真下。
0372nobodyさん04/06/26 11:58ID:???
みなさま、すみません。捜し物です。

メルマガの広告などによく使われる、
http://www.xxxx.com/xxx.php?id=xxxx
のような、リダイレクトするphpで、なおかつ http://www.xxxx.com/
のrefererを相手のServerにきちんと受け渡すタイプのを探しています。
リダイレクト先のListは別ファイルで用意する形です。
0373nobodyさん04/06/26 12:45ID:???
>>372
そんなの自分で書け。
0374nobodyさん04/06/26 14:04ID:???
こんにちは
おたずねしたいことかあります。
Cpanelってありますよね??

これをPHPなどでプログラムを作り、自動登録システムって可能ですか??
0375nobodyさん04/06/26 14:13ID:???
>>374
可能だからガンガって作れ
0376nobodyさん04/06/26 14:18ID:???
>>375
全然やり方わかんないすよ。。
どうすればいいかも。。。汗
0377nobodyさん04/06/26 15:14ID:???
URLから画像のサイズを取得したいのですが
可能でしょうか?
ttp://www.hoge.com/image.gif
のようなURLから画像のサイズを取得するということです。
お願いします。
0378nobodyさん04/06/26 15:26ID:???
>>377
可能だからガンガって作れ
0379nobodyさん04/06/26 16:09ID:???
>>377
画像"ファイル"のサイズならHTTPヘッダで取れるけど、
画像のサイズはURLからは無理。URLのファイル(画像)を
取得して、PHPの画像系の関数で画像のサイズを取得する。
0380nobodyさん04/06/26 16:12ID:???
pearの SmartIRCで $irc->setUseSockets(true);すると
WARNING: couldn't load the socket extension
って怒られるんだわ
けど PHP Ver 4.3.4で Sockets Support: enabled は確認済み
対処法plz
0381nobodyさん04/06/26 17:27ID:???
>>374 です。
簡単な方法ないですか。。
0382nobodyさん04/06/26 17:49ID:???
>>381
ないね。
0383nobodyさん04/06/26 18:38ID:???
>>381
HDEを買う。
0384nobodyさん04/06/26 18:38ID:???
>>380
IRCSmart.phpを見てみると、extension_loaded('sockets') に失敗して
なおかつ dl('socket')にも失敗した時にそのメッセージが出るから、
get_loaded_extensions でほんとにロードされてるか確認して、、、
ん、dl("ファイル名")じゃなかったっけ?
0385nobodyさん04/06/26 19:06ID:???
>>384
フォーロthx.
結論は Socket.phpが apache->PHPからの呼び出しではロードされ,
コンソールから $php hogeでは呼び出されないといったものでした.
つまらないミスを調べさせてしまって正直すまんかった.ありがとう >384
0386nobodyさん04/06/26 19:34ID:plBi49aM
while(mysql_fetch_array())でSQLデータを取り込んでるんですが
後ろレコードからデータを読む場合はどうすればよいのでしょうか?
0387nobodyさん04/06/26 19:49ID:???
>>386
キモイやり方がお好みならmysql_data_seek()を使えばいいけど、
真っ当なやり方ならSQLの段階でorder byを設定すりゃいい。
つーかSQLの勉強をやり直した方がi..うわなにすんだやめr
0388nobodyさん04/06/26 21:51ID:jyZGtADG
jcode.phpみたいなやつでUnicodeからGB2312 か big5への
変換コードってありませんか?
0389nobodyさん04/06/27 16:28ID:???
>>388
知らない。ただjcode(LEではない方)弄って
GB2312とbig5の変換表を入れてやれば作れると思う。
あれ、中身は変換式/テーブルそのものだから。
CJKを参考にすればOK
0390nobodyさん04/06/27 21:31ID:???
PHPにて、抽選プログラム作るのって可能ですか??
確率も指定出来て、一日に一名のみ当選するようにしたいのですが、
可能でしょうか
0391nobodyさん04/06/27 21:57ID:???
>390
可能です。

> 確率を指定

$rate = 0.5

> 一日に一名のみ当選

lottery.dat みたいなファイルを作る。
日付のデータが入ってる。

1. lottery.dat を読む
2. 現在の日付を調べる
3. もし lottery.dat に入っていた日付と、現在の日付が違っていたら
 3-1. 抽選を行う(srand(), rand())
 3-2. 現在の日付を lottery.dat に書く
 もし日付が同じだったら、抽選を行わない
0392nobodyさん04/06/27 22:02ID:???
質問です。
C の構造体のデータをバイナリとして持ってきて、
その構造体にアクセスしたいのです。

読み出しは unpack() を使うとできるのですが、
書きこみは pack() 関数を使うと、「一部のデータだけ書き換え」することができません。

一部のデータだけ書き換えする上手い方法はないでしょうか。
(何万件ものデータにアクセスするため、できるだけ速いアクセスがいいのですが)
なにかご存知の方、ご教授ください。
039339204/06/27 22:34ID:???
自己解決…。
substr_replace() を使うことにしました。
データの該当部分を pack() した後、
substr_replace() で該当部分を書き換える、という具合です。
0394nobodyさん04/06/27 23:17ID:zkNM2hBA
MySQLにはいったTEXTデータを読み込むと
改行が反映されないのですが、
どうすれば改行されるようになるでしょうか?
0395nobodyさん04/06/27 23:30ID:Ba+8mIiM
ファイルに「能」や「表」などのダメ文字を書き込ませると、
「能\」や「表\」のように、語尾に\記号がついてしまいます。

これを回避する方法はないでしょうか?
ご存知の方教えてください、宜しくお願いしますm(__)m
0396nobodyさん04/06/27 23:37ID:???
超頻出質問のために>>400がテンプレを作ります。
0397nobodyさん04/06/27 23:44ID:???
>>394(馬鹿)nl2br
>>395(低能)stripslashes
0398394(馬鹿)04/06/28 00:05ID:???
分かったよ、確かに俺は馬鹿だ。
テキストファイルを表示するときに、
HTMLとして表示されているため、改行が行われないんだ。
当たり前だな。で、どうすれば改行されるんだ?
preタグ使うと横スクロールするようになるんでこれではちと困るのだが。
0399nobodyさん04/06/28 00:06ID:bkEAVbgz
PHPでメルマガ配信プログラムを書いていますが、
mail関数で、DBに登録されているメールアドレスに
送信済みのフラグをたてながら一件づつ送信するプログラムなのですが
ループが早すぎてサーバーが処理しきれないのは問題があります。
ループの間隔をおくのも確実とは言えません。
過負荷にならない程度にメールを配信するには
どういった方法が挙げられるでしょうか?ご教授ください。
0400nobodyさん04/06/28 00:09ID:???
毎度レベルの変わらない釣りにテンプレを作る意味はなし。
反応してる奴と2人でさしつさされつ完結していて欲しい。
0401nobodyさん04/06/28 00:15ID:???
>>398
せっかく答え書いたのに... ・゚・(つД`)・゚・
0402394(馬鹿)04/06/28 00:32ID:???
>>401
ああ、ゴメンよ。
これ関数だったんだ、気づかなかった。

ありがとう。
0403nobodyさん04/06/28 08:52ID:???
質問なのですが、PHPからLinuxのシェルコマンドを動かす場合どのようにすればいいのでしょうか?
よろしくお願いします。
0404nobodyさん04/06/28 09:28ID:WEBa9e2h
>>403
exec();
system();
passthru();
shell_exec();
``;
0405nobodyさん04/06/28 12:30ID:???
いやいやWindows上のPHPからLinuxのシェルコマンドを動かしたいのかも知れんぞ

('A`)
0406nobodyさん04/06/28 12:39ID:???
test
0407nobodyさん04/06/28 12:50ID:WEBa9e2h
IDがWEBだった。ヽ(´ー`)ノ
0408404.HDML ◆StMXML.EXE 04/06/28 13:08ID:???
>>407
そのIDをWeb製作板で出してくれてたなら、、嗚呼。

ヌッ(・∀・∀・)ホッヘー
0409nobodyさん04/06/28 13:39ID:???
Smarty を久々にバージョンアップした所、動作が変わって対処に悩んでまつ。

定義されていないテンプレート変数、例えば {$hoge} に assign が無ければ、
以前はスキップしてくれたのですが、バージョンアップ後は
>FATAL .. Undefined index hoge
とエラーを吐いています。
いちいち {if isset($hoge)} と囲うのも鬱陶しく、どう対処すべきかな〜、と。

# Smarty の設定かと思いマニュアル見直しましたが適当な設定は見あたらず。
# $smarty->undefined = NULL とかも試しましたが変化無しでした。
0410nobodyさん04/06/28 14:53ID:???
Perl互換の正規表現/置換(preg_replace)についての質問です。
%に挟まれた文字列(%test%)から%を取り除き、
それをキーとする要素を連想配列から取り出して出力したいのですが、何も表示されません。
もしよろしかったら、教えていただけると幸いです。

<?php
 $template = "%test%";

//%に挟まれた文字列にマッチ
 $pattern = "/(\%)(.+)(\%)/";

//置換用配列
 $replacement = array("test" => "キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!!");

//このままだと、%を取り除いた文字列を表示
//"$2"の部分を$replacement['$2']や$replacement[$2]、$replacement['\\2']などとしてみましたが、ダメでした。
 echo(preg_replace($pattern, "$2", $template));

?>

#一応全角スペースでインデントしました。よろしくお願いします。
041141004/06/28 14:58ID:???
あ、環境を書くのを忘れていました。。。

OS: Windows XP SP2 RC2
Server: Apache 2.0.49
PHP: 5.0 RC3

モジュールとして動かしております。
0412nobodyさん04/06/28 15:00ID:???
$replacement["test"]ならいけると思うんだがそれじゃあかんの?
0413nobodyさん04/06/28 15:02ID:???
あ、ごめん。俺何言ってんだ。
ソース斜め見しただけでレスしてました。
0414nobodyさん04/06/28 15:06ID:???
>>412
そうなんですが、htmlファイルでテンプレートを作って、%で囲まれた文字列を置換して出力したいんですよ…。
キーもtestだけではないので、
str_replace("%test%", $replacement["test"], $template);
などとしてもやはり複数行になってしまいますよね。

できることなら一行にまとめたいのですが…。
041540904/06/28 15:06ID:???
>>410
マニュアルよく読むべし。

<?php
$template = '%test%';

$patterns[] = '/(\%)(.+)(\%)/';
$replacements[] = 'キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!!';

echo(preg_replace($patterns, $replacements, $template));

?>

テンプレートを探してるなら自作するよりどこかから持ってきた方がいいよ。
regex 型のテンプレートならそれなりに普及しているのが幾つかあるし。

http://smarty.php.net/
http://pear.php.net/packages.php?catpid=10&catname=HTML
0416nobodyさん04/06/28 15:06ID:???
>>410
パーサーの存在を忘れとる
041740904/06/28 15:07ID:???
人いないんじゃなくて Smarty 使ってる人がこのスレにいないのか _| ̄|◯

流れたら pear スレの方に逝ってきまつ、、
0418nobodyさん04/06/28 15:09ID:???
使ってる俺がアドバイスするが、逝くならsmartyスレだろ。
0419nobodyさん04/06/28 15:10ID:???
>>418
あら、、専用スレあったの知りませんでした。
取り敢えず過去ログ見に逝ってきまつ。
ありが�d
042041004/06/28 15:19ID:???
>>415-416
なるほど…。
まだまだ理解できていないようでした。

Parserから勉強しなおすことにします。
ありがとうございました。
0421nobodyさん04/06/28 15:22ID:???
%をグループ化して参照可能にする意味は多分ないだろう。
042241504/06/28 15:23ID:???
パーサーって何でつか。。(´・ω・`)
0423nobodyさん04/06/28 15:25ID:???
エスケープする意味もなさげ
042441004/06/28 15:28ID:???
>>421-423
Σ(´д`ノ)ノ
ちょっとeval()とか見ながらひぃひぃ言ってました…。

小学校から勉強しなおしてきます。。。
0425nobodyさん04/06/28 15:54ID:???
<?=変数名?>で記述しているファイルをincludeしたまへ。
0426nobodyさん04/06/28 16:08ID:???
>>422
paserの日本語表記。多分耳で聞くとパーザ[ー]
0427nobodyさん04/06/28 16:14ID:???
   〃∩ ∧_∧
   ⊂⌒( ´・ω・)くpaserは何語表記なんだろう...
     `ヽ_っ⌒/⌒c
042842204/06/28 16:17ID:???
>>426
そうでつか。添乗してくれるおねーさんの事じゃないんでつね (´・ω・`) 残念でつ。
0429nobodyさん04/06/28 16:39ID:???
>>428
そっちはaじゃなくてuだね
0430nobodyさん04/06/28 17:32ID:???
今日本屋で見たWebDesigningという雑誌のPHPのコーナーでアンケート集計スクリプトが紹介されており、
誰かが投票するたびにYYYYMMDD-HHIISS.txtという形式でファイルを生成して書き込むという仕組みでした。
この場合1秒間に複数の投票があったら対応できないので明らかにまずいんじゃないかと(排他処理でなんとか
なるかもしれませんが)と思います。
素直に1ファイルに追加書き込みしていった方が後で集計するのも楽だと思いますが。
■ このスレッドは過去ログ倉庫に格納されています