【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ぐらい
0058nobodyさん
03/07/18 14:10ID:???for ($month = 1; $month <= 12; $month++) {
$log[$month] = myfunc($month);
}
を実行すると $log[1] 〜 $log[12] は定義されていません、と言われます。
for 文の次に
if (!isset($log[$month]) $log[$month] = 0;
と書けばいいのですがまどろっこしいです。
もっとスマートな方法はありませんか?
0059nobodyさん
03/07/18 14:15ID:???for( $month = 1; $month <= 12; $month++ ){
$log[$month] = ( !isset( $log[$month] ) ? 0 : myfunc( $month ) );
}
関数が使えるかは調べてないです。すまそ。
006058
03/07/18 14:39ID:???ふんが。関数も使えました。ありがとうございます。
# やぱり isset() しないといけないんですね。
# $log[*] = ''; とかしたら全配列初期化できれると嬉しいなぁ。
006159
03/07/18 15:33ID:???いまだと変数の特定値を用いた初期化は array_fill
を使わないと駄目ですよね。
$log = array_fill( 0, 12, 0 );
って感じで。
006258
03/07/18 15:41ID:???ぎゃーす。重ね重ねありがとうございます。
array_fill() なんてあるのか。
ttp://www.php.net/manual/ja/function.array-change-key-case.php
横の配列関係一覧の関数を調べました。いろいろあるんですね。
end() っていいですね。今まで count($array) - 1 が end() だけでできる。
何度も申し訳ないですが $log['total'] のように
ハッシュの場合はやはり isset() によるチェックしかないですよね?
006358
03/07/18 15:43ID:???それを見て勉強しますので。
0064nobodyさん
03/07/18 15:48ID:bptTHfv5途中すごく重いSQL処理を投げて、時間がかかって、結果が返ってこずに、
ユーザ側がページを閉じてしまうことがあります。その間は、MySQLが使えなくなって
しまうのですが、ユーザがページを閉じてしまった段階で、SQLの実行を中止する方法は
ないでしょうか
0066nobodyさん
03/07/18 18:29ID:???なんかよーわからんのですが
foreach ($array as $key => $value)
{
if (empty($log[$key]))
{
// 処理
}
}
じゃダメなのかな〜と。array_keys で引っ張るとか。 php way の選択肢はいっぱいありますぜ〜
0068nobodyさん
03/07/18 18:53ID:???何が言いたいのかよくわからんでつ。これ?
http://www.blueshoes.org/en/developer/php_cheat_sheet/?bcRun=1&js=0
PHP マニュアル読みまくれ&見方を覚えろと言いたい。
PHP でも何でも人にヒントや助言を求めるなら発展はあるが答聞いて目の前の問題やっつけているウチは…
自分でかけた時間の分しか上達しないよ (´・ω・`)
0069nobodyさん
03/07/18 19:41ID:/3BrjQgF別ページにセッションを渡したいんですが
できますでしょうか?
0070あぼーん
NGNG0071nobodyさん
03/07/18 20:01ID:???セッションに Javascript によるページ遷移は関係ない。
何故自分で試してからどういう結果を期待し実際はどうなって何が問題と考えるのか、を書かないのかと小一時間問い詰、、、
も う ダ メ ぽ
答えるのに疲れた。さよなら。
0072nobodyさん
03/07/18 20:39ID:???たまに「AAAA.html?i=384724」というURLを見かけますが
これはどういうことでしょうか?
htmlに渡せるなんて聞いたことありませんが・・・
0074nobodyさん
03/07/18 21:06ID:???ついこないだも出たけれどそれはタダのGET Method。
HTTPを勉強してから出直せ。
ついでに言うとhtml文書に渡しているわけじゃない。
これ以上はスレ違いだから終了
0075sage
03/07/18 23:42ID:K8fq0PL5PHPのMySQL関数では、SQLクエリの
中断はそもそもできないし
0076あぼーん
NGNG0077nobodyさん
03/07/19 02:37ID:F49ywpeQ自作のエラー用の関数で、何処で起きたか表示させたいのです
初心者スレで聞いたんですけど、レスが貰えなかったので、こちらに書きます。(更にスレ違いだった。
またphp4.5.0devがfreebsdでmake出来なくなってる・・・。
/home/usr/local/src/php4-200307190130/ext/standard/filestat.c(.text+0xdd9):
undefined reference to `php_check_open_basedir_ex'
*** Error code 1
Stop in /home/usr/local/src/php4-200307190130.
008069
03/07/19 13:31ID:XiYA7SH2すいません。
自分では試したんですが
スクリプトで飛ぶとセッションが消えてしまってるんです。
普通はいけると思うんですがどうしてなんでしょうか?
0081nobodyさん
03/07/19 13:51ID:???header ("Content-Transfer-Encoding: binary");
header("Content-Length: ".$content_length);
header("Content-Type: application/octet-stream");
if (!readfile($path_file))
{
die("Cannot read the file(".$path_file.")");
}
という感じで、フォームで飛んだ先のhoge.phpでファイルをダウンロードさせているのですが、このヘッダーを出力させた後で
「○○○○を送信しました」
という結果表示を行いたいのですが
header出力の後にHTMLを出力しようとしてもダメですよね?
なにかうまい方法があったら教えてください。
0082nobodyさん
03/07/19 13:52ID:???何かうまいほうほうがったら教えてください。
0084あぼーん
NGNG0086の
03/07/19 21:30ID:RWfJimTNheader("Location: URL");
「送信しました」と出力するページ (URL) へリダイレクトを指定して
おけばよろし。
--
俺的ポータルサイトを作ろう
http://mysite.ddo.jp/
0087あぼーん
NGNG0088あぼーん
NGNG0089nobodyさん
03/07/19 21:46ID:???0090nobodyさん
03/07/19 21:47ID:???0091nobodyさん
03/07/19 21:47ID:???0092nobodyさん
03/07/19 21:57ID:???0093nobodyさん
03/07/19 22:04ID:???ス ル ー し る !!
価値観様々なんだからそういう話始めたらスレ埋まる。
0094nobodyさん
03/07/19 22:11ID:???0095nobodyさん
03/07/19 22:20ID:???>header("Location: URL");
>「送信しました」と出力するページ (URL) へリダイレクトを指定して
>おけばよろし。
ありがとっ!
しかし、これを入れたら今度はファイルが送信されなくなった。
確かheader出力の前にはいかなる出力もNGだったような気が…。
あと、ファイル出力に使ったSQLの結果をそのまま
「送信しました」…の結果リストに出力したいので
(DBから複数ファイル名を抽出して、実ファイルをtmpにコピー
それをLHaで圧縮して送信してまつ)
できれば同一ファイル内で処理したいのだが
やっぱ、無理かなぁ。
0096nobodyさん
03/07/19 22:30ID:???0098nobodyさん
03/07/19 22:49ID:???0099nobodyさん
03/07/19 22:59ID:???http://www.century.co.jp/products/asc35u2.html
に入れるか
http://www.century.co.jp/products/cac35u2kit.html
迷っています。価格は安いに越した事は有りません。持ち運びも楽な方がいいです。
どっちがいいと思われますか
0100nobodyさん
03/07/19 23:12ID:???う〜ん、すばやいレスありがとうございます。
>locationで指定したurlに ?unko=kusai で渡せたような
そうですね。これはわかります。
ただ、ちょっと元に戻って、
header("Location: URL"); は、
:
:
header("Content-Type: application/octet-stream");
readfile($path_file)
とは同居できなさそうなのですが、どうなのでしょう?
確かに、ファイル送信ているhoge.phpから、
結果表示する別スクリプトに飛ばせれば、それで十分目的を果たすのですが
headerでのファイル送信後に、もう一度別の出力をする…ということが出来なさそうなので、悩んでしまってます。
0101nobodyさん
03/07/19 23:23ID:HZ7krHsgWindowsとやるとうまくいきません。PHPはlinuxで動かしたいです
0102nobodyさん
03/07/19 23:29ID:P7FRYU3zhttp://etc.2ch.net/test/read.cgi/intro/1058619903/
0103の
03/07/20 00:52ID:hbcbfQ42Header("Location: URL"); を書いた後でファイルを送ればいいんだよ。
Location の動作は、ファイルを送った後で行なわれる。
0104nobodyさん
03/07/20 02:24ID:???どっかでOverloadができないって聞いたんですが。
0105nobodyさん
03/07/20 04:20ID:???PEAR のコード読めば解る。
OO の理解なら本より何より PEAR のコードが一番良い教本。
デザパタもおっけーな某御仁が「良くできている」と言ってた PEAR::MDB をお勧めしておく。
ってゆーか OO でぶいぶい言いたいなら PHP5 のβが出てるから試してみるとか。実戦投入はまだまだ先の話だけど。
0106nobodyさん
03/07/20 04:46ID:UT2grNhfぱー
0107nobodyさん
03/07/20 07:28ID:???5はまだ手をつけていないけど、
4では正直「申し分程度にできる」位に考えておいた方が良いと思う。
多重継承ができんので結構辛いかも。
0109nobodyさん
03/07/20 08:23ID:???それに波動^H^H ZendEngine が OO に最適化されていないのでパフォーマンスの問題もある。
でも PEAR 見てりゃ例え不完全であろうと PHP への寄与が大きいのは読み取れる。
んで漏れも多重継承出来なくて最初は悩んだけどそこもやり方があって PEAR では上手に書いてるよ。
PHP way を勉強しる
0110nobodyさん
03/07/20 08:24ID:???0112nobodyさん
03/07/20 14:17ID:???レスありがとうございます。
しかし、どうもうまくいかないので、
以下のような感じで極力シンプルなコードにして
直接このスクリプトをブラウザから呼んでみたのですが、
hoge2.phpには飛ぶのですが、ファイルが出力されません。
(header("Location: index.php");をコメントアウトすると、正常に処理されます)
私、何か根本的な勘違いをしているような気がするのですが
いかがでしょう?
↓↓↓↓↓↓↓↓
<?php
$content_length = filesize("○○○○○");
header("Location: hoge2.php");
header("Content-Disposition: attachment; filename=○○○○○");
header ("Content-Transfer-Encoding: binary");
header("Content-Length: ".$content_length);
header("Content-Type: application/octet-stream");
readfile("○○○○○");
?>
0113nobodyさん
03/07/20 14:20ID:???根本的に間違えすぎ_| ̄|○
header("Location: hoge2.php");
が、何をやってるのか考えて見ようよ。
一行づつ処理を日本語で書いてアルゴリズムで見て見たら?
ちょうど良い訓練になると思うよ?
0114nobodyさん
03/07/20 15:16ID:???う〜ん、おっしゃりたいのは
header("Location: hoge2.php");以下は無視される…ということでしょうか?ちがうのかな??
私も、最初はそう考えたためこの方法は無いな…考えたのですが
>>103のアドバイスがあったもので…
もう少しヒント(笑
0115nobodyさん
03/07/20 15:20ID:???最近「初心者」の正体が分かった気がする。
自己解決能力の有無だ。
歴も経験も知識も関係ねーよ。
0116104
03/07/20 15:28ID:???Perlもいろいろイビツなところあると思いますが、PerlのOOより残念な感じなんですか?
仕事で使えるほどPHP5が主流になるのはいつごろなんでしょか・・。
0117nobodyさん
03/07/20 15:29ID:???自分がやってる事を理解できないなら触らないほうがいい。
で、これ以上は答えになるから答えられない。
<?php
?>
の間を一行ずつ日本語にして見ろって。
$content_length = filesize("○○○○○");
だったら
ファイルサイズを取得して変数content_lengthに代入する。
とかな。
あれ?そういやここも初心者スレなかったっけ?
0118nobodyさん
03/07/20 15:31ID:???1年半から2年くらい先と踏んで見るテスト。
期待しなきゃ裏切られない。
逆に、自分の中で主流にしてガンガンBugを発見してレポート送ってあげれば
より早く回りも主流になるんじゃないの?
0119nobodyさん
03/07/20 16:09ID:???んじゃ Perl でやっておけばいいんじゃぁ、、必要性無いなら無理矢理不満や疑問かかえて PHP やる事ぁ無い。
俺の意見も >>116 の見積もりと同じ。
PHP4 解りません、PHP5 メインです、で大手振れるのはまだまだ先っぽい。
それに PHP はマイナーバージョンでも差違が大きいから何かある度に学習積むのは慣れちゃった、とかな。
何度も言うが PHP4 の OO も捨てたものではない。
それで作られた資産が PEAR には大量に転がっているのだからソレ見てから言え、と。
PHP4 もある意味今が旬って気もするし。資産増えてきたからね。
0120の
03/07/20 16:39ID:hbcbfQ42Location の動作はブラウザ依存だから、大半の場合無視されるみたいだ。
嘘ついてすまん。
0121nobodyさん
03/07/20 16:44ID:???マジ?(汗
確かにブラウザの実装次第かも知れないけど header('Location'… の指定は HTTP の基本的な部分で各ブラウザ間の実装による差違は気にしなくていいと思っていたんだけど。
教えて、エロい人 (´・ω・`)
0122nobodyさん
03/07/20 16:47ID:???ってーか無視するUAまだ見たことねぇ。
0123nobodyさん
03/07/20 16:48ID:???確かにブラウザ依存かもしれんが、
imodeブラウザですら認識するはず。
>>112には決定的な間違いがある気がするのだが。
0124あぼーん
NGNG0130nobodyさん
03/07/20 18:16ID:???う〜ん、わからん(笑
恥をしのんで書きます。
$content_length = filesize("○○○○○"); //ファイルサイズを取得して変数に代入
header("Location: hoge2.php"); //ファイル送信済みメッセージを表示する別スクリプトにリダイレクト
header("Content-Disposition: attachment; filename=○○○○○"); //ブラウザにダウンロード対象のファイル名を教える
header ("Content-Transfer-Encoding: binary");//同、バイナリであることを教える
header("Content-Length: ".$content_length); //同、ファイルサイズを教える
header("Content-Type: application/octet-stream"); //同、ダウンロードダウンロードダイアログを開かせる。
readfile("○○○○○"); //ダウンロード対象ファイルを出力
問題はheader("Location: hoge2.php");だと思うのですが
素人考えで場所をreadfileの後にもってきてもダメでした。
とりあえず、リダイレクトは他のheaderを生かしたまま行えるのですね?
とりあえず、これらのコードのどれかについて
とんでもない根本的な思い違いをしていることは
みんなの反応で気づいたのだが…欝です。
0131nobodyさん
03/07/20 18:32ID:???俺もよくわかんないけど、自分が必要になったら RFC 流し読みしてから
header('Location … を一つづつ追加しながら検証していくと思うな。
0133nobodyさん
03/07/20 18:42ID:???能力がちぐはぐすぎる_| ̄|○
> ファイル送信済みメッセージを表示する別スクリプトにリダイレクト
ここで気づいておくれよ(;´Д`)
リダイレクトって何をすることさ?
処理の順番をよーく見直そう。
0134nobodyさん
03/07/20 18:46ID:???Location:headerがあると大抵のブラウザでbodyは無視されると思った。
readfileでbodyに何を送ってもブラウザから見る限りなにも受け取れないまま
リダイレクト先に飛ばされるように見える。はず。
0135nobodyさん
03/07/20 18:46ID:???0136nobodyさん
03/07/20 19:11ID:jNo7yX6K0137nobodyさん
03/07/20 19:14ID:???私もこれがあるからリダイレクトでの結果表示は無理だと最初考えていたのですが…。どうなのでしょ?
>>133
すみません、また怒られそうですが何も考えず総当りで各行の後ろに
順番にLocationを入れてみたのだが全滅でした…。
もう少しじっくり考えてみます。
0138nobodyさん
03/07/20 21:57ID:JIvhBfkzFreeBSD-5.1Release + php でjpgraphを使っているのですが、phpのバージョンを
4.3.3RC1に上げたら、それまでは mb_convertを噛ましてEUC→UTF-8に文字コードを変換
しないと出来なかったグラフ上の日本語表示が mb_convert を外しても表示できるよう
(mb_convert を噛ませると化ける)ようになりました。
GD周りなのだと思うのですが、なぜEUCのまま日本語表示が可能になったのでしょう?
この辺りって4.3.3になって何か変わったんでしょうか?
0139の
03/07/20 22:04ID:hbcbfQ42そういうこと。
誰か助けて・・・。
やりたいこと:
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:???結論と考えていいですか?
すると、振り出しに戻ってしまうのですが(笑
ファイルを出力後に「出力完了」メッセージをブラウザに表示する…
なにかいい方法ないですか?
しつこいですか??
私の知識ではど〜しても思いつかないです。
0142の
03/07/20 23:32ID:hbcbfQ42JavaScript でダウンロードストリームを別に起こすとかに
なるんじゃないかな。やったことないけど。
0143の
03/07/20 23:41ID:hbcbfQ42マニュアル見てみ。
http://jp.php.net/manual/ja/function.addslashes.php
0144あぼーん
NGNG0145の
03/07/20 23:49ID:hbcbfQ42元々、GD の TrueType 文字描画は、EUC-JP, UTF-8 を自動判別していた。
自動判定だから、条件によっては間違えるからでは。
--
俺的ポータルサイトを作ろう
http://mysite.ddo.jp/
出来たー!
マジで助かりました。
ありがとう〜。
//chmマニュアルとGoogle検索だけだと見落としますね・・・。
//反省反省。
0147nobodyさん
03/07/21 00:12ID:???取り込むときに
たとえば、ファイルの50バイト目から、300バイト目を
指定して読み込むとしますよね。
そうしたときに、実際にダウンロードされるのは、
300バイトなのでしょうか?
それとも251バイトなのでしょうか?
0148nobodyさん
03/07/21 00:15ID:???私もお礼。
JavaScriptは、メッセージ表示に使うことばかり考えていて、
どうせファイル出力後はいかなる出力もアウトだよな…などとあきらめてた。
そうだよね、ダウンロードの方をやらせれば良いんだよね。
頭固くてガクッって感じです。
の さん。
2日にわたりありがとうございました。
でも遠回りして勉強になったよ!
0149nobodyさん
03/07/21 01:04ID:???<META HTTP-EQUIV="refresh" content="1; URL="ダウンロードしたいファイル">
を使っている。
流れとしては、1. 画面表示 2. refreshでダウンロード開始 って感じ。
0150nobodyさん
03/07/21 01:10ID:???ダウンロードストリーム作っても
「ダウンロード完了後に結果を表示」なんてことは無理じゃないかな?
ダウンロード完了後になにかブラウザがアクション返してくれればいいけど
そんなことしてるわけないし
無理っぽい。
0152nobodyさん
03/07/21 01:37ID:???最初の方の発言で書きましたが表示するメッセージの内容は
LHAで圧縮して1ファイルにまとめた
多量の画像やらテキストやらのファイル名の一覧で
「これだけのファイルを送信しましたよ」という確認の意味で表示します。
「送信完了メッセージ」というのはちょっとニュアンスが違いましたね。
すまそ。
にしてもPHPのheaderで送るにしても、JavaScriptで送るにしても
確かに「ダウンロード完了後に結果を表示」なんてことは出来るのだろうか??
ちょっと興味あり。っうか、やっぱ、まず無理???
0153nobodyさん
03/07/21 01:48ID:???その仕様なら >>149 でいけるね
やり方は sourcefourge.net いってダウンロードしてみるといいです
ブラウザ限定しそうだけど
「ダウンロード完了後に結果を表示」は無理だね。絶対に
0154nobodyさん
03/07/21 04:22ID:???Windows + IE 限定でがちがちに固めると大抵の事は何でも出来る。
TrendMicro のウイルスチェッカーもそうだし、MSDN で WindowsXP のダウンロードさせる際にはかなり出来のいい ActiveX ダウンローダーが動いていた。
ダウンロードの中断、再開まで出来た気がする。当然完了通知も有り。
まぁ違う話だけど言ってみた。
■ このスレッドは過去ログ倉庫に格納されています