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


抜けているものがあったら補足願います
062462004/07/05 23:58ID:???
>>622-623
難しそうだったので表示と書き込みをPHPごとにわけますた・・・
あり><
062562004/07/06 00:16ID:???
これから出来たプログラムはここへ載せていくのでよろ><
ttp://cgi.f44.aaacafe.ne.jp/~phpworld/
0626nobodyさん04/07/06 00:25ID:???
それみろ馬鹿タレ供
0627nobodyさん04/07/06 01:20ID:???
>>623
HTTP仕様ぐらい準拠しようよ。
0628nobodyさん04/07/06 01:34ID:???
>>625
もっとがんがれ
0629nobodyさん04/07/06 02:02ID:???
>>625
phpworld/というアカウントにワラタ
随分と大きく出たものだw
0630nobodyさん04/07/06 03:48ID:???
winXPでApache2+phpモジュールな環境を作ろうと思ってます
すでにApache2はインストール済みなのでPHP4.3.7のWinバイナリをインストーラーの方でe:\phpにインストール
http://www.php.net/manual/ja/install.apache2.php に従って
php4ts.dllをwindows/system32に移動
LoadModule php4_module e:/php/sapi/php4apache2.dll
AddType application/x-httpd-php .php
をhttpd.confに追加しましたがApacheを起動しようとすると
Apache.exe: module "c:\php4build\snap\sapi\apache2filter\sapi_apache2.c" is not compatible with this
version of Apache (found 20020628, need 20020903).
Please contact the vendor for the correct version.
というエラーが出てしまいます。
そもそも c:\php4build\snap\sapi\apache2filter\sapi_apache2.c なんでパスは存在しないのです
LoadModuleの部分をコメントアウトするとApacheは起動します
原因に心当たりのあるかたいらっしゃいますか?
php4.3.7 Apache2.0.43です
0631nobodyさん04/07/06 04:28ID:???
>>630
>Apache2.0.43
が古くて、最近のSAPIの仕様とは違ってるんじゃないの?
Apche2.0.50+PHP4.3.7でやってみな。
0632nobodyさん04/07/06 07:53ID:???
for文を用いてIDチェックしたいんだが
for文から抜け出すことは可能だろうか・・・
0633nobodyさん04/07/06 08:02ID:???
>>632
>>613 RTFM
0634nobodyさん04/07/06 09:30ID:???
男ならPHP5だろ。
0635nobodyさん04/07/06 10:28ID:???
txtファイルなどに変数を書き込んで、phpで読み込む事は出来ますか?
includeだとphpファイルの変数しか読み込めないので、txtファイルの中の変数を読み込みたいのです。
よろしくお願いします。
0636nobodyさん04/07/06 10:39ID:???
>>635
txtファイルは
<?php
$baka = "試せ";
?>
これをincludeしてみ
0637nobodyさん04/07/06 10:46ID:???
>635
ttp://www.php.net/manual/ja/function.parse-ini-file.php

とか、どーですか。
063863004/07/06 10:56ID:???
>>631
インストーラバージョンをインストールしてたのが原因でした・・・。
英語ちゃんと読んでませんでした
レスどうもです
0639nobodyさん04/07/06 11:01ID:???
うーん
普通に<?phpとか書いてない txtファイルを読み込んで
その中に入ってる$hoge とか言う変数を読み込みたいのです
064063804/07/06 11:05ID:???
すみません。解決しました
0641nobodyさん04/07/06 11:08ID:???
>>639
その程度の問題を自分で解決できないならプログラム組むのやめた方が良いね
とりあえずマニュアルのファイルシステム関数ページを読めよ

ttp://www.php.net/manual/ja/ref.filesystem.php
0642nobodyさん04/07/06 11:46ID:???
ありがとう641 637 636
解決しました(^^
0643nobodyさん04/07/06 12:04ID:Rny+MH6z
▼index.php
<html>
<body>
<?php
print ("<a href = 'get.php?a=5'> Get</a>");
?>
</body>
</html>

▼get.php
<html>
<body>
<?= print($_GET['a']) ?>
</body>
</html>


上記のコードで、index.phpからget.phpへ移動すると、
ブラウザには「51」と表示されてしまいます。「5」と表示したかった
のですが、原因がわかりません。おわかりの方がいましたらご教授
お願いします。
0644nobodyさん04/07/06 12:11ID:???
>>643
<?php print($_GET['a']) ?> ではないの?
0645nobodyさん04/07/06 12:14ID:NBQAU1O/
<
0646nobodyさん04/07/06 12:15ID:NBQAU1O/
<
0647nobodyさん04/07/06 12:15ID:5MCxUUr8
<?= print($_GET['a']) ?>

<?php print($_GET['a']) ?>
では?
0648nobodyさん04/07/06 12:16ID:???
>643
質問の要旨とは関係ないけど、二重引用符と単一引用符を
入れ替えた方が良い。

どこに問題があるか見極めるには、静的な HTML を書いて、
get.php を呼びだしてみたりするとか。

とりあえず、index.php で生成される HTML を良く眺めることを勧める。
064964304/07/06 12:28ID:mpLQA1tZ
できましたm(__)m
みなさん、レスどうもです。
<?php print($_GET['a']) ?>が正しいようでした。

>>648
二重引用符と単一引用符を入れ替えてみました。
ソースを見るとこちらのほうがよさそうですね(実はあまり意味がわかって
いませんが・・)

それにしても1時間くらい悩んでいたので助かりました。
ありがとうございました。
0650nobodyさん04/07/06 13:12ID:???
なるほど、printはTUREを返すのか。
0651nobodyさん04/07/06 13:13ID:???
TRUE... orz
0652alvi04/07/06 13:14ID:A6zHoUWt
ど忘れしてしまったので教えて下さい。

includeされるファイル
function.php


実行する(function.phpをincludeさせる)ファイル
main.php
があるのですが、

万が一main.phpではなくfunction.phpにアクセスされた時にはfunction.phpがエラーを舶用に
htaccessは使わずにファイル名で判定できた筈だったのですが変数を忘れてしまいました。

function.phpをmain.phpに読み込んで$_SERVER["SCRIPT_NAME"]
とするとmain.phpになってしまいますが、これをfunction.phpと表示させる変数は何であるのか
教えて下さい。よろしくおねがいします。
0653nobodyさん04/07/06 13:28ID:???
<?=?>は出力だ。
<?="あいうえお"?>と<?php print "あいうえお"?>
は同じ結果が得られるわけだな。
0654nobodyさん04/07/06 13:31ID:???
>>652
何を訊きたいのかよく分からないんだけど
0655nobodyさん04/07/06 13:53ID:???
>>652
phpinfo
0656nobodyさん04/07/06 14:01ID:???
>>652
__FILE__
0657nobodyさん04/07/06 14:04ID:???
>>653
<?=[var]?>は<?php echo[var]?>のエイリアス。
<?="あいうえお","かきくけこ"?>はできても
<?php print "あいうえお","かきくけこ"?>はできない
0658alvi04/07/06 14:28ID:A6zHoUWt
簡単に言うと、
includeするファイルがあり、そのincludeされるファイルをincludeするファイルのなかで使用する為に
includeされるファイルへ何を書くとそのincludeされるファイルのファイル名を取得できるのでしょうか?

>>656
今、外出する直前で確認出来ないのですが、__FILE__ですか?
phpinfoでは分かりませんでした。(include等は使っていない為)
0659nobodyさん04/07/06 14:55ID:???
> <?php print($_GET['a']) ?>が正しいようでした。

こんな答え方をしている時点で、何も理解していない、理解する気もないって感じだな。
0660nobodyさん04/07/06 15:24ID:???
>>658
ごめんどういう意味かぜんぜん分からない。includeするほうをA、されるほうをBとして説明してくれないかな?
0661nobodyさん04/07/06 15:31ID:???
include($file)でincludeされた$fileのファイル名が知りたいと言っている
のだと想うのだが、そんな関数ありましたっけ?
0662nobodyさん04/07/06 15:42ID:???
ふざけた質問申し訳ないんだが
HTMLタグの<TD>〜</TD>の中にPHP構文を入れるとエラー出るのか?
0663nobodyさん04/07/06 15:43ID:???
>>658
ぜんぜん簡単に書かれてないぞw

includeされた場合はmain.php、直接動かした場合はfunction.phpで切り分けできるでしょ?
何か問題でも
0664nobodyさん04/07/06 15:45ID:???
>>662
ふざけた質問なら、誰も答えない
066566204/07/06 15:45ID:???
<?phpが<? phpになってた_| ̄|○
0666nobodyさん04/07/06 16:11ID:???
おい、質問なんだが
計算結果が4になるんだがこれを4.00と表示したい
こんな時どうするか教えやがれぬるぽ
0667nobodyさん04/07/06 16:21ID:???
>666
$値 = 4;
$桁 = 2;
echo number_format($値, $桁);
066866604/07/06 16:26ID:???
>>667
激しく感謝!
0669nobodyさん04/07/06 16:30ID:???
マニュアル嫁よ。。。
0670nobodyさん04/07/06 16:35ID:???
夢は長く見させてあげようよ。。。
0671nobodyさん04/07/06 17:18ID:???
マニュアルなんて読むかボケェ
お前らがマニュアル引き係じゃぁ


と思っている輩が質問してる訳です
0672nobodyさん04/07/06 17:22ID:???
まぁ、確かにそんな風な質問が多いなぁ。
0673nobodyさん04/07/06 17:22ID:???
>>671
あたりまえじゃん
0674nobodyさん04/07/06 17:51ID:???
>>671-673
目腐ってんじゃねーの。
どこにそんな高等な質問があるんだよ。
0675nobodyさん04/07/06 18:24ID:???
<?php
ob_start();
?>
<html>
<head>
<title>ログイン</title>
</head>
<body>
<h1 style="font-size:14pt;text-align:center;">
ログインtest
</h1>
<hr />
<form method="GET" action="index.php">
<table border="0" align="center">
<tr>
<th align="right">ユーザ名:</th>
<td>
<select name="id">
<?php
$db=mysql_connect("COMPUTER","root","root");
$rs=mysql_db_query("test_db","SELECT * FROM scheusr");
while($aryCol=mysql_fetch_array($rs,MYSQL_ASSOC)){
print("<option value='".$aryCol['id']."' ");
if(isset($id)){if($id==$aryCol['id']){print("selected");}}
print(">".$aryCol['nam']."</option>");
}
?>
</select>
</td>
</tr>
067667504/07/06 18:24ID:???
<th align="right">パスワード:</th>
<td>
<input type="password" name="passwd" size="10" />
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="sbm" value="ログイン" />
<input type="reset" value="取消" />
</td>
</tr>
</table>
</form>
<?php
if(isset($_GET['sbm'])){
print("if通過した");
$sql="SELECT * FROM scheusr WHERE id='".$id."' AND passwd='".
crypt($passwd,"ZZ")."'";
$rs=mysql_db_query("test_db",$sql);
if(mysql_num_rows($rs)==0){
print("<script language='JavaScript'>");
print("window.alert('パスワードが間違っています');");
print("</script>");
print("$rs");
}else{
$aryCol=mysql_fetch_array($rs,MYSQL_ASSOC);
header("Location: hello.php?id=".$id."&nam=".urlencode($aryCol['nam']));
}
}
print("</body></html>");
ob_end_flush();
?>
067767504/07/06 18:24ID:???
scheuserがテーブルで
id主キー
passwd
namです

テーブルに登録されているパスワードが入力されたときに
他のページに飛ぶようにしたいのですが、
パスワードが一致するようにならないみたいなんです。
どのように変えたらいいでしょうか?
よろしくお願いします。
0678nobodyさん04/07/06 18:28ID:???
そんなお前にもerror_reporting(E_ALL)とvar_dump()
0679nobodyさん04/07/06 18:32ID:???
PIのキモさ爆発
0680nobodyさん04/07/06 19:08ID:???
丸投げっすか
0681nobodyさん04/07/06 21:22ID:???
変数の中身が文字列か数列かを判断する場合はどうすればよいでつか?
0682nobodyさん04/07/06 21:36ID:???
>>681
http://jp.php.net/manual/ja/ref.variables.php
0683nobodyさん04/07/06 21:39ID:???
${file_name} = "test.csv";
header("Content-disposition: attachment; filename=${file_name}");
header("Content-type: application/octet-stream; name=${file_name}");

でcsvをダウンロードさせているのですが、なぜかNetscape(7.1)だけ
「test.csv.php」を開く になります。(中身は正常なcsv)
IE、Mozilla、Operaでは問題ないのですが、どなたか解決された方おられますか?
0684nobodyさん04/07/06 21:40ID:???
↑$file_name = "test.csv";
の間違いです。
0685alvi04/07/06 21:59ID:A6zHoUWt
本当に説明が下手ですみません。

前提
・A = main.php
・B = function.php
・Bには直接アクセスされたくない。だからといってhtaccessは使わないとする
・AはBをincludeする

いや、口で言うのは分かりづらいのでソース書いて実行した物をを付けます。

<?php
#A = main.php
include'function.php';
print_r($ABC);
?>

<?php
#B = function.php
$ABC[] = __FILE__;
$ABC[] = $_SERVER["SCRIPT_FILENAME"];
?>

そして、A = main.phpの出力結果は
Array
(
[0] => /home/****/public_html/function.php
[1] => /vhome/****/public_html/main.php
)

お騒がせしました。>>656さんの仰った方法で解決です。。
if ( __FILE__ == $_SERVER["SCRIPT_FILENAME"]) die('Forbidden!');
というコードが欲しかったのです。ありがとうございました。
0686nobodyさん04/07/06 22:53ID:???
>>685
確かど忘れだったんだよな >>652,658
0687nobodyさん04/07/06 23:36ID:???
あの偉大なるカポコン神が、
WepProg界に新たな政策を呼びかけています。
アンチ民主党。取り愛ず、藻前ら嫁。

ttp://mykit.jp/pc/kapokon/index.php3
0688nobodyさん04/07/07 02:38ID:+x8AlGbL
phpで 改行\n を含む変数の指定行(例えば10行目)に 別の変数を挿入したいのですが
どうしたらいいでしょうか?


0689nobodyさん04/07/07 03:32ID:???
>>687
自作自演?うざい。
0690nobodyさん04/07/07 08:17ID:???
output_bufferingがデフォルトで有効になっているサーバーって
結構あるものでしょうか?
また、ob_start();〜ob_end_flush();を使用した時の処理速度は変数
に放り込んでechoした時の処理速度と比較してどちらが早いの
でしょうか?
0691nobodyさん04/07/07 09:48ID:???
>>680
よけいなタグを取ることもできないとこを見ると、完全に丸投げですな
0692nobodyさん04/07/07 11:10ID:HKrq5OGL
すんません、php専門のウェブ雑誌ってありましたよね?
URLをどなたが教えて頂けないでしょうか?
0693nobodyさん04/07/07 11:22ID:???
>>688
if($i=="10"){$hensu = $kochinohensu; }
もし10行目になったらコッチの変数にするよ。
0694nobodyさん04/07/07 11:24ID:???
何冊かあるんだが。

PHP プログラマーズマガジンのことかね。
ついでにどうせ買うなら、2ch 系 PHP コミュのアフィリエイト通してやってくれ。
http://pear.sakura.vg/
0695nobodyさん04/07/07 11:26ID:???
なんか自演宣伝ぽい
0696nobodyさん04/07/07 11:57ID:???
>690
$ time php -r 'ob_start();for($i=0;$i<1000000;$i++){echo "hoehoe";}ob_end_flush();' > /dev/null

real 0m7.346s
user 0m7.200s
sys 0m0.150s

$ time php -r 'for($i=0;$i<1000000;$i++){echo "hoehoe";}' > /dev/null

real 0m13.534s
user 0m12.800s
sys 0m0.730s

逐次書き出すより、ob_* を使用して「イッキ出し」した方が処理は早くなるようですよ。
0697nobodyさん04/07/07 11:59ID:???
>675
crypt($passwd,"ZZ");

の結果と、対象のテーブルの値を見比べてください。
069869404/07/07 12:02ID:???
>>695
言われるかなとは思った。
まぁ俺は俺で別のアフィリエイト ID もってるし、そもそも PHP|architect はあまり好きじゃないんで。。
最近はそうでもないかも知れないが、前までは業務用の堅実な記事が大半で面白みが無かった感じ。
0699nobodyさん04/07/07 12:50ID:???
>>696
こうやってテストするのですね。勉強になりますm(_)m。
私の環境ではphp -rというオプションが存在しないみたいなのですが、
これは環境によるのでしょうか?。

$ time php -r 'ob_start();for($i=0;$i<1000000;$i++){echo "hoehoe";}ob_end_flush();' > ./null
Error in argument 1, char 2: option not found r

real 0m0.186s
user 0m0.121s
sys 0m0.015s

$ time php -r 'for($i=0;$i<1000000;$i++){echo "hoehoe";}' > ./null
Error in argument 1, char 2: option not found r

real 0m0.471s
user 0m0.105s
sys 0m0.015s

$ time php -r 'for($i=0;$i<1000000;$i++){$k .= "hoehoe";}echo $k' > ./null
Error in argument 1, char 2: option not found r

real 0m0.171s
user 0m0.112s
sys 0m0.015s
0700nobodyさん04/07/07 12:50ID:???
>>694
1000円位するのか。高いような・・・
0701nobodyさん04/07/07 13:58ID:???
>699
CLI 版の PHP には acndefhilm"r"svwz というオプションを使用できる。CGI 版はわからない。
速さを求めるなら、出力制御するか、変数に格納して一発出力なのかな。
で、

ob_* を使うとメモリ使用量が違うらしい。

$ php -r 'ob_start();for($i=0;$i<1000;$i++){echo "orz";}echo memory_get_usage();ob_end_flush();'
orzorz...53736

$ php -r 'ob_start();$s="";for($i=0;$i<1000;$i++){$s.="orz";}echo $s, memory_get_usage();ob_e
nd_flush();'
orzorz...57136

$ php -r '$s="";for($i=0;$i<1000;$i++){$s.="orz";}echo $s, memory_get_usage();'
orz...16040

ちなみに、
$ php -r 'ob_start();echo memory_get_usage();ob_end_flush();'
52896
0702nobodyさん04/07/07 15:06ID:???
<?
$exp[1] = 2;

for ( $i = 2 ; $i > 100 ; $i++ ){
$X = $exp[$i-1];
$Y = $i;
$Z = 3*(floor($i/10)+1);
$exp[$i] = $Z * $Y + $X;
print $exp[$i];
}
?>

HTMLに表示されないです。
分かる方いませんか?
070370204/07/07 15:10ID:???
スマン、解決・・・
不等号反対だた
0704nobodyさん04/07/07 15:56ID:???
(;´Д`)
0705fushianasan04/07/07 17:06ID:???
うんこー
0706nobodyさん04/07/07 17:10ID:???
チャットを作る!

最低限入れる機能(評価:極小)
自動リロードする
表示は10行程度

入れたい機能(評価:普通)
いわゆる普通のチャットシステム
自動リロードの間隔が選べる
表示の行数が選べる
入室画面がある
切断者(ブラウザを閉じた奴)は退出させる
発言者の名前がわかる

あったらいいな機能(評価:極大)
チャット中にファイルをUP・交換ができる
0707nobodyさん04/07/07 17:13ID:???
>>706
ここはお前の日記(ry
0708nobodyさん04/07/07 17:25ID:???
>>706
ぼうや、大きな夢を持ってるねw
070970604/07/07 17:28ID:???
作ってぇ☆
オネガイオネガイ☆
0710nobodyさん04/07/07 17:43ID:???
>>709
丸投げスレに行けやドアホ
0711nobodyさん04/07/07 17:44ID:???
>>700
金が無いなら元になっている雑誌(英語)は安い。
http://www.phparch.com/
自分は先に英語読んでたクチだが、結局日本語版だけにした。
少なくても自分がやるより翻訳の品質と時間コストが安いため。
定期購読方式だと割り引きになるし、毎月買わされるんじゃなくて
購入が選べるので、そっちの方がお勧め。過去の号もそこから充当できるし。

他の有名どころでは
http://www.php-mag.net/
紙のメディアでも出版されている(最近はPHP|architectも) が、
昔取り寄せが上手く出来なかった。今はどうかしらんけど。

インプレスが発行予定の雑誌っていつ発売だっけ。
初稿原稿の締め切りはもう過ぎたようなので、今月末ぐらい?
0712nobodyさん04/07/07 18:04ID:???
>>710
丸投げスレに糞を捨てないように
0713nobodyさん04/07/07 18:43ID:???
ファイルを監視して新しく追加された行を読み込む
Unix系の tail のような機能を作りたいんですが
だれかそういう関数をつくっテイル人いますか?
0714nobodyさん04/07/07 18:44ID:???
山田君、一枚持っていって
0715nobodyさん04/07/07 18:46ID:???
>>711
php-mag、トラブル多いけどそれなりに届くよ。でも高いのよね。
PDF エディション出てるので、今ならそっちお勧めする、
0716nobodyさん04/07/07 19:23ID:???
腹を切って死ぬべきである
0717nobodyさん04/07/07 19:31ID:???
>>713
PHPのみじゃ監視は無理だからcronとか使えばいいんじゃないのけ。
0718nobodyさん04/07/07 19:45ID:???
行が追加されることまで分かってるならどうとでもできるだろうが・・。
トリガなしで汎用的に監視がしたいならFam関数+αだろう。
0719nobodyさん04/07/07 20:56ID:H1YWjpHJ
文字エンコードですが
ソース内で
mb_http_output("UTF-8");
mb_internal_encoding("UTF-8");
で指定してもサーバ側が別だとエンコードされません。
ソース内の指示よりphp.iniの方が優先順位が高いのでしょうか。
0720nobodyさん04/07/07 21:12ID:???
>>719
mb_http_outputはphp.iniで
output_handler = mb_output_handler
となっているか、ob_start('mb_output_handler')してからだろ。
mb_internal_encodingやmb_http_inputは既に読み込まれている
スプリクトや$_POST,$_GETの文字エンコードは変換されない。
0721nobodyさん04/07/07 22:22ID:uCG1B5VO
初心者な質問ですみません。

SESSIONを使って買い物カゴ的なものを作りたいのです。
・formのラジオボタンで選択したほうの商品名を表示する
・選択した回数に応じて個数を加算していき、それを表示する。(表示ページから入力ページには戻れるようにしてある。)
上記のようなものを実現するにはどのようにしたらよいのでしょうか?

抽象的な表現でもうしわけありませんが、是非よろしくお願いします・・・。
0722nobodyさん04/07/07 23:02ID:???
>>721
そこまで決まってるなら後はスクリプトを書くだけなのだが...
サンプルが欲しいなら「ショッピングカート php セッション」あたりでググってみたら?
0723nobodyさん04/07/07 23:13ID:H1YWjpHJ
>>720
つまり ob_start() 使うとエンコーディング出来ないって事ですか
■ このスレッドは過去ログ倉庫に格納されています