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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/08/27 18:00ID:???
・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
01029204/08/29 02:36ID:???
>>99
なんか怪しくねぇか、それ。

$enameが「さん」のみ「殿」のみとかだったら、後ろに「様」をつけて「さん様」「殿様」にして
「Aさん」「B殿」だったら「A様」「B様」にするんだろ。

$ename = preg_replace( "/(.+?)(さん|君|殿|様)?$/" , '$1様', $ename);
0103nobodyさん04/08/29 02:56ID:???
ヨン様
0104nobodyさん04/08/29 03:00ID:???
ヨン殿
01059704/08/29 03:04ID:???
>>102
_| ̄|○
010610204/08/29 03:13ID:???
しまった。102の92は93の間違いですた。
0107nobodyさん04/08/29 03:14ID:AyQVtsJd
みなさんありがとうございました。
>>102さんので出来ました。
本当にありがとうございました
0108nobodyさん04/08/29 04:22ID:???
ぬるぽ
0109nobodyさん04/08/29 04:25ID:???
>>108 ぷちゅ
0110nobodyさん04/08/29 05:41ID:???
数種ページがある場合
1ページにつき1つのPHPファイルで表示するのと、
全ページを1つのPHPファイルで処理するのではどちらが負荷が軽いですか?
掲示板で言うとTOP,書き込みページ,ログを別々のPHPファイルで処理するみたいな
0111nobodyさん04/08/29 06:24ID:???
>>110
負荷よりメンテナンス性で考えろ。
分かりやすい、変化に強いコードを書いてそれで重くなったのなら後からチューニングすればいい。
0112nobodyさん04/08/29 06:37ID:???
>>110
フレーム切ってブラウザから多重で呼ぶ作りではなく、
メイン1つとメインから複数のサブを関数的にコールする作り
の話なら負荷の差云々は気にするな。
0113nobodyさん04/08/29 07:00ID:???
>>111 >>112
ありがとうございます
これで安心して作れます
011411204/08/29 08:05ID:???
112は、
「TOP,書き込みページ,ログを別々のPHPファイルで処理する」
に対応する内容ではなかったな…

素のPHPだけの場合だと、分割の方がメモリ占有の部分で
若干負荷が高い。CPU負過の部分では同等。
しかし、そんなもんは微々たる瑣末なこと。
111の言うとおりメンテナンス性を優先

本当に負荷を気にするほどのレベルなら、
PHPでもプリコンパイルされたバイナリの利用、
全体/部分的にPHP以外の採用も検討。
011511204/08/29 08:06ID:???
>>114
分割の方がメモリ占有の部分で若干負荷が"低い"。の間違い
0116nobodyさん04/08/29 09:28ID:Kc1bBELS
日曜php歴2週目のおじさんです
phpで "->"って演算子ですか?
$tmp = $row->tmp;

自力で調べてみましたがよくわかりません。




0117nobodyさん04/08/29 09:40ID:???
クラスを勉強してみてください
0118nobodyさん04/08/29 10:54ID:???
->は構造体のポインタ変数からメンバを参照するときに使います。
0119nobodyさん04/08/29 10:54ID:W8RVkldu
ありがとうございます
調べる対象すら判らなかったので助かりました。
01208004/08/29 13:30ID:???
>>84
すいません。どうすればいいか分かりません。
install-sh が phpのソースのところにあったり、
インストールしたいPecl APCのところにあるのはわかりますが。
0121nobodyさん04/08/29 13:39ID:???
みんな詳しいな〜
毎週うちにきて、隣で教えてくれると助かるんだけどね。
もと風俗譲の27歳でした。
01228004/08/29 14:12ID:???
自己解決しました。
意を決してphpizeをviで開いてみる。
「あ、これshなんだ・・・と気付く」

なんか、インストールのときに変なことをやったらしく、
/..../php/build
になるべきところが
/..../php/php/build
になってました・・・。

viでそのままパスを書き換えたらうまくいきました。
こんな対応でいいのか、いまいち不安ですが、一応解決です。
0123nobodyさん04/08/29 14:21ID:???
>>121
きもい
0124nobodyさん04/08/29 14:24ID:???
>>123
まだ使えますよ。
0125nobodyさん04/08/29 14:25ID:???
>>122
変な位置に入ったなw
入れ直してスッキリすればいいのに。
0126nobodyさん04/08/29 14:28ID:???
>>121
ごめん、おれロリコン。
0127nobodyさん04/08/29 14:29ID:???
>>124
生涯現役だもんで(AA略

>>122
fileコマンドを使えばドキドキしながらviで開かなくて済むよ
0128nobodyさん04/08/29 14:36ID:???
すごい初歩的な質問ですいません。

$_POSTのデータは、中身に数値以外の情報が入ってることが
確定だった場合、何でもかんでもhtmlspecialcharsでエンコードすべきですか?
0129nobodyさん04/08/29 14:44ID:???
数値や文字とか考えずになんでもかんでも htmlspecialchars してよし。
0130nobodyさん04/08/29 14:46ID:???
>>129
よーし。パパもスクリプト書き換えちゃうぞ〜〜
0131nobodyさん04/08/29 15:12ID:???
>>129
ありがとうございます。今まで全部つけてたんだけど
ふと、無駄なことしてるような気がして聞いてみました。
0132nobodyさん04/08/29 15:14ID:cCH4wkwY
とか言ってるんです。
もうね、馬鹿かど(ry
0133nobodyさん04/08/29 15:34ID:???

 あ ふ ぉ か 

だからおまいらのアプリケーションは後からコードを観てもエスケープ処理が分散してて完全な対策が保証されなかったり、
最初に全入力値に対してエスケープ処理かけた結果が入力データの同一保持が壊れたりするんだよ。
出力対象に合わせて直前でエスケープ処理しる!

HTML に出力するんなら、直前 (出来ればテンプレート内部) でかけるんだよ。
Smarty なら escape 演算子使え。Flexy ならもっとスマートだ。
0134nobodyさん04/08/29 15:37ID:???
>>133
休日に熱弁おつかれ。
分かったので、休んでて。
013513304/08/29 15:46ID:???
いやもう勘弁してよ。
PHP アプリケーションの質下がり杉。その手の相談も去年より増えた。
最近 PHP でやるって言うと顧客が不安な顔するし。
0136nobodyさん04/08/29 15:53ID:???
>>135
君はあれだね。
出る杭は打つ。主義の人だね。
新しい人を拒む。
そんな事では将来暗いですよ。
0137nobodyさん04/08/29 15:55ID:???
>>135
顧客が不安な顔をするのは君を見て、不安に思ってるので、
全体は下がっていないから安心しろ。
0138nobodyさん04/08/29 16:05ID:???
>>135
しょぼ
013913304/08/29 16:14ID:???
もうこねーよ!・゜・(ノД`)・゚・。 ウワーン
0140軟式PHP04/08/29 16:17ID:???
>>137
WAROTA
0141nobodyさん04/08/29 17:13ID:???
>139
まぁ人によりけりだろ。
0142nobodyさん04/08/29 17:38ID:nmd5+dtj
まともなことを言っても叩かれるのもまた2ch
0143nobodyさん04/08/29 18:34ID:???
前スレでPHP Acceleratorが入らないと嘆いていた者です。

その後、Pecl APC と TurckMMCacheを入れて、
比較してみたので参考まで。
ベンチは手軽さ優先で ApacheBenchです。
(ab -n 500 -c 10)
ソースはそんなに大きくないですが、連想配列使いまくり。
Smarty使用です。

無し: 10.3 #/sec
Pecl APC: 26.3 #/sec
Turck MMCache: 28.2 #/sec

Zendより良いかは分かりませんが、
Turck の webページの比較はホントっぽい。
ttp://turck-mmcache.sourceforge.net/index_old.html
0144nobodyさん04/08/29 19:28ID:???
FORMからの書き込みでDBに挿入するとき、文字化けしないようにする対策方法ってありますか?
0145nobodyさん04/08/29 19:42ID:???
>>144
mb_convert_encoding
0146軟式PHP04/08/29 19:43ID:???
同じ文字コードで入れる。
0147nobodyさん04/08/29 20:20ID:???
それでも文字化けするときあるんです
原因がわからず、こまってます^^;
0148軟式PHP04/08/29 20:36ID:???
どんな文字化けか分からずこちらが困ってます。
0149nobodyさん04/08/29 20:49ID:???
V l f [タ

↑こんな文字化けです
0150nobodyさん04/08/29 20:53ID:???
釣りに見えてきた
0151nobodyさん04/08/29 20:58ID:???
METAタグで文字コード指定してる?
0152nobodyさん04/08/29 20:58ID:???
>>149
ふざけてんのか
0153nobodyさん04/08/29 21:03ID:???
はあ?
文字化けで困っちゃいけないの?
0154nobodyさん04/08/29 21:16ID:???
データベースを使っていると
mb_convert_encodingだけでは文字化けしてしまう場合があります
0155nobodyさん04/08/29 21:17ID:???
残暑が厳しいみたいだね…
0156nobodyさん04/08/29 21:20ID:xD9nrE3/
日記スクリプトとかで、改行を<br>に変換するのってあるじゃないですか。
でもソースをみるとそこの部分は改行されず永遠と右にずらーっと続いています。
ソース上でも改行を加えたりすることはできないのでしょうか?
0157nobodyさん04/08/29 21:22ID:???
>>156
できます
0158nobodyさん04/08/29 21:25ID:???
>>156
\n を<br>\n に変換すればいい

漏れも暇人だな(プゲラ
0159nobodyさん04/08/29 21:38ID:xD9nrE3/
>>158
それができないんです。
http://php.s3.to/simple/source.php?nikki.phpの
「$com = str_replace("\r\n", "\r", $com); 」あたりを弄ったんですが
それで編集するとどうもちゃんと更新されません。
0160nobodyさん04/08/29 21:48ID:???
>>159
>更新されません
って言うのがよくわかりません。
0161nobodyさん04/08/29 22:02ID:xD9nrE3/
>>160
入力した内容が表示されないんです
0162 04/08/29 22:38ID:ABDLQ/Kn
PHPプログラムする上で質問があります。
あまり経験がなく教えて君なのですが
global変数系をまとめておきたいのですが
<?php
$user = "test";
$password = "2ch";
?>

安易に上記のような感じで記述しようかと思うのですが
開発していく上で問題は起こらないでしょうか?
もし経験者いましたら教えてください。
0163nobodyさん04/08/29 22:38ID:???
あと二日とちょっとの辛抱だ、皆頑張れ
0164nobodyさん04/08/29 22:49ID:fDZT6TXT
>>162
define
0165nobodyさん04/08/29 23:43ID:???
>>159
どう弄ったかは書かないわけ??

>>163
ホントそうだよなw
0166nobodyさん04/08/30 00:16ID:LBsDFKra
JavaScriptで
hoge = parts.options[parts.selectedIndex].value;

とかやって、hogeの中に、文字列が入ってるんですが、
この文字列を、phpでつかう
$hoge変数に格納したいんですがどうすればいいでしょうか?
0167nobodyさん04/08/30 00:20ID:QEqsYWNI
ドウモ〜〜〜ッ!!ハジメマシテ〜〜〜ッ!!!!
私は27歳のOLしてるのぉ〜〜〜っ♪(#⌒〇⌒#)キャハ
うーんとー、私メル友がすっごくすっごく欲しくってー、
探してたら(◎_◎)なんとっ!
>>1さんの素敵なスレッド♪を発見!!!!(^o^)//""" パチパチパチ
てなわけで、ついつい書いちゃったのらー(o^v^o) エヘヘ
メル友に、なってくれるよねっ。(*^-^*)
え?くれないのぉ〜?(;¬_¬)そんなのいやいや〜〜、
なってくれなかったら、( `_)乂(_´ ) 勝負!
☆○(゜ο゜)o ぱ〜んち、☆(゜o(○=(゜ο゜)o バコ〜ン!!
(>_<) いてっ!
(☆o☆)きゃ〜〜(@_@;)やられた〜〜(o_ _)o ドテッ
(+_+) 気絶中。。。
なあんて(#⌒▽⌒#)こんな私っ!σ(^_^)だけど、
お友達になってm(_ _)mくださいませませ♪('-'*)フフ
ということで。(^-^)vじゃあね〜〜〜♪
0168nobodyさん04/08/30 02:25ID:???
>>149
なんか他国言語の文字のようだ(´A`)
DBって何使ってるの?そのDBの文字コードは?
そのへんから原因を探ってみてはどうだろう
0169nobodyさん04/08/30 02:29ID:???
配列を$_POSTで渡したいのですが、調べてserializeを使う方法を
見つけたんですが、どうもうまくいかないです。どこが変なんでしょうか?

<?php
$hhh = array("a","b","c");
$hoge = serialize($hhh);
?>

<form action="<?= $PHP_SELF ?>" method="post">
<input type="checkbox" name="box" value="<?= $hoge ?>" />
<input type="submit" value="botan" />
</form>

<?php
if(isset($_POST["box"])) print_r(unserialize($_POST["box"]));   //*1
if(isset($_POST["box"])) print_r($_POST["box"]);          //*2
?>

*1 何も表示されない。こう表示させたい → Array ( [0] => a [1] => b [2] => c )
*2 出力結果 → a:3:{i:0;s:1:  (よく分からんけど、たぶん「Array」の変化したもの)
0170nobodyさん04/08/30 03:00ID:???
>>169
デバッグのためにunserializeした後とする前の比較をしてるのに
なんでserializeした後とする前の比較をしないのか不思議でならない
0171nobodyさん04/08/30 06:45ID:???
>>169
phpでパースして出力されたHTMLソースを
表示させて眺めると分かるかもよ
<input>タグのあたりとか


つか動作がおかしかった時にHTMLソースを
見るのはデバッグの基本だと思うがどうか?
0172nobodyさん04/08/30 07:44ID:???
その後dtdを眺めたらよろしくhtmlspecialchars();を噛ませましょう。
017311604/08/30 10:39ID:kwBfpaHQ
昨日はどうもでした
もう一つ質問させて下さい"と'の使い分けについてですが
どういう場面でどっちとかあるんでしょうか?
0174nobodyさん04/08/30 10:59ID:???
>>118がいないようなので代理で回答しますが、
'は文字型で宣言した変数に文字を代入するのに使います。
実際には文字コードの対応する値が入ります。
"で囲われた文字列は、式としては「メモリの先頭アドレス」を値に持ちます。
0175nobodyさん04/08/30 11:43ID:???
$neta = "ネタだろ";
echo "\"$neta\"".'\'$neta\'';
0176nobodyさん04/08/30 11:57ID:???
>>174
そりゃCの話な
0177nobodyさん04/08/30 15:22ID:6Aumzc+N
abcd01234.abc.ne.jpというホストが入った変数に対して、
ereg("abcd*", $host)はtrueが返るのに、
ereg("abcd*\.abc\.ne\.jp", $host)がマッチしないのはなぜですか?
0178nobodyさん04/08/30 15:29ID:???
>>176
>>118
0179 ◆.jC7ANgFY. 04/08/30 15:35ID:???
ereg("abcd*\.abc\.ne\.jp", $host)は
abc.abc.ne.jp、abcd.abc.ne.jp、abcddd.abc.ne.jp
などにマッチする。やるなら
"abcd.*\.abc\.ne\.jp"
0180nobodyさん04/08/30 15:42ID:???
>>179
ありがとうございます〜。
正規表現に対しての知識がまだまだ浅いみたいですね・・・。
勉強しなおします〜。
0181軟式PHP04/08/30 15:52ID:???
最初は基本的に直前にしか効果がかからないって考えると
いいかもしれぬよ。つか台風すげーよ。
01826704/08/30 16:11ID:???
たびたびスレ汚しすみません。
一応原因がわかったので、報告します。

実は元のスクリプトでは、exec の前にカレントディレクトリの変更をするコードが入っていました。
exec が終わった後でカレントディレクトリは元に戻すのですが、その場所を file_exists 判定の
前に書くべきところを、後に書いていました。
こんなかんじ

$cd=getcwd();
chdir($execdir);
exec('make_test');
clearstatcache();
if(file_exists('test.txt')) {
 :
 :
}
chdir($cd); // ←こいつの場所はここじゃくて exec の直後であるべき

週末にぐーすか寝てからコードを見たらすぐわかりました。
いやはやお恥ずかしい限りです。
0183 ◆.jC7ANgFY. 04/08/30 16:14ID:???
それと、完全にやりたいのであれば。
"^abcd.*\.abc\.ne\.jp$"にする必要がありますね。

# 関西ですがまだ風が強いだけでそこまで
0184177=18004/08/30 16:35ID:???
>>183
前後に何もないことをチェックするんですね。
たびたびありがとうございます〜。

こちらも同じく関西ですが、台風とは思えぬ穏やかさ・・・。
0185カポコン04/08/30 16:40ID:???
>>173
シングルとダブルの違いですか〜。。。
結構、面白い質問ですね、
同じ文字列を表現するという部分は一緒ですが・・・
例えば、
<?php
$ANI = array("bear","fox");
$str[0] = "$ANI[0]'s nails are very danger.\n"; //問題なし
$str[1] = 'The $ANI[1]\'s fur is very beautiful.\n'; //問題あり
foreach($str as $val) echo(nl2br($val));
?>
のようにタイポしてみれば、ある程度違いが分かるのではないでしょうか?
他にも違いがありそうなので僕よりエロイ方いたら教えてくださいな。
>>174
よくCってますねぇ・・・(゜д゜::)
0186nobodyさん04/08/30 16:46ID:???
黙ってマニュアル読め
0187カポコン04/08/30 16:48ID:???
まー、マトメればエスケープシーケンスが使える使えないという違いです。
ダブルとシングルのクォートの違いは・・・。

エスケープシーケンスの例(↓)
\n 改行; \\ \マーク; \r 復帰; \t タブ; \$ $マーク; \"ダブルクォート
\' (シングルクォート内でシングルクォートを使用したい場合)
0188nobodyさん04/08/30 16:51ID:???
>>186
マニュアルに載っとるんかい。
0189 ◆.jC7ANgFY. 04/08/30 16:53ID:???
II. 言語リファレンス > 第 6章 型 > 文字列
をよく熟知すべし。
0190軟式PHP04/08/30 16:54ID:???
>>173
<pre></pre> = シングル
って思って書けばいいよ(´A`)
019116904/08/30 20:00ID:???
>>170-172
申し訳ない。base64_encode()追加で簡単に渡せますた。

本当はserialize()使用前後の比較も、HTMLのソースも見てたんだけど
どうも脳みそがグダグダだったようで……(serializeの意味も理解してなかった)


本当はこの配列を、さらに配列にして渡したかったんですが
そっちは簡単にできました。スレ汚しすまんです。
0192nobodyさん04/08/30 20:04ID:???
マニュアルよりも>>187のが分かりやすいから>>187の奴でいいよ。
0193nobodyさん04/08/30 20:12ID:???
>>192
カポコン自演痛い
0194nobodyさん04/08/30 21:47ID:???
アパッチベンチしたときに、
多重度が低いととってもパフォーマンス悪いんですが、
そんなもんなんですかね?みなさん。
0195nobodyさん04/08/30 21:59ID:???
sage
0196nobodyさん04/08/30 22:05ID:???
サムネイルについて質問です。
楽天市場やヤフーオークションなどによく一覧を見るためにサムネイル画像が使われていますが
それらサムネイル画像には元の画像がありますよね。
元の画像が40kbなのに対しサムネイル画像は4kbとか約10分の1位の容量になっています。

これを単純にHTMLで画像のサイズを小さくしてサムネイルを作ると
40kbのままでサムネイルが出来てしまいます。

画像は同じ画像でもサイズを小さくすると容量まで小さくする関数などがあるのでしょうか?
よろしくご指導お願いいたします。
0197nobodyさん04/08/30 22:05ID:OUKC12Ij
何かありそうで無いような。気づいてないだけなのか…。
イヤな予感すらしますが、教えてください。

array(3) { [0]=> string(2) "10" [1]=> string(2) "30" }
と言う配列をうまいこと
array(3) { [0]=> string(2) "10" [1]=> string(2) "20" [2]=> string(2) "30" }
にするような関数って無いですよね?
0198nobodyさん04/08/30 22:09ID:???
>>196
ファイルが2つあるとは考えないのかい?
0199nobodyさん04/08/30 22:14ID:???
>>198

早速のレスありがとうございます。
>ファイルが2つあるとは考えないのかい?
ということは画像をアップロードする時にサムネイル用の画像も自動で作られるという感じですかね?
0200nobodyさん04/08/30 22:18ID:???
>>199
ワラタ
タフだな。

ImageMagic とか GD で調べれ。
面倒か使えるだけの理解力が無ければ >>198 のように、Fireworks や ImageReady といったソフト使って別に用意しる。
0201nobodyさん04/08/30 22:53ID:???
>>200
ありがとうございます。

なるほどですね。まさか2枚にしてたとは・・
私はてっきり元画像をどうにかして容量を小さくして見せる方法があるものだと思ってました。
GDは使いやすそうですね
■ このスレッドは過去ログ倉庫に格納されています