【PHP】質問スレッドpart19【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/07/16 07:12ID:KvHeypq/・新規質問の方は上げてください。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
抜けているものがあったら補足願います
0077nobodyさん
04/07/18 18:52ID:ajil2/nN--with-pcre-regex=/usr --with-zlib --with-layout=GNU --enable-bcmath \
--enable-exif --enable-ftp --enable-magic-quotes --enable-safe-mode \
--enable-sockets --enable-sysvsem --enable-sysvshm \
--enable-discard-path --enable-track-vars --enable-trans-sid \
--enable-yp --enable-wddx --without-oci8 --with-pear=/usr/share/pear \
--with-imap=shared --with-imap-ssl --with-kerberos --with-ldap=shared \
--with-mysql=shared,/usr --with-pgsql=shared --enable-ucd-snmp-hack \
--with-unixODBC=shared --enable-memory-limit --enable-bcmath \
--enable-shmop --enable-calendar --enable-dbx --enable-dio \
--enable-mcal --enable-mbstring --enable-mbstr-enc-trans \
--enable-mbregex --with-apxs2=/usr/sbin/apxs \
$ make
# make install
でhttpd.confに
LoadModule php4_module modules/libphp4.so
を加えてapacheを再起動したら
[Sun Jul 18 18:44:53 2004] [warn] module php4_module is already loaded, skipping
と怒られた。それ以前にLoadModule php4_module modules/libphp4.soやAddType application/x-httpd-php .php
がhttpd.confに書いてないんだけどなんでかな
007873
04/07/18 19:00ID:???今は自前鯖なんで、httpd.confに書いてたり^^;。
ゴメンヨ・・・。
配布とか考えた時に.htaccessが使えないレンタル鯖とかも
あると想われるので何か良い手だてはないものかと・・・。
0079nobodyさん
04/07/18 19:44ID:Sl8hc8IDその際、register_globalをOnにしときなされ。
0084nobodyさん
04/07/18 21:39ID:???<select name="asdasd[]" size="5" multiple="multiple">
<option value="a">あ</option>
<option value="b">い</option>
<option value="c">う</option>
<option value="d">え</option>
<option value="r">お</option>
<option value="f">か</option>
<option value="g">き</option>
<option value="h">く</option>
</select>
こういうフォームをつくって、これをGETメソッドで送り、
parse_str 関数で処理したのですが、
配列 asdasd[] の個数が、選択した要素の数*2になってしまいます。
つまり、2つ選択して送るとcount($asdasd) が4になるということです。
どうしてこうなるんですか?
008672
04/07/18 22:22ID:???前のバージョンをアンインストールしていなかったので
# rpm -e php
で関連パッケージを削除してmake install し直してphp.iniをphp.ini_dist
をコピーしてhttpdを再起動しようとしたら今度は
Syntax error on line 199 of /etc/httpd/conf/httpd.conf:
Cannot load /etc/httpd/modules/libphp4.so into server: /etc/httpd/modules/libphp4.so: cannot open shared object file: No such file or directory
と怒られてしまいました
libphp4.soはどこ行っちゃったんでしょうか
0090nobodyさん
04/07/19 00:27ID:eJnEJcBxだれかおしえてください
0091nobodyさん
04/07/19 00:52ID:qsqOem7W実現可能でしょうか?どこか参考になるサイト等ありましたらお教えください。
0092nobodyさん
04/07/19 09:07ID:???掲示板をつくり、1つの記事を削除する場合は
その記事意外を再度上書きすればいいんだよな?
0094nobodyさん
04/07/19 10:26ID:zI9w6JFi$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');
のような配列を<>で分割した2番目の要素(12,16,12)でソートするにはどうすればいいんですか?
ソート後は
山田太郎:16才:好物なし
田中太郎:12才:好物りんご
吉田太郎:12才:好物すいか
のように2番目の要素(12,16,12)以外も表示したいんです。
0095nobodyさん
04/07/19 11:04ID:???ttp://www.yumenara.com/pwp/
のサイトを読んで
現在の時刻を表示させる<?php echo date("n月j日") ?>を入れてみたんですが
何故か文字化けして「79」としか表示されません
どうすればいいんでしょう?
PHPバージョンは4.3.8でサーバーはApache2.0.49
OSはWinXPです
ちなみにp2というPHPで作られた2chビュアーは文字化けせずに正常に表示されます
009695
04/07/19 11:04ID:JjQNbyQZすいません
0097nobodyさん
04/07/19 11:06ID:???function myCompare($x, $y) {
if ($x[1] == $y[1]) return 0;
return ($x[1] < $y[1]) ? -1 : 1;
}
function myExplode($z) {
return explode('<>', $z);
}
$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');
$b = array('name' => array(), 'year' => array(), 'favorite' => array());
foreach ($a as $str) {
list($b['name'][], $b['year'][], $b['favorite'][], ) = myExplode($str);
}
array_multisort($b['year'], $b['name'], $b['favorite']);
$c = array_map('myExplode', $a);
usort($c, 'myCompare');
var_dump($a, $b, $c);
0098nobodyさん
04/07/19 11:18ID:???文字化けって分かってるなら文字コードの設定も書かないと。
というか、書いているうちに原因に気づくんだろうけどねぇ。
http://www.php.net/manual/ja/ref.mbstring.php
0099nobodyさん
04/07/19 11:25ID:???array_multisort使うならこの方がいいかな。
$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');
$b = array(); // 並べ替えたい配列
$c = array(); // 並べ替えの基準にする配列
foreach ($a as $key => $value) {
$b[$key] = explode('<>', $value);
$c[$key] = $b[$key][1];
}
array_multisort($c, $b);
var_dump($b);
010095
04/07/19 11:35ID:JjQNbyQZmbstringは導入してました
php.iniの設定も色々変えてみましたが直りませんでした
全角の文字が表示されていないようなんですが…(全て全角で入力すると何も表示しませんでした)
0105nobodyさん
04/07/19 12:04ID:???文字エンコーディングの設定はどうなってるの?
ソースのそれはどうなの?
やらなきゃいけないのは正しい設定にすることで、
闇雲に変更することじゃない。
どうしたらいいのか分からない場合は>>98のEUC-JPの設定にして
ソースもEUC_JPで書くのがお勧め。
010695
04/07/19 12:19ID:???文字エンコーディングはSJISでやってます
EUC-JPはp2で設定ファイルを編集する時文字化けしたので止めました
ソースは
<HTML LANG="JA">
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=Shift_JIS">
<TITLE></TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" ALINK="#FF0000" VLINK="#800080">
<P>今日は<?php echo date("n月j日") ?>です。</P>
</BODY>
</HTML>
010895
04/07/19 12:38ID:???ttp://www.php.net/manual/ja/ref.mbstring.php
これのSJISユーザ用のphp.iniの設定です
0109nobodyさん
04/07/19 12:45ID:???・・・。
アンタさっきphp.iniの設定をいじったって言ってたけど
今はそのページの内容に戻ってるって事かい?
自分の環境のphp.iniのmb_string関連の部分をコピペしろよ
011090
04/07/19 12:48ID:???ダウンロードしたPHPUnit2のアーカイブにサンプルが入ってるらしい。
ttp://inagi.himitsukichi.com/~aozora/blog/
ttp://inagi.himitsukichi.com/~aozora/cgi-bin/pukiwiki/pukiwiki.php?PHPUnit2%A4%F2%BB%C8%A4%C3%A4%C6%A4%DF%A4%EB
すまね。
0111nobodyさん
04/07/19 12:48ID:???0112nobodyさん
04/07/19 13:18ID:???011394
04/07/19 13:51ID:???0114nobodyさん
04/07/19 14:07ID:???リンク「あああ」をクリックした時に、
同時に変数を代入(例えば$name="yamada"など)できないでしょうか?
0117114
04/07/19 14:23ID:???if ($main == "kikaku")
$page = "./page/kikaku/index.html"
?>
クリックしてmainがkikakuになった状態で上の文を記述していれば
<?php echo $page ?>の部分に上のファイルが開かれるんですよね?
0118114
04/07/19 14:25ID:???「./page/kikaku/index.html」とそのまま表示されますた;;
0119114
04/07/19 14:30ID:???if ($main == "kikaku")
$index = "./page/kikaku/index.html";
$page = file($index);
?>
にしたら「Array」になりました・・・
どなたか助けてください;;
0120nobodyさん
04/07/19 14:44ID:???なにがしたいか知らんが、おそらくincludeでできる
0121114
04/07/19 14:46ID:???0122114
04/07/19 14:48ID:???PHPのページの一部に他のページを貼り付けるということです
0123114
04/07/19 14:58ID:???回答してくれた方ありです!
0124nobodyさん
04/07/19 16:13ID:???0125nobodyさん
04/07/19 17:06ID:???0126nobodyさん
04/07/19 21:11ID:???ファイルアップロードで、下記のformでアップロードした場合、
どうやって、「fname」の値ってとるんでしょうか?
$_POST['fname'] でおけ?
なんかうまく取れない・・・
<form enctype="multipart/form-data" action="upfile.php" method="post">
<input type="file" name="upfile">
<input type="text" name="fname">
<input type="submit" value="upload">
</form>
0128PHP
04/07/19 21:51ID:4+OKTR+fArray[0](A0,B0,C0)
Array[1](A1,B1,C1)
Array[2](A2,B2,C2)
でBの項目でソートしたいときってどうしたらいいの?
http://www.teu.ac.jp/chiit/~dsuzuki/phpdoc/function.array-multisort.html
<?php
$list[0] = array('A2','A1','A0');
$list[1] = array('B1','B2','B0');
$list[2] = array('C0','C1','C2');
//ソート前
print("ソート前<br>\n");
for ($i=0;$i<sizeof($list);$i++) {
for ($j=0;$j<sizeof($list[$i]);$j++) {
$str = $list[$i][$j];
print("$str\n");
}
print("<br>\n");
}
array_multisort ($list[1],SORT_DESC,SORT_STRING,$list[0],$list[2]);
//ソート後
print("ソート後<br>\n");
for ($i=0;$i<sizeof($list);$i++) {
for ($j=0;$j<sizeof($list[$i]);$j++) {
$str = $list[$i][$j];
print("$str\n");
}
print("<br>\n");
}
?>
これを自分なりに変えてみ。
http://pc5.2ch.net/test/read.cgi/jisaku/1089171507/
でがんばってまつ。
0132xxx
04/07/20 01:57ID:zj8DyYfzArray ( [0] => 2004072000<>0<>xxx<>2<>0 [1] => 2004072000<>0<>index<>0<>0 )
の配列を中の[3]の配列の値でソートして、[2]の値のついたdatファイルを読み込んで表示させたいんです。
どうしたらいいか分かりません…。
どうしたらいいんでしょう?
0133nobodyさん
04/07/20 02:34ID:TlHHsRNJHTML中の一部を繰り返したいのですが、
<html>
<body>
<?php
for(i=0;i<10;i++){
?>
test<br>
<?php
}
?>
みたいに書くことってできないんですか?JSPのように。
なんかエラーになってしまったんですが。
0134133
04/07/20 02:37ID:???<?
for($i=0;$i<10;i++){
?>
だった。<?だけでいいんだね。↑は$もついてないし。
ごめん。
マジごめん。
0135xxx
04/07/20 02:58ID:zj8DyYfz<body>
<?php
for($i=0;$i<10;$i++){
print("test<br>\n");
}
?>
じゃだめなの?
http://www.mdir.org/tesss?act=0
http://www.mdir.org/tesss?act=1
>>131
の見てできんのかい(o_ _)ノ彡☆
0137xxx
04/07/20 04:10ID:zj8DyYfzいざむ(136)さん、出来ました。
ありがとうございました!!
0138nobodyさん
04/07/20 05:08ID:???ちゃんとしたスクリプトを書けばできるよ。
(134でもまちがってるだろw)
たしかPHPの処理としては、<?php ?>の間以外は
そのままechoしてるのと同じ処理だからwhileとか
分割されてもできる。
0139nobodyさん
04/07/20 07:55ID:???使用OS WinXp
php.ini
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
;mbstring.func_overload = 0
これでSJISしか使えないEUCで書くと文字化け
mbstring.internal_encoding = EUC-JP
mbstring.http_output = EUC-JP
これでEUCしか使えないSJISで書くと文字化け
というのは理解できる。
mbstring.internal_encoding = EUC-JP
mbstring.http_output = SJIS
こうするとSJIS、EUC-JPとも文字化け
EUC-JPとSJISどっちも使えるようにするにはどうしたらいい?
尚phpのヴァージョン
5.0.0及び4.3.8〜4.3.4辺りまでのpackage及びinstallerは試してみたが全部だめだった
default_charset = "Shift_JIS"を宣言していますか?
mbstringを有効にするのならば
phpインストールフォルダ以下のextensionディレクトリに
php_mbstring.dllは入ってますか?
extension=php_mbstring.dllのコメントはずしてますか?
0141nobodyさん
04/07/20 10:50ID:fJEHV2g/こうしたら結果が下のように出るんですが
Array
(
[0] => [email protected]
[1] => <[email protected]>;
[2] => [email protected]
[3] => <[email protected]>;
)
print $mail[0];
としても何も表示されないのは何ででしょうか?
0143nobodyさん
04/07/20 11:33ID:fJEHV2g/ありがとうございます。
しかし、print_r だと、配列の中身全部出てしまいます。
[0] => [email protected] ← このメールアドレスだけを、とって、処理に使いたいんです。
0145141
04/07/20 12:50ID:fJEHV2g/ob_implicit_flush(1);
while (@ob_end_flush());
これ先頭に書いたら表示されました
0146nobodyさん
04/07/20 12:57ID:yRgYyr5nフォームから得た値で
$query ="insert into table values(0,'$name','$type',$price,'$old','$grade',)";
とレコード追加をしようとしていますが
項目によってはフォーム未入力時も追加可としたいのですが
このままではエラーがでます。
上のコードの前に
if ($***=="") $***=0;
とすれば解決するのですが
もっと簡単な方法はないのでしょうか?
みなさんはどのようにしていますか?
0147nobodyさん
04/07/20 13:10ID:???フォームから得るキーとそのデフォルトを配列にしておいて、
ループしながらやってる。
どのみち最低でもSQLインジェクション対処せんきゃならんし。
0148nobodyさん
04/07/20 13:15ID:???SQL発行する際はPREPARE使ってる
0149nobodyさん
04/07/20 14:45ID:???型がおかしいとき、DBが判断してくれるのでDBが弾くのを任せるか
前もってPHP側で見てやるか、どっちがいいでしょう
0150nobodyさん
04/07/20 14:49ID:???0151nobodyさん
04/07/20 15:02ID:???0153nobodyさん
04/07/20 18:12ID:???0154nobodyさん
04/07/20 18:58ID:???0155nobodyさん
04/07/20 19:04ID:???0157nobodyさん
04/07/20 19:07ID:???0159nobodyさん
04/07/20 19:15ID:???0160nobodyさん
04/07/20 19:15ID:???0161nobodyさん
04/07/20 19:16ID:???"select * from auth where ID = ".$_POST['ID']
としてあとのパスワードやらをmysql_fetch_assocでDBから情報とって調べる
0162nobodyさん
04/07/20 19:17ID:???全然サニタイズしてないや
したほうがいいのかなぁ・・・
0163nobodyさん
04/07/20 19:18ID:???0164nobodyさん
04/07/20 19:19ID:???if(isset($_POST[$name])) return htmlspecialchars(mb_convert_encoding($_POST[$name],"EUC-JP","UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP"));
else return;
}
Nucleusからパクッた。マジお勧め
0166139
04/07/20 19:56ID:???サンクス!
default_charset = "Shift_JIS" が抜けてたらしい
php.ini
default_charset = "Shift_JIS"
extension_dir = "extensionsのある場所"
extension=php_mbstring.dll
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
;mbstring.func_overload = 0
これでSJISもEUCも、使えるようになったが
↑以外の設定だとSJISで書いたプログラム側が文字化けしたことを報告する
つまり >108 のいう「例 3. SJISユーザ用のphp.iniの設定」では文字化け発生
追加として鯖システムはUNHTTPD。Apacheは他の奴報告してくれ
0167nobodyさん
04/07/20 20:18ID:???PEARのHTML_QuickFormを使えば再帰的にstripslashesしてくれて便利。
サニタイズはPEAR DBのquoteSmart使えばOK.
(数値型のデータなら事前にintval/floatvalしとく
HTML_QuickFormのaddRuleと組み合わせるとなおよし)
0168nobodyさん
04/07/20 20:30ID:???それでやられちゃうのか
全然知らん買ったよ
sql文を防ぐってdelete select insert updateぐらいをフォームデータに入ってるかチェックでいい?
0169nobodyさん
04/07/20 20:37ID:???0170nobodyさん
04/07/20 20:38ID:???まずdeleteできちゃう。もう1レコードなんてもんじゃない。テーブルごと。
何しろ無制限。スゲェ!なんか制限とかないの。
しかも他のテーブルも消せちゃう。ヤバイよ、真っ白だよ。
だって普通は削除できないじゃん。だって削除されたら困るじゃん。
データ消えたら困るっしょ。
だからそのCGIはロールバックできる。話のわかるヤツだ。
けど普通のCGIはヤバイ。そんなの気にしない。消えるだけ。
とにかく貴様ら、SQLインジェクションのヤバさをもっと知るべきだと思います。
そんなヤバい仕事をしてる貴様らとか超偉い。もっとがんばれ、超がんばれ。
0173nobodyさん
04/07/20 20:44ID:???>>169 ぜんぜんだめ
MySQLならmysql_real_escape_stringした文字列をさらに'(シングルクォート)で囲む。
(PHP4.3.0未満はmysql_escape_string, PostgreSQLはpg_escape_string)
DB_common::quoteSmartは型を考慮してそこらへんを自動でやってくれる。
0175nobodyさん
04/07/20 20:55ID:???ごめん、説明の仕方が悪かった。quoteSmartは静的呼び出し無理ぽ。
PEARのDBクラスを使うときは
$db = &DB::connect($dsn);
$num = (int) $num; // 整数型のデータの場合
$str = $db->quoteSmart($str); // 文字列型のデータの場合
$sql = "SELECT * FROM hoge WHERE foo = $num AND bar = $str;';
$db->query($sql);
こんな感じでやります。詳しくはPEARマニュアル。
テーブル名やカラム名をquoteIdentifierするのが望ましいけど長くなるので省略。
0177nobodyさん
04/07/20 21:21ID:???■ このスレッドは過去ログ倉庫に格納されています