【PHP】下らねぇ質問はここに書き込みやがれ 24
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/07(金) 14:54:53ID:KnVubDvEここならお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0129nobodyさん
2006/07/09(日) 23:06:11ID:???基本的な発想はそれしかない
文字列の長さを調べる関数は少なくとも3つ
strlenとmb_strlenとmb_strwidthがあるけど
どれを選ぶかはケースバイケースだね
0131nobodyさん
2006/07/09(日) 23:08:30ID:vjWeIelg0132nobodyさん
2006/07/09(日) 23:20:56ID:???マニュアルのセッションのページに書いてあるよ。
簡単に言うと、どういう形式でセッション情報を保持するかを指定するためのもの。
0134nobodyさん
2006/07/10(月) 08:05:28ID:pIRoiH69unset
0135nobodyさん
2006/07/10(月) 09:20:16ID:DXTeExGF>明示的指定がなければ文字化けすることはあります。
>エンコーディングを指定してください。
と言われたのですが、どうやって指定すれば良いのでしょうか?
0136nobodyさん
2006/07/10(月) 09:49:25ID:???何をしようとして、そういわれたのかがわからないが
php.iniの設定を変えれば、もしかしたら、君が望む結果が得られるかも
0137nobodyさん
2006/07/10(月) 09:50:29ID:???0138135
2006/07/10(月) 10:14:35ID:DXTeExGFすみません、サーバーにアプロードして、
セッションに格納すると文字化けするのですよ。
それを報告したらそのような返答が返ってきました。
どうにかして、エンコーディングを指定する方法はないのでしょうか?
0139nobodyさん
2006/07/10(月) 13:07:21ID:???0140nobodyさん
2006/07/10(月) 13:20:37ID:pIRoiH690141135
2006/07/10(月) 14:35:25ID:Q6XjtIhe>>139
良かったら教えていただけませんか?
.htaccessは使えないみたいです
0142軟式PHP
2006/07/10(月) 15:51:50ID:???0143135
2006/07/10(月) 15:56:12ID:Q6XjtIhe実行中に適用させるのですよね。
ini_set("internal_encoding","sjis");
と書くだけで良いのでしょうか?
0144nobodyさん
2006/07/10(月) 15:57:23ID:???試してみる。
マニュアルを読む。
http://jp.php.net/manual/ja/function.ini-set.php
0145135
2006/07/10(月) 16:01:17ID:Q6XjtIhembstring.encoding_translation 「On」「 Off 」
mbstring.func_overload 「0 」「0 」
mbstring.http_input 「auto」「 pass 」
mbstring.http_output 「SJIS」「 pass 」
mbstring.internal_encoding 「SJIS」「 no value 」
mbstring.language 「Japanese」「 neutral 」
mbstring.substitute_characte 「no value 」「no value 」
何を変更して良いのかちょっとわからないです・・・。
0146nobodyさん
2006/07/10(月) 16:10:20ID:???学生って何学生だ? もうちょっと人に伝えよう・理解してもらおうと努力しーや。
> 何を変更して良いのかちょっとわからないです・・・。
知らんがな。>>138 の
> どうにかして、エンコーディングを指定する方法はないのでしょうか?
に答えただけやがな。
そもそも >>138 の
> セッションに格納すると文字化けするのですよ。
の解決策はそれで合っているのか自分で考えたか?
0147135
2006/07/10(月) 16:30:53ID:Q6XjtIheこれを直したいだけなのですが、どうしていいかわからずさっぱりなのです。
0148asa
2006/07/10(月) 16:33:32ID:my/rgI9cメールにあるURLを記載し、そのURLをクリックするとファイルをダウンロードできるというものを作成したいと思っています。
(urlはhttp://www.hoge.com/moe/download.php?file_no=1という感じです)
しかし条件として、ブラウザを画面上に表示させないという制約があります(瞬間的に表示されるのはOKです)。
現在、下記のソースでファイルダウンロードを実行すると
1.IDが立ち上がる
2.ファイルダウンロードするかの選択ダイアログの表示される
3.『保存』を選択するとファイルはDLさせるが、IEの画面がそのまま残り
『取り消されたアクション Internet Explorer は、要求された Web ページにリンクできませんでした。
要求された Web ページは現在、利用できない可能性があります。 』という画面になる。
という流れになります。
ここで3)において、エラー(?)が表示されたブラウザを
閉じさせるということはできますでしょうか。
zipやlzhは、IEが一瞬だけ表示されすぐに消え理想的な動作をするのですが、
txt,pdf,docなどはIEが開かれたままになってしまいます。
わかるかたがいらっしゃいましたら
ご教授お願い致します。
$file_name="/usr/local/docs/hoge.txt";
$len = filesize($file_name);
//ファイルタイプにより処理を変更
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Content-Disposition: attachment ; filename=\"".basename($file_name)."\"");
header("Content-Length: ". $len);
header("Content-Type: application/octet-stream");
readfile($file_name); // ファイルを読み込んでHTTP出力
exit;
環境Linux9PHP4
0149nobodyさん
2006/07/10(月) 16:35:06ID:???それだけじゃ分からない。
文字化けする時は PHP ファイルの文字コードとか諸々の情報を提示しないと。
こんなやりとりが延々続くんだろうな…
0150nobodyさん
2006/07/10(月) 16:36:20ID:???リクエストヘッダを取得する処理をしていました。
サーバを移行して、cgi版PHPになりました。
apache_request_headers以外でリクエストヘッダを獲得する方法ってありますか?
0152135
2006/07/10(月) 17:12:42ID:Q6XjtIheお付き合い頂ければ幸いです。
各種PHPの保存する時の文字コードも関係するのですね。
Dreamweaver8で、デフォルトで保存しているのですが、どうやって調べれば良いのでしょうか?
0153150
2006/07/10(月) 17:14:01ID:???ゲートウェイサーバから送信されるx-up-subnoフィールドです。
$_SERVERにも$_REQUESTにも引っかからないので
さあ困ったなぁと。
0154135
2006/07/10(月) 17:16:26ID:Q6XjtIhe初期設定がシフトJISで、コードの方は全然いじっていません。
サーバーはUTS-8を使っているらしいので、設定をそれにして上書きすれば大丈夫ということですね?
0158nobodyさん
2006/07/10(月) 17:29:51ID:???0159135
2006/07/10(月) 17:30:02ID:Q6XjtIheサーバーに上げると何も表示されなくなってしまいました。
UTS-8ではダメみたいです。
真剣に行き詰りました・・・
0161nobodyさん
2006/07/10(月) 17:31:18ID:???0162135
2006/07/10(月) 17:36:57ID:Q6XjtIhe0163nobodyさん
2006/07/10(月) 17:42:00ID:???言われたことも間違ってやってそうな…
0164nobodyさん
2006/07/10(月) 17:51:46ID:???うそっぽーい
自分で問題を絞り込むことができないから、こういう文章に
なるんだな。
だいたい、こういう表現するやつに限ってセッションなんて
全く関係ないところでボンミスしてるにきまってる。
日本語使わなければ化けないだろうから即解決だよ。
それでいいじゃん。
0165135
2006/07/10(月) 17:51:50ID:Q6XjtIheecho $_SESSION['name'][$_GET['id']];
出力すると文字化けします
0166164
2006/07/10(月) 17:54:19ID:???でも化けてるんじゃないのー
0167135
2006/07/10(月) 17:57:09ID:Q6XjtIhe「あああ」⇒「あああ」
「・・・」⇒「/font>」
0169135
2006/07/10(月) 18:02:20ID:Q6XjtIhe0170164
2006/07/10(月) 18:02:34ID:???何が言いたいのか全く意味わからんぞ・・・
それで伝わるとおもってるのか?俺はエスパーか?
ていうか、
echo "アイウエオ"
で化けるのか?化けんのか?
俺が言ってることは伝わってるのか?
あんたは宇宙人か?
0171135
2006/07/10(月) 18:06:26ID:Q6XjtIheすみません、アイウエオでは文字化けしません、
0172164
2006/07/10(月) 18:10:23ID:???<?php
$_SESSION['name'][$_GET['id']] = "アイウエオ";
echo $_SESSION['name'][$_GET['id']];
?>
では化けて
<?php
echo "アイウエオ";
?>
は化けないってことか?
じゃぁ、
<?php
$_SESSION['name'] = "アイウエオ";
echo $_SESSION['name'];
?>
これは化けるのか?化けんのか?
<?php
$aaa = "アイウエオ";
echo $aaa;
?>
これは化けるのか?化けんのか?
0173nobodyさん
2006/07/10(月) 18:16:38ID:???・PHP から出力される HTML の文字コード
・HTML にて指定されている文字コード
・PHP スクリプトの文字コード
はどうなっているのか、と。
内部エンコーディングの問題以前に、上記のミスマッチによっては化けるものは化ける。
0174135
2006/07/10(月) 18:18:00ID:Q6XjtIhe$_SESSION['var2'] = "ABCDE";
$_SESSION['var3'] = "あいうえお";
$_SESSION['var4'] = "管表示線銃";
$_SESSION['var5'] = "ァエオケム";
$var1 = "12345";
$var2 = "ABCDE";
$var3 = "あいうえお";
$var4 = "管表示線銃";
$var5 = "ァエオケム";
全て正常に出力されました。
なぜ、他のではちゃんと出力されないか疑問です。
0175nobodyさん
2006/07/10(月) 18:21:50ID:???>>174
> $_SESSION['var1'] = "12345";
> $_SESSION['var2'] = "ABCDE";
> $_SESSION['var3'] = "あいうえお";
> $_SESSION['var4'] = "管表示線銃";
> $_SESSION['var5'] = "ァエオケム";
これと
> $var1 = "12345";
> $var2 = "ABCDE";
> $var3 = "あいうえお";
> $var4 = "管表示線銃";
> $var5 = "ァエオケム";
これの関連性が意味不明。何を例示しているつもり?
> なぜ、他のではちゃんと出力されないか疑問です。
「他」とは? 「ちゃんと出力されない」とは?
0176135
2006/07/10(月) 18:27:18ID:Q6XjtIhehttp://www.uploda.org/uporg441589.zip
ローカルサーバーでは実行できるのに、アップしたら文字化けします。
0177164
2006/07/10(月) 18:28:46ID:???$_SESSION['name'][$_GET['id']] = "アイウエオ";
echo $_SESSION['name'][$_GET['id']];
を最初の始まりとするなら、
そこから少しずつ(1条件ずつ)簡易なものに書き換えて
トライアンドエラーしないと意味無いだろ。
$_SESSION['name'][$_GET['id']] = "アイウエオ";
echo $_SESSION['name'][$_GET['id']];
を基点に原因探ってるのに、
>> 174
には "アイウエオ" が含まれてないのは
おかしいだろ?
文字列が"アイウエオ"のときだけ起きる動作不良だったら
みつけられないだろうが?
0178164
2006/07/10(月) 18:34:01ID:???>ローカルサーバーでは実行できるのに、アップしたら文字化けします。
おまえなぁ。。。
最初から質問の仕方まちがってるだろうがぁ!!!!!!!!!!!!
ちなみに言わしてもらうなら、
「ローカルサーバでは*実行*できるのに」
ってなんなんだ?
「ローカルサーバでは期待通り文字化けせず出力されるのに」
だろうが?
で、丸投げかよ・・・
こいつダメだな。。。
0185135
2006/07/10(月) 21:07:08ID:Q6XjtIheはい、全然未熟ですけど
あと、>>164さんみたいな方でも教えていただけると嬉しいです。
丸投げなやり方になってしまってすみません。
0186135
2006/07/10(月) 21:08:50ID:Q6XjtIheecho $name_color."<BR>";
echo $com_color."<BR>";
echo $px."<BR>";
echo $log."<BR>";
echo $reload_time."<BR>";
$_SESSION['name'][$_GET['id']]= substr($name,0,20);
$_SESSION['name_color'][$_GET['id']]= $name_color;
$_SESSION['com_color'][$_GET['id']]= $com_color;
$_SESSION['px'][$_GET['id']]= $px;
$_SESSION['log'][$_GET['id']]= $log;
$_SESSION['reload_time'][$_GET['id']]= $reload_time;
echo $_SESSION['name'][$_GET['id']]."<BR>";
echo $_SESSION['name_color'][$_GET['id']]."<BR>";
echo $_SESSION['com_color'][$_GET['id']]."<BR>";
echo $_SESSION['px'][$_GET['id']]."<BR>";
echo $_SESSION['log'][$_GET['id']]."<BR>";
echo $_SESSION['reload_time'][$_GET['id']]."<BR>";
0187135
2006/07/10(月) 21:09:27ID:Q6XjtIheあああ
#FFFF00
#00FF00
16
20
40
・BR>#
#
1
2
4
このように出力されました。(index.php)
まだお答えいただける方がいれば嬉しいです
0189nobodyさん
2006/07/10(月) 21:20:21ID:???DBに認証用のパスワード入れてるのかよ!
0190135
2006/07/10(月) 21:23:38ID:Q6XjtIheローカルサーバーでは文字化けせずにスムーズに実行されるのですが、
サーバーにアップロードすると、どうしてもこの部分で文字化けがおきるのですよ
0192135
2006/07/10(月) 21:30:57ID:Q6XjtIhe全て中身は
「a|s:6:"あむろ";b|s:8:"ぶらいと";c|s:10:"きゃすばる";」
というのが書かれていました、
0194nobodyさん
2006/07/10(月) 21:34:26ID:???0195135
2006/07/10(月) 21:35:44ID:Q6XjtIheSHIFT-JISでした。
0196nobodyさん
2006/07/10(月) 21:40:20ID:???前々スレの>>36を実行した後の消し忘れです。
本当にありがとうございました。
本当は文字化けなんかじゃなくて、単にセッションに入ってねーんじゃねーの?
0197nobodyさん
2006/07/10(月) 21:44:00ID:???環境依存ってならエンコでもして入れとけば良いだろう
0199nobodyさん
2006/07/10(月) 21:53:45ID:???はっきり言って俺にはこれが文字化けの問題とは思えん。
0200135
2006/07/10(月) 21:56:56ID:Q6XjtIhe//セッションに名前を全角10文字まで入力
$_SESSION['name'][$_GET['id']]= substr($name,0,20);
$_SESSION['name_color'][$_GET['id']]= $name_color;
$_SESSION['com_color'][$_GET['id']]= $com_color;
$_SESSION['px'][$_GET['id']]= $px;
$_SESSION['log'][$_GET['id']]= $log;
$_SESSION['reload_time'][$_GET['id']]= $reload_time;
print_r($_SESSION['name'][$_GET['id']]);
print_r($_SESSION['name_color'][$_GET['id']]);
print_r($_SESSION['com_color'][$_GET['id']]);
print_r($_SESSION['px'][$_GET['id']]);
print_r($_SESSION['log'][$_GET['id']]);
print_r($_SESSION['reload_time'][$_GET['id']]);
と、させてみたところ、出力は
#124
だけでした。
何がなんだかサッパリですorz
0203135
2006/07/10(月) 22:13:39ID:Q6XjtIheすみません、勘違いです
Array ( [log] => 20 2 [name] => あああ [name_color] => #FFFF00 # [com_color] => #00FF00 # [px] => 16 1 [reload_time] => 40 4 [pass] => )
と、出力されました。
中にはちゃんと入っているということは、出力時に文字化けするということでしょうか
0204nobodyさん
2006/07/10(月) 22:23:07ID:???どのみち馬鹿とPHPが使えないのはハッキリしたな
0205nobodyさん
2006/07/10(月) 22:33:38ID:???試しに以下のコードを書いて実行してみたが、
<?php
$name = "0"; $name_color = "1"; $com_color = "2"; $px = "3";
$log = "4"; $reload_time = "5"; $g['id'] = "6";
$s['name'][$g['id']]= substr($name,0,20);
$s['name_color'][$g['id']]= $name_color;
$s['com_color'][$g['id']]= $com_color;
$s['px'][$g['id']]= $px;
$s['log'][$g['id']]= $log;
$s['reload_time'][$g['id']]= $reload_time;
print_r($s);
?>
結果として得られたのは以下だった。
Array (
[name] => Array ( [6] => 0 )
[name_color] => Array ( [6] => 1 )
[com_color] => Array ( [6] => 2 )
[px] => Array ( [6] => 3 )
[log] => Array ( [6] => 4 )
[reload_time] => Array ( [6] => 5 )
)
0206nobodyさん
2006/07/10(月) 22:41:22ID:???× 馬鹿とPHPが使えない
○ 馬鹿と>>135と>>204にはPHPは使えない
俺は>>176見てないからあれだけど、
問題が文字化けだけじゃないのはもう間違いない。
0207nobodyさん
2006/07/10(月) 22:53:01ID:???0208nobodyさん
2006/07/10(月) 23:06:22ID:???0209nobodyさん
2006/07/10(月) 23:13:06ID:???> 中にはちゃんと入っているということは、
それが本当にprint_r($_SESSION)の結果だとしたら、
$_SESSION[name][$_GET['id']]であるべきものが$_SESSION[name]になってないか?
$_SESSION[name][$_GET['id']]が$_SESSION[$_GET['id']][name]の間違いで
さらにprint_r($_SESSION[$_GET['id']])でも見たならまた別だろうが、
それでも妙なゴミデータがくっついているように見える。
もう諦めて丸投げスレにでも行った方が良いと思う。
0210164
2006/07/10(月) 23:36:16ID:???echo "phpversion(): ". phpversion() . "<br />";
echo "php_sapi_name(): ". php_sapi_name() . "<br />";
echo "php_uname(): ". php_uname() . "<br />";
echo "zend_version(): ". zend_version() . "<br />";
echo "<hr />";
echo "get_loaded_extensions(): <br />";
foreach (get_loaded_extensions() as $name) {
echo $name . ", ";
}
echo "<hr />";
0211164
2006/07/10(月) 23:37:33ID:???echo "mbstring.detect_order: ". ini_get("mbstring.detect_order") . "<br />";
echo "mbstring.http_input: ". ini_get("mbstring.http_input") . "<br />";
echo "mbstring.http_output: ". ini_get("mbstring.http_output") . "<br />";
echo "mbstring.internal_encoding: ". ini_get("mbstring.internal_encoding") . "<br />";
echo "mbstring.script_encoding: ". ini_get("mbstring.script_encoding") . "<br />";
echo "mbstring.encoding_translation: ". ini_get("mbstring.encoding_translation") . "<br />";
echo "mb_regex_encoding(): ". mb_regex_encoding() . "<br />";
echo "get_magic_quotes_gpc(): ". get_magic_quotes_gpc() . "<br />";
echo "get_magic_quotes_runtime(): ". get_magic_quotes_runtime() . "<br />";
echo "<hr />";
0212164
2006/07/10(月) 23:38:41ID:???$src_encoding = mb_detect_encoding($teststr, "auto");
echo "mb_detect_encoding(): $src_encoding <br />";
echo "<hr />";
echo "$src_encoding -> EUC-JP: " . mb_convert_encoding($teststr, "EUC-JP", $src_encoding) . "<br />";
echo "$src_encoding -> SJIS: " . mb_convert_encoding($teststr, "SJIS", $src_encoding) . "<br />";
echo "$src_encoding -> UTF-8: " . mb_convert_encoding($teststr, "UTF-8", $src_encoding) . "<br />";
?>
0213nobodyさん
2006/07/11(火) 00:15:35ID:???array_rand($arr); // return $key
array_rand($arr, 1); // return $key
array_rand($arr, 2); // return array($key, $key);
っておかしくね?
1はarray($key)になってほしくね?
欲を言えばarray_rand($arr, 0)もエラーじゃなくてarray()が返ってくれなきゃ使いづらくね?
0214nobodyさん
2006/07/11(火) 00:38:13ID:???0215nobodyさん
2006/07/11(火) 01:31:09ID:???前スレ900後半で思いっきり誰の目にも触れられずあぼーんしたので
再度書かせてください。
サーバからFTPにログインして、指定のファイルをブラウザに出力、
訪問者にダウンロードダイアログが出るようにしたいんですが、
どんな方法があるでしょうか?
content typeのlocationで直接ftp://指定すれば、とレスをいただきましたが、
ftp://をブラウザ経由でしてしまうとパスワードが流れてしまいますし、
ブラウザの履歴にも残るので、
サーバーからlocalhostにftpに接続して、それをブラウザに出力、
という流れを取りたいと考えています。
この関数使え、とかのヒントでもいいので
教えて下さいませ
0216nobodyさん
2006/07/11(火) 02:29:18ID:???そんな奇怪な方法をどういう経緯で選んだのか前スレ読み返しても分からなかった。
無駄なことしてるというのは十分伝わって来るんだけど…
0217nobodyさん
2006/07/11(火) 02:32:35ID:???何がやりたいのかよくわからんからスルーされるんじゃね?
>この関数使え、とかのヒントでもいいので
1.ftp_*()でファイルを取得
2.header()で適切なヘッダを出し
3.readfile()でもして出力
サーバのFTPDにアクセスするのかね?
ファイルがファイルシステムで直接読めるなら
header();
readfile();
でオワリ
どんなヘッダを送るのかとかはphpの問題じゃないので省略。
0218nobodyさん
2006/07/11(火) 02:43:03ID:???なぁ、お前ら「良いプログラム」って何だ?
PHPは確かにC言語チックな見た目でPerlなんかより全然見やすいコードが書けるけど
それでも俺のコードは醜い気がする・・・
0219nobodyさん
2006/07/11(火) 02:59:24ID:???「良い」てーのはそれを見る相手や状況によって違うんじゃないか
xxが良いとかなんか無いの?
それにしても誰に何を言われたんだかw
0220nobodyさん
2006/07/11(火) 03:56:32ID:???・理解しやすい
・再利用しやすい
えーとそれから・・・なにがあったっけ?
0221nobodyさん
2006/07/11(火) 04:39:51ID:???人が理解しにくいとか?
0222nobodyさん
2006/07/11(火) 07:15:25ID:???mbstring.encoding_translation 「On」「 Off 」
これが原因じゃないかと思うけどね
0223135
2006/07/11(火) 08:59:10ID:BuTz0b5N>>222
自動でエンコーディングされるんですよね。
自分のローカルサーバーは両方Onになっています。
これは.htaccessで指定可能なのでしょうか?
0224135
2006/07/11(火) 09:06:23ID:BuTz0b5N全て自分の環境と同じにしようと思ったのですが、それは可能なのでしょうか?
0225nobodyさん
2006/07/11(火) 09:27:24ID:???つ ttp://www.php.net/manual/ja/configuration.changes.php
対象フォルダに"AllowOverride Options" もしくは "AllowOverride All" 権限があって、
PHPのマニュアルにおいて変更の可否がPHP_INI_ALL, PHP_INI_PERDIR, または PHP_INI_SYSTEM と
指定されているもののみ可能。
0226225
2006/07/11(火) 09:28:40ID:???0227135
2006/07/11(火) 09:34:49ID:BuTz0b5N$_SESSIONにはちゃんと変数が格納されている。
$_SESSIONを出力する時に文字化けが起きる。
.htaccessが使える。
エンコーディングはSJIS
phpinfo()⇒>>145
サーバー管理者に問い合わせたところ、
「phpの場合は、内部エンコーディングがUTF-8になっているので、明示的指定がなければ文字化けすることはあります。
エンコーディングを指定してください。」と返ってきた。
■ このスレッドは過去ログ倉庫に格納されています