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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
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


抜けているものがあったら補足願います
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
0824nobodyさん04/07/10 11:01ID:???
ありがとうございます
fgetcsvがfopen()、 popen()、fsockopen()以外では使えないことはわかったんですが、
結局のところどうすればいいんでしょうか
fopenでオープンして、ポインタを2行目に持っていって
fgetcsvを使えればいいと思うんですが、そういうことはできますかね
0825nobodyさん04/07/10 11:30ID:???
>>819
こんな感じかな。
<?php
function 絶対URL($現在のURL,$相対URL){
$p=array('@/\.(?=/|$)@', '@^(.+//.+)/(?!\.\./)[^/]+/\.\.(/.*|)$@e');
$r=array('','preg_replace($p,$r,str_replace(\'\\\\"\',\'"\',\'\\1\\2\'))');
return preg_replace($p,$r,substr($現在のURL,0,strrpos($現在のURL,'/')+1).$相対URL);
}
$a='http://aaa.co.jp/bbb/ccc/ddd/eee/fff';
$b='././../.././././a/../a.a/../a/b/../../../b/.';
print "$a\n$b\n";
print 絶対URL($a,$b);
?>
0826nobodyさん04/07/10 11:42ID:???
$hosts = array('hoge','moge');

array_map('deny_host',$hosts);

function deny_host($str){

$host=gethostbyaddr($_SERVER['REMOTE_ADDR']);

if( mb_ereg($str,$host) ){
echo "<html>\n<head>\n<title></title>\n</head>\n<body>\n</body>\n</html>";
exit;
}

}


このようなアクセス拒否(というか空白を表示する)スクリプト使ってるんですが
自分でもちょっとトリッキーかな、と思ったりするのですが普通はどうしてますか?
0827nobodyさん04/07/10 11:51ID:???
.swfファイルからFlashの画面サイズを取得することはできますか?
0828nobodyさん04/07/10 12:11ID:???
まぬあるより
> PHPのイメージ関数により JPEG、GIF、 PNG、SWF、 TIFF、JPEG2000イメージの 大きさを知ることができます。
0829nobodyさん04/07/10 12:34ID:???
>>827
ブラウザでswfファイルを開いてウィンドウの大きさを変えてごらん。どういうことか分かっただろ?
0830nobodyさん04/07/10 14:53ID:???
>>824
できる。
fopen() で開いてから fgetcsv() で1行目を読んで無視しして、再度読み込んだら2行目。

>>826
わざわざ array_map() を使う意味がわからない。
普通に以下のように処理したら駄目なのか?

$regex = 'hoge|moge';

$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);

if (eregi($regex, $host)) {
    exit;
}
0831nobodyさん04/07/10 16:39ID:???
>>830
そうですよね・・・
0832nobodyさん04/07/10 17:43ID:???
>>824
explode使わないのは理由があるのか?

1,"みかん,リンゴ","500円"
とか""で括られたデータも扱いたいなら
Stream_Var使え。

require_once('Stream/Var.php');
stream_wrapper_register("var", "Stream_Var");

$lines = file('fruits.dat');
$fp = fopen('var://GLOBALS/lines/2', 'r');
$fruit = fgetcsv($fp, 1024);
print_r($fruit);
fclose($fp);
0833nobodyさん04/07/10 18:38ID:???
PEARって結構使われているものなのですか?
どのサーバーでもたいがいインストールされてるのかなぁ
0834nobodyさん04/07/10 18:53ID:???
>>833
そんな質問投げてる時点で素人
まず PEAR のなんたるかを勉強しる!

http://phphp.net/pearwiki/?%5B%5BAN_INTERVIEW_OF_STIG_BAKKEN%5D%5D
http://pear.sakura.vg/index.php?%5B%5BPEAR%A5%DF%A1%BC%A5%C6%A5%A3%A5%F3%A5%B0%CD%D7%CC%F3%5D%5D
0835nobodyさん04/07/10 19:48ID:???
>>834
ふむふむ・・・そういうものだったのか
全部、自分で書いてて気づかなかった^^;
0836nobodyさん04/07/10 19:57ID:???
変数の中身が半角整数時のみTRUEしたいのですが、
is_numericを使うと数値しか判断されないんですよね?
半角英数字を判断する命令文はあるのですか?
0837nobodyさん04/07/10 20:10ID:???
>>836
とりあえずpreg_matchでも使っとけ
0838nobodyさん04/07/10 20:10ID:???
index.php?mode=abc
このように取得して処理する場合 $_GET['mode'] でよいのは分かるのですが

index.php?abc
として処理をさせたい場合、どのように記述すればよいのでしょうか?
0839nobodyさん04/07/10 20:26ID:???
PATH_INFOから取得汁
0840nobodyさん04/07/10 20:27ID:???
>>832
PEAR を使うのも悪くないけど、今回のような場合は使わなくても簡単にできるような気が・・・。
質問者はあまり考える気はなさそうなのでどうでもいいけど。

$line  = 2;
$fp = fopen('data.txt', 'r');
while (--$line) fgetcsv($fp, 1024);
$fruit = fgetcsv($fp, 1024);
fclose($fp);

print_r($fruit);
0841nobodyさん04/07/10 20:27ID:???
>>838
phpinfo()を眺めて探す
084283404/07/10 21:02ID:???
>>840
あー、、流れ読んでなくて 833 が独立した質問かと思ってた。
PEAR 使わなくても一緒なら使わなくていいやね。
0843nobodyさん04/07/10 22:13ID:???
$valが空白の時にはisset($val) || と$val || で判断しないといけないですよね
変数毎に2行書くのはなんか嫌だなと・・・・
php.iniのdisplay_errorsはoffにして気づかない事にするべきかなぁ
みなさんは変数毎に両方のチェックをしていますか?
0844nobodyさん04/07/10 22:54ID:???
>>839
なぜ$_SERVER['QUERY_STRING']じゃないのか
0845nobodyさん04/07/10 22:56ID:???
>843
!empty($val)は?
0846nobodyさん04/07/10 23:03ID:???
perlでいつも@ARGV使ってたから、
PHPでも$_SERVER["argv"]使ってる。
0847nobodyさん04/07/11 00:38ID:???
PHPのページで訪問した人のIPアドレスを調べたいのですが、どうやればできますか?
0848nobodyさん04/07/11 00:41ID:???
うm
084984704/07/11 00:48ID:???
すみません・・
$_SERVER['REMOTE_ADDR']でできますね・・。
0850nobodyさん04/07/11 03:22ID:???
ところでGDってGIF使えるようになったの?
0851nobodyさん04/07/11 03:44ID:???
>>850
ところでFAQを読まないの?
0852nobodyさん04/07/11 04:06ID:???
>>852
FAQには書いてないよ
0853nobodyさん04/07/11 04:08ID:???
>>852
http://www.boutell.com/gd/faq.html
0854nobodyさん04/07/11 05:16ID:???
ぶっちゃけ、もうGIFって使えなくても問題なくない?
0855nobodyさん04/07/11 05:39ID:???
php スクリプトの中からwebサーバにgetリクエストを出して、
ファイルに保存するのにはどうしたらいいですか?

`wget www.hoge.com/file`;

という行を、wget を使わず、phpの機能だけで実現したいのです。
0856名無しさん@そうだ選挙に行こう04/07/11 06:54ID:???
>>854
で何を使う?
0857名無しさん@そうだ選挙に行こう04/07/11 09:02ID:???
>>855
open
0858名無しさん@そうだ選挙に行こう04/07/11 12:33ID:???
$val = '<!--abc-->';
$val = ereg_replace("<!--([0-9a-z._-])-->","\\1",$val);

の「>」がマッチ出来ないのですが何故でしょうか?
0859名無しさん@そうだ選挙に行こう04/07/11 12:51ID:???
>>858
abcとしたいのなら、
$val = ereg_replace("<!--([0-9a-z._-]+)-->","\\1",$val);
0860名無しさん@そうだ選挙に行こう04/07/11 13:05ID:???
>>859
ありがとうございますm(_)m
0861名無しさん@そうだ選挙に行こう04/07/11 17:26ID:0oJHpIPm
PerlのInline系モジュールみたいに
PHP内でPerlのコードを記述することは可能でしょうか?
どうしてもPHP使いたくないもんで。
よろしくお願いします。
0862nobodyさん04/07/11 18:19ID:???
`perl -e ""`;
0863名無しさん@そうだ選挙に行こう04/07/11 18:19ID:fHFfT4lG
ブラウザからリクエストを受け取った後、

echo('今から処理します');

と返して、httpコネクションを切ってから
重たい処理をさせたいのですが、
どうやったらhttpコネクションを切れますか。
0864名無しさん@そうだ選挙に行こう04/07/11 18:21ID:???
httpはコネクションレスです
0865nobodyさん04/07/11 18:33ID:???
>>863
register_shutdown_function() を使ってみるとか。
ttp://www.php.net/manual/ja/function.register-shutdown-function.php
0866名無しさん@そうだ選挙に行こう04/07/11 19:01ID:???
>>855
copy('http://www.hoge.com/file', 'file');

こういう機能を使うときに
ああ、phpって幸せだな
と思う。
0867名無し募集中。。。04/07/11 21:56ID:/oo9N7Gm
コンパイル結果をメモリにキャッシュする無料ソフトって
どれが一番いいの?
0868カポコン04/07/11 22:50ID:???
【北海道】<?=鈴木?>@<?=ムネオ?>【不死鳥】
0869nobodyさん04/07/11 22:59ID:???
> コンパイル結果をメモリにキャッシュする無料ソフト

そんなもの存在しません。終了。
0870nobodyさん04/07/11 23:03ID:???
>>867はいったい何を言ってるんだ?
0871nobodyさん04/07/11 23:20ID:???
>>867
性能で言うならAPC, PHPA, MMCacheの中ではMMCacheが良いと思う。
対応しているアーキテクチャも多いし。
ただ現在は開発が停止中なので最新のPHPと組み合わせて使うにはちょっと不安がある。
まれにスクリプトを更新したとき期待通りに動かなくなって、
/tmp/mmcahe-*を削除したら直ったりするので。
開発再開を期待して待ちましょう。

>>869,870
知らないなら余計なことは言わない方が...
0872nobodyさん04/07/11 23:21ID:???
いや、意図はくみ取れるけどな、、
釣りか?
いっそ PHP 自体使うなと言いたい。
0873nobodyさん04/07/11 23:24ID:???
>>871
それ全部ライセンスで 「無料」 でなければならないとは定められていない。

メモリ上に直接キャッシングを行うのって、MMCache だけだと思ってたけど、
APCやPHPAもそうなの?
0874nobodyさん04/07/12 00:49ID:qiJhhqFo
これだろ?
http://www.stackasterisk.jp/tech/php/apc01_01.jsp
0875nobodyさん04/07/12 05:45ID:Q0IoRcBp
ヒアドキュメントで複数行表示したいのですが、うまくいきません。

<?php
print <<<EOF
古池や
蛙飛び込む
水の音
EOF;
?>


このソースで 古池や蛙飛び込む水の音  と一行につながって表示されてしまいます。
どの変が間違っているのでしょうか。php4.3.7です。
0876nobodyさん04/07/12 06:49ID:c+JkP+le
$aryCnt=file("./".$datname[$l],1);
print($aryCnt[1]);

の出力結果が
2 test2 title2 degree2 2004 7 10 23 40 mail2 home2 1 0 1 test2 uchi-mmkmldegej

なのですがこの文字列に対して
list($num[$j],$name[$j],$title[$i],$degree[$j],$year[$j],$month[$j],$day[$j],$hour[$j],$minute[$j],$mail[$j],$url[$j],$mem[$j],$lang[$j],$br[$j],$text[$j],$host[$j],$browser[$j])

=explode("\r",$aryCnt[1]);

以上の処理でここの変数に値を格納したいと考えているのですが何故かうまくいきません。

ファイルへの書き込み形式は
fputs($fl,$Cntary,$Cntarylen);
fputs($fl,"\r",2);
fputs($fl,$name,$namelen);
fputs($fl,"\r",2);
fputs($fl,$title,$titlelen);
fputs($fl,"\r",2);
fputs($fl,$degree,$degreelen);
fputs($fl,"\r",2);
・・・・・


出力結果は以下のとおりです。
print(count($title));        →1
print_r(array_values($title));  →Array ( [0] => )

どこに問題があるかご教示ください。よろしくお願いします。

0877nobodyさん04/07/12 08:17ID:???
>>875
ブラウザ出力のソースを表示させると、改行されてませんか?
textとして改行していても htmlとして解釈した場合には改行されません。
0878nobodyさん04/07/12 10:20ID:ntR1QL+F
<input type='text' name='hoge' value='foo1'>
<input type='text' name='hoge' value='foo2'>

 一つのフォームで同じnameの値をPOSTでCGIに渡すと、受け取った値には
'foo1 foo2'と入ります。
 これを<textarea>内に表示させてると'foo1 foo2'が表示されますが、
コピー&ペーストをすると'foo1'だけしかペーストされません。
 foo1とfoo2の間に区切り文字が入っているのでしょうか?
 これを一つの値としたいのですが妙案がありましたらご教授ください。
087987804/07/12 10:31ID:???
すみません。
散々調べた後に質問したのですが、検索を続けていたら解決方法を見つけました。
区切りに\0が入って値が渡されることを見つけました。
お騒がせしました。
0880nobodyさん04/07/12 14:57ID:???
>>876
fputsで、長さを指定するのをやめろ。
0881nobodyさん04/07/12 15:13ID:???
>>877
875です。その通りでした。ありがとうございました。
0882nobodyさん04/07/12 18:57ID:sEDp1Uf0
copy関数を使ってファイルをアップロードしたいのですが
日本語名のファイルが化けてしまいます。
日本語を使う方法ってなにかありませんでしょうか?
0883nobodyさん04/07/12 19:03ID:???
copy関数を使ってファイルのアップロードってどうやってやるんですか?
0884nobodyさん04/07/12 19:22ID:???
http://www.xored.com/download.phpからダウンロードできないよー!
xws-core-0.3.4.zipがほしいのですがどこに落ちてますか?
ぐぐっても落ちてません。
0885nobodyさん04/07/12 19:33ID:c+JkP+le
>880
fput長さ指定なしにしましたが何も変わりませんでした・・・・
0886Imo ◆.jC7ANgFY. 04/07/13 00:14ID:???
>>885
$title[$i],
$jの間違いでしょ?
0887nobodyさん04/07/13 02:37ID:AiceQq3q
プログラミング初心者です。
formから入力したマルチバイト文字のデータをphpにとおすとき、
shift_jisの場合は、0x5cの関係で文字化けが発生してしまいますよね。
そのため、euc-jpでformに入力する必要があると思うのですが、
最終的には shift-jis でデータを送りたいのです。
この場合、一体どのような方法を取ればいいのでしょうか?
euc-jpでform入力後、jcode.php 等でeuc-jpからshift-jisに
変換するというのが一般的な方法なのでしょうか?
他に方法はありますでしょうか?

よろしくお願いしますm(__)m
0888nobodyさん04/07/13 03:03ID:???
>>887
http://jp.php.net/manual/ja/ref.mbstring.php
0889nobodyさん04/07/13 04:38ID:???
>>887
・mb_convert_encoding関数による方法
・jcode.phpを使う方法
・mb_output_handler関数による方法
・mbstring.http_outputの設定で行う方法

それぞれの利点/欠点を比較して採用を考えましょう。
0890nobodyさん04/07/13 08:57ID:???
> プログラミング初心者です。
こういう余計な前置きは嫌われるからヤメロ
0891nobodyさん04/07/13 10:58ID:???
>>890
自治?
0892nobodyさん04/07/13 11:39ID:???
>>890
ゴトータン、乙。
0893nobodyさん04/07/13 11:43ID:???
ひろゆきじゃないのか?
0894nobodyさん04/07/13 14:02ID:???
>894
ラム爺タソ、乙。
0895nobodyさん04/07/13 14:34ID:???
自作自演?
0896nobodyさん04/07/13 14:34ID:???
>>884
0.3.4 なら eclips のプラグインマネージャから直でインストール出来た気がする (うろ覚え
そっちからなら取れるかも知れないし、まぁ試してみては。
0897 ◆Vmtd5Gm/qU 04/07/13 16:25ID:???
>>887
文字化けっていうのが表示が表\示となるようなものなのなら
stripslashesを通せばよろし。
変換については>889にあるとおりどぞ。
0898nobodyさん04/07/13 21:25ID:???
アップロードされた画像をサムネイル化してDBに格納するスクリプトを
作ろうとしているところなのですが、
画像をDBに格納する際に、いったんファイルとして
保存しなければならない点が何となくいやなので
できればそのまま直接DBに格納したいと思っているのですが、
方法がよくわかりません。
どなたか教えてくだされ。
0899nobodyさん04/07/13 21:44ID:???
>>898
そのDBとやらに聞いてみたまへ
0900nobodyさん04/07/14 01:08ID:???
>>898
普通にバイナリで突っ込んでくださいッ!
残念ッ!
0901nobodyさん04/07/14 05:11ID:???
つか逆にDBに直でぶち込む方がなんか嫌じゃね?
0902nobodyさん04/07/14 09:50ID:???
画像なんてDBで管理する意味あるの?
画像ディレクトリ作ってファイル名だけDBへ格納すりゃいいじゃん
0903nobodyさん04/07/14 10:20ID:???
xoopsモジュールとして配布するため、
画像ディレクトリを作ろうとすると
ユーザーに対してパーミッションの変更など
よけいな操作を強いることになります。
したがって、画像をDBで管理したいと考えています。
0904nobodyさん04/07/14 10:31ID:???
DBにぶちこむならPostgreSQLのラージオブジェクトとか
そのへん使わないといけないなぁ。
ラージオブジェクト使うと色々と面倒なことが起きる場合があるから
>>902のように普通に保存するようにすればいいと思うよ。
0905nobodyさん04/07/14 10:53ID:???
ob_start()
ob_get_contents()
ob_clear()
でできました。
0906nobodyさん04/07/14 14:33ID:???
報告するレベルのことかよ
0907nobodyさん04/07/14 14:33ID:???
画像をDBに登録したかったらbase64エンコードしてからDBに流し込みなさい
0908nobodyさん04/07/14 15:09ID:k/PvMH0M
touch("./log".$datcountr.".dat",mktime());
chmod("./log".$datcountr.".dat",0777);
fopen("./log".$datcountr.".dat","a+");
//fputs("./log".$datcountr.".dat","\r\n");


上記のファイル作成から書き込みの流れでfputs部をコメントアウトするとエラーは出ませんが
コメント外すとエラーが出ます

ファイル作成まではできているのでパスの指定が間違っているわけではなさそうなのですが
よろしくお願いいたします。
レス数が900を超えています。1000を超えると表示できなくなるよ。