トップページ⇒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
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は使いやすそうですね
020220004/08/30 23:11ID:???
だから…
いや、もういいや orz
0203nobodyさん04/08/30 23:26ID:MkaTkZM6
ものすごい根本的な質問なのですが、if文などの書き方は
if($aaaaa) {
  echo "ok";
} else {
  echo "out";
}
か、または
if($aaaaa)
{
  echo "ok";
}
else
{
  echo "out";
}
どっちの書き方してますか?どっちのほうがよいのでしょうか?
0204nobodyさん04/08/30 23:32ID:???
好きにしたらええがな。
0205nobodyさん04/08/30 23:33ID:???
>>203
個人的には

if($aaa) {
  echo "ok";
}
else {
  echo "out";
}

です。
理由らしい理由も無いですが、if の後ろに何も付けないとさみしい気がするのと、無駄に行が増えるのがいやなのとでこうしてます。
} else { みたいな書き方は、あんまりやりません。

書き方について説得力のある意見があるなら、自分もぜひ伺いたいです。
0206nobodyさん04/08/30 23:34ID:???
pearの規則に
} else {
なかったっけ?
俺もこれ嫌いなんだけども
0207nobodyさん04/08/30 23:36ID:???
200の説明のしかたが悪い。
嫌味ったらしく自分は分かっていることだけを晒して
肝心な部分を教えないタイプ。
俺はこういう奴は無視〜
0208nobodyさん04/08/30 23:38ID:???
>>207
よくいるよくいる。_| ̄|○
0209nobodyさん04/08/30 23:40ID:???
>>203
PEARのsourceをよんで真似してみよう!。
ちなみにPEARでは
} else {
を使ってます。
0210nobodyさん04/08/30 23:48ID:???
PEAR標準コーディング規約
http://pear.php.net/manual/ja/standards.php
IDEも参考にしてるだろうから、合わせた方が楽なんだろうなぁ。
0211nobodyさん04/08/30 23:48ID:???
>>207-208
おまいらで教えてやってくれ。任せた。
0212nobodyさん04/08/30 23:52ID:???
>>206>>209>>210
おまいら一人だけ言えばいいよ
0213nobodyさん04/08/30 23:56ID:???
>>205
確か C の話だったと思うけど、間違えて下のような書き方をしてはまったので
if($aaa) { という形にに変えたという話をどこかで読んだことがある。

if($aaa);
{
    echo "ok";
}

else の書き方は } else { と一行で書くよりは、
}
else { とした方が、diff コマンドで差分を作成する時に読みやすい差分ファイルが
できるという話があったような・・・。
0214nobodyさん04/08/31 00:16ID:???
PHPでメールの受信をしたいのだけど、
IMAP関数を使用した方がいいの?
それともソケットでPOP3鯖にアクセスして取得すた方がいいの?
どっちも難しいそうだ…
0215nobodyさん04/08/31 00:23ID:???
WEB+DB press vol.18買え。
PEAR使うと簡単。
0216軟式PHP04/08/31 00:30ID:???
qmailでキックすればいいじゃそ。標準入力で読み込めるよ。
0217nobodyさん04/08/31 00:34ID:???
if ($aaa) {
echo "ok";
} else {
echo "out";
}
これが正解
制御構造では、関数コールと区別するために 制御キーワードと開き括弧の間に空白を 1 つ置くべきです。
0218nobodyさん04/08/31 00:39ID:???
>>216
レス有難う。
やりたい事は写メールBBSの様に(そのモノではないです)
メールを読み込んで更新する様なシステムを作りたいのです。
ちょっとまだ勉強中なので良くわかってないのですが。
貴重なお知恵を有難う御座いました。
0219nobodyさん04/08/31 01:18ID:???
>>217
うーん、カッコの前に空白を置くのはなんか違和感あるなぁ。
ちなみにこのやり方の出典ってなに?
0220nobodyさん04/08/31 01:40ID:???
>>219
同じ物は PFC で見た記憶がある。
俺はそれからスペース置くようにしてる。

でも制御構造はこれ。

if (true)
{
 処理
}

結局、始点と終点が分かりやすい方を取った。
0221nobodyさん04/08/31 02:15ID:???
>220
キミに同じく
0222nobodyさん04/08/31 03:13ID:???
>>197
書き込みすら気付かないところだった
そして何がしたいのか気付けない
0223nobodyさん04/08/31 03:28ID:???
掲示板で、普通にアクセスすると、1件目から10件目で次が11件目から
20件目ってなりますけど、改行なしのログファイルから、普通にアクセスすると
先頭から100バイト、次をクリックすると101バイト目から200バイトまでって
表示させることはできないでしょうか?
0224nobodyさん04/08/31 04:11ID:???
>>223
fseek()
fread()
0225nobodyさん04/08/31 07:21ID:Cvp+faYJ
>>222
あ、気づいてくれました?
配列の1番目と2番目の間に、要素を追加し、元の2番目の要素は後ろにずれて
3番目になって欲しいんです。
0226nobodyさん04/08/31 07:37ID:???
>>225
その配列が $a、挿入したい位置が $n、挿入したい値が $v だとすると、

array_splice($a, $n, 0, $v);

はどうよ?
0227nobodyさん04/08/31 10:18ID:RICHNKvs
>>226
ありがとうございます。勉強させていただきました。
調べたらありました。↓

> array_splice
> offsetおよびlengthで 何も削除しないと指定した場合、
> 配列replacementの 要素はoffsetで指定された位置に挿入されます。
0228nobodyさん04/08/31 10:33ID:???
今、PHPのman読んでたら
backtick演算子
って見慣れない演算子が出てきたんですけど、










backtick演算子って、
JUST ONE MORE KISS で悪の華?
0229nobodyさん04/08/31 11:14ID:j9aJEHZO
>>228
おでこに「愛」と書いてあります。



あ、これ今井じゃなくて砂漠のガアラだ。
0230nobodyさん04/08/31 11:24ID:???
すれ違いだけどNARUTO最近はまって全巻かっちゃった・・・
0231nobodyさん04/08/31 11:26ID:???
>>228
懐かしいな・・・
0232nobodyさん04/08/31 12:01ID:???
すいません。板違い&スレ違いかもしれないのですが、
move_uploaded_fileでアップされたファイルのmimetypeを調べたいのですが。
その場合環境変数のCONTENT_TYPEを使えばいいのでしょうか?
と言ってもCONTENT_TYPEをどう使えばいいのか分からないのですが・・
詳しい方いませんか?
今はGetImageSizeで画像か画像で無いかを判別してます。
それをもう少し詳しく調べたいのですが。
0233nobodyさん04/08/31 12:03ID:rI5QNfOv
Googleの検索結果を配列に読み込もうとしているのですが、
fopenで開こうとすると
 http://www.google.co.jp/
ですと普通に開けますが、
 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=aaa&num=50
などと引数が付くと
 Warning: fopen("http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=aaa&num=50", "r") - Success in 。。。。
とエラーが出てしまいます。
色々調べてみたのですが、わかりません。識者の方、ヒントでも結構ですのでお教えください。
0234nobodyさん04/08/31 12:05ID:rI5QNfOv
233 です。
PHP のバージョンは 4.2.3 です。
0235nobodyさん04/08/31 12:25ID:???
以下のサンプルを実験してみたけど、warning も出ずにオープンできたっぽい。
PHP 4.3.7 です。

$fp=fopen("http://www.google.co.jp/search?hl=ja&ie=Shift_JIS&c2coff=1&q=%82%AE%81%5B%82%AE%82%E9&lr=lang_ja","r");
print fgets($fp);
fclose($fp);
0236nobodyさん04/08/31 12:34ID:???
>>235
試してみましたが同様に
 Warning: fopen("http://www.google.co.jp/search?hl=ja&ie=Shift_JIS&c2coff=1&q=%82%AE%81%5B%82%AE%82%E9&lr=lang_ja", "r") - Success in 。。。
とエラーが出ます。
PHPの設定なのでしょうか?
allow_url_fopen は '1'です。
GETだと別の命令が必要なのでしょうか??
■ このスレッドは過去ログ倉庫に格納されています