【PHP】質問スレッド Part4
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/06/02 15:32ID:f3afNVBG<<参考>>
■本家
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を見よう。
クッキーが使用できない携帯端末などを想定して
<A href="hoge.php?<?=SID?>">Next</A>
などとして持ちまわっていたのですが、どうしてもformタグを使用しなくて
はならず
<form action=hoge.php?<?=SID?> method=POST>
としてみたらiモードでうまく持ち越せました。
同様にJフォン対応にするべし!と思い
<form action=hoge.php?<?=SID?> method=GET>
としてみましたが撃沈してしまいました。
諦めるしかないのでしょうか?
0237nobodyさん
02/06/27 15:32ID:???0238nobodyさん
02/06/27 23:01ID:???配列のキーに文字列入れてソートすると、その文字列消えちゃって
整数に変わっちゃうのですが、これを簡単に回避する方法って
何かありますか?というかこれって仕様ですか?
foreach($dat as $line){
list($lasttime,$title,$admin,$comment,$url)=explode("<>",$line);
$mix_data[$lasttime][]=array($title,$admin,$comment,$url);
}
print_r($mix_data);←ここでは文字で出てきてる(2002/06/27(Thu) 22:58みたいな)
rsort($mix_data,SORT_STRING);
list($key,$value)=each($mix_data);
print_r($key);←ここになると0、1になっちゃう
0239nobodyさん
02/06/28 21:43ID:MwZT+i3a<input type=checkbox name="target" value="2"> 2 <br>
<input type=checkbox name="target" value="3"> 3 <br>
こんなフォームを受け取った場合に全部のcheckboxを見るにはどうしたら良いかの?
2つ以上チェックしたとき、$_POSTや$_GETだと最後のチェックしか見えないのだが。
0240nobodyさん
02/06/28 22:37ID:???0242239
02/06/28 23:21ID:???0243nobodyさん
02/06/28 23:49ID:???#!/usr/local/bin/php
<? phpinfo() ?>
とかってやると、先頭に
#!/usr/local/bin/php
と出力されてしまいます。なで?
0244nobodyさん
02/06/29 01:33ID:???ここのHTTPクライアントで、Hoops!のページを取得しようとしたんですが、
HTTP/1.0 200 OK
Date: Fri, 28 Jun 2002 16:28:33 GMT
Server: Apache/1.3.14 (Unix) mod_perl/1.24_01
Content-Type: text/html
X-Cache: MISS from squid4.hoops.hoops.ne.jp
Connection: close
HTTP によるリクエストが不正です.可能性のある問題は以下の通りです:
リクエスト方法が指定されていないか,あるいは不明です.
URL がありません.
HTTP 識別文字列がありません (HTTP/1.0).
リクエストが長すぎます.
POST/PUT リクエストにおいて Content-Length がありません.
ホスト名に不正な文字が使われています: アンダースコアは使えません.
のように取得できませんのです。
アパッチじゃなくスクイドサーバーというの使ってるみたいなんですが、
この場合どないすれば良いでしょうか。
何を加えればよろしいでしょうか。
0245nobodyさん
02/06/29 02:55ID:???は
"Server: Apache/1.3.14 (Unix) mod_perl/1.24_01"
と返すのですか?
0246244
02/06/29 03:41ID:???ここにスクイドって書いてありますけど、
なんなんでしょうか、これ。
0247nobodyさん
02/06/29 07:58ID:???0248nobodyさん
02/06/29 11:29ID:nVQfumhW↑こんな感じでCGI版PHPを起動しているのですが
-c 指定が効かずに /etc/php/cgi の php.ini が使われてしまいます.
# phpinfo()で確認
http経由でなくコマンドラインから上記スクリプトを実行してもダメでしたが
/usr/local/bin/php -c /home/hoge/php.ini -i
のようにphpを起動すると,意図通りのphp.iniを使ってくれました.
CGI版PHPで任意のphp.iniを使うことは不可能なのでしょうか?
環境は以下の通りです
PHP/4.0.3pl1
Apache/1.3.9
Debian/GNU Linux 2.2
0249uho!
02/06/29 12:27ID:???教えてください。
【Bulknews】
http://bulknews.net
0250nobodyさん
02/06/29 13:27ID:???やるにしてもリクエストが多いなら、
宮川たんに許可を取ってからにして下さい。
0252nobodyさん
02/06/29 15:04ID:???0253nobodyさん
02/06/29 21:39ID:???でも、こういう点でうまくいかない(こんなメッセージがでる)。
どうすりゃいい?
くらいの聞き方はしてほしい。
0254nobodyさん
02/06/29 22:02ID:???これはうちのサイトがニュースサイトだから、かなり個人的な。
Perlでならできた。だけど負荷が高いから一時停止してPHPに乗り換えようとしています。
これでいいですか、>>253さん?
0255nobodyさん
02/06/29 23:15ID:???か?
0256PEAR太郎
02/06/30 00:47ID:???答えが見つからないので、どなたかご存知の方おられましたらお知恵を
お貸しください。
以下のようなソースを書き、結果をブラウザーに出力しデバッグしているのですが、
すべての答えにDB_OK(データ無しだがSQL成功)が帰って来まして、どの答えにもデータがのって来て
くれません。どなたかPEAR上で、FETCHによりデータを取り出す方法をご存知無いでしょうか?
#同SQLはPSQLにてテストし、思い通りのデータが取り出せております。
$sql = "BEGIN WORK;";
$res = $db->query( $sql);
print_r( $res);
$sql = "DECLARE cur CURSOR FOR select * from data;";
$res = $db->query( $sql);
print_r( $res);
$sql = "FETCH 20 FROM cur;";
$res = $db->query( $sql);
print_r( $res);
$sql = "CLOSE bbs_cur;";
$res = $db->query( $sql);
print_r( $res);
$sql = "END WORK;";
$res = $db->query( $sql);
print_r( $res);
いや・・・なんていうか。
$resの中に何が入っているか勘違いしてるような。
http://pear.php.net/manual/ja/core.db.tut_fetch.php
この辺参照。
0259nobodyさん
02/06/30 02:37ID:???0260PEAR太郎
02/06/30 10:40ID:???普通にsql文に"select * from hoge"等とし、$resにDB_Resultが返って
来て、それに対してfetchする一般的な処理は理解できるのですが、
queryによって返ってくるのが、上記カーソルの例の場合DB_Resultではなく、
DB_OKばかりなのです。FETCHでDB_Resultが返って来てくれることを
期待したのですが・・・
0261Power
02/06/30 16:32ID:I8dOrvMOセッション変数とかで出来るのでしょうか?
0262nobodyさん
02/06/30 17:06ID:???レッツPHPの「PHPあぷろだ」を使いたいのですが、
ある特定の拡張子のみ(jpgとか)うp出来るようにしたいのですが、
どのようにすればよろしいでしょうか?
スレ違いだったらすいません
0263nobodyさん
02/06/30 19:16ID:???レッツPHPとやらのURLくらい書いておけよ
if($pos=="") $ext='xxx';//拡張子が無いときはxxx
↑この行があるが、これを見てピンとこないのか?
ちとは自分で考えれ
0264nobodyさん
02/07/02 16:09ID:???0265nobodyさん
02/07/02 16:40ID:xZuMtSlY2ちゃんねるのdatファイルを読み込みたいのですが
どうしたらよいのでしょうか?
0267nobodyさん
02/07/02 16:46ID:xZuMtSlY要約すると
素人にはお勧めできない
ってことですか?
0268初期不良
02/07/02 16:54ID:LBDwMoL/ふつうに fopen とか
http://www.php.net/manual/ja/function.fopen.php
0269nobodyさん
02/07/02 19:17ID:mUq62rt1$site = 'http://aaa.bbb.ccc.com';
print "<a href=\"$site\">ABC</a>";
これってエスケープしないで書く方法ってないの???
Perlはあるのに。。。
0270nobodyさん
02/07/02 20:09ID:???0271nobodyさん
02/07/02 20:19ID:???$format = '<A href="%s">ABC</A>';
printf($format, $site);
0272244
02/07/02 20:37ID:???つける必要ってあるんか?
0273nobodyさん
02/07/02 21:30ID:mUq62rt1> つける必要ってあるんか?
ま、特に無いですけど、気持ち的にですね。
ちなみにヒアドキュメント以外でと思っていたのですが、
やはりないのでしょうか。prinfもちょこっとめんどくさいし。
perl風に print qq(<a href="$site">ABCDEF</a>); とかないんですかね〜?
0274244
02/07/03 00:08ID:???二重引用符から二重引用符まで、
となってるので、
echoなりprintなりする場合は、
' """"""""""""""""""""';
ということで。逆もまたアリ。
がんがれ。
0275おぶじぇくと歯垢
02/07/03 01:39ID:J1Ir7H21なんで くらす とか ふぁんくしょん とか使わなくちゃいけないのか
さっぱりわからん。
ふぁんくしょんっっ〜のは平たく言えばサブルーチンの事?
くらすにいたっては完全にわけわかめ。
0276nobodyさん
02/07/03 02:11ID:+bzS6Uur何回も繰り返し処理をするものや同じ記述をコード内に繰り返すものを
ファンクションでサブルーチン化、これ便利ね。
ある程度まとまった複雑な処理をする場合、これをクラス化して内部の
関数を取り出したり再利用することができるこれがクラスね。
で、PHPでどこまでのものつくるかしらんがちょっとした程度のもんなら
クラスなんてつかう必要はない。
0280nobodyさん
02/07/03 20:59ID:govsnHFj動きません。gdは1.8.4
redhat7.3つかてるんだけどもgdは最初から組み込まれているみたい。
rpm -eしてからmake installとかして--with-gdとかにしてるんだけど
やるとapacheが起動しなくなります。へるぷ
0281nobodyさん
02/07/03 21:00ID:???form.html(下記参照)にてテキストボックスに
文字を入力し、submitボタンで送信しましたが、
display.php(下記参照)に何も表示されません。
原因としては何が考えられるでしょうか???
phpのバージョンは4.2.1です。
form.htmlのソース
<html><body>
<form action="display.php" method="POST">
<input type="text" name="fName" size="30"><br>
<input type="submit" value="submit">
</form>
</body></html>
<html><body>
<?
print $fName;
?>
</body></html>
display.phpのソース
<html><body>
<?
print $fName;
?>
</body></html>
0282nobodyさん
02/07/03 21:16ID:R6CLh4kMでなくて
print $_POST["fName"];
0285Power
02/07/04 11:27ID:6mswN9rJheader("Location: http://www.php.net/");
上記を実行すると下記のエラーが発生します。
どして?
Warning: Cannot add header information - headers already sent by
(output started at /test/test.php:7)
0286nobodyさん
02/07/04 11:48ID:???検索すればすぐに解明できそうなものを。。。
0288nobodyさん
02/07/04 18:10ID:???送る側
return($list);
受け取る側
$list=$this->hoge();
while(list($key, $value) = each($list)) {
処理・・・・
}
と書いてますが、値が全然取れません。送る前に値が入っているのは確認しました。
明確に「配列だよ〜ん」と書く必要がありますか? それはPHPでどうやって・・・?
すみません、よろしくお願いいたします。
0289nobodyさん
02/07/04 18:57ID:???えっと、header関数が組み込まれる前になんか文字とか出力されてると
そんなエラーでまつ。とゆーわけでheader以前のprint文なんかを確認するとか、もしくは
<?php ?>で囲まれてない部分にスペースとかなんか文字がかかれているとエラーになるので
そんなのも確認してみまSHOW
0290あ
02/07/04 19:53ID:bt2uu3Sk0291nobodyさん
02/07/04 20:35ID:???0292nobodyさん
02/07/04 20:36ID:???0293nobodyさん
02/07/04 23:42ID:dLbCkgI+できないですかね?できないですよねぇ…
0294nobodyさん
02/07/05 00:52ID:???0295nobodyさん
02/07/05 01:52ID:jFz8E7Y4whileの前で$listの中身確認してみては?
0296nobodyさん
02/07/05 07:14ID:???これはどうなんでしょ
0297nobodyさん
02/07/05 10:32ID:C173d5WVマウスクリックイベントを取得することはできないのですか?
getkeystate みたいなやつとか・・
0298nobodyさん
02/07/05 10:42ID:???0299293
02/07/05 12:37ID:bJdk03R6お、それFlashもわかるみたいでいいですね。
でも共用レンタルサーバなのでbrowscap.ini がインストールできない。。
0302nobodyさん
02/07/05 21:28ID:???SESSIONって便利だねえ!
御清聴ありがとうございますた
0303nobodyさん
02/07/05 23:03ID:???そのphpファイルと同じディレクトリならディレクトリ作れますが、
セーフモードの場合その下位にも上位にも作れないですよね。
上位は流石にマズいと思われるのでどうでもいいですけど、
一つのphpファイルだけで下位に作れちゃう方法はありますか?
0304nobodyさん
02/07/05 23:46ID:6m20wbXXheader("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// always modified
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
</head>
<form NAME="output" action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
<input type="hidden" NAME="text" value="">
<input type="submit" value="押すな">
</form>
<script language="JScript">
function transferClipboard() {
document.output.text.value = clipboardData.getData("Text");
}
transferClipboard();
</SCRIPT>
<?php
if($_POST["text"]) {
$fp = fopen("/tmp/data.txt","a+");
fwrite($fp,$_POST["text"]."\n");
fclose($fp);
}
?>
0305nobodyさん
02/07/06 12:11ID:g7/vswyq0306nobodyさん
02/07/07 00:37ID:???0307nobodyさん
02/07/08 19:13ID:vmjgMMy4100分の3とか、確率を設定して、当選するかしないかというプログラムを書いています。
DBから3というデータを取り出して、配列に3個の要素を格納し、一個ずつ、乱数を生成して
(例えば10,100,500とか乱数で出す)、任意の数字とマッチさせて、マッチすれば、当選という
感じにしています。
ところが、1000分の500にしようとして、500個生成したら、その中で同一の数字も出てくる
わけで、その分当選率が下がってしまいます。例えば、500個のうち、100が10回出てきたら、
1000分の490になってしまうのです。
それではいけないので、100が一回出てきたら、もう100が出ないように、すでに出てきた
要素数とマッチさせて、マッチしたらもう一回生成するという感じで組んだのだが、
それで実装すると、恐ろしく時間がかかってしまいます。
その当選するかどうかの処理は、五個あるので、ちょっと使い物になりません。
どうしたものかと頭を悩ませております。助言くださりませ。
連想配列を使えとありますが、どう書いたらいいかわかりません。。。。。
一応、今書いているコードを書いておきます。
$yousosu1 = 500;
for($i=1;$i<=$yousosu1;$i++){
$atari1[$i] = rand(1,1000);
/* これまでに生成された要素を取り出す */
for($ii=1;$ii<$i;$ii++){
/* これまでに生成された要素と同じであれば、その要素を消す */
if($atari1[$ii] == $atari1[$i]){
array_pop($atari1);
}
}
}
0308nobodyさん
02/07/09 00:51ID:bUbte1LM・要素数1000の配列を作ってそこに1〜1000の値を順に格納。
・そこからarray_rand()関数で500個抜き取る。
てのは駄目かな?
メモリを無駄に使うけど速度は稼げると思う。
0309307
02/07/09 14:17ID:AVgu1PiIありがとうございます。
解決しました。array_rand()関数なんてあったのですね。
勉強になります。
それ以前に連想配列もわかんないといけないのですが・・・・・・
0310nobodyさん
02/07/09 19:03ID:+vatuIIk今まで<!--#exec cmd="./xxx.pl"-->のように、CGIをSSI
で呼び出していたのですが、PHPでCGIを呼び出して結果を
表示させる事は可能でしょうか?
0311.
02/07/09 22:17ID:???0312nobodyさん
02/07/10 01:02ID:+PGQkPhp呼び出し方を教えてください
0313osage
02/07/10 01:41ID:???0317nobodyさん
02/07/10 02:04ID:+PGQkPhpここらへんだと思うのですが、手当たり次第実行してみても表示されません。
0318nobodyさん
02/07/10 02:08ID:???タグ文字でない {? ?} みたいなのでやりたいのだが
ソースのどこをいじればできるのか教えれや
0319nobodyさん
02/07/10 02:11ID:???PHP-USERS の ML 見てると
「インストール」が3割
「○○について」が2割
「○○が動きません」が2割
マニュアル読めば分かるものばっかり
たまには、マニュアルも読みなさい。
http://www.php.net/manual/ja/
0320316
02/07/10 02:16ID:???316だが、すまんカン違いしてた。
俺は実行結果を加工してるので exec() 使ってる。
加工する必要がないなら system() とか passthru() とかでいいんじゃねーの?
0322nobodyさん
02/07/10 02:29ID:???>318
確かソースをいじる必要はなかったんじゃ・・・
ソース手元にないんでちょっとあれだけど、
ソースいじるならASPモードの方判定しているところとかどうよ?
>317
セーフモードによる制限とかに引っかかっていませんか?
>320
最後の一行しか返らないんじゃなかったっけ?
全部欲しいときは、shell_exec()で
0323nobodyさん
02/07/10 02:37ID:+PGQkPhpコンテンツを作るのに精力を傾けているので、Perlも改造程度しか
出来ないんです(頭の問題もあるけど)、PHPに少しずつ移行した
いのですが、こまごましたスクリプトを書き直すのは時間が掛かり
過ぎるので、今あるPerlベースのスクリプトを活用したいのです、
出来る人から見れば変かもしれませんが...
>>316
それはSSIでPHPを呼び出す方法では?その後の>>320も試したけど
なにも表示されませんでした。
詳しく書くと、xxx.phpからSSIのように部分的にCGIを実行させた
いんです、<? exec("./xxx.cgi"); ?>でいいのですか?
ここがわからないと実行の仕方が悪いのか、呼び出しているCGI
が問題なのかわかりません。
0324osage
02/07/10 02:41ID:???echo exec("hage.cgi");
?>
では?
#セーフモードで、exec()を制限してたりしない?
0325nobodyさん
02/07/10 02:43ID:+PGQkPhpセーフモードって<? phpinfo(); ?>で一覧が出てくる中にある
safe_mode_exec_dirとかですか? 1になってます。
safe_modeはOffでした。
0326osage
02/07/10 02:51ID:???0327nobodyさん
02/07/10 03:12ID:+PGQkPhpありがとうございます、一応は動くことが確認できました。
でも、printが動いているだけで、Perlとしては動いていないようです。
試しに、下記をcgiとして動作させると表示はしません。
#!/usr/local/bin/perl
$AGENT=$ENV{'HTTP_USER_AGENT'};
print "$AGENT";
print '$AGENT'; とすると「$AGENT」、print "hoge";とすると「hoge」
とでます、PHPとして動いているって事ですか?
0328nobodyさん
02/07/10 21:23ID:???> printが動いているだけで、Perlとしては動いていないようです。
意味不明。
> 下記をcgiとして動作させると表示はしません。
だろうな。
> PHPとして動いているって事ですか?
ワケワカラン。
エラーメッセージが出なければ動いてるんだろ。
0332nobodyさん
02/07/10 22:29ID:???知らないくせに
0334nobodyさん
02/07/10 22:42ID:???……。(呆
0335nobodyさん
02/07/10 22:51ID:???■ このスレッドは過去ログ倉庫に格納されています