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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/08/06 15:44ID:paJ4kjjQ
・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


抜けているものがあったら補足願います
0049nobodyさん04/08/08 15:25ID:zYHZKtON
>>48
ありません!。
投稿総数を保存しているのは当然の事だしなぁ。
カウンターにもっと高度なヒントが隠されているのでしょうが、
どんなヒントなのだろう。
私には思い付かないので教えてくださいm(_)m。
00503804/08/08 15:48ID:???
行き詰ったんで、もう一度質問お許しください。(忘れてましたけど、PHP4.3.4です)

mail関数などで調べると、どこのサイトを見ても、
php.iniの  SMTP = xx.xx.xxx  と  sendmail_from = [email protected]
を自分の使ってるものにすれば、それで送れるようになる。

みたいに書いてあるんですが、勘違いなんでしょうか。それだけじゃダメなんですか?
0051nobodyさん04/08/08 16:22ID:???
指定先のSMTPサーバ動いていれば、それで問題ありません。
0052nobodyさん04/08/08 16:23ID:zYHZKtON
>>50
SMTP = localhost
smtp_port = 25

というのは、localhost:25でMTA(メールサーバー)が稼働している
事が前提であってMTAが無ければ当然メールは送信出来ません。

他は、>>40を参照
0053nobodyさん04/08/08 16:35ID:???
POSTの場合…$_POST['変数名']

GETの場合…$_GET['変数名']

これは普通の変数と何が違うんでつか?
0054nobodyさん04/08/08 16:55ID:???
安全面
0055nobodyさん04/08/08 17:15ID:mbHx5JiB
mbstring.internal_encoding って
EUC-JP、Shift_jis、
どっちが一般的なんでしょう?
Shift_jis で使うのってナンセンス??
0056nobodyさん04/08/08 17:28ID:???
上の質問と若干かぶるんですが、
mbstring.internal_encoding = euc-jp
にするとメール送信フォームなんかのときに
再度、euc から shift_jisに変換する必要が出てくるんですよね?
0057nobodyさん04/08/08 18:00ID:???
あいうえお
かきくけこ
さしすせそ

仮に上のような複数行にまたがる文字列があったとして
「こ」を含む行全体(かきくけこ)のみを取得するには
どうすれば良いのでしょうか?
どうぞよろしくお願いします
0058nobodyさん04/08/08 18:20ID:???
>>56
普通メールはJISで送るものだが…
00595504/08/08 18:23ID:???
あちゃ〜本当ですね。
shift_jis だと問題ありでしょうか?
0060nobodyさん04/08/08 18:23ID:???
>>55
内部コードはOSによる
・Windowsならshift-jis
・LinuxならEUC(FedoraはUnicodeらしいがよく知らん)
詳しくはここ
http://tsuttayo.sytes.net/php/char_trn/index.html
0061nobodyさん04/08/08 18:33ID:???
>>60
>>内部コードはOSによる

(! ̄д ̄)えぇぇぇ
それはちょっとおかしいだろ。

そもそも本家で配布されているWin用バイナリは--enable-zend-multibyteしてるんだっけ?
--enable-zend-multibyte付でコンパイルされてなかったらSJISを内部コードに出来なかったと記憶しているが。
00626104/08/08 18:35ID:???
あ、スマソ。
スクリプトが--enable-zend-multibyteしていないとSJISは拙いんであって
internal_encodingは問題ないのか。。。
0063nobodyさん04/08/08 18:41ID:???
基本的にはLinuxでもWinでも内部コードはEUCだったはずだし
その方がいいと思うよ
0064軟式PHP04/08/08 20:49ID:???
>>45
いや、今年は行ってないな。周りから「色白すぎ」と言われる。
焼けても赤くなるだけのタイプ>俺

>>57
正規表現使うとか、改行で分割して判定して取得とか。
0065nobodyさん04/08/08 21:34ID:???
これからphp勉強しようかなーと思っているものなんですが、
ttp://www.gta-series.com/eng/index.php
↑のサイトはどこでphpを使っているんでしょうか?
教えてください、お願いします
0066軟式PHP04/08/08 21:37ID:???
>>65
管理者に聞けや。
0067nobodyさん04/08/08 21:45ID:???
管理人にしかわからないものなんでしょうか?
0068nobodyさん04/08/08 21:48ID:Odqra96P
変数にあまり長い文字列を入れ、出力すると表示がおかしくなることってありますか?
0069nobodyさん04/08/08 21:53ID:???
>>68
いろいろ実験して誰でも再現できる現象を確認したらそれ持って又質問しに来い
0070Imo ◆.jC7ANgFY. 04/08/08 22:09ID:???
>>57
$txt = <<<EOM
あいうえお
かきくけこ
さしすせそ
EOM;

$search = preg_quote('こ');
$txt = preg_grep("/$search/", explode("\n", $txt));
echo implode("\n", $txt);
0071nobodyさん04/08/08 22:20ID:???
$txt = <<<EOM
あいうえお
かきくけこ
さしすせそ
EOM;
0072nobodyさん04/08/08 22:23ID:???
$txt = <<<ERO
いやん
ばかぁん
えっちぃ
ERO;
0073nobodyさん04/08/08 22:33ID:???
ひさびささぶいぼたった
0074nobodyさん04/08/08 22:41ID:???
>>70
preg 系は文字コードが UTF-8 で u オプションを使用するときだけにした方がいい。
その例で、文字コードが EUC-JP の場合、「修学旅行」という文字が含まれていても引っかかる。
0075nobodyさん04/08/08 23:22ID:Odqra96P
変数がdata0からdata10まで作りました。
その変数をfor文を使って初期化したいです。

for($i=0; $i<10; $i++)
$data$i = "abc";

これだと、エラーで動きません。
どこを修正したらいいでしょうか?
0076nobodyさん04/08/08 23:29ID:???
$data{$i}
0077nobodyさん04/08/08 23:29ID:???
>>75
何で配列使わないの?
0078nobodyさん04/08/08 23:31ID:???
for($i=0; $i<10; $i++)
${"data".$i} = "abc";
00797504/08/08 23:32ID:Odqra96P
使い忘れというか、変数名を変える予定だったので、てきとうにつけました。
0080nobodyさん04/08/09 00:07ID:???
>75は口調が小学生の息子に似てる
0081軟式PHP04/08/09 00:54ID:???
頑張れ75
00827804/08/09 01:30ID:???
何で俺スルーされてんの?
0083nobodyさん04/08/09 02:15ID:???
>>75
どーでも良いが、0から10まで作りたいなら
for ($i=0;$i<=10;$i++) じゃないのか?

>>78
なんでだろ?
0084nobodyさん04/08/09 02:47ID:???

<?php
$name = "山田";
$_GET ["name"];
print $_GET;

?>
実行結果「Arrey」

$_GETの使い方教えてください・・・
0085nobodyさん04/08/09 03:10ID:???
>>84
何で$_GETを使いたいんだ?
00868404/08/09 03:13ID:???
ページが切り替わるとよく変数がカワップになるぽ
0087nobodyさん04/08/09 03:13ID:???
何がしたいのかわからん
0088nobodyさん04/08/09 03:38ID:???
>>84
なんかワロタ
0089nobodyさん04/08/09 04:15ID:???

        ○   o ○  ○ 「ママー夏過ぎるよ」
             ○`「「「l        
                  \. V7       r‐、
        ____`o ○ |  |.       >、,>
      //      |O。゚-ト、. |      | |
   .//| /(・) ∩ |o.  | | |  /\ | |
    |//|       |   | | | /   | | ̄`l     /\
    |//|   (・)   \_| |─/    /く  |   /  r、/`ーっ
    |//  \           | /   /  |  \/\/  `ー'"
    |/  ヽ__       //  /   |     /
   mn____|___r──l__/    |    /
   ヽ_______|__ノ────' ──''"
0090軟式PHP04/08/09 09:13ID:???
>>84
<?php
print 'GET:' . $_GET['name'] . '<br>' .
'<a href="'.$_SERVER['PHP_SELF'].'?name=山田">山田クリック</a><br>';
?>
0091nobodyさん04/08/09 09:26ID:???
<a href="?name=山田">name</a>
<?=$_GET["name"];?>
軟式軟式。私も真っ白。
0092Imo ◆.jC7ANgFY. 04/08/09 10:44ID:???
>>74
ついついpregしか使わない癖があってorz(perlから入ったからかなぁ、、、
ereg_replace_callbackみたいなのがあったら移りやすいのだけど…。

>>90
rawurlencodeをして渡したほうがいいのでは?
ブラウザによっては日本語をUTF-8に変換して取得しようとするから、
0093nobodyさん04/08/09 11:04ID:???
mb_convert_kana() って 変換可能文字列長制限とか、
そのた制限ありますかね?

〜だと全く変換されないとかっての

$conv = mb_convert_kana($str, 'asHVc');
0094軟式PHP04/08/09 11:13ID:???
>>92
確かに。スマンカッタ。GETで直接日本語を渡す機会が殆ど無かったから忘れてた。
そういえばHDMLのFORM構文の初期値に日本語を入れる場合もurlencodeしてたなぁ。
初心者にはエンコ無い方が分かりやすいかもしれないからユルシテ。・゚・(ノ∀`)・゚・。
0095nobodyさん04/08/09 11:46ID:lYQyr6Nk
郵便番号をmysqlに入れて、検索できるphpスクリプトを
配布されているところって知らないかい?
0096nobodyさん04/08/09 12:07ID:???
知ってても君のような態度の人には教えてあげれない。
0097nobodyさん04/08/09 12:14ID:???
ていうかそんなの自分で作れよ
まぁその前にSQLを全然知らないみたいだが
0098nobodyさん04/08/09 13:48ID:???
郵便番号の CVS データは癖があるので
それを DB に落とし込むのは日本各地で車輪の最発明は無駄だよね。
あと、郵便番号は更新しないといけないし。
大学のデータとかもどこか SOAP や XML-RPC とかで提供しないかな。
0099nobodyさん04/08/09 14:00ID:???
車輪再発名ほど大変な作業ではない。
0100nobodyさん04/08/09 14:32ID:???
オブジェクト指向について質問です。

Class関連の使い方はだいたい分かるのですが、
実際に使っていきたいのですが、
どうもとっかかれなくて、書籍もJAVA関連になるので躊躇ぎみで、

こんなところから、とっかかればいいよ、などなど
アドバイスを頂ければと思っています。
宜しくお願いします。
0101nobodyさん04/08/09 14:35ID:???
classを使うことがオブジェクト指向ではありません。
まずは言語とは無関係にオブジェクト指向が何かを学ぶことをお勧めします。
0102軟式PHP04/08/09 16:21ID:???
そんな100は構造化手法。
Class使えればオブジェクト指向と思ってる100君には
「オブジェクト脳のつくり方」でも読んでみるといいかも。
0103軟式PHP04/08/09 16:36ID:???
あとC++だけど
憂鬱なプログラマのためのオブジェクト〜も読んでみれ。・゚・(ノ∀`)・゚・。
0104nobodyさん04/08/09 17:00ID:GoEzAwXJ
お聞きしたい事があるのですが、
array_uniqueを使うと、配列から重複した値を削除しますよね。
もし、重複した値を残したければどう処理すればよいでしょうか?
それ専用の命令はありますか??
0105nobodyさん04/08/09 17:06ID:???
何もしなければいいだけじゃん
0106軟式PHP04/08/09 17:14ID:???
<?php

$array1 = array("1","2","3","3","4","4","5","6","7","8","8","9");
$array2 = array_unique( $array1 );
$array3 = array_diff_assoc( $array1, $array2 );
print_r( $array3 );
?>
0107軟式PHP04/08/09 17:16ID:???
>>106
適当書いてみた(*´▽`*)
0108nobodyさん04/08/09 18:06ID:GoEzAwXJ
軟式PHPさん、
ありがとうございました。
array_diff_assocという関数があるのは始めて知りました・・・。
0109nobodyさん04/08/09 19:11ID:???
ってか、配列変数だけで網羅できないほどあるね。
0110nobodyさん04/08/09 19:27ID:w1W9HQho
PHP Version 4.3.4です。

clk(this,'res',15)
(15は正の整数でいろいろ変わる)
という文字列がたくさん含まれている文字列$contentsに対して、

preg_match_all("/,([0-9]+)/",$contents,$matches);

とやると数字がとれるのですが、

preg_match_all("/',([0-9]+)/",$contents,$matches);
や
preg_match_all("/\',([0-9]+)/",$contents,$matches);

とすると数字がとれません。なぜなのでしょうか?
0111nobodyさん04/08/09 19:59ID:???
夏だな
011211004/08/09 20:28ID:???
すいませんどなたか・・・
011311004/08/09 20:34ID:???
preg_match_all("/([0-9]+)\)/",$contents,$matches);
でもひっかかりません。ということは、
なにか根本的な勘違いをしてるのでしょうか・・・?
0114nobodyさん04/08/09 20:44ID:1E04QFET
何言ってんのかよく分からん
011511004/08/09 20:47ID:???
すいません、どうも$contentsの中身がおかしいみたいです。でなおしてきますorz
0116nobodyさん04/08/09 21:05ID:lYQyr6Nk
php+mysql使って、

リスティング
個別ページ
検索機能
htmlテンプレート

を作りたいが、どこからやればよいか・・・
参考になる本・サイトはありますか?
0117nobodyさん04/08/09 21:13ID:???
1.Smarty
2.リスティング
3.検索
4.個別ページ

0.PHP
0118nobodyさん04/08/09 21:13ID:1E04QFET
漠然としすぎてよく分からん
機能だけ列挙したって意味がない
何が作りたいのかきちんと書け
0119nobodyさん04/08/09 21:16ID:???
出会い系だろ
0120nobodyさん04/08/09 21:21ID:???
file_get_contents関数で他サーバの内容をとりにいくとき、
UserAgentは「-」となっているみたい
(確認しました)ですが、
これを任意の文字列に変える方法はありますでしょうか?
0121nobodyさん04/08/09 21:53ID:???
GDで作成した画像を保存したいのですがどうしたらいいでしょうか?
検索してみたんですがそのまま表示するだけの解説しか見つからなくて・・・
よろしくお願いします。
0122nobodyさん04/08/09 22:11ID:???
>>121
ホントに検索したのか?!
http://www.php.net/manual/ja/function.imagejpeg.php
0123nobodyさん04/08/09 22:11ID:???
>>120
ini_setでPHPの設定を変更しれ。
ini_set("user_agent","hogehoge")
01246804/08/09 22:28ID:Wd+U0VKl
サンプル作ってみたので、アドバイスください。
コメントをこれ以上長くすると、表示がおかしくなってしまいます。

<?php
// ファイルから読んでいくよ
$fp = fopen("./test.txt","r");
for(;;){

// ファイルから一行読み込む
$line = fgets($fp);
if($line == null)
break;

list($ban,$com) = explode("<>", $line);

// 読み込んだ行を出力する
print "<H4>番号:$ban</H4>";
print "<P>コメント:$com</P>";

}
fclose($fp);
?>
01256804/08/09 22:31ID:Wd+U0VKl
test.txtのないよう↓
ttp://rivernet.cool.ne.jp/upmini/200408a/20040809223111_.txt
0126nobodyさん04/08/09 22:49ID:???
>>124
即興で書いてみた。
<?php
$fp = @fopen("./test.txt","r") or die("File open failed");

print("<dl>");
while( ($s = fgets($fp)) != null ){
list($ban,$com) = explode("<>",$s);
print("<dt>{$ban}</dt>");
print("<dd>{$com}</dd>");
}
print("</dl>");
fclose($fp);
?>
012712004/08/09 22:52ID:???
>>123
あー、なるほど、ありがとうございます。
0128nobodyさん04/08/09 23:03ID:uySv1+mC
>>126
は?頭悪いの?
01296804/08/09 23:06ID:Wd+U0VKl
>>126
これでも駄目です。
0130Imo ◆.jC7ANgFY. 04/08/09 23:54ID:???
>>129
どういう風に表示されるのか今ひとつわからない。

たぶん、テキスト表示に変わるのかなぁと思ってレス。
もしそれならIEのファイルタイプ自動判断の閾値を超えたのだと思う。
文書に対してタグの割合がある値より少なければテキスト、多ければHTMLと
表示するようになっている。(ちゃんと指定していれば別
要するにHTMLヘッダーをちゃんと書くべきだということ。
文字化けの場合もちゃんとMETAタグを書けば直るし?
0131nobodyさん04/08/10 00:12ID:???
>>129
1回のfgetsで行の最後まで読まないから、とか?そういう話?

それならば。
fgetsは行末まで読むとは限らない。
第2引数の指定と、読み込んだデータの最後が改行かどうかのチェックをやる。

って、これじゃなかったらスマソw
0132nobodyさん04/08/10 00:47ID:???
表示がおかしいじゃ意味わからんよな。
何がどうなのか説明もできないのか?
0133nobodyさん04/08/10 01:22ID:cuHg/9mk
色々調べましたが見つからなかったので、質問です。
例えば、グラビアアイドルのデータベース検索ページを作るとします。データベースはmysql4.0.20、PHPは4.3.7です。
やりたい事は、フォーム(form.html)からチェックボックスにチェックを入れてもらい、その結果をPHP(search.php)で表示する事です。

form.htmlのフォーム部分
<form action="search.php" method="get">
<!-- 年齢 -->
<table>
<tr>
<td><input type="checkbox" name="age[]" value="19">10代</td>
<td><input type="checkbox" name="age[]" value="20-24">20〜24歳</td>
<td><input type="checkbox" name="age[]" value="25-29">25〜29歳</td>
</tr>
</table>
<!-- バスト -->
<table>
<tr>
<td><input type="checkbox" name="bust[]" value="79">〜79cm</td>
<td><input type="checkbox" name="bust[]" value="80-89">80〜89cm</td>
<td><input type="checkbox" name="bust[]" value="90">90cm〜</td>
</tr>
</table>
<input type="submit" value="検索">
<input type="reset" value="リセット">

この結果をsearch.phpで表示させるにはどうすれば良いでしょうか?
ちなみにsearch.phpはデータベース接続、動的データ取得は可能となっています。
ただ、現在はチェックボックスの検索機能が効かない為、全データが表示されてしまいます。
恐らく、チェックボックス『value="20-24"』がチェックされたら
search.phpでsql文『SELECT * FROM MyDB WHERE age >=20 AND age <=24』が
実行されれば良いのではないかと思うんですが、そのやり方をどなたか教えて下さいませ・・・。
0134nobodyさん04/08/10 01:36ID:???
>>133
・・・。夏だね。


switch ($_GET['age']) {
case "19": $sql="age < 20";break;
case "20-24" : $sql="age >=20 and age<=24";break
case "25-29" : $sql="age>=25 and age<=29";break;
}
$result=mysql_query("select * fom MyDB where".$sql) or die;

めちゃくちゃ単純に書いてみた。(これだと問題ありすぎなのはわかってるけどツッコまないで>エロイ人)
これ以上は自分で考えて。
考えられないなら、オマエには向いていないから諦めたほうが良いと思う。
0135nobodyさん04/08/10 02:12ID:???
>>134
おまえエロイなあ
013613304/08/10 02:17ID:???
>>134
早速のお答え、ありがとうございます。
なるほど、caseを使うやり方ですか・・・。
私はてっきり、if〜文で作るのかと思ってました。
しかし難しいですね。なんかアナタのおっしゃるとおり、諦めかけてます・・・
0137nobodyさん04/08/10 02:19ID:???
>>136
友達に頼んだほうが早いよ!まじで。
013813304/08/10 02:35ID:???
>>137
仲間内の中では自分が一番知ってるんですよw
いきなり専門外のPHPによるデータベース検索を作らなくてはならなくなったので、
このように四苦八苦している訳です。
perlのcgiみたく、フリーのサンプルスクリプトが全然無いので困ってしまいます。
「PHPによるWebアプリケーションスーパーサンプル」って本も買ったんですが、
私のやりたいようなサンプルがありませんでした。
ネット検索してやっとPHPサンプル見つけても、大体が掲示板とかなんですよね。
まだまだ先は長そうです・・・。
0139nobodyさん04/08/10 02:47ID:???
>>136
if ($_GET['age'] == "19") {
$sql="age < 20";break;
}elseif($_GET['age'] == "20-24") {
$sql="age >=20 and age<=24";break
}elseif($_GET['age'] == "25-29") {
$sql="age>=25 and age<=29";break;
}
$result=mysql_query("select * fom MyDB where".$sql) or die;

どこが分からないか分からないけど、
サンプルイジルヨリMySQL+PHPの入門書をサラッとやったほうが、
結構なんとかなると思うよ。がんがれ。
0140nobodyさん04/08/10 02:50ID:???
あっ break;取り忘れた 
014113404/08/10 02:56ID:???
>>139
誤字までコピペしなくても・・・
fomって何だよw

・・・あ、俺だ

>>138
専門外って何だよ
ってか、ifを知っていて何でこの処理がわからないんだ??
014213304/08/10 03:22ID:???
>>139
そうそう!最初はそのようにif〜文で記述するんだと思ってた訳です。
確かに134氏の記述はシンプルで良いと思いましたが。
実はMySQL+PHPの入門書はスペンサー・K・OGAWA著の本を持っています。
それにも欲しいサンプルが無かくてそのままにしていたので、
これを機に読み返してみようと思います。

>>134=141
自分はプログラマーでは無い、という意味の専門外という意味です。
コードがシンプルで分かりやすいので、アナタの提案してくれた
caseを使った記述を参考にやってみようと思います。

色々ありがとうございました。
スレ汚し失礼しました。
0143nobodyさん04/08/10 03:33ID:???
>>138
Perlで自分の使いたいようなサンプルがあるなら、
それみて(パクって)コーディングした方が早いよ。

caseのデフォルトで何も値が取れなかったときに
$sql="1=1"とでもしとくのが吉。まあwhere条件外すのが正解だけど。
それよかその場合は検索を弾くのが正解かな。仕様がわからんけど
0144軟式PHP04/08/10 09:09ID:???
おはよう眠いデス。
0145nobodyさん04/08/10 09:13ID:???
おはようす
0146nobodyさん04/08/10 11:07ID:???
フォームで入力された文字列の大文字部分を全て小文字に置換したいんですが、今は

$data = ereg_replace("A", "a", $data);
$data = ereg_replace("B", "b", $data);
↓
$data = ereg_replace("Z", "z", $data);

という(アナログ的な?)方法を使っています。

もっと短くて済む表現はないでしょうか。
本や過去ログ見たり検索しても全然見つからなくて・・・。

初心者な質問ですみません。
0147nobodyさん04/08/10 11:11ID:???
$data = ereg_replace("[A-Z]", "[a-z]", $data);
0148nobodyさん04/08/10 11:36ID:???
>>146ワロタ
>>147の冷静な対応にもワロタ

今日はいい天気ですね^−^
0149nobodyさん04/08/10 11:40ID:???
>>146
本当に検索したのか疑問だけど。

$data = strtolower($data);

ttp://jp.php.net/manual/ja/function.strtolower.php
■ このスレッドは過去ログ倉庫に格納されています