トップページphp
732コメント231KB

【PHP】質問スレッド Part9

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/07/12 03:18ID:???
■本家
 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-3ぐらい
0134nobodyさん03/07/20 18:46ID:???
>>130
Location:headerがあると大抵のブラウザでbodyは無視されると思った。
readfileでbodyに何を送ってもブラウザから見る限りなにも受け取れないまま
リダイレクト先に飛ばされるように見える。はず。
0135nobodyさん03/07/20 18:46ID:???
本文送信後にヘッダーって送れたっけ?
0136nobodyさん03/07/20 19:11ID:jNo7yX6K
hoge.phpにいっちゃってんのな。
0137nobodyさん03/07/20 19:14ID:???
>>134 >>135
私もこれがあるからリダイレクトでの結果表示は無理だと最初考えていたのですが…。どうなのでしょ?

>>133
すみません、また怒られそうですが何も考えず総当りで各行の後ろに
順番にLocationを入れてみたのだが全滅でした…。

もう少しじっくり考えてみます。
0138nobodyさん03/07/20 21:57ID:JIvhBfkz
質問です。
FreeBSD-5.1Release + php でjpgraphを使っているのですが、phpのバージョンを
4.3.3RC1に上げたら、それまでは mb_convertを噛ましてEUC→UTF-8に文字コードを変換
しないと出来なかったグラフ上の日本語表示が mb_convert を外しても表示できるよう
(mb_convert を噛ませると化ける)ようになりました。

GD周りなのだと思うのですが、なぜEUCのまま日本語表示が可能になったのでしょう?
この辺りって4.3.3になって何か変わったんでしょうか?
013903/07/20 22:04ID:hbcbfQ42
>>125
そういうこと。
0140 ◆AngelH/kMI 03/07/20 22:25ID:???
詰まってしまった。
誰か助けて・・・。

やりたいこと:
MySQLのMEDIUMBLUB型のフィールドに
バイナリデータ(PNG画像)を入れたい

コード:
$sql = "INSERT INTO d_image ( uid, image ) VALUES ( 1,'" . $image . "')";
if (DB::isError($result = $db->query($sql))) {
echo DB::errorMessage($result);
exit();
}

結果:
DB Error:syntax error

バイナリデータが悪さをしてると思うんだけど、
(最後のシングルクォートと混ざってるような感じだし)
こういうときってどうしたら良いんだろ?
0141nobodyさん03/07/20 22:59ID:???
>>139
結論と考えていいですか?
すると、振り出しに戻ってしまうのですが(笑

ファイルを出力後に「出力完了」メッセージをブラウザに表示する…

なにかいい方法ないですか?
しつこいですか??
私の知識ではど〜しても思いつかないです。
014203/07/20 23:32ID:hbcbfQ42
>>141
JavaScript でダウンロードストリームを別に起こすとかに
なるんじゃないかな。やったことないけど。
014303/07/20 23:41ID:hbcbfQ42
>>140
マニュアル見てみ。
http://jp.php.net/manual/ja/function.addslashes.php
0144あぼーんNGNG
あぼーん
014503/07/20 23:49ID:hbcbfQ42
>>138
元々、GD の TrueType 文字描画は、EUC-JP, UTF-8 を自動判別していた。
自動判定だから、条件によっては間違えるからでは。
--
俺的ポータルサイトを作ろう
http://mysite.ddo.jp/
0146 ◆AngelH/kMI 03/07/20 23:58ID:???
>>143
出来たー!
マジで助かりました。
ありがとう〜。

//chmマニュアルとGoogle検索だけだと見落としますね・・・。
//反省反省。
0147nobodyさん03/07/21 00:12ID:???
ネット上のhtmlファイルなんかを
取り込むときに
たとえば、ファイルの50バイト目から、300バイト目を
指定して読み込むとしますよね。
そうしたときに、実際にダウンロードされるのは、
300バイトなのでしょうか?
それとも251バイトなのでしょうか?
0148nobodyさん03/07/21 00:15ID:???
>>142
私もお礼。
JavaScriptは、メッセージ表示に使うことばかり考えていて、
どうせファイル出力後はいかなる出力もアウトだよな…などとあきらめてた。
そうだよね、ダウンロードの方をやらせれば良いんだよね。
頭固くてガクッって感じです。

の さん。
2日にわたりありがとうございました。
でも遠回りして勉強になったよ!
0149nobodyさん03/07/21 01:04ID:???
sourceforge.net のやり方を見てみると、
<META HTTP-EQUIV="refresh" content="1; URL="ダウンロードしたいファイル">
を使っている。
流れとしては、1. 画面表示 2. refreshでダウンロード開始 って感じ。
0150nobodyさん03/07/21 01:10ID:???
>>142
ダウンロードストリーム作っても
「ダウンロード完了後に結果を表示」なんてことは無理じゃないかな?

ダウンロード完了後になにかブラウザがアクション返してくれればいいけど
そんなことしてるわけないし

無理っぽい。
0151nobodyさん03/07/21 01:11ID:???
>>149
漏れもそれ考えたけど
それは結果画面が先に出るから駄目なんじゃないの?
0152nobodyさん03/07/21 01:37ID:???
148です。
最初の方の発言で書きましたが表示するメッセージの内容は
LHAで圧縮して1ファイルにまとめた
多量の画像やらテキストやらのファイル名の一覧で
「これだけのファイルを送信しましたよ」という確認の意味で表示します。
「送信完了メッセージ」というのはちょっとニュアンスが違いましたね。
すまそ。
にしてもPHPのheaderで送るにしても、JavaScriptで送るにしても
確かに「ダウンロード完了後に結果を表示」なんてことは出来るのだろうか??
ちょっと興味あり。っうか、やっぱ、まず無理???
0153nobodyさん03/07/21 01:48ID:???
>>152
その仕様なら >>149 でいけるね
やり方は sourcefourge.net いってダウンロードしてみるといいです
ブラウザ限定しそうだけど

「ダウンロード完了後に結果を表示」は無理だね。絶対に
0154nobodyさん03/07/21 04:22ID:???
「絶対」でも無い。
Windows + IE 限定でがちがちに固めると大抵の事は何でも出来る。
TrendMicro のウイルスチェッカーもそうだし、MSDN で WindowsXP のダウンロードさせる際にはかなり出来のいい ActiveX ダウンローダーが動いていた。
ダウンロードの中断、再開まで出来た気がする。当然完了通知も有り。

まぁ違う話だけど言ってみた。
0155nobodyさん03/07/21 13:19ID:???
>>154
ウザイので二度とやらないで下さいね。
0156nobodyさん03/07/21 13:21ID:???
>>155
別にいいじゃんか

>>154
情報サンクス
0157あぼーんNGNG
あぼーん
0158nobodyさん03/07/21 21:41ID:???
fopenで開いたネット上の(http://〜で指定した)ファイルの
先頭から50バイト目から読みこむといった
処理をしたいのですが
fseekがつかえないみたいで困ってます。
この場合どうしたらいいのでしょうか・・?
0159nobodyさん03/07/21 21:47ID:???
>>158
一行読んで変数に格納
while (大きさが50バイト以上) {
層でなかったらもう一行読んで変数にapend
}
変数の頭50バイトを残して後ろを削除
0160nobodyさん03/07/21 21:53ID:???
結局
たとえば300Kのファイルの
150Kバイト目から200Kバイト目までを読むには
200Kバイトダウンロードしなきゃだめという
ことですか・・・

ありがとうございました。
0161nobodyさん03/07/22 06:44ID:???
>>160
ちゃんとソケットかhttpのラッパー使えばHTTPの機能で途中からダウンロードも可能。

簡単−>パラメータが少ない−>出来ることが少ない。
0162nobodyさん03/07/22 09:16ID:???
ありがとうございます。
調べてみます。
0163nobodyさん03/07/22 13:08ID:655YiDdZ
httpd-2.0.47
php-5.0.0b1
apc-cvs
apcキャッシュの環境設定でエラーが出た。

/usr/local/src/apc/apc_cache.c: In function `prevent_garbage_collection':
/usr/local/src/apc/apc_cache.c:175: subscripted value is neither array nor pointer
make: *** [apc_cache.lo] エラー 1

どして?
016416303/07/22 13:16ID:655YiDdZ
いや、make installで出たエラーだった。
付加したオプションは-enable-apcだけ。
php-5.0.0には対応できてないのか。。
0165nobodyさん03/07/22 14:31ID:???
>>163
/usr/local/src/apc/apc_cache.cの175行目の前後をコピペしてみて。
0166nobodyさん03/07/22 14:38ID:???
>>161
どこか、参考になりそうなwebサイトや書籍を紹介していただけないでしょうか・・
ぐぐってるのですがさっぱり・・
016716503/07/22 14:46ID:???
>>164
コンパイルじゃなくてインストール中にそのエラーが出たの?
016816003/07/22 15:06ID:???
うー
わからない・・
fsockopenつかうらしい・・
でも、
GETしたら全部ダウンロードされるんじゃ・・
0169nobodyさん03/07/22 15:09ID:???
>>168
もしそうならレジューム機能のついたダウンローダはつくれない。
RANGEヘッダーを付加すればよい。
017016003/07/22 15:14ID:???
Rangeつかうのかなぁ・・・?
なんか、すげー難しそうだ・・
017116003/07/22 15:14ID:???
あ、かぶっっちゃった。
やっぱそうですか。
とにかくがんばります。
017216003/07/22 15:17ID:???
お礼を言うのわすれてました
どうもありがとうございました。
017316003/07/22 16:23ID:HzWI6izp
なんとなくできました。
ただ、GET を送るときに
GET URL HTTP/1.0
だとうまくいくんですが
GET URL HTTP/1.1
だと動かないんですよね・・
なぜなんだろう・・
0174nobodyさん03/07/22 16:37ID:???
>>173
何ができて何がうまくいかないか知らんが、HOSTヘッダはつけたか?
HTTP/1.1では必須だぞ
017516303/07/22 16:38ID:655YiDdZ
>>167
そうそう、./configure --enable-apc は無事終了したみたい。
#make も #make install でも
/usr/local/src/apc/apc_cache.c:175: subscripted value is neither array nor pointer
make: *** [apc_cache.lo] エラー 1
こういうのが出ます。
017616303/07/22 16:39ID:655YiDdZ
>>165
155:/* {{{ prevent_garbage_collection */
156:static void prevent_garbage_collection(apc_cache_entry_t* entry)
157:{
158: /* set reference counts on zend objects to an arbitrarily high value to
159: * prevent garbage collection after execution */
160:
161: enum { BIG_VALUE = 1000 };
162:
163: entry->op_array->refcount[0] = BIG_VALUE;
164: if (entry->functions) {
165: int i;
166: apc_function_t* fns = entry->functions;
167: for (i=0; fns[i].function != NULL; i++) {
168: fns[i].function->op_array.refcount[0] = BIG_VALUE;
169: }
170: }
171: if (entry->classes) {
172: int i;
173: apc_class_t* classes = entry->classes;
174: for (i=0; classes[i].class_entry != NULL; i++) {
175: classes[i].class_entry->refcount[0] = BIG_VALUE;
176: }
177: }
178:}

「;」が付いてないだけかと思ってソースは確認したんだけどね^^;
0177あぼーんNGNG
あぼーん
0178nobodyさん03/07/22 16:48ID:EYE9sStd
>>176
エラーメッセージからみて、classes[i].class_entry->refcount[0]のrefcountが配列でもポインタでもないということだと思うんだよね。
apc_class_tやapc_cache_tの定義を見てみないことにははっきりとは言えないけど。
017917803/07/22 16:49ID:EYE9sStd
apc_cache_entry_tは関係ないか
018017803/07/22 16:58ID:EYE9sStd
しっかしそんな文法違反をしたままリリースするとは思えないんだけどなぁ。
018116003/07/22 17:08ID:HzWI6izp
>>174
HOSTつけました。
うまくいかないというのは、
ページ自体なにも表示されないんです。

018216303/07/22 17:09ID:655YiDdZ
>>178 >>179 >>180 ありがとうございます。
php-4.* では普通に動いたからphp-5.oo の弊害じゃないかと思ってるんですが。。
018316003/07/22 17:10ID:???
ところで、2chのhtml化された過去ログを
取得しようとしているのですが、
たまに、rangeが効かないサーバーがありますね・・・(ton.2ch.netとか)
拡張子がhtmlでもじつはcgiでうごいてるんですかね・・・
018403/07/22 17:10ID:3VhQ/RK3
WEB制作のSOHOをしらべたいのですが情報願います
0185iwa03/07/22 17:28ID:6je4sq13
>>178
php5/Zend/zend.hでは
struct _zend_class_entry {
    :
   int refcount;
    :
}

php4/Zend/zend.hでは
struct _zend_class_entry {
    :
   int *refcount;
    :
}

ほかにも構造体の中身が変わってるので
動かなくてあたりまえ。
INSTALLを見ても4.2.2 - 4.3.2までしか動作確認はとってないとある
4.3.3RC2では動きましたけどね。
018617803/07/22 17:33ID:EYE9sStd
>>185
ああやっぱりそういうことなんだ。
バージョンによって結果が変わるというからなんとなくそういうことだと思ったけど。
018716303/07/22 20:15ID:655YiDdZ
>>185
調べてくれてありがとう。
改造するモチベーションが少し起こりましたが
ちょこちょこっと変えてみて次から次へとエラー増殖し始めたので
萎えました^^
0188あぼーんNGNG
あぼーん
0189nobodyさん03/07/22 21:41ID:5BdtVqsf
PHP4、Windows2000Server、SJIS環境なのですが、
文字列 "機能" を含むソースを実行すると、
‘能’の2バイト目が'\'に該当するようで、
‘能’の後ろのダブルクォートが文字列終端とみなされずコンパイルエラー
になるのですが、
PHPってマルチバイト文字列扱う時に設定とか必要なんでしょうか?
0190nobodyさん03/07/22 21:45ID:???
>>189
はい、いいえ。
0191nobodyさん03/07/23 02:17ID:???
>>189
EUCがUTFにしたら?
SJISは何かとめんどくさいのでやめ説いた方が
0192nobodyさん03/07/23 11:32ID:j6os713+
セッションについて教えてください
以下のソースでカウントが上がらないのですが
どうしてなんでしょうか?

<?
session_start();
if (!isset($count)) $count=0;
session_register("count");
$count++;
?>

<html>
<body>
あなたは <?= $count ?> 回目の訪問です。
<a href=test1.php>カウントを増やす</a>
</body>
</html>
0193nobodyさん03/07/23 12:35ID:???
>>192
PHPのバージョンは?

まぁ$countを$_SESSION["count"]にすりゃいいわけだが。
019419203/07/23 13:05ID:j6os713+
>>193 4.3.1です。
0195あぼーんNGNG
あぼーん
0196あぼーんNGNG
あぼーん
019719203/07/23 13:22ID:j6os713+
うーん、変わらない訳だがどうすれば・・
0198nobodyさん03/07/23 14:05ID:???
>>197
save_pathは?
0199nobodyさん03/07/23 14:14ID:???
質問させてもらいます。
先ほどクラスについてを一通りのことを勉強したのですが、
クラスを使う利点がよくわかりません。
関数だけで十分な気がするのです。
処理が速くなるとか、何か良いことあるのでしょうか?
0200nobodyさん03/07/23 15:25ID:???
>>199
PHPは構造体がないからその代わりにつかうだけでも便利。
ネームスペースが破綻しにくいし>特にセッション変数
とか。

一般的なクラスの利点はPHPに限ることじゃないので
他で調べるほうがいいとおもう。
0201nobodyさん03/07/23 15:47ID:???
複雑なソースを書くときや
複数人でソースを書くときなんか
クラスを使うとわかりやすいという
ことだけです。

「わかりやすい」
この一言に尽きます。
020219203/07/23 16:20ID:j6os713+
>>198 C:\PHP\sessiondata となっています。OSはWinXPです。

それと別件なんですが$_SESSION['test']みたいな感じでセッションを
使うことができたんですが
セッション情報をURL(SID)につけてSQLでデータの削除や閲覧ページなど
動作させると削除はきちんとできているんですが画面には削除したはずの情報が
そのまま残っているんです。ちょっとわかりづらいでしょうがなにが原因なんでしょうか?
0203あぼーんNGNG
あぼーん
020419203/07/23 16:31ID:j6os713+
どうもキャッシュが関係しているんでしょうか?
0205nobodyさん03/07/23 16:55ID:???
>>192
register_globals=offだからだけど、
onにするのは望ましくないので$_SESSION使うのがいいとおもう。
http://www.php.net/manual/ja/ref.session.php

>>202
Cookieは使えないんですよね?
動的ページでもURLが同じだとキャッシュされやすいので
a. ページの移動にGETでなくPOSTを使う
b. URLの末尾にダミーのユニークなパラメータを付加する
のどっちかで回避できるかな。
020619203/07/23 20:09ID:j6os713+
>>205
なるほど、そういう手があるんですね。
どうもありがとうございました^^
0207nobodyさん03/07/23 20:22ID:???
REMOTE_ADDRを取得したい時に2通りの方法があることが
分かったのですが、これらはどのように違うのでしょうか?

$_SERVER[REMOTE_ADDR]
getenv( 'REMOTE_ADDR' )
0208nobodyさん03/07/23 22:50ID:???
>>207
変数か関数かの違いだろ。見たら分かる。






・・・そうじゃなくて?
俺いじわるだから答えてあげないよ〜
0209nobodyさん03/07/23 22:58ID:???
>>208
解らないと行った方が潔い。
0210nobodyさん03/07/24 00:46ID:???
>>207
PHP使ったことないから「$_SERVER」って変数がよくわからないけど
Perlの$ENVと同じなのであれば、中身は一緒だね
好きなほうを選ぶがよい
0211nobodyさん03/07/24 19:28ID:3Ff6tsfH
いきなりの質問ですみません。
RedHatLinux8.0でメールボックスにメールを受信した時に
PHPスクリプトを呼び出して処理を行った後返信をしたいのですが、
メールが届く度に、PHPスクリプトを呼び出すメールサーバ側の設定がわかりません。
どのようにすればいいでしょうか?
PHPはphp 4.3.2をimap関数付きでconfigureしてます。
sendmail 8.12.5
popt 1.7.1
板違いかもしれませんがよろしくお願いします。
0212あぼーんNGNG
あぼーん
0213あぼーんNGNG
あぼーん
0214あぼーんNGNG
あぼーん
0215nobodyさん03/07/24 20:39ID:???
>>211
forward
0216nobodyさん03/07/25 02:34ID:???
質問お許しください。
http://www.pat.hi-ho.ne.jp/dimension/sample/sample_xml_dom.4.3.0.basic.shtml
でxml文章を作成しているのですが、日本語を使うと実体参照で
表現されてしまいます。mbstring等の設定で直せるのでしょうか?
0217nobodyさん03/07/25 02:36ID:???
printで出力するときに、勝手にJavaScriptのようなものが
HTMLの最上段と最下段に追加されるのですが、
これは一体何なのでしょうか?

また、includeでHTMLファイルを取り込んだ際にも、
アンカータグに勝手にtarget="_top"を追加されてしまいます。
どなたか原因がわかる方はいらっしゃいませんでしょうか?
0218nobodyさん03/07/25 02:39ID:???
>>211 procmailで調べるといいかと。
0219nobodyさん03/07/25 04:41ID:???
PHPでWord文書を生成したいのですが,できますか?
0220nobodyさん03/07/25 06:50ID:???
>>217
クライアント側でProxomitronとか使ってない?
他の端末で確認してみるべし。
0221nobodyさん03/07/25 14:49ID:n0rGriHy
>>218
ありがとうございます。procmailで調べてみます!!
0222あぼーんNGNG
あぼーん
0223あぼーんNGNG
あぼーん
0224あぼーんNGNG
あぼーん
0225nobodyさん03/07/25 18:39ID:???
$a1 $a2 $a3 $a4 $a5 $a6 $a7 これを比較して、1つでも
違うものがあったらエラーにしたいのですが
if($a1 == $a2)と1つずつチェックするしかないでしょうか?
一度に比較するのは無理ですか?
0226nobodyさん03/07/25 19:13ID:5Frmg0qV
>>225
最初から配列にしときゃ楽なのに

for ($i = 1; $i < 8; ++$i) {
 $val = "a$i";
 $a[$i] = $$val;
}

if (count(array_unique($a)) == 1) {
 echo "Equal.\n";
} else {
 echo "Different.\n";
}
0227221(225)03/07/25 19:53ID:???
>>222
配列にしてうまくいきました。
ありがとうございました。
0228nobodyさん03/07/25 23:55ID:???
>>227
なにコピペにレスしてんだ
0229nobodyさん03/07/26 00:11ID:???
pu
0230nobodyさん03/07/26 01:51ID:???
zlib関数についてですが
これは、gzfopenを使ってファイルを開いたときに、
そのファイル全部が解凍されてしまうのでしょうか?
それともgzfgets等を使って読み込むときに逐一
解凍されるのでしょうか?
インターネット上にあるファイルを扱うため
ダウンロード時間を節約したいと思っています。
よろしくおねがいします。
0231nobodyさん03/07/26 01:52ID:???
× gzfgets
○ gzgets
0232nobodyさん03/07/26 03:07ID:???
>>220
別の端末(というか本稼動用マシン)で試したら無事上手くいきました。
ずーっとPHPのデバッグモードか何かが変更してるのかと思ってました。
ありがとうございました。
0233nobodyさん03/07/27 00:47ID:npgEG66c
おいおいPHPってgotoもラベルも無いのかよ〜。
深いネストからの脱出とかめんどくせぇな〜。
■ このスレッドは過去ログ倉庫に格納されています