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

【PHP】下らねぇ質問はここに書き込みやがれpart10

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/09/25(日) 02:03:45ID:nLUfPXhD
PHPに関するくだらない質問用すれです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい

・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
【PHP】くだらねぇ質問はここに書き込みやがれpart8
http://pc8.2ch.net/test/read.cgi/php/1123431535/
【PHP】くだらねぇ質問はここに書き込みやがれpart9
http://pc8.2ch.net/test/read.cgi/php/1125716012/
05165062005/10/07(金) 11:36:12ID:???
>>508
URLまでご用意していただき ありがとうございます
しかしそのサイトではPHPの中ではなくHTML文の中にフォームを作って値を渡しているので
参考にはなりませんでした。 せっかく答えていただいたのに申しわけないです。
ご説明がまだまだ不十分でしたね・・・ 今度こそ分かりやすいはず

<?php ?>の中のPHP内部にラジオボタンやラジオボタンの様な答えをチェックでき
その値を違うPHPに渡すという物を設置することは可能でしょうか?
0517nobodyさん2005/10/07(金) 11:42:27ID:???
>>514
普通はheader送るタイミングは自分で制御するもんだからなぁ・・・

>>516
相変わらずわけわからん。
「phpの中にラジオボタンの様な答えをチェック」という辺りを
もうちょっとわかりやすく書けないか?
0518nobodyさん2005/10/07(金) 11:49:57ID:???
全然説明が判らないな。
・PHPはサーバー側で動作
・ラジオボタンの表示、選択はクライアント側で動作
が理解できてるのかな。。。という疑問があるんだけど。

「ラジオボタンの様な答えをチェックでき」のチェック操作を行うのは誰?
人間が行うのなら、上記が理解できていないと思う。
PHPで行うのなら header('Location:xxx.php?checkbox=1');等でいいと思う。
05195162005/10/07(金) 11:54:30ID:???
>>517
う〜ん なかなか言葉で説明するのが難しいですね・・・
>>「phpの中にラジオボタンの様な答えをチェック」という辺りをもうちょっとわかりやすく書けないか?

ラジオボタンです 要は<?php ?>の中にラジオボタンを作成したいのです
現在fromを利用してphpの外で実行した場合は成功しております
while文や変数を利用したラジオボタンを作りたいので、PHPの中に入れて
やりたいのですが 可能でしょうか?
05205012005/10/07(金) 11:56:49ID:???
レスいただいた方ありがとうございます。
出力バッファを使うことにしました。


>>516
508です。
PHPとMYSQLを使って作りたいとのことですが、PHPとMYSQL利用の経験はお持ちでしょうか?

DBから問題を取得→表示
ユーザーからの解答があったら
問題の答案を取得→DBから解答取得→回答正誤判定→結果表示

こんな流れになるのではないかと思いますが、PHPとMYSQLをこれから勉強するなら
HTMLとPHPとMYSQLを使ってデータの出し入れの勉強してみるとよくわかると思いますよ。
05215182005/10/07(金) 11:57:42ID:???
まさかと思うが、こんな答えを期待してたのかな。。。

<?php
echo '<INPUT TYPE="radio" NAME="data" VALUE="1">テスト1';
echo '<INPUT TYPE="radio" NAME="data" VALUE="2">テスト2';
?>
05225012005/10/07(金) 11:59:35ID:???
>>519

<?php
echo '<form action="" method="post">
選択肢1<input type="radio" name="Q1" value="aa">
</form>';

こういうことですか?
05235222005/10/07(金) 12:00:24ID:???
>>521
かぶった。。
0524nobodyさん2005/10/07(金) 12:00:37ID:???
>>516
ラジオボタンを表示してcheck.phpに値を送られる
<?php
echo '<form action="check.php" method="post">';
for ($i = 0; $i < 5; $i++) {
echo '<input type="radio" name="q[0]" value="'.$i.'">'.$i;
}
echo '<input type="submit">';
echo '</form>';
?>
0525nobodyさん2005/10/07(金) 12:11:02ID:???
まさかprintもechoも知らないで組んでたのか・・・?
0526nobodyさん2005/10/07(金) 12:36:14ID:???
これこそPHPクオリティ
05275162005/10/07(金) 12:46:33ID:???
たくさんの返信ありがとうございました。
>>521 >>522 >>524さんの言われておるようにやってみたところ
無事に出来ました こちらもprintなどでラジオボタンの所を
くくってやってみていたのですが 出来ませんでした。

シングルでくくらずにダブルコートでくくっておりました・・・
printじゃ出来ないと思って質問してみたのですがptirntで出来たのですね
みなさんどうもありがとうございました
0528nobodyさん2005/10/07(金) 12:47:15ID:???
まずtypeをどうにかすべき
0529nobodyさん2005/10/07(金) 12:50:35ID:???
まずtypoをどうにかすべき
0530nobodyさん2005/10/07(金) 13:51:42ID:DMyUsnXK
サンプルコードに下記のようなものが出てきまして。<?php ?>が2つあるので、こんな書き方できるのかとびっくりしたのですが
これは結局、分断しなければ
echo '<form action = "next.php" method = "post">';
のように書かなければいけないところを、<?php ?>を分断することによって普通に、<form action = "next.php" method = "post">
のように書けるという解釈であってますか。

<body>
<?php
$text1 = @$_POST["text1"];

if(strlen($text1) < 1 or strlen($text1) > 10)
{
?>
<form action = "next.php" method = "post">
<table>
<tr><td><font color = "red">1〜10バイトでお願いします</font><br>
お名前:<input type = "text" name = "text1" value = "<?=$text1?>"</td>
<td><input type = "submit" value = "送信"></td>
</tr>
</table>
</form>

<?php
}
else
{
echo "<p>正しく入力されました:".$text1;
}
?>
</body>
0531nobodyさん2005/10/07(金) 14:03:31ID:3gINL/Ei
>>530○
そっちの方が負荷がかからないらしいけど実際は俺はシラン。
05325302005/10/07(金) 14:07:58ID:DMyUsnXK
>>531
回答ありがとうございます。

やっぱり、いろんな書き方ができる中のひとつだったんですね。
個人的にはこの方が、HTMLタグそのまんま書き込めるからわかりやすいですね。
PHPスクリプトからHTMLタグを吐き出す場合
echo 使って ""で囲んだり、中の"を\"にしたり、''で囲んだりするのが面倒だなと思ってたので
こんな方法があったなんてうれしいな。
更に、本当に負荷がかからないとすれば、この書き方推奨ですね。
0533nobodyさん2005/10/07(金) 14:11:29ID:???
>>530
PHPはもともとhtmlの中に<?php ?>というタグでスクリプトを埋め込めるというふうに作られた

<html>
<body>
<?php 処理 ?>
html タグ
<?php 処理 ?>
html タグ
<?php 処理 ?>
</body>
</html>
0534nobodyさん2005/10/07(金) 14:14:13ID:???
>>532
一応、こういう方法もあるということで(負荷はしらん)

if(strlen($text1) < 1 or strlen($text1) > 10)
{
 echo <<<EOD
  <form action = "next.php" method = "post">
  <table>
  <tr><td><font color = "red">1〜10バイトでお願いします</font><br>
  お名前:<input type = "text" name = "text1" value = "{$text1}" ></td>
  <td><input type = "submit" value = "送信"></td>
  </tr>
  </table>
  </form>
EOD;
}
else
{
echo "<p>正しく入力されました:".$x;
}
05355342005/10/07(金) 14:15:57ID:???
>>534
いや〜ん。Ctrl+Xを押したつもりが・・・
echo "<p>正しく入力されました:".$x;
は
echo "<p>正しく入力されました:".$text1;
ね。
05365302005/10/07(金) 14:25:08ID:DMyUsnXK
皆さん、具体例での解説ありがとうございます。


>>533
そうか。こんなに柔軟に<?php ?>とHTMLタグを組み合わせられるんですね。
今まで<?php ?>とHTMLタグが、<body>タグの間できれいに分離してるコードしか見たことなかったので
<?php ?>とHTMLタグは、<body>タグの中で分離して書くもんだと思い込んでたものでびっくりしたわけです。

>>534
こんな書き方もあるのか、同じ処理でもいろんな書き方があるもんですね。
こっちの方が、書き方がスマートな感じしますね。
これもPHPスクリプトでHTMLタグ出力するのに、""で囲んだりもいらずにそのままかけますね。
0537nobodyさん2005/10/07(金) 14:25:16ID:/ul7fY5m
初歩的な質問失礼いたします。
PHPを勉強しようと思い、本を買ってきて勉強しているのですが最初の時点で躓いています。
本にあるとおりに、Apache1.3.27とPHP4.2.2をインストールしてハローPHPと表示させようと思ったのですが
ブラウザで見たときに日本語が文字化けしてしまいます。
ブラウザのエンコードで自動選択にすれば問題なく表示はされるのですが、以前表示させたときには文字化けなんてしませんでした。
これは何が悪いのでしょうか?iniファイルの書き換えミスか、そもそもブラウザ側が悪いのでしょうか?
0538nobodyさん2005/10/07(金) 14:41:49ID:???
>>537
せっかくプログラミングの世界に入ってきたのですから、「文字化け」という曖昧な説明ではなく、
「〜の文字エンコーディングで出力するつもりが、ブラウザによって〜の文字エンコーディングと解釈されてしまいます。」
のような説明をするようにしましょう。

ブラウザは次の3点に注目して表示に使う文字エンコーディグを決定します。
・HTTPヘッダ Content-Type: text/html; charset=shift_jis
・HTMLヘッダ <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
・html文章内の一部を使って判定
これらの指定が矛盾していた場合等で表示に使う文字エンコーディングが実際のものとちがっていれば、
いわゆる「文字化け」を起こす原因となります。
0539nobodyさん2005/10/07(金) 15:00:14ID:DMyUsnXK
ふと思ったんですけど
今は、自分のPCでPHPの動く環境を作ってるから、php.iniをいじって設定を変えたりできるけど。
レンタルサーバなんかに置かせてもらう場合、そのサーバのphp.iniっていじることはできないんですよね。
1サーバにつき、1php.iniだと思うのですが合ってるでしょうか。

なので、PHPに、get_magic_quotes_gpc()みたいな、magec_quotes_gpcがONかOFFか調べる関数とかがあるんですよね。
ということはレンタルサーバに自作のPHPで作ったアップローダを置くとすると
アップできるファイルサイズの上限は、そのレンタルサーバのphp.iniの設定に依存するわけですか。
0540nobodyさん2005/10/07(金) 15:02:48ID:???
>>537
AddDefaultCharset でも設定してあるんじゃねーの?

つか、PHPの質問じゃねーな。

ほれ、
Apache〜嗜みとして〜 Part3
ttp://pc8.2ch.net/test/read.cgi/php/1043851302/
0541nobodyさん2005/10/07(金) 15:03:38ID:???
>>536
そんなことくらい、PHPマニュアルに書いてあるが?
0542nobodyさん2005/10/07(金) 15:24:18ID:???
>>541
だから何?
0543nobodyさん2005/10/07(金) 15:51:07ID:???
>>542
だから何?
0544nobodyさん2005/10/07(金) 15:54:56ID:DMyUsnXK
PHPマニュアル見ないで、書籍のサンプルコード集打ち込みながら学習してるから知らなかったんだよ。

PHPマニュアルの目次見ても、型、変数、定数、演算子、制御構造、関数、クラスとオブジェクトとか、他言語を知ってたら見なくても
いいような内容ばっかりに見えたので、これ1から見ながらやってたら遠回りかなと思っていきなりサンプルコード集買ったんですよね。
PHPを実行できる環境を整える方法から書かれてる書籍の方が便利だし。
PHP独特の書き方とかわかれば、後は他言語で身につけた基礎知識がカバーするだろうと思って。

でもこの際なので知識補完といった意味で目を通しとこうかなとは思います。
まあ、書き方が有料の書籍と違ってわかりにくいから避けてたのですが、書籍で使える知識を身につけてから
PHPマニュアルも補完的に目を通すという読み方にするとPHPマニュアルに書かれた内容もわかりやすいかなとは思います。


0545nobodyさん2005/10/07(金) 16:18:11ID:???
>>539
マニュアルのini_set()を見ればわかるけど.htaccessやスクリプト内で変更できるものもある
upload_max_filesizeは変更できないがな
0546nobodyさん2005/10/07(金) 16:32:44ID:???
医科のperlをphpで書けばどうなりますか?

#!/usr/bin/perl
use LWP 5.7X;
use Encode;
use URI;
my $browser = LWP::UserAgent->new;
my $url = URI->new('http://www.hogehoge.com/cgi-bin/hogehoge.cgi');
$url->query_form(
foo => 'bar' ,
);
my $response = $browser->get($url );
die $url , " Error!", $response->status_line unless $response->is_success;
print $response->content;
05475462005/10/07(金) 16:35:32ID:???
上記
use Encode; の行は削除してください。
05485392005/10/07(金) 16:37:24ID:DMyUsnXK
>>545
スクリプトから設定ファイルをいじれる関数があるんですね。
でも全部いじれるわけじゃないのですね。
マニュアルみたら、php.iniの設定の一覧が出て、変更の可否の項目を見ればいいのだと思うのですが
PHPマニュアルも便利ですね。

調べてみたら
PHP_INI_ALL、PHP_INI_PERDIRだと、.htaccessで変更可能らしい。
ちなみに
http://www.shigeweb.jp/php/project_p/?section=setup&page=htaccess に書いてる。

upload_max_filesizeを見るとPHP_INI_PERDIRになってるので、.htaccessで設定変更できることになりますよね。
でも変更できないということは、スクリプトから変更できないけど、.htaccessだったらできるということかな。

設定できるできないみたいにはっきりしてるのかと思ったら、この設定はこの方法でできるけど、この設定はこの方法では変更できない
みたいにいろいろあってややこしいですね。
どうも解説ありがとうございました。
0549nobodyさん2005/10/07(金) 16:41:18ID:???
>>546
<?php
$url = 'http://www.hogehoge.com/cgi-bin/hogehoge.cgi';
$query = 'foo=bar';
$response = @file_get_contents($url.'?'.$query);
if (!$response) die($url."Error");
echo $response;
?>
05505462005/10/07(金) 16:44:34ID:???
>>549
即レスサンキューです
05515452005/10/07(金) 16:52:49ID:???
>>548
俺の使ってるchmファイルではPHP_INI_SYSTEMになってる(´・ω・`)
新しいのをダウンロードしなおした
05525392005/10/07(金) 16:59:12ID:???
>>551
バージョンによっても変わっていくわけですね。非常にややこしいけどしょうがないか。
自分の持ってるマニュアルのバージョンも要チェックだし、サイトでも一覧のせてるところあるけどそういうとこでも
バージョン古かったら意味なしですね。
更に、レンタルサーバにおく場合は、そのレンタルサーバのPHPのバージョンもチェックすべきなんだろうな。
まあ一手間、調べればいいんだもんね。気をつけてチェックしましょうということなんですね。
0553nobodyさん2005/10/07(金) 19:25:05ID:???
質問ですが。

ログファイルの行数を知りたいんですが、以下の 2 つのうち、どっちの方が優れてるんでしょう?

1:
$line = 0;
$fp = fopen($log_file, "r");
while($temp = fgets($fp)) $line++;
fclose($fp);

2:
$line = shell_exec("wc -l $log_file");
$line = preg_replace("/^([\d]+).+$/", "$1", $line);
0554nobodyさん2005/10/07(金) 19:29:24ID:???
>>553
2 に関しては、引数をちゃんとチェックしないと、変なコマンドを打たれる可能性
を否定できないぽ。
0555nobodyさん2005/10/07(金) 19:31:04ID:???
>>554
言葉が足りませんでしたね。
このプログラムはユーザーの入力値は全く関与しないんです。
$log_file はプログラム内部で作ってる変数です。
05565532005/10/07(金) 19:34:33ID:???
もうちょっと補足します。
ログファイルはは 20 個あり、for 文で回して、行数だけ取得するようにしたいのです。

$data = array();
for($i=0; $i<20; $i++) {
// ファイル名は 0.log のようにしてます
// 行数取得して $line に格納
$data[$i] = $line;
}

こういう感じで作ってます。
0557nobodyさん2005/10/07(金) 19:53:54ID:???
1,000 回くらい回してベンチすれば?
0558nobodyさん2005/10/07(金) 20:15:04ID:dcjESLNV
png2wbmp("test.png","test.bmp");
とやって、PNGの画像をBMPに変換したいのですが
Warning: Wrong parameter count for png2wbmp()
とエラーが出てしまいます。

png2wbmp("test.png","test.bmp",100,100);
とパラメータを付け足しても同様のエラーが出てしまいます。
なにがいけないのでしょうか?
05595532005/10/07(金) 20:18:23ID:???
特に、こっちの方が断然いい、みたいなことな無いみたいですね。
行数を確認するためだけにファイルをオープンするのは、他のプログラムでの書き込みに影響を与えそうですので、
2 の方でやってみようと思います。
ありがとうございました。
0560nobodyさん2005/10/07(金) 20:28:58ID:???
>>558
int png2wbmp ( string pngname, string wbmpname, int d_height, int d_width, int threshold)
末尾のパラメータ threshold が足りないようだが?
0561nobodyさん2005/10/07(金) 20:33:27ID:???
>>559
シェル呼び出すだけでも地味に時間かかるよ?
0562nobodyさん2005/10/07(金) 20:41:22ID:???
$a = file("log.dat");
count($a);

じゃだめかな。
05635532005/10/07(金) 20:43:51ID:???
>>561
やっぱりそうですか・・・
Windows の方で作ってますので動作確認をするために現在は 1 の方法でやってました。
サーバーにアップする時点で 2 の方に変えようと思ってたんですが。

1 の方でやっていきます。
ありがとうございました。
0564nobodyさん2005/10/07(金) 20:45:42ID:???
>>562
ログファイル自体は重くないのでそれでも大丈夫だとは思いますが。
file をするとログファイルを全部読み込んでしまうので、どうかと思ったんです。
また、ログファイルの内容が必要なわけでもありませんので。
ですので、fgets で値を捨てながら行数をカウントしようと思ったんです。

どうもありがとうございます。
0565nobodyさん2005/10/07(金) 21:35:54ID:npAyk4uf
PHPで複数ファイルをアップロードする場合、ディレクトリ配下を
一括で指定してアップロードできないのでしょうか?
色々と調べたのですが、一ファイルずつ選択する方法しか見つ
かりませんでした。
誰か私に知恵を貸して下さい。お願いします
0566nobodyさん2005/10/07(金) 21:43:55ID:???
>>565
考えよう。
鯖からキミのパソコンの中身が見えないと、ディレクトリ指定はできないでしょ。
WebDAVとか使うなら分からんでもない。
0567nobodyさん2005/10/07(金) 21:47:55ID:???
>>565
逆にキミのパソコンの中身が見える(セキュリティ上の意味でも)状況なら可能になる。
鯖側のPHPの話ではなくなるけど、ブラウザ上で動くActiveXを使ったものとかあるね。
0568nobodyさん2005/10/07(金) 21:48:50ID:???
hogehoge=1921
hogehoge=4441

のような形式の文字列があったとして数字の部分だけを正規表現で置き換える場合にはどのようにすれば良いでしょうか
アドバイスお願いします
0569nobodyさん2005/10/07(金) 22:19:52ID:???
hogehoge の部分が問題だとは思うけど・・・

^(.+=)([\d]+)$ でマッチするんじゃ?

$str = "hogehoge=1921";
$str = preg_replace("/^(.+=)([\d]+)$/", "$1"."1111", $str);

って感じかなぁ。
0570nobodyさん2005/10/07(金) 22:26:02ID:???
>>569
丸括弧で保存する意味が無いよ

$str = preg_replace("/\d+$/", "1111", $str);
0571nobodyさん2005/10/07(金) 23:09:50ID:???
>>570
いや、終端符すらイランだろう。
$str = preg_replace("/\d+/", "1111", $str);
0572nobodyさん2005/10/07(金) 23:24:01ID:???
指定したURLの文字列を保存するには以下の方法で出来るのですが、
画像ファイル等を保存する場合はどのような方法がありますか?

<?php
$files = file_get_contents("http://www.yahoo.co.jp/");
$logfile ="sample.html";
$fp = fopen("$logfile","w");
fputs($fp, $files);
fclose($fp);
?>
0573nobodyさん2005/10/07(金) 23:33:27ID:???
つ [ ファイルシステム関数 ]
0574nobodyさん2005/10/07(金) 23:52:00ID:???
ttp://sss.moo.jp/php/shabbs/bbs.php
この掲示板に書き込みをすると、
「能」「ソ」「表」などの特定の文字の後に\(エンマーク)が追加されてしまうようです。
これは何が原因なのでしょうか?
0575nobodyさん2005/10/08(土) 00:02:52ID:???
>>574
すぐに思いつくのは
php.iniの設定がおかしい
データベースを使用しているのならデータ書き込み時のエスケープ処理がおかしい
ぐらい。
おまいさんが作ったスクリプトなら環境を書け。
そうでないのならそのサイトの管理者に報告せよ。
05765752005/10/08(土) 00:06:16ID:???
書き漏れた orz
"php 表 文字化け" でググってみれば何か参考になるやもしれぬ。
0577nobodyさん2005/10/08(土) 00:53:46ID:/UyAJWR0
http://ex11.2ch.net/test/read.cgi/news4vip/1127997742/
このスレに書いてあるけど、ShiftJISとphpは相性悪いらしいよ。
レス番189くらいからかな。

マイシークェルで掲示板。
0578nobodyさん2005/10/08(土) 00:54:47ID:???
>>534
ヒアドキュメントは漏れはすごいいっぱい使ってる。
$hoge =<<<hage
いろいろ
hage;
って感じで。
これだけ別ファイルにして置けば、phpわかんないけどhtmlは解るって顧客が更新できるから。
0579nobodyさん2005/10/08(土) 01:14:27ID:???
PHPをRHEL3にインストールしようとしておりますが、
DBにSybaseを利用しようとして、PHPのコンパイルオプションに
--with-sybaseを入れると、失敗してしまいます。
(--with-sybaseオプションを外すと、PHPのコンパイルに成功します)

PHPでSybaseを利用する方法をご存知の方は、
是非教えていただけないでしょうか。

なお、詳細な情報(環境など)を以下に記載します。

・OS
RHEL3

・PHP
4.3.11

・DB
Sybase11.0.3

・Apache
1.3.33

・--with-sybase追加時に、make時に発生するエラーメッセージ
/opt/sybase/lib/libsybdb.so: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
/opt/sybase/lib/libsybdb.so: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
/opt/sybase/lib/libsybdb.so: undefined reference to `__ctype_b'
/opt/sybase/lib/libsybdb.so: undefined reference to `__ctype_tolower'
collect2: ld returned 1 exit status
gmake: *** [sapi/cli/php] エラー 1
0580nobodyさん2005/10/08(土) 01:43:02ID:???
>>573

文字列以外を読み込む関数がわかりません。
画像・音声・フラッシュ等は無理なのでしょうか?
0581nobodyさん2005/10/08(土) 02:30:31ID:???
>>580

>>573見たの?
検索くらいしてみようね。
一番上に出てくる
0582nobodyさん2005/10/08(土) 03:30:52ID:CIqOzoxd
HPを作っているんですがメニューやCGIを表示させるのに
PHPを使おうかSSIを使おうか迷っています。
サーバーに不可がかからず表示が早いのはどちらが早いんでしょうか?
0583nobodyさん2005/10/08(土) 03:51:34ID:???
静的なメニューならHTMLで。
鯖のことを考えるなら本当にCGIが必要かどうかから検討すべき。
そうでないなら好きなほうで。
05845822005/10/08(土) 04:23:18ID:CIqOzoxd
>583さんありがとうございます。
動的なメニューです。
鯖への負荷や表示の速度は
PHP、ssiどちらをつかっても変わらないってことですか?
0585nobodyさん2005/10/08(土) 04:31:24ID:???
>>584
中身が作りこまれてないのにどっちがなんて比較できないだろ?
まあ、テキストをincludeさせるだけなら、SSIの方が軽い。
05865822005/10/08(土) 04:45:21ID:CIqOzoxd
>>585
ありがとうございます、SSIでやってみます
0587nobodyさん2005/10/08(土) 07:29:46ID:???
>>586
SSIでCGI実行させるよりPHPのほうが早い
0588nobodyさん2005/10/08(土) 09:13:52ID:???

セキュリティの為、
GETで取得した値が3桁の数字以外だったらエラーという処理を行いたいのですが、

if(!(ereg("([0-9]{3})", $_GET['code']))){echo "不正な値です"; exit;};

上記だと3桁以上の数字にもマッチしてしまいます。
どうすれば3桁の数字のみマッチする様になるのでしょうか?
0589nobodyさん2005/10/08(土) 09:25:49ID:???
みなさん、リロード対策ってどうやってますか?
たとえばA.php(フォーム)からB.phpにPOSTして結果表示するとして、
B.phpではリロードをされたくない場合(リロードされたら処理を中止してエラーに)。

いろいろ考えてみたけど、かなり複雑にしないとリロード対策できないみたいね…
リロード対策くらい標準関数またはライブラリで用意してほしいですね。
0590nobodyさん2005/10/08(土) 09:37:30ID:???
>>588
if(isset($_GET['code'])
      && is_numeric($_GET['code'])
          && strlen($_GET['code']) == 3){
    echo "適正な値かも";
}else{
    echo "不正な値です";
    exit;
}
0591nobodyさん2005/10/08(土) 09:41:52ID:???
>>589
普通にセッションでやってる
0592nobodyさん2005/10/08(土) 09:45:13ID:???
>>591
えっっ、セッションでどのように?
A.phpでセッション変数に値を格納しておいてB.phpでリロードしても、
ずっとセッション変数は格納されたままだからリロード判定には使えないのでは。。。
0593nobodyさん2005/10/08(土) 09:58:47ID:???
>>592
リロード対策 セッション あたりでぐぐる。
0594nobodyさん2005/10/08(土) 11:05:35ID:???
>>588
>>590が正しいっちゃ正しいが、めっちゃ丁寧。
簡単に対応させたかったら、その正規表現を"^[0-9]{3}$"にするといいよ。
「^」が最初、「$」が最後って意味。今のまんまだと、3桁の数字が含まれてたら〜、になってるはず。
完全一致にこれはよく使うから覚えとくとよし。
0595nobodyさん2005/10/08(土) 11:12:32ID:???
するとよくないだろ
0596nobodyさん2005/10/08(土) 11:16:51ID:???
よくねーな
0597nobodyさん2005/10/08(土) 12:47:10ID:???
今、テキストにそって勉強している最中なのですが、つまづきました。
Linuxでsendmailを使ってメール送信をするプログラムなのですが、ちゃんと動かず、
どうも拡張モジュールがうまくいってないようだと思い、再確認したんですが
コンパイル条件にも--enable-mbstringをつけてるし、php.iniのextension_dirも
/usr/local/lib/php/extを指定しています。おかしいなと思って確認すると、
phpフォルダ下にextフォルダがありません。これってどういうことでしょうか?インストールがうまくいってなかったってことですかね?
どなたかアドバイスお願いします。

環境はFedoraCore4,php5.0.4です。
0598nobodyさん2005/10/08(土) 13:06:29ID:???
>>588
セキュリティのためってんならGET使うな
0599nobodyさん2005/10/08(土) 13:07:09ID:???
>>597
色んな可能性が考えられる。
phpinfoで確認して全部正しいか確認しる。
extension_dirはサーバーによって違ったりするから自分で確認して再セット。
あとはブラウザから呼び出して実行とかしてるんなら、php.ini弄ったらapache再起動な。
0600nobodyさん2005/10/08(土) 13:19:35ID:???
>>597
これってどういうこともなにも、そのまんま、無いってことだろ
cd /usr/local/lib/php/ext
が通るか?
06015882005/10/08(土) 13:30:39ID:???
>>590
>>594
>>598

ありがとうございました。
590氏がソースまで記述してくれたので、
これを手本にやってみます。
完全一致の件も参考になりました。
0602nobodyさん2005/10/08(土) 13:39:56ID:???
>588
正規表現の話なら
^[0-9]{3}$
とか
0603nobodyさん2005/10/08(土) 13:57:40ID:???
>>597
PHPのconfigure時に--enable-mbstringを付けてビルドしたのなら、mbstring関数は *静的* に組み込まれる。
なので、mbstringに関しては、extフォルダやmbstring.soがどうこうは関係ない。
<?php phpinfo(); ?>を実行して、Multibyte Supportがenabledになっているかどうかを確認してみたら?
ただ、sendmailが動作しない→拡張モジュールがうまくいっていない、という判断は正しいのかな。
sendmailが動かないというスクリプト、エラーメッセージ等を晒した方が早いんじゃないかな。
0604nobodyさん2005/10/08(土) 14:06:42ID:???
>>594
指摘済みだがそれだと4文字以上もマッチする。
0605nobodyさん2005/10/08(土) 14:07:21ID:???
>>597
とりあえずSendmail叩くプログラムは拡張モジュールじゃない。
0606nobodyさん2005/10/08(土) 14:44:19ID:???
スレタイ見てクソスレかと思ったら、
おまいら親切だな。

質問があるんだが、もう少しROMしてFAQ調べて、
切り分けて、環境書いて聞くことにする。

良スレだ。
0607nobodyさん2005/10/08(土) 14:50:36ID:51SvXaJn
はじめまして。
PHPのプログラムを作りたいと思っているのですが、お教えいただきたいことがございます。
作りたいと思っているのは、HP上に申し込みフォームのようなものを作成し、送信していただいたものを
メールで受け取るというものです。
そこでネット上でその一連の処理のサンプルプログラムをもらったのですがフォームの項目などを
自分が望むように作り変えるには、どの部分を変更すればいのでしょうか?
そのサンプルをアップローダーにあげていますのでどなたかご教授願えませんでしょうか?

サンプルです↓
indexと完了画面と自作のライブラリが入っています。(この自作のライブラリの意味がまったくわかっていないのですが
何もいじらなくても大丈夫でしょうか?)

http://up.spawn.jp/file/up1899.lzh

私自身、付け焼刃の知識なのですが、indexの上のほうの入力チェックのところと、メール送信処理の部分と最後のフォーム
の項目を作るところを変更すればよいと思うのですが違うのでしょうか?
フォームの項目を追加したりするのは大丈夫だったのですが、最初の方の入力チェックのところを変更するとブラウザで
表示させても真っ白な画面になってしまいました。なぜでしょうか?

上記のサンプルに自分自身でフリガナの項目を追加したものも上げますのでどこが間違っているかご指摘願えませんでしょうか?

サンプルです↓(なぜか真っ白になってしまい、表示されない)
http://up.spawn.jp/file/up1900.lzh


phpファイルがupできないためlzhファイルに圧縮していることをお許しください。
長文失礼いたしました。


0608nobodyさん2005/10/08(土) 15:00:20ID:???
>>607
up1900.lzh に含まれる index.php だけど、10行目の先頭が全角スペースになってるね。
 if ( $_REQUEST[ "VALUE_KANA" ] == "" ) {
~~

半角スペースにすれば大丈夫だと思うよ。
php.ini の display_errors を On に設定すれば、真っ白ページではなく
ブラウザにエラーメッセージを表示してくれるので設定しておくといい。
0609nobodyさん2005/10/08(土) 15:31:05ID:???
昔の田舎の交番に居たお巡りさんくらい親切だな。
06106082005/10/08(土) 15:41:22ID:???
>>607
up1899.lzh の方も見てみた。おまいさんが書いた、
 indexの上のほうの入力チェックのところと、メール送信処理の部分と最後のフォームの項目を作るところを変更
で大丈夫。index.php 以外は触らなくてもいい。

ただ、元のスクリプト自体が結構いいかげんなので >>608 で書いた display_errors = On にすると
警告メッセージが一杯表示されてしまうので、
 display_errors = On
 error_reporting = E_ALL & ~E_NOTICE
の両方を設定するか、元のスクリプトを修正(こちらの対応が望ましい)した方がいい。
他にも mb_xxx の文字コード指定等、修正した方がいいところはあるけど、キリがないのでこの辺で。。。

>>609
暇だったもので。
06115972005/10/08(土) 16:50:54ID:wzJ6Bsx7
皆さんレスありがとうございます。
>>599>>603
phpinfoの一部をコピペします。

Configure Command './configure' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-gd' '--with-zlib' '--enable-mbstring' '--enable-trans-sid' '--enable-soap'

mbstring
Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation enabled
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 3.7.0

エラーメッセージらしきもの
Warning: mb_send_mail() [function.mb-send-mail]: Missing To: field in /usr/local/apache2/htdocs/php10/day04-1/sendmail.php on line 9

>>600 通りません。phpの下にextがありません。
06125972005/10/08(土) 16:51:49ID:wzJ6Bsx7
sendmail.php(本に載っているものそのままです)
<?php
$header_info="From: ".$_POST['_from']."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion();
$body="■■".$_POST['_subject']."■■\n\n";
foreach($_POST as $key=>$value){
if(!strstr($key,"_")){
$body.="[".$key."]".$value."\r\n";
}
}
mb_send_mail($_POST['_email'],$_POST['_subject'],$body,$header_info);
header("Location: ".$_POST['_result']);
?>

ちなみにapacheを立ててやってます。sendmailのパスは/usr/sbin/sendmail -t -i -f〇○○@〇○○.co.jp (自分のアドレス)

どうでしょうか???
0613nobodyさん2005/10/08(土) 16:53:44ID:???
内部的に組み込まれた関数をcall_user_func()みたいに関数名を指定して呼び出したいのですが、
そんな関数はないのでしょうか?
06145972005/10/08(土) 16:57:05ID:???
追記
ちなみにwindowsでは同じプログラムでメールが送れました。
0615nobodyさん2005/10/08(土) 17:01:34ID:???
>>612
print_r($_POST);
■ このスレッドは過去ログ倉庫に格納されています