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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/03/21(火) 10:19:14ID:???
PHP全般の質問スレです。>>2-10も参照。

【ガイドライン】
質問の前にgoogleやマニュアルを検索してください。
http://www.php.net/manual/ja/
http://php.s3.to/namazu/


◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄には何も記述しないでください)
2. ハードウェア、OSのバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。
5. 質問者としても態度をわきまえること。


◆質問後の注意
・質問者は必ずIDを表示させてください。
  書き込む場合はメール欄に何も記述しないでください。
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
  (逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
  (荒らし、煽りは除く)

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)

過去スレ、関連リンク、FAQ等>>2-10辺り
0002nobodyさん2006/03/21(火) 10:19:54ID:???
前スレ
【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/
【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
【PHP】質問スレッドpart31【php】
http://pc8.2ch.net/test/read.cgi/php/1133017632/
【PHP】質問スレッドpart30【php】
http://pc8.2ch.net/test/read.cgi/php/1130190606/


関連リンク
■本家マニュアル   http://www.php.net/manual/ja/
■日本PHPユーザ会 http://www.php.gr.jp/
■PEARマニュアル  http://pear.php.net/manual/ja/
■メーリングリスト   http://ns1.php.gr.jp/mailman/listinfo/

 (以下英語)
■Smarty       http://smarty.php.net/
■Zend本家      http://www.zend.com/
■Zend Framework  http://framework.zend.com/
■php | architect   http://www.phparch.com/
■Smartyマニュアル http://smarty.php.net/manual/en/
■ZFマニュアル    http://framework.zend.com/manual/en/
■PECL本家(英語) http://pecl.php.net/

まだ英語しかないマニュアルも後々/manual/en/を/manual/ja/に変えてみたら日本語があるかもしれません。
0003nobodyさん2006/03/21(火) 10:20:32ID:???
関連スレ
【PHP】下らねぇ質問はここに書き込みやがれpart18
http://pc8.2ch.net/test/read.cgi/php/1142417901/
【PHP】PEAR Part2
http://pc8.2ch.net/test/read.cgi/php/1122899232/
[PHP]フレームワークについて語るスレ2[総合]
http://pc8.2ch.net/test/read.cgi/php/1135847024/
【Smarty】PHPのテンプレートエンジン【Flexy】
http://pc8.2ch.net/test/read.cgi/php/1118799352/
[PHP-users MLヲチ8]巣もいませんでした。
http://pc8.2ch.net/test/read.cgi/php/1132800251/
正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/(落ち)
Webでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1133489897/

関連板
データベース(SQL、DBMSの話題はこちら)
http://pc8.2ch.net/db/
プログラム(CLI、アルゴリズム、インタプリタの話題はおそらくこちら)
http://pc8.2ch.net/tech/
Web制作(クライアントサイドの話題は問答無用でこちら)
http://pc8.2ch.net/hp/
0004nobodyさん2006/03/21(火) 10:21:06ID:???
【簡易FAQ】
1. ブラウザに何も表示されないんだけど・・・
 → error_reporting()や、php.iniのdisplay_errors、log_errorsを確認
2. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
 → できません
3. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
 → 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
4. echo "$arr['hoge']['fuga']"; がうまくいかない
 → {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
5. echo?print?
 → echoはコンマ区切りで書けるけど関数ではない。printは関数。パフォーマンスは気にするな
6. 値渡しと参照渡し(「&」を使う)のパフォーマンス
 → この二つはパフォーマンス目的で使いわけたらダメ。よく知らずに参照渡しにすると遅くなったりする
  参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
7. CSVやTSVのファイルをスマートに扱いたい
 → まずはfgetcsv()
8. ファイル入出力関数(fopen等)でリモートファイル(http://〜とか)を扱う際の限界
 → fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
  必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
9. 一定時間ごとに何かしたい
 → cron、タスクスケジューラ
10. 画像処理一般 or GDの限界
 → ImageMagick(PECLのやつ or シェルから実行)
0005nobodyさん2006/03/21(火) 10:21:38ID:???
11. 画像・音・動画はファイルで保存?DBに保存?
 → 好きにしてください
12. クッキーの情報をユーザから隠したい
 → セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
13. このスレに書き込むときに自分のサイト名を晒したくない
 → http://example.com/が例文などのために予約されている
14. SQLの質問はどこで?
 → データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
15. 記号の意味がわからないけどググりようがない
 → 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス
  「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
16. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
 → ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
17. strip_tags()で削除しないタグを複数指定したい
 → strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
18. そもそもインストールの時点でうまくいかない
 → 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
  Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
19. PHPからPOSTリクエストしたい
 →8.を参照
0006nobodyさん2006/03/21(火) 10:48:30ID:???
>>1
乙。GJ
0007nobodyさん2006/03/21(火) 10:52:53ID:???
>>1
乙です。

以前、
> 2. ハードウェア、OSのバージョン等を明記すること。
について議論なかったっけ?
バージョンに関しては、基本的に必要なのはPHPのバージョンだけで、内容によってはWebサーバとそのバージョン、もしくはOSやハードウェアって感じになると思うんだけど。

まあ「そんなテンプレ律儀に守る奴いねーよ」って言われればそれまでなんだけどさ。
0008nobodyさん2006/03/21(火) 11:00:37ID:???
> 2. ハードウェア、OSのバージョン等を明記すること。

確かにハードのバージョン書くよりは
phpやサーバのバージョンのほうが情報として意味があるよな
0009nobodyさん2006/03/21(火) 11:10:13ID:???
ハードウェア情報を書かれても困る
もっと大事な情報が欲しい
0010nobodyさん2006/03/21(火) 11:21:23ID:???
最低限PHPのバージョンだな。PHP4と5では違いが大きすぎる。
まさかPHP3使ってるやつはそういないだろうが…
0011nobodyさん2006/03/21(火) 12:21:43ID:???
> 5. echo?print?
 → echoはコンマ区切りで書けるけど関数ではない。printは関数。パフォーマンスは気にするな


printは厳密には言語関数
http://jp2.php.net/manual/ja/function.print.php
0012112006/03/21(火) 12:22:48ID:???
訂正
×言語関数
○言語構造
0013nobodyさん2006/03/21(火) 14:18:41ID:???
エスパーキボンのテンプレはカット?
↓これも追加希望

わからない五大理由
1 読まない
2 調べない
3 試さない
4 理解力が足りない
5 人を利用することしか頭にない
0014nobodyさん2006/03/21(火) 14:25:43ID:???
>>13
俺もエスパーキボンヌは名残惜しいが、ハァ?って言う人の気持ちもわからなくもないのであえて文句は言わないことにした。
その5大理由も久々に見たなw
900台で訴えないとたぶんカットされるよ。
0015nobodyさん2006/03/21(火) 14:31:38ID:???
>>11
次スレで修正が必要だね。

5. echo?print?
 → 同じ。

でどうよ?
標準的にはechoを使ったほうがいいのかな。マニュアルでも随所でechoを使ってるし。
0016nobodyさん2006/03/21(火) 14:40:40ID:???
>>13
元はといえばそれが改編の火種だから
入れるのは好ましくないと思う
0017nobodyさん2006/03/21(火) 14:55:57ID:???
>>16
> 元はといえばそれが改編の火種だから

むしろテンプレ全体がわかりづらかったから変えることになったんでしょ。
0018nobodyさん2006/03/21(火) 15:46:54ID:???
>>13は糞質問をしないandさせないために必要
0019nobodyさん2006/03/21(火) 16:58:15ID:???
糞質問は普通にスルーすればいいじゃん
0020nobodyさん2006/03/21(火) 17:28:29ID:???
嫌でも俺が貼るから意味ナス
0021nobodyさん2006/03/21(火) 18:15:18ID:???
点プレファックを余り充実させすぎると、
以降全ての回答が、
>>1-30
とかになるお燗
0022nobodyさん2006/03/21(火) 18:40:48ID:???
>>13
エスパーのやつここが元ネタかな?
http://www.redout.net/data/osietekun.html
0023nobodyさん2006/03/22(水) 02:04:05ID:???
ひとまず前スレ埋めようか
0024nobodyさん2006/03/22(水) 03:18:05ID:???
お、テンプレ変わったね。だいぶ良くなったな
0025nobodyさん2006/03/22(水) 04:24:14ID:???
wiki URL
http://wiki.2chx.net/php/
ところで、2chx.netは自宅鯖?
0026nobodyさん2006/03/22(水) 06:28:37ID:???
環境
win XP PRO SP2
php 5.1
apache 2.0(SSL対応)

MySQL 改良版拡張サポート(mysqli)を使用するためには、
php.iniの extension=php_mysqli.dll を有効にするだけでいいのでしょうか?

extensionのパスも、php_mysqli.dllの存在も確認済みです。
0027nobodyさん2006/03/22(水) 07:22:05ID:???
>>26
libmysql.dllをDLLパスの通ってるところに放り込む。
0028nobodyさん2006/03/22(水) 10:31:28ID:???
win XP PRO SP2
php 5
httpd

$str = '日本語';
echo $str;
echo "\n";
$hex = bin2hex($str);
echo $hex;
echo "\n";
$bit = base_convert($hex,16,2);
echo $bit;
echo "\n";
echo base_convert($bit,2,16);
$hex = base_convert($bit,2,16);

ここまでは出来たんですが、16進からバイナリに治せないんです
packでやっても変な ] これしか出ないので調べたらfloat型なのでぜんぜん足りないと解釈しました
ぜんぜん違うやり方でも良いので
バイナリ to 2と2 to バイナリできませんか?
0029nobodyさん2006/03/22(水) 11:30:51ID:???
質問の意図が掴みづらいが、そこまで出来んのに何やってんの?

<?php
$str = '日本語';
echo $str, "\n";
$bit = base_convert(bin2hex($str), 16, 2);
echo $bit, "\n";
$bin = pack('H*', base_convert($bit, 2, 16));
echo $bin;
0030nobodyさん2006/03/22(水) 11:31:24ID:???
質問の意図が掴みづらいが、そこまで出来んのに何やってんの?

<?php
$str = '日本語';
echo $str, "\n";
$bit = base_convert(bin2hex($str), 16, 2);
echo $bit, "\n";
$bin = pack('H*', base_convert($bit, 2, 16));
echo $bin;
0031nobodyさん2006/03/22(水) 11:32:02ID:???
質問の意図が掴みづらいが、そこまで出来んのに何やってんの?

<?php
$str = '日本語';
echo $str, "\n";
$bit = base_convert(bin2hex($str), 16, 2);
echo $bit, "\n";
$bin = pack('H*', base_convert($bit, 2, 16));
echo $bin;
0032nobodyさん2006/03/22(水) 11:39:12ID:???
・・・・・・・そんな顔してみないで                                             やったはずなのに
0033nobodyさん2006/03/22(水) 12:16:56ID:???
>>32
ハゲワロタwwwwwwwwwwwwwwwwwwwwwwwwww
0034掃除屋 ◆2ch..Ybe0Q NGNG
>>25
自宅鯖(玄箱Debian)です。
0035262006/03/22(水) 13:06:28ID:???
>>27
ありがとうございます。
やはりdllをしっかり参照させるだけで使用できるみたいですね

実はmysqliを使用したプログラムが動かず悩んでいます。
あるサンプルスクリプトをmysqli用にカスタマイズしたものです。

※あるサンプルスクリプト
http://www.trustbee.com/work/book.phpのサンプルスクリプトのダウンロードからダウン。
解凍してできたフォルダの section_36 の session_db.inc.php がカスタマイズ元。

サンプル( session_db.inc.php )をそのまま使用すると動くのですが、
mysqliを使用したものに書き換えるとエラーが出ます。
エラー内容は、

( function write()のクエリ実行部分 )
Warning: mysqli_query() [function.mysqli-query]: Couldn't fetch mysqli in C:\www\session_db.inc.php on line 42
Query failed
( function close()のDB切断部分 )
Warning: mysqli_close() [function.mysqli-close]: Couldn't fetch mysqli in C:\www\session_db.inc.php on line 17

です。
以下がそのプログラムです。エラー原因がわかりません。どなたかお願いします。
0036262006/03/22(水) 13:07:26ID:???
※構成
1)データベース( session_test )
CREATE TABLE session (
id varchar(32) NOT NULL default '',
sess_data text NOT NULL,
timestamp timestamp(14) NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;

2)index.php
<?php
require_once( 'session_db.inc.php' );
$_SESSION['name'] = "name";
?>

3)session_db.inc.php(カスタマイズしたもの)
<?php
// 接続用関数
function open( $save_path, $session_name ) {
global $db;
$db = mysqli_connect( "host", "user", "pass", "session_test" );
if ( mysqli_connect_errno() ) die ( "Connect failed" );
return (true);
}

// 切断用関数
function close() {
global $db;
mysqli_close( $db );
return (true);
}
0037262006/03/22(水) 13:08:07ID:???
// セッション情報読込用関数
function read( $id ) {
global $db;
// 対象IDのレコードを取得
$sql = "SELECT sess_data FROM session WHERE id='$id'";
$result = mysqli_query( $db, $sql );
if ( !$result ) die ( "Query failed" );
list($sess_data) = mysqli_fetch_row( $result );
return $sess_data;

} // セッション情報保存用関数
function write ( $id, $sess_data ) {
global $db;
// 対象IDのレコードの存在をチェック
$sql = "SELECT id FROM session WHERE id='$id'";
$result = mysqli_query( $db, $sql );
if ( !$result ) die ( "Query failed" );
list( $check_id ) = mysqli_fetch_row( $result )

// 対象IDのレコードが存在する場合は更新、なければ追加
if ( $check_id )
$sql = "UPDATE session SET sess_data='$sess_data' WHERE id='$id'";
else
$sql = "INSERT INTO session (id, sess_data) VALUES ('$id', '$sess_data')";
$result = mysqli_query( $db, $sql );
if ( !$result ) die ( "Query failed" );
return true;
}
0038262006/03/22(水) 13:08:56ID:???
// セッション情報削除用関数
function destroy ( $id ) {
global $db;
// 対象IDのレコードを削除
$sql = "DELETE FROM session WHERE id='$id'";
$result = mysqli_query( $db, $sql );
if ( !$result ) die ( "Query failed" );
return true;
}

// ガーベッジコレクション用関数
function gc ( $maxlifetime ) {
global $db;
// 保存期間を経過したレコードを削除
$sql = "DELETE FROM session WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(timestamp) > {$maxlifetime}";
$result = mysqli_query( $db, $sql );
if ( !$result ) die ( "Query failed" );
return true;
}

// ユーザ定義関数の設定
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");

// セッションの初期化
session_start();
?>
0039nobodyさん2006/03/22(水) 15:21:53ID:???
>>35
MySQLのバージョンが書いてないけど
0040262006/03/22(水) 15:46:55ID:???
>>39
忘れてました。
MySQLのバージョンは5.0.18です。
0041nobodyさん2006/03/22(水) 16:52:39ID:???
個人サイトよりマニュアルのユーザーノート。
0042nobodyさん2006/03/22(水) 17:34:22ID:zHYrOojk
WindowsXP + PHP4.4.2 + MySQL4.1.18 + Apache2.0.55

libmysql.dllをPHP付属のものから、MySQLについてくるものに差し替えるとphp_infoで見られるクライアントAPIのバージョンも上がるのでしょうか。
当方PHP4.4.2に付属のDLLから、MySQL4.1.18のDLLに換えたのですが、クライアントAPIバージョンが3.23.49のままなのです。
0043nobodyさん2006/03/22(水) 17:38:12ID:???
>>42
php_mysql.dll
0044nobodyさん2006/03/22(水) 17:56:58ID:???
>>26
サラッと見た感じではいけるような気がするんだが、
取り敢えず原因追求のための小さな単純なスクリプト書いてみなよ。
function open()で
$db = mysqli_connect( "host", "user", "pass", "session_test" );
した後、$dbをvar_dump()してみ。
0045422006/03/22(水) 18:07:14ID:???
>>43
Windows版PHP4.4.2ではMySQLなどのサポートはビルドインになっており、DLLは同梱されていないのですが・・・
それはつまり、WindowsでクライアントAPIバージョンを上げることは出来ないという事なのでしょうか。
0046nobodyさん2006/03/22(水) 18:15:05ID:???
>>45
mysqliを使ったらどう
>>26みたいになるかもしれないが
0047nobodyさん2006/03/22(水) 18:17:13ID:???
>>46
mysqliのDLLも無いのです。
もう少し当方でも調べてみます。
0048462006/03/22(水) 18:23:32ID:???
>>47
すまんPHP4では使えなかったのね
自分でソースからコンパイルしないと無理っぽいな
0049nobodyさん2006/03/22(水) 18:28:35ID:???
>>48
Windows用のソースって公開されてましたっけ。
MySQLをアンインストールして、ZIPパッケージで入れてみることにしました。
0050262006/03/22(水) 18:38:41ID:???
>>44
レスありがとうございます。
function open()で接続した直後、$dbをダンプして見ると
object(mysqli)#1 (0) { }
となります。

空のオブジェクトが帰ってきておかしいなと思っていたんですが、
単純にmysqliを使用してデータを引っ張ってくるプログラムでも、
やはり空のオブジェクトが戻ってきます。でも、データは取得できるのです。
以下(※)のプログラムでも空のオブジェクトが戻ってきますがデータは取得できます。

なので、$dbの値は特に気にしていませんでした。
やはり、session_db.inc.phpのプログラムの組み方に問題があるのでしょうか・・・
0051262006/03/22(水) 18:39:29ID:???
※※※※※※※※※※※※※※※※※※※※※※※※※※※※
-- データは取得できる --
<?php
$db = mysqli_connect( "host", "user", "pass", "session_test" );

if ( mysqli_connect_errno() ) {
die( "Connect failed" );
}

$query = "SELECT * FROM persons WHERE person_seq = 1344";

if ( $result = mysqli_query( $db, $query ) ) {

while ( $row = mysqli_fetch_assoc( $result ) ) {
$arrResult[] = $row;
}
mysqli_free_result( $result );
}

mysqli_close( $db );

var_dump( $arrResult );
?>
※※※※※※※※※※※※※※※※※※※※※※※※※※※※
0052nobodyさん2006/03/22(水) 20:14:08ID:???
>>49
>Windows用のソースって公開されてましたっけ。
他のソースと一緒。区別無いよ
0053nobodyさん2006/03/22(水) 21:41:34ID:???
>>50
mysqli_connectでobject(mysqli)#numが返るのは正常(別に空というわけじゃない)。
mysql_connectだとresource(mysql_link)#numが返るんだけどね。
コネクトが失敗して$dbにFALSEが入ってるのに、mysqli_connect_errno()に
値が入らない(エラー処理にならない)おかしな挙動になってないか疑っただけ。
んで、同じくエラーになってるfunction write()とfunction close()とで
$dbのコネクションが受け取れてるのか見てもらいたかったんだが...

http://jp.php.net/manual/ja/function.session-set-save-handler.php
|警告
|PHP 5.0.5 以降、Write ハンドラおよび Close ハンドラは
|オブジェクトが 破棄されたあとにコールされます。
じゃないのか?
0054262006/03/22(水) 22:26:26ID:???
>>53
function write()とfunction close()での$dbのコネクションの受け取りですが、
まず、function write()とfunction close()が呼ばれた直後に
$dbをグローバル宣言していますが、宣言直後$dbをダンプしてみると
open()の時と同じように、

object(mysqli)#1 (0) { }

となります。

>http://jp.php.net/manual/ja/function.session-set-save-handler.php
>|警告
>|PHP 5.0.5 以降、Write ハンドラおよび Close ハンドラは
>|オブジェクトが 破棄されたあとにコールされます。

すみません、これは見落としていました。確認してみます。
0055262006/03/22(水) 22:40:38ID:???
>>53
session_db.inc.phpを以下のようにかえたら、エラーはでなくなりました。
セッションデータも無事読み書きができるようになりました。

// ユーザ定義関数の設定
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");

/* 追加処理 */
register_shutdown_function('session_write_close');

// セッションの初期化
session_start();

どうやらご指摘のあったあたりが関係しているようです。
まだ動いたとはいえ、よくわからない部分が多いので引き続き調べてみたいと思います。
ありがとうございました。
0056nobodyさん2006/03/23(木) 01:39:30ID:???
>>54
予想と違った。
>まず、function write()とfunction close()が呼ばれた直後に
>$dbをグローバル宣言していますが、宣言直後$dbをダンプしてみると
>object(mysqli)#1 (0) { }
これだと「オブジェクトが破棄されたあとにコールされます」の説明と辻褄が合わない。

挙動としては、どこかでmysqli_close(object(mysqli)#1)相当の処理がされて、既にコネクションが
切断されている状態で、mysqli_query/close(object(mysqli)#1)を掛けてエラーになっている。

# mysql_close($r)だと前後で$rがresource(mysql_link)→resource(unknown)と変化するんだが
# mysqli_close($o)だと前後でobject(mysqli)のままで変化が無い(ということをさっき知った)。
# だから$dbをダンプしても目視では変わらず、意味がなかった。

全然判らん...何か判ったらその時でも、このスレにレポ宜しく。
0057nobodyさん2006/03/23(木) 03:00:24ID:???
質問と回答のレベルが前スレより上がってる件
0058nobodyさん2006/03/23(木) 03:13:45ID:???
DBの話題に触れるとレベルが上がってるように見えてしまうらしい。
0059nobodyさん2006/03/23(木) 06:12:11ID:???
DB使えないからphpでお茶を濁してる実体について。
0060nobodyさん2006/03/23(木) 09:43:12ID:b+jb9vQk
$str = 'aaaaaaaaaaaa';
echo $str, "\n";
$bit = base_convert(bin2hex($str), 16, 2);
echo $bit, "\n";
$bin = pack('H*', base_convert($bit, 2, 16));
echo $bin;
echo "\n";
echo "</Body>\n";
echo "</Html>\n";

これは出来ません・・・・・・・・・・・・・・・・・・・・・・
0061nobodyさん2006/03/23(木) 11:01:58ID:???
>>60
base_convertで変換できるのは整数なら32ビット(符号つき)までだよ
0062nobodyさん2006/03/23(木) 11:05:32ID:???
4バイトですか・・・
0063nobodyさん2006/03/23(木) 12:27:47ID:???
マニュアル読みなさい
もちろんユーザーノートも
0064nobodyさん2006/03/24(金) 00:50:46ID:6sJ7Sx7Q
MySQLからの出力(EUC-JP)をmb_convert_encodingを使ってUTF-8
に変換しようとしているのですが出来ません。

mb_convert_encording($res[0], "UTF-8", "EUC-JP");
echo mb_detect_encoding($res[0]);

で「EUC-JP」と返ってきます。(クエリの実行結果が$res配列に入ってます)

教えて下さい。よろしくお願いします。
0065nobodyさん2006/03/24(金) 00:55:27ID:???
mb_convert_encordingの戻りを使う
0066nobodyさん2006/03/24(金) 01:04:52ID:6sJ7Sx7Q
Σ(°Д°;

$hoge = mb_convert_encording($res[0], "UTF-8", "EUC-JP");
echo mb_detect_encoding($hoge);

出来たありがとう

慣れないMac環境、あんまり知らない言語、過労でおかしくなってましたスマソ
0067nobodyさんNGNG
やるなら
echo mb_convert_encording($res[0], "UTF-8", "EUC-JP");
0068662006/03/24(金) 01:08:56ID:???
sageも忘れてるし・・・
もう一つだけ
配列の中身を一気にEUC→UTF変換する関数っていうのは無いですか?
本当に申し訳ない。
0069nobodyさん2006/03/24(金) 01:12:58ID:???
>>68
mb_convert_variables()
0070nobodyさん2006/03/24(金) 01:23:40ID:???
>>68
マニュアル見ような。
0071nobodyさん2006/03/24(金) 17:00:36ID:qx9pzy7D
phpからメールを送信すると送信者が
daemon
になってしまうんですが、ここにちゃんと名前を
入れるにはどうすればいいでしょうか?

環境は
・redhat9
・php5.1.2
です。
0072nobodyさん2006/03/24(金) 17:28:21ID:???
>>71
php.iniのsendmail_from
Win32 Onlyとか書いてあるけど…ini_setできるかどうかは自分で調べて
0073nobodyさん2006/03/24(金) 17:47:49ID:???
>>72
なんか、すごい回答だなw

>>71
メールヘッダを勉強したほうが良いと思う。
あと、マニュアルも。 http://jp.php.net/manual/ja/function.mail.php
0074662006/03/24(金) 17:53:51ID:???
>69
ありがとう
その関数の戻りだとキーが整数になっちゃうみたいなんで↓こうしますた

function mb_array_encoding(&$array, $tocode, $fromcode){
foreach($array as $key => $value){
$array[$key] = mb_convert_encoding($array[$key], $tocode, $fromcode);
}
}

>70
スマソ (; ̄ω ̄)ゞ
0075nobodyさん2006/03/24(金) 19:11:57ID:???
array_walkを使っても良さそう

array_walk($array, create_function('&$v,$k', '$v=mb_convert_encoding($v, "UTF-8", "EUC-JP");'));
注:未テスト
0076nobodyさん2006/03/25(土) 00:36:26ID:KigVlv+d
PHPでOOPに挑戦中。
GoFパターンをPHPでどのように実現しているのか、諸先輩方のご意見をいただければと。
参考にさせていただきたく。

ちなみにPHPでInterFace型みたいな感じの変数って使えるの??
FactoryMethodをどうやってPHPで実現するの??

なんて事を日々考えてます。
0077nobodyさん2006/03/25(土) 01:13:16ID:???
>>76
面白いね。自分も考えてみよう。
PHP4は使ったことあるけどPHP5はないから、そっちの勉強にもなりそう。
0078nobodyさん2006/03/25(土) 02:42:09ID:???
>>76
"Do You PHP?"で、色々(無理無理)やってたような気がする。
0079nobodyさん2006/03/25(土) 08:19:09ID:???
>>76
Interface型って何物?
FactoryMethodはそのまんまメソッド内でreturn new 〜みたいなのでおk。
PHPの場合new $classNameとかやって楽するのが一般的。
0080nobodyさん2006/03/25(土) 16:56:32ID:???
php.ini の session.cookie_domain を設定するとバーチャルドメインはもちろん、
物理的に違うサーバでもセッションを共有することがわかったのですが、
なんか不安です。
しかし、何度実験しても同じドメイン内ならひとつのセッションを共有しています。
これは session.cookie_domain を設定すると設定ドメイン内なら、
物理的に違うサーバでも同じセッションを共有していると考えていいのでしょうか?
0081nobodyさん2006/03/25(土) 17:51:44ID:???
>>80
難問だな・・・
手元に実験できる環境がないからわかんないけど、セッションを共有できてるってことはセッション情報をバックグラウンドでやりとりしてるってことなのかな?
どんな値(文字列・配列・オブジェクト問わず)でも別のサーバ側で復元できるの?
0082nobodyさん2006/03/25(土) 18:34:37ID:???
>>81
例えばA,Bという物理的に違うサーバを用意します。ドメイン名はtest.co.jp

サーバ バーチャルドメイン ファイル
A 01.test.co.jp 01.php
02.test.co.jp 02.php
B 03.test.co.jp 03.php
04.tets.co.jp 04.php

// ファイル内処理
01.php
$_SESSION['name'] = "name";

02.php
$_SESSION['mail'] = "mail";

03.php
$_SESSION['pass'] = "pass";

04.php
$_SESSION['sex'] = "sex";

// アクセス手順
01.php → 02.php → 03.php → 04.php
0083nobodyさん2006/03/25(土) 18:35:23ID:???
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
01.phpにアクセスしたときsess_0123456789というセッションファイル?がAサーバにできます。
セッションデータは "name"

次に02.phpにアクセスしたときsess_0123456789にセッションデータ "mail" が追加されます。
セッションデータは "name" "mail"

次に03.phpにアクセスしたときsess_0123456789というセッションファイル?がBサーバにできます。
セッションデータは "name" "mail" "pass"

次に04.phpにアクセスしたときsess_0123456789にセッションデータ "sex" が追加されます。
セッションデータは "name" "mail" "pass" "sex"
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

実験結果です。
ローカル側から送られる情報を参照して
php.iniの設定によりセッションを共有しているとしか思えないんですが・・・
アクセスしたサーバごとに違うセッションキーが発行され、
データも共有できないと思っていたのでこの動きを信用していいものか悩んでいます。
0084802006/03/25(土) 18:40:11ID:???
すいません。Aサーバ,Bサーバのphp.iniのsession.cookie_domainは
session.cookie_domain = test.co.jp
となっています。
0085nobodyさん2006/03/25(土) 19:47:01ID:???
session_nameを変更したら?
0086nobodyさん2006/03/25(土) 23:52:07ID:???
PHPでPerlの$ENV{'QUERY_STRING'};と同じ働きをする変数?を教えてください。
0087nobodyさん2006/03/26(日) 00:02:04ID:???
>>86
getenv('QUERY_STRING')
0088nobodyさん2006/03/26(日) 00:04:06ID:???
>>86
$_SERVER['QUERY_STRING']
0089nobodyさん2006/03/26(日) 01:40:48ID:???
86 はもしかして $_POST/$_GET を知らないとか。
あと $_ENV とか。


0090nobodyさん2006/03/26(日) 02:34:06ID:???
>>86
スーパーグローバル変数

でググれ
0091nobodyさん2006/03/26(日) 04:35:18ID:???
>>74

foreach($array as &$value){
$value = mb_convert_encoding($value, $tocode, $fromcode
}

$valueを参照にすればこんな風に書けるよね
0092nobodyさん2006/03/26(日) 04:42:37ID:???
>>91
んな書き方できねーだろ
0093nobodyさん2006/03/26(日) 07:35:17ID:???
>>92
カッコが閉じてないってこと?
0094nobodyさん2006/03/26(日) 10:54:57ID:???
質問スレもPHP4とPHP5でスレ分けた方がいーんじゃねーか?
0095nobodyさん2006/03/26(日) 11:06:00ID:???
>>94
WHY?
0096nobodyさん2006/03/26(日) 11:16:07ID:???
>>94
一理あるけど如何せん人がそこまで多いわけではないので分離は難しいかと。
次スレ立てる奴が勝手に【PHP5】質問スレッドとかにしたらいつの間にかPHP4スレも立つかもね。
もしくはくだ質がPHP4になるとか。
まあその時に誰がいるかによって変わるでしょう。
0097nobodyさん2006/03/26(日) 12:45:29ID:???
PHP4.4.2使ってるけど、いつかはPHP5に移行するんだよな。いつかは。
PHP5の環境も整えようと思ったけど、Windowsだとphp.iniの入れ替えがめんどいんだよな。
何かいい方法ないか?
0098nobodyさん2006/03/26(日) 12:51:33ID:???
xampp使えばいいんでね?
4,5の同時起動はできないけど、バッチファイル(php-switch.bat)で切り替えの面倒を見てくれる。
0099nobodyさん2006/03/26(日) 13:00:54ID:???
やっぱりバッチだよなぁ。

忘れてたがhttpd.confの書き換えも必要なんだな。
まぁいいか。とりあえずPHP5の設定していつでも使えるようにしておく。
0100nobodyさん2006/03/26(日) 13:32:00ID:???
httpd.confも切り替えの対象になってるよ。
php-switch.batはcli版のphp(xamppに含まれている)を使って実際の切り替え処理をphp-switch.phpでやってるんだが、
それを見た感じだと php.ini httpd.conf 各バージョンのDLL 拡張モジュールのDLLあたりを切り替えてる。
0101nobodyさん2006/03/26(日) 14:05:11ID:???
>>100
XAMPP入れる気はないから、自分で切り替え用のプログラムでも組むしかないか。
サンクス
■ このスレッドは過去ログ倉庫に格納されています