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


抜けているものがあったら補足願います
072472004/07/07 23:29ID:???
>>723
逆。
php.iniでoutput_handlerを指定していない場合は
ob_start('mb_output_handler')としないと、出力時にコード変換は行われない。

実際、mb_output_handlerを使った変換はしたこと無いので、
大外ししているかもしれんが。
0725nobodyさん04/07/07 23:39ID:???
> ソース内の指示よりphp.iniの方が優先順位が高いのでしょうか。

マニュアルになんて書いてあるか知ってて言ってるんだろうな。
出力をバッファリングしたものをコンバートしてるって知ってて言ってるんだろうな。
0726nobodyさん04/07/08 00:22ID:YCLF39oi
phpで掲示板を作成しているのですがform method post で取得した文字列をlog.txtというファイルに書き込むところまではうまくいったのですが
過去の書き込みが消えてまったく新しいtextが出来上がってしまいlogとして使い物になりません。
ファイルにもともと書いてあった文章は残して追記するにはどうしたらよいのでしょうか?
またそれぞれの要素をファイルから変数に読み込ませるのはどうするのが最も効率がよいか教えてください。


$name = $_POST['name'];
$title = $_POST['title'];

$fl=fopen("./log/log.txt","w+");

fwrite($fl,$name,$namelen);
fwrite($fl,",",1);
fwrite($fl,$title,$titlelen);
fwrite($fl,",",1);

0727nobodyさん04/07/08 00:28ID:???
   〃∩ ∧_∧
   ⊂⌒( ´・ω・)くぜんぶマニュアルのfopenに書いてあったでつ
     `ヽ_っ⌒/⌒c
072872104/07/08 00:40ID:VIhri8TS
うーん、見てみたけどよくわからない・・・。
ラジオボタンのvalueに各々、<? echo $_SESSION["商品名"]++; ?>を入れてみて実行してみたところ、
両方同時に増えていってしまうし・・・。うわーん・・・。
0729nobodyさん04/07/08 01:11ID:???
日記は他所で書け。
0730nobodyさん04/07/08 03:02ID:YCLF39oi
いくつかの掲示板のログファイル(dat)を見てみたのですがキホン的には各要素をカンマで区切っているだけですよね。
phpでそれぞれ区切られた要素を取り出すにはどのようにしたらよいのでしょうか?
たとえば書き込み本文に半角カンマなどが使われていた場合はそこで間違えて区切ってしまったりするのではないのでしょうか?

たとえば本文で 私は,〜〜です。と言う書き込みがあった場合「私は」と「〜〜です」の二要素に分かれてしまうのではないかと心配しています。

$const=readfile("./log/log.txt"); 
このようにファイル全体を呼び出したあと具体的にはどのような関数を使ってわければよいのか、ぜひともアドバイスをお願いいたします。
0731nobodyさん04/07/08 03:32ID:???
釣れますか?
0732nobodyさん04/07/08 03:45ID:???
もうね、phpBB 使えと、もしくは osCommers か OpenBazaar 使えと。
もしくはしっかりコード見て盗めyo!

>>721 なんて仕事でやってるんだろう、、それで自分の書いたコードに責任持てるのかと。
0733nobodyさん04/07/08 03:52ID:???
>>730
http://jp.php.net/manual/ja/function.fgetcsv.php
0734nobodyさん04/07/08 06:27ID:YCLF39oi
$fp = fopen("./log/log.txt", 'r');
// 終端に達するまでループ
while (!feof($fp)) {
// ファイルから一行読み込む
$line = fgets($fp);
// 読み込んだ行を出力する
print $line;
// <br>の出力
print "<br>\n";
}

この作業を逆に行うにはどうしたらよいのでしょうか?(log.txtの一番下の行から順番に出力させたい)
0735nobodyさん04/07/08 09:00ID:???
>>730
CSVファイルの構成も知らないの?
PHP以前の話だよボケ
0736nobodyさん04/07/08 09:02ID:???
>>734
fileで読んでリバースかけてforeachとか
マニュアル読まずに書き込むなよボケ
0737nobodyさん04/07/08 09:03ID:???
 
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 こ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  チ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ    
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
073869204/07/08 09:03ID:BnTCTIrC
>>694
ありがとうございます。というかここもうちょいちゃんとSEOやってくれ…
[php マガジン]でも[php (ウェブ)雑誌]でもひっかからんからどうしようかと思いました。
0739nobodyさん04/07/08 10:06ID:???
マニュアルむず
0740nobodyさん04/07/08 10:11ID:???
$_REQUEST['url']に存在するページはEUC-JPなのですが、
$codeにはUTF-8が返って来てしまします。この結果に
従いmb_convert_encodingすると拾得ページが文字化け
してしまうのですが、どうしたら良いのでしょうか^^;。

if ($file = @fopen($_REQUEST['url'],'r')){
if ($file) while(!feof($file)) $page .= fgets($file,4096);
fclose($file);
}
$code = mb_detect_encoding($page);
$page = mb_convert_encoding($page,'EUC-JP',$code);
074174004/07/08 10:15ID:???
$_REQUEST['url'] = 'http://www.yahoo.co.jp/'を放り込むと
$codeが空白に・・あれ・・・
0742nobodyさん04/07/08 10:39ID:???
$code = @file_get_contents('http://www.yahoo.co.jp');
print $code;

EUCで読み込めてますけどね
0743nobodyさん04/07/08 10:45ID:???
include("http://www.yahoo.co.jp");
完璧。
0744nobodyさん04/07/08 10:59ID:???
>>740
mb_detect_order() でエンコード検出リストを確認してみたら?

php.ini で
mbstring.language = Japanese
にして Apache を再起動するとか、スクリプトの最初に
mb_language('Japanese');
を入れてみるとうまくいくかもしれない。

詳しくはマニュアルで。
0745nobodyさん04/07/08 11:05ID:???
$obj = new HTTP_Client;
$code = $obj->get('http://www.yahoo.co.jp');
最強。
0746nobodyさん04/07/08 11:38ID:???
> というかここもうちょいちゃんとSEOやってくれ…
> というかここもうちょいちゃんとSEOやってくれ…
> というかここもうちょいちゃんとSEOやってくれ…


是非 >>738 の会社からアシアルに売り込みにいって、顛末記でも書いてくれ。
0747nobodyさん04/07/08 11:39ID:???
マニュアルしょぼ
074874004/07/08 11:47ID:???
>>742,743,744,745
以下の方法にする事にしましたm(_)m
先にUTF-8で認識されてしまったのが問題みたいでした。
これから、あちこちのページでもテストしてみたいと想います。
貴方のページにもきっと・・・^^w。

$page = @file_get_contents($_REQUEST['url']);
mb_detect_order('eucjp-win,sjis-win,UTF-8');
$code = mb_detect_encoding($page);
0749nobodyさん04/07/08 11:48ID:???
マニュアル使えてる奴はネ申!
0750nobodyさん04/07/08 11:54ID:???
あんな親切なマニュアル無いと思うけどね
0751nobodyさん04/07/08 12:10ID:???
いい本教えてくれ
0752nobodyさん04/07/08 12:11ID:???
赤マンモスでも読め
pdfで無料配布してるから

「赤マンモス pdf」でぐぐれ
0753nobodyさん04/07/08 13:00ID:???
マニュアルみたいな本を
0754nobodyさん04/07/08 13:19ID:???
PHP関連の書籍(但しPHP出版系お断り)
http://pc5.2ch.net/test/read.cgi/php/985315574/l50
0755nobodyさん04/07/08 13:20ID:???
PHP のマニュアルの目次の関数リファレンス。
アルファベット順なのがちょっといや。

Math、 BCMath と GMP 関数 なんかは「数学関数」っていう分類
を作って、そこに列挙してほしい。

DB 関連の関数なんかも別に括っておいてほしい。と思たりする。

0756nobodyさん04/07/08 13:23ID:???
PHPのマニュアルはほんと便利だよな
欲を言えばfunction searchのほかに
googleではないサイト内検索がほしいが
$_SERVERとか検索するときに困る
0757nobodyさん04/07/08 13:41ID:Bp5irib3
PHPのなかに
<?xml version="1.0"?>
この記述を入れるとエラーが出てしまいます。
どのように回避したら良いでしょうか?
0758nobodyさん04/07/08 13:42ID:???
<?php ?>
0759nobodyさん04/07/08 13:56ID:???
>>756
win なら chm、
うにっくすならどうにでもなる

ってのでどうよ
0760nobodyさん04/07/08 14:00ID:axDKGDjf
PHPの命令でhttpサーバーの403エラーや404エラー等を起こす方法を教えてください。
0761nobodyさん04/07/08 14:06ID:???
>>760
まずはどうやったら出来そうか自分の見解を書けよ
0762nobodyさん04/07/08 14:59ID:???
header("Location: >>760 is fool");
0763nobodyさん04/07/08 15:00ID:???
>757
php.ini か .htaccess あたりに ”short_open_tag = Off” を設定する。

詳しくは、
ttp://jp.php.net/basic-syntax
0764nobodyさん04/07/08 15:02ID:???
PHPってサーバーに自分で追加した環境変数の取得できるの?
0765760(・∀・)04/07/08 15:05ID:???
>762さんのを実行するとNot Foundが出るようになりました。ありがとうございます。
0766nobodyさん04/07/08 15:05ID:???
>>757
普通に出力。
<?php echo '<?xml version="1.0"?>' ?>
0767nobodyさん04/07/08 15:56ID:???
>764
phpinfo() を眺めればわかるかも。
076876404/07/08 16:02ID:???
うーん、phpのグローバル変数じゃ、
最初から設定されている変数しか取得できないのかなぁ。
0769nobodyさん04/07/08 16:30ID:???
>768
「最初から」の意味がよくわからないんだけど。CLI だと以下のようになる。

$ OTL=9 php -i | grep OTL
OTL => 9
_SERVER["OTL"] => 9
_ENV["OTL"] => 9
0770nobodyさん04/07/08 16:55ID:???
前から思ってたんだが
>幸せになれるかと思います。
この表現キモイ
0771nobodyさん04/07/08 16:55ID:???
>>770
幸せになりやがれ
077276404/07/08 16:57ID:???
ごめんなさい、質問があいまいでした。
Linux上で
# export TEST=1234
として
php上でTESTと言う名前を指定して、
1234という数字が取得できるかが知りたかったんだ。
0773nobodyさん04/07/08 17:15ID:???
>772
とれる。$_SERVER か $_ENV に格納されているはず。

$ export TEST=1234
$ php -r 'echo $_ENV["TEST"];'
1234
0774nobodyさん04/07/08 17:18ID:???
>>770
過去ログ見たけど、
> 幸せになれるかと
なんて発言見あたらないyo!
077577004/07/08 17:24ID:???
誤爆スマソ

MLスレに書くつもりだった
0776nobodyさん04/07/08 17:29ID:???
>>775
不幸せになるかと思います。
0777nobodyさん04/07/08 17:31ID:???
>>773
$_ENVかgetenv()でとれるのは確かだけどモジュール版の場合は
httpdを起動させたユーザーの環境変数が引き継がれるので
サーバー起動と同時にhttpdを立ち上げる設定の場合は無理ぽ。
0778nobodyさん04/07/08 17:37ID:???
>777
なるほど、httpd の起動スクリプトに環境変数を書いておけばいいのかな。

で、764 さんは環境変数を読み込んで何をしたいのか気になります。
077976404/07/08 17:50ID:???
みなさん、ご助言いただきありがとうございました。
サーバー起動時にモジュールApacheを立ち上げてていたので、
それが問題になっていたようです。

>>778
バッチ処理で発生した日時データの必要部分を環境変数に保存し、
それをPHP側で利用しようとしていました。
0780nobodyさん04/07/08 18:01ID:???
>779
環境変数じゃなくてファイルに書きこむのではだめですか?
0781nobodyさん04/07/08 22:29ID:YCLF39oi
$_POST['text'];  が

test
test
test
test


以上のような改行を含んだ文字列の場合最終的には
test<br>test<br>test<br>test<br> このような形へと変更したいのですが

$text = $_POST['text'];
$text = nl2br($text);
$text =rtrim($text);

以上の処理では

test<br />
test<br />
test<br />
test<br /> 

このように改行コードが取り除かれていないような形になってしまっています。
どのようにすればよいのでしょうか?
0782nobodyさん04/07/08 22:44ID:???
>>781
SJISと改行コードでぐぐれ
後は考えろ
0783nobodyさん04/07/08 22:52ID:YCLF39oi
str_replaceで解決でした どうもです
0784カポコン04/07/09 01:28ID:???
前スレをHTML化しました。
質問の回答などに使ってみてください。
いずれ、リスト化させます。

ttp://cgi.f13.aaacafe.ne.jp/~mugen/2ch/
0785nobodyさん04/07/09 01:53ID:???
>>784
ブラクラ
0786nobodyさん04/07/09 13:27ID:???
>>784
これ開いた時からずっとFDDがガリガリ音鳴らしてる。何なのこれ?
0787nobodyさん04/07/09 13:54ID:???
>>786
ブラクラ
0788nobodyさん04/07/09 14:06ID:rjBtiSrj
Web上の任意のページからHTMLファイルを読み込んで
その中の<a>タグのHREF属性にあるURLを取得したいのですが
HREF属性は相対URLで書かれている可能性もあるため、上手く処理できず困っています。

HTML中の相対URLを絶対URLに変換するにはどうすればよいのでしょうか?
0789nobodyさん04/07/09 14:13ID:???
>>788
2chで質問して教えてもらう
0790nobodyさん04/07/09 14:37ID:rjBtiSrj
>>788 すみません、どの板で質問するのが適切なのでしょうか?
PHP関連はこの板かと思ったのですが・・・
0791nobodyさん04/07/09 14:39ID:???
(・∀・)ニヤニヤ
0792nobodyさん04/07/09 14:44ID:???
parse_url() でプロトコルとホストとパスを取得して
httpやftpで始まっていなかったらそれらとくっつける。
始まっていたらそのまま利用する。
./ や / で始まっていたらその部分を削除して、
../ で始まっていたら先ほど取得したパスを ../ が連続する分遡るようにパースしてくっつける。

こんな感じか。
0793nobodyさん04/07/09 15:31ID:???
( ´,_ゝ`)プッ
0794nobodyさん04/07/09 15:43ID:???
正規表現で一発さ!
そんなことより最近、電動ナナシさそを見かけないけどどこいったんだろう。
0795nobodyさん04/07/09 16:18ID:???
下手な自演だなぁ
0796nobodyさん04/07/09 16:45ID:???
PHPを最近お勉強してるのですが?ってなんですか?
$year = (!isset($year)) ? date("Y") : $year;
上の?の意味がわかりません。
どなたかご教授よろしくお願いします
0797nobodyさん04/07/09 16:48ID:???
>>796
PHPに限らず他の言語でも利用出来るものもあるんだが、
if( !isset( $year ) ){
$year = date("Y");
}else{
$year = $year;
}
と同義な。
0798nobodyさん04/07/09 17:01ID:9qX+1d8A
すいません、phpdevを使ってWindows2000php4.23を入れたのはいいんですが
php.iniを編集して
;extension=php_mbstring.dll
を有効にすると

プロシージャ エントリ ポイント spprintf がダイナミックライブラリ php4ts.dll から見つかりませんでした。
Unable to load dynamic library '*****php/extension/php_mbstring.dll'-指定されたプロシージャが見つかりません。

と。上記の2つのメッセージが2回づつ出て、php_mbstringも有効になりません。
extension_dir =の指定は間違っていなくて、php_mbstring.dllも確実にあるのですが・・・
検索しても分からずお手上げ状態
0799nobodyさん04/07/09 17:26ID:???
>>797
ありがとう!!
0800nobodyさん04/07/09 17:55ID:/g6zLd9Z
800ついでにこれもあまり言語に依存しない質問です

ある数値が奇数か偶数かを調べるのに一番最適な方法って何でしょうか?
現在は数値を2で割って余りがあるかどうかで判別してます
0801nobodyさん04/07/09 18:04ID:???
同じと思うが
print ( $n % 2 ) ? "奇数": "偶数";
0802nobodyさん04/07/09 18:05ID:???
その質問で何が最適かというのは、結構言語に依存する話だと思うんだがどうだ?
0803nobodyさん04/07/09 18:06ID:???
そうですね。ではphpでお願いします
080479704/07/09 18:14ID:???
print ( $n & 1 ) ? "奇数": "偶数";
0805nobodyさん04/07/09 18:18ID:???
$a = 12345678901234567;
print $a&1?'奇数':'偶数';
print $a%2?'奇数':'偶数';

うちの環境じゃ両方とも偶数と吐きやがる
080680004/07/09 18:20ID:???
>>804
なるほど、ビット演算子を使うんですね
今までややこしいから使わなかったんですけど、それでやってみます
ありがとうございます
080779704/07/09 18:27ID:???
>>805
オーバーフロー対策もしろと。・゚・(ノ∀`)・゚・。
0808nobodyさん04/07/09 18:42ID:???
$a = '12345678901234567';
print preg_match("/[13579]$/",$a)?'奇数':'偶数';

奇数だ。文句あっか?
0809nobodyさん04/07/09 19:07ID:???
>>808
一本!!
0810yoshi04/07/09 22:15ID:UYWtgnDg
w2k上でiisを動かしwebを立ち上げていますが、
web上にエクセル文書(.xls)を置きhtmlの中で
リンクを張りダウンロードできるようにしています。
とくにパスワードなどは何も設定していないのですが、
このファイルをIEからダウンロードしようとすると
IDとパスワードの入力をうながすダイアログが
表示されるという現象が起こっています。
これは何故なのでしょうか?
希望する動作としては何もダイアログなど表示されずに、
ダウンロードできることなのですが。
よろしくお願いします。
0811カポコン04/07/09 22:58ID:???
$a = '12345678901234567';
print preg_match("/[^02468]$/",$a)?'奇数だ。文句あっか?':'偶数だ。文句あっか?';
0812nobodyさん04/07/10 00:30ID:???
$a="(´∀`)";
は偶数らしいです。
0813nobodyさん04/07/10 00:48ID:???
>>811
カポコンファンは黙っていない。バグってるぞ!!!

<?php
$a = 1e99;
print preg_match("/[^02468]$/",$a)?'奇数だ。文句あっか?':'偶数だ。文句あっか?';
?>
0814nobodyさん04/07/10 01:26ID:???
>>62
0815nobodyさん04/07/10 01:42ID:89QqCOpO
>>792さん、ありがとうございます。
そのやり方で現在のURLの最後が/でない場合、それがディレクトリなのか
ファイルなのかを判別する方法はあるのでしょうか?
例:
現在のURL=http://aaa.co.jp/bbb/ccc
抽出したURL= ../test.html

この場合、cccがファイル名である可能性はないのでしょうか?
そうなると絶対パスが以下のどちらになるのか判定できず困っています。
cccがファイルの場合 http://aaa.co.jp/bbb/test.html
cccがディレクトリの場合 http://aaa.co.jp/test.html


>>793 正規表現で一発で相対パスを置き換える方法があるんですか!
できれば教えていただきたいです。
0816nobodyさん04/07/10 02:12ID:???
>>810
なぜここで聞く?
自宅鯖板へ行け
0817nobodyさん04/07/10 03:27ID:???
>>815
実際にアクセスするまで分からない。
ディレクトリならサーバのレスポンスコードが教えてくれる。
HTTP/1.0 301 Moved Permanently
Location: /を付加したパス
0818nobodyさん04/07/10 08:09ID:???
>>815
>>817のいうとおり。ちょっとかみくだいて書くと、

cccがディレクトリの場合は、http://aaa.co.jp/bbb/ccc にアクセスすると
http://aaa.co.jp/bbb/ccc/ にリダイレクトするようレスポンスが帰ってくる。
それに従って読み先を変えて読めばいい。
現在のURL=http://aaa.co.jp/bbb/ccc/
抽出したURL= ../test.html
→答え=http://aaa.co.jp/bbb/test.html
になる。

cccがファイルの場合はアクセスすると普通に読めて、
現在のURL=http://aaa.co.jp/bbb/ccc
抽出したURL= ../test.html
→答え=http://aaa.co.jp/test.html
になる。

だから、相対パスから絶対パスへの変換はどちらも同じやり方でできる。
0819nobodyさん04/07/10 08:11ID:???
>>818
../../a/../a/../../b

とかに対応できますか?
0820nobodyさん04/07/10 09:31ID:9IEmUTDP
ディレクトリにある画像ファイル一覧を表示したいのですが
このときあるサイズ以上の大きさには表示させないようにできますでしょうか?
<IMG>タグのwidthやheightで指定すると小さい画像もそのサイズに拡大されてしまうので・・
082182004/07/10 09:46ID:9IEmUTDP
えっと自己レスです。
getimagesizeでいけますね、すみません。
0822nobodyさん04/07/10 10:43ID:???
たとえば、

1,りんご,200円
2,みかん,100円
3,ぶどう,500円
(data.txt)

というファイルがあったとして

「2,みかん,100円」

を表示させるとしたら、

$lines = file("data.txt");
print $lines[1];

というように出来ると思うのですが、
「みかん」だけを表示させるとしたらどうすればいいか分かりますか?

$lines = file("1.txt");
$ary = fgetcsv($lines[2],1000,",");
print $ary[1]

まず行を読み込んで、カンマ区切りで読み込むというのを考えたのですが、
これはfgetcsvの機能的に無理みたいでした。
0823nobodyさん04/07/10 10:48ID:???
>>822
とりあえず、マニュアルでも読めば?
ttp://www.php.net/manual/ja/function.fgetcsv.php
■ このスレッドは過去ログ倉庫に格納されています