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

このエントリーをはてなブックマークに追加
1nobodyさん
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辺り
2nobodyさん:2006/03/21(火) 10:19:54 ID:???
前スレ
【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/に変えてみたら日本語があるかもしれません。
3nobodyさん:2006/03/21(火) 10:20:32 ID:???
関連スレ
【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/
4nobodyさん:2006/03/21(火) 10:21:06 ID:???
【簡易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 シェルから実行)
5nobodyさん:2006/03/21(火) 10:21:38 ID:???
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.を参照
6nobodyさん:2006/03/21(火) 10:48:30 ID:???
>>1
乙。GJ
7nobodyさん:2006/03/21(火) 10:52:53 ID:???
>>1
乙です。

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

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

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


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

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

5. echo?print?
 → 同じ。

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

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

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

extensionのパスも、php_mysqli.dllの存在も確認済みです。
27nobodyさん:2006/03/22(水) 07:22:05 ID:???
>>26
libmysql.dllをDLLパスの通ってるところに放り込む。
28nobodyさん:2006/03/22(水) 10:31:28 ID:???
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 バイナリできませんか?
29nobodyさん:2006/03/22(水) 11:30:51 ID:???
質問の意図が掴みづらいが、そこまで出来んのに何やってんの?

<?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;
30nobodyさん:2006/03/22(水) 11:31:24 ID:???
質問の意図が掴みづらいが、そこまで出来んのに何やってんの?

<?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;
31nobodyさん:2006/03/22(水) 11:32:02 ID:???
質問の意図が掴みづらいが、そこまで出来んのに何やってんの?

<?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;
32nobodyさん:2006/03/22(水) 11:39:12 ID:???
・・・・・・・そんな顔してみないで                                             やったはずなのに
33nobodyさん:2006/03/22(水) 12:16:56 ID:???
>>32
ハゲワロタwwwwwwwwwwwwwwwwwwwwwwwwww
34掃除屋 ◆2ch..Ybe0Q :2006/03/22(水) 12:56:59 ID:??? BE:136426673-
>>25
自宅鯖(玄箱Debian)です。
3526:2006/03/22(水) 13:06:28 ID:???
>>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

です。
以下がそのプログラムです。エラー原因がわかりません。どなたかお願いします。
3626:2006/03/22(水) 13:07:26 ID:???
※構成
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);
}
3726:2006/03/22(水) 13:08:07 ID:???
// セッション情報読込用関数
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;
}
3826:2006/03/22(水) 13:08:56 ID:???
// セッション情報削除用関数
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();
?>
39nobodyさん:2006/03/22(水) 15:21:53 ID:???
>>35
MySQLのバージョンが書いてないけど
4026:2006/03/22(水) 15:46:55 ID:???
>>39
忘れてました。
MySQLのバージョンは5.0.18です。
41nobodyさん:2006/03/22(水) 16:52:39 ID:???
個人サイトよりマニュアルのユーザーノート。
42nobodyさん:2006/03/22(水) 17:34:22 ID: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のままなのです。
43nobodyさん:2006/03/22(水) 17:38:12 ID:???
>>42
php_mysql.dll
44nobodyさん:2006/03/22(水) 17:56:58 ID:???
>>26
サラッと見た感じではいけるような気がするんだが、
取り敢えず原因追求のための小さな単純なスクリプト書いてみなよ。
function open()で
$db = mysqli_connect( "host", "user", "pass", "session_test" );
した後、$dbをvar_dump()してみ。
4542:2006/03/22(水) 18:07:14 ID:???
>>43
Windows版PHP4.4.2ではMySQLなどのサポートはビルドインになっており、DLLは同梱されていないのですが・・・
それはつまり、WindowsでクライアントAPIバージョンを上げることは出来ないという事なのでしょうか。
46nobodyさん:2006/03/22(水) 18:15:05 ID:???
>>45
mysqliを使ったらどう
>>26みたいになるかもしれないが
47nobodyさん:2006/03/22(水) 18:17:13 ID:???
>>46
mysqliのDLLも無いのです。
もう少し当方でも調べてみます。
4846:2006/03/22(水) 18:23:32 ID:???
>>47
すまんPHP4では使えなかったのね
自分でソースからコンパイルしないと無理っぽいな
49nobodyさん:2006/03/22(水) 18:28:35 ID:???
>>48
Windows用のソースって公開されてましたっけ。
MySQLをアンインストールして、ZIPパッケージで入れてみることにしました。
5026:2006/03/22(水) 18:38:41 ID:???
>>44
レスありがとうございます。
function open()で接続した直後、$dbをダンプして見ると
object(mysqli)#1 (0) { }
となります。

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

なので、$dbの値は特に気にしていませんでした。
やはり、session_db.inc.phpのプログラムの組み方に問題があるのでしょうか・・・
5126:2006/03/22(水) 18:39:29 ID:???
※※※※※※※※※※※※※※※※※※※※※※※※※※※※
-- データは取得できる --
<?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 );
?>
※※※※※※※※※※※※※※※※※※※※※※※※※※※※
52nobodyさん:2006/03/22(水) 20:14:08 ID:???
>>49
>Windows用のソースって公開されてましたっけ。
他のソースと一緒。区別無いよ
53nobodyさん:2006/03/22(水) 21:41:34 ID:???
>>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 ハンドラは
|オブジェクトが 破棄されたあとにコールされます。
じゃないのか?
5426:2006/03/22(水) 22:26:26 ID:???
>>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 ハンドラは
>|オブジェクトが 破棄されたあとにコールされます。

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

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

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

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

どうやらご指摘のあったあたりが関係しているようです。
まだ動いたとはいえ、よくわからない部分が多いので引き続き調べてみたいと思います。
ありがとうございました。
56nobodyさん:2006/03/23(木) 01:39:30 ID:???
>>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をダンプしても目視では変わらず、意味がなかった。

全然判らん...何か判ったらその時でも、このスレにレポ宜しく。
57nobodyさん:2006/03/23(木) 03:00:24 ID:???
質問と回答のレベルが前スレより上がってる件
58nobodyさん:2006/03/23(木) 03:13:45 ID:???
DBの話題に触れるとレベルが上がってるように見えてしまうらしい。
59nobodyさん:2006/03/23(木) 06:12:11 ID:???
DB使えないからphpでお茶を濁してる実体について。
60nobodyさん:2006/03/23(木) 09:43:12 ID: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";

これは出来ません・・・・・・・・・・・・・・・・・・・・・・
61nobodyさん:2006/03/23(木) 11:01:58 ID:???
>>60
base_convertで変換できるのは整数なら32ビット(符号つき)までだよ
62nobodyさん:2006/03/23(木) 11:05:32 ID:???
4バイトですか・・・
63nobodyさん:2006/03/23(木) 12:27:47 ID:???
マニュアル読みなさい
もちろんユーザーノートも
64nobodyさん:2006/03/24(金) 00:50:46 ID: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配列に入ってます)

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

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

出来たありがとう

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

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

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

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

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

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

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

なんて事を日々考えてます。
77nobodyさん:2006/03/25(土) 01:13:16 ID:???
>>76
面白いね。自分も考えてみよう。
PHP4は使ったことあるけどPHP5はないから、そっちの勉強にもなりそう。
78nobodyさん:2006/03/25(土) 02:42:09 ID:???
>>76
"Do You PHP?"で、色々(無理無理)やってたような気がする。
79nobodyさん:2006/03/25(土) 08:19:09 ID:???
>>76
Interface型って何物?
FactoryMethodはそのまんまメソッド内でreturn new 〜みたいなのでおk。
PHPの場合new $classNameとかやって楽するのが一般的。
80nobodyさん:2006/03/25(土) 16:56:32 ID:???
php.ini の session.cookie_domain を設定するとバーチャルドメインはもちろん、
物理的に違うサーバでもセッションを共有することがわかったのですが、
なんか不安です。
しかし、何度実験しても同じドメイン内ならひとつのセッションを共有しています。
これは session.cookie_domain を設定すると設定ドメイン内なら、
物理的に違うサーバでも同じセッションを共有していると考えていいのでしょうか?
81nobodyさん:2006/03/25(土) 17:51:44 ID:???
>>80
難問だな・・・
手元に実験できる環境がないからわかんないけど、セッションを共有できてるってことはセッション情報をバックグラウンドでやりとりしてるってことなのかな?
どんな値(文字列・配列・オブジェクト問わず)でも別のサーバ側で復元できるの?
82nobodyさん:2006/03/25(土) 18:34:37 ID:???
>>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
83nobodyさん:2006/03/25(土) 18:35:23 ID:???
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
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の設定によりセッションを共有しているとしか思えないんですが・・・
アクセスしたサーバごとに違うセッションキーが発行され、
データも共有できないと思っていたのでこの動きを信用していいものか悩んでいます。
8480:2006/03/25(土) 18:40:11 ID:???
すいません。Aサーバ,Bサーバのphp.iniのsession.cookie_domainは
session.cookie_domain = test.co.jp
となっています。
85nobodyさん:2006/03/25(土) 19:47:01 ID:???
session_nameを変更したら?
86nobodyさん:2006/03/25(土) 23:52:07 ID:???
PHPでPerlの$ENV{'QUERY_STRING'};と同じ働きをする変数?を教えてください。
87nobodyさん:2006/03/26(日) 00:02:04 ID:???
>>86
getenv('QUERY_STRING')
88nobodyさん:2006/03/26(日) 00:04:06 ID:???
>>86
$_SERVER['QUERY_STRING']
89nobodyさん:2006/03/26(日) 01:40:48 ID:???
86 はもしかして $_POST/$_GET を知らないとか。
あと $_ENV とか。


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

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

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

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

忘れてたがhttpd.confの書き換えも必要なんだな。
まぁいいか。とりあえずPHP5の設定していつでも使えるようにしておく。
100nobodyさん:2006/03/26(日) 13:32:00 ID:???
httpd.confも切り替えの対象になってるよ。
php-switch.batはcli版のphp(xamppに含まれている)を使って実際の切り替え処理をphp-switch.phpでやってるんだが、
それを見た感じだと php.ini httpd.conf 各バージョンのDLL 拡張モジュールのDLLあたりを切り替えてる。
101nobodyさん:2006/03/26(日) 14:05:11 ID:???
>>100
XAMPP入れる気はないから、自分で切り替え用のプログラムでも組むしかないか。
サンクス
102nobodyさん:2006/03/26(日) 14:13:31 ID:???
ほんと、さっさとPHP5に移行してほしいんだがなぁ。
103nobodyさん:2006/03/26(日) 14:38:41 ID:???
Apache のポートを変えて 2 つ動かしてる。
PHP5 は 80、PHP4 は 8080 のように。
104nobodyさん:2006/03/26(日) 14:50:33 ID:???
Cで切り替え用のプログラム書いた。
105nobodyさん:2006/03/26(日) 19:33:57 ID:???
ポート2つって何かスマートじゃないな。
modphpに手を入れて二つ動かせるようにした法が良くないか?
/php4以下ならphp4が動いて、
/php5以下ならphp5が動くように。
106nobodyさん:2006/03/26(日) 19:39:46 ID:???
マシン2台、これ最強
107nobodyさん:2006/03/26(日) 20:37:46 ID:???
>>105
Windowsだとphp.iniがどうもな。
108nobodyさん:2006/03/27(月) 17:09:51 ID:S2DOnOnv
0001
0002
0003
と桁数の決まっている数字で簡単に数字を1ずつ上げる方法はないでしょうか?
109108:2006/03/27(月) 17:14:19 ID:S2DOnOnv
と、思って色々試してたら以下ので簡単にできました。お騒がせしました。
$num = '0010';
print $num . '<br>';

$num++;
print $num . '<br>';

print str_pad($num, 4, "0", STR_PAD_LEFT);
110nobodyさん:2006/03/27(月) 17:57:30 ID:???
$num = '0010';
printf('%0'.strlen($num).'d', (int)++$num);
111nobodyさん:2006/03/27(月) 18:02:58 ID:???
↑この質問もそろそろFAQかな。何回か見た希ガス。

Q. '0001'、'0002'、'0003'・・・とインクリメントしたい
A. 数値(int)で計算した後str_padかsprintf等で整形

なにげにPHPにはどんな文字列でもインクリメントできる変な隠し機能があるけど、>>108-109のようにintへの暗黙の型変換が働いて0埋めができないので結局は数値で計算するのが最善かな。
112nobodyさん:2006/03/27(月) 18:14:05 ID:???
隠し機能というかPerlのをそのまま持ってきた気がする
113nobodyさん:2006/03/27(月) 18:16:12 ID:???
>>112
perlでもできるんかい。そいつは知らなかった。
114nobodyさん:2006/03/27(月) 18:18:45 ID:???
連投スマソ
perlだと試してみたら
$num = '0001'; $num ++;
でちゃんと'0002'になるんだね。
phpありえなす・・・
115nobodyさん:2006/03/27(月) 18:22:41 ID:???
もともといいとこ取りだし
116nobodyさん:2006/03/27(月) 19:22:12 ID:???
>>114
マジっすか?!
117108:2006/03/27(月) 20:09:10 ID:???
>>110
そんな方法もあるのですね。参考になります。
118nobodyさん:2006/03/27(月) 20:42:30 ID:???
perl なら
$a = 'a';
$a++;
で $a が b になるしな。
119nobodyさん:2006/03/27(月) 20:47:32 ID:???
>>118
それはPHPも同じだ
120nobodyさん:2006/03/27(月) 20:53:52 ID:???
C言語でもJavaでも'a'のインクリメントは'b'
121nobodyさん:2006/03/27(月) 20:58:24 ID:???
その話題、チョット前にやらなかったっけ?
122nobodyさん:2006/03/27(月) 21:00:32 ID:???
>>120
さすがに
$a = "azz";
$a ++;
で $a が "baa" になったりはしないけどな >CやJava
123nobodyさん:2006/03/27(月) 21:18:24 ID:???
勝手にそんなことになったら困るよ
124nobodyさん:2006/03/27(月) 21:28:12 ID:???
PHP5.1以降はPDO関数が標準ですか?
PHP5.0のsqliteみたいに、将来標準から脱退になったりしませんか?
125nobodyさん:2006/03/27(月) 22:12:15 ID:???
>>124
中の人に聞いて。ここで聞くよりましかと。
126nobodyさん:2006/03/27(月) 22:23:40 ID:???
PDOは流石にないんじゃないかな、とか言ってみる。
127nobodyさん:2006/03/27(月) 23:36:54 ID:???
PDO が SQLite に対応したから
128nobodyさん:2006/03/28(火) 00:24:08 ID:???
アッー!の元ネタワカラナス(´・ω・`)
129nobodyさん:2006/03/28(火) 01:45:57 ID:???
>>128
スレ違い。いい加減に市ね
130nobodyさん:2006/03/28(火) 02:05:12 ID:???
はじめてかきこんでのにorz
131nobodyさん:2006/03/28(火) 03:26:50 ID:???
>>130
はじめてなら、スレ違いぐらい認識しろ。
認識したら回線きって(ry
132nobodyさん:2006/03/28(火) 12:23:20 ID:???
0009をインクリメントして、000aにするのと0010にするので揉めそう。
まあ0001の次は、0010かもしれんし(w
133nobodyさん:2006/03/28(火) 12:46:32 ID:???
>>132
そのへんはphpもperlも基本的に各桁で数字なら数字、大文字なら大文字、小文字なら小文字でループしながら、繰上げは右から左に伝播するように統一されてるみたいだ。

ただphpの場合は自動型変換が最悪の事態を引き起こす。
$n = '1d7';
$n++; // '1d8'
$n++; // '1d9'
$n++; // '1e0'
$n++; // 2 ・・・あれ?
$n++; // 3
 :

この機能、使わないのが一番かと思われます。
134nobodyさん:2006/03/28(火) 13:36:45 ID:???
EXCELのカラム記号を作るくらいしか使い道を思いつかない
135nobodyさん:2006/03/28(火) 15:28:44 ID:???
パスワードを総当りでクラックとか
136nobodyさん:2006/03/28(火) 16:12:05 ID:qFPc77vu
サーバー側のphp.iniの設定で、文字コードが指定してあり、
どうにも、こうにも、結果が面白くなくて、、困っています。

以前 php.iniを単独で作るって言う方法があったとおもうので、
資料や、その紹介サイトだけでもいいの、
ご存知でしたら、教えていただければ、幸いです。

もしくは、方法教えていただければ、幸いです。お願いします。
137nobodyさん:2006/03/28(火) 16:26:32 ID:???
データファイルは
aaa<>bbb<>ccc<>ddd
bbb<>ccc<>ddd<>eee
・・・・
のようになっていて、これを縦の値でソートしたいんですが
何か方法はないものでしょうか?
138nobodyさん:2006/03/28(火) 16:42:57 ID:qFPc77vu
<>で区切って
aaa bbb<>ccc<>ddd
bbb ccc<>ddd<>eee

と引っ張って、 aaaを配列のキーにしてみては?
139nobodyさん:2006/03/28(火) 17:01:59 ID:???
>>137
もっと質問を具体的に
140nobodyさん:2006/03/28(火) 17:22:22 ID:???
>>138-139
大変申し訳ないです。もっと具体的に書きます。

id1<>1000<>2000<>3000
id2<>5000<>4000<>6000
id3<>3000<>8000<>1000
・・・・・

のようなテキストファイルが存在する時、
縦方向を見て、大小を比較してソートしたいのです。

たとえば、2列目をソートするような命令があった場合、
1000、5000、3000の大小を比較し、
5000、3000、1000や、1000、3000、5000のようにソートしたいのです。
そのときにあわせて横一列丸ごと表示してほしい訳です。
つまり、表示するときは

id2 5000 4000 6000
id3 3000 8000 1000
id1 1000 2000 3000

のように。
お知恵を貸してくださいorz
141nobodyさん:2006/03/28(火) 18:08:10 ID:qFPc77vu
俺がへたれなのか、、、
近頃は区切り文字を <> にするのがはやり?

まあ、それはいいとして、とりあえず、、

検索する場所を配列のキーにして、そのrecordごと文字列として入れる
配列のキーをソートする

配列を順番に取り出す。
区切り文字で配列を変数化する

でよくないのかな?

すまん、、もっとスマートな方法はあるかもしれんが、、、、近頃CSVのソートなんてしないので、、
SQLに頼りっきりってのが、だめなのかのー
142nobodyさん:2006/03/28(火) 18:19:29 ID:???
>>141
区切り文字を<>にするのはむしろ過去の遺物
143nobodyさん:2006/03/28(火) 18:26:21 ID:???
>>142
おれいまだに<>使ってるんだけど代替なににしたらいい?
144nobodyさん:2006/03/28(火) 18:29:04 ID:???
>>143
つSQL
145nobodyさん:2006/03/28(火) 18:31:44 ID:???
一度データベースに慣れると
とてもじゃないがログファイル作る気になれn
146nobodyさん:2006/03/28(火) 18:57:34 ID:???
>>140
PHPの過去の遺産(?)を使うとこんな感じ。
$k = 1; // 2列目

// 1. array_multisort
$data = array(); $columb = array();
foreach (file($file) as $line) if ($line = rtrim($line)) {
  $record = explode('<>', $line); $data[] = $record; $columb[] = $record[$k];
}
array_multisort($columb, SORT_NUMERIC, $data);
foreach ($data as $record) echo implode(' ', $record), "\n";

// 2. usort
$data = array();
foreach (file($file) as $line) if ($line = rtrim($line)) {
  $record = explode('<>', $line); $data[] = $record;
}
usort($data, create_function('$a, $b', 'global $k; return $a[$k] < $b[$k] ? -1 : $a[$k] > $b[$k];'));
foreach ($data as $record) echo implode(' ', $record), "\n";

// 3. ksort
$data = array();
foreach (file($file) as $line) if ($line = rtrim($line)) {
  $record = explode('<>', $line); $data[$record[$k]] = $record;
}
ksort($data, SORT_NUMERIC); $data = array_values($data);
foreach ($data as $record) echo implode(' ', $record), "\n";
147nobodyさん:2006/03/28(火) 19:04:31 ID:???
SQLiteが標準で使えるならもうファイルを使うメリットってサイズが小さいことぐらいしか浮かばね。
148nobodyさん:2006/03/28(火) 21:57:46 ID:???
PDOStatementのfetchSingleメソッドが廃止された裏事情を知っているものがいたら情報求む。
結構便利っぽかったのに。
149nobodyさん:2006/03/28(火) 22:28:37 ID:???
下位互換性確保とかね。
sqlite2とsqlite3の互換性無かったはず。sqlite4に成ったらどうなるか予想出来るよね?
150nobodyさん:2006/03/28(火) 22:37:26 ID:???
でもPHPとDBを連携させるにはREAR覚えないといけないんでしょ?
151nobodyさん:2006/03/28(火) 22:39:00 ID:???
REARってなんじゃい。
しかもライブラリは「覚えて使う」ようなものじゃねーぞ?
152nobodyさん:2006/03/28(火) 22:39:10 ID:???
>>150
DBを特定するなら不要
153nobodyさん:2006/03/28(火) 22:56:51 ID:j0f8wCQk
パソコン・携帯から同じファイル名でアクセスしphpでパソコン向け、携帯向け(さらにキャリア別)で表示させたいんだけど出来る?

自分でも調べた事はここに書く予定
154nobodyさん:2006/03/28(火) 23:02:44 ID:???
>>153
キャリアごとにIPアドレスのレンジが公開されてるはず
155nobodyさん:2006/03/29(水) 02:39:02 ID:???
JpGraphでY軸を2つ使うとき、2つ目の軸(右側の方)のグラフが
1つ目の軸のグラフの後ろに隠れてしまう。
オーダーを変更して2軸目のグラフを前面に出したいけど
どうしたらいいかな?
156nobodyさん:2006/03/29(水) 05:55:44 ID:???
>>153
単純な手はユーザーエージェントで判別して別々の内容を表示するだけ。
157nobodyさん:2006/03/29(水) 20:45:59 ID:???
その辺のノウハウはビジネスに成るからなあ。無料のにちゃんで教えてもらおうってのは甘い考え。
158nobodyさん:2006/03/29(水) 21:16:12 ID:???
>>157
このご時世に、んなもんが金になるわけない。
159nobodyさん:2006/03/29(水) 21:35:42 ID:xErJGbSu
>>157
お前自分が恥ずかしくないのか?
160nobodyさん:2006/03/29(水) 21:41:49 ID:???
ネタだろどうせ
161nobodyさん:2006/03/29(水) 21:48:28 ID:???
>>153
つNet_User_Agent_Mobile
162nobodyさん:2006/03/29(水) 22:16:30 ID:???
>>157の人気に嫉妬
163nobodyさん:2006/03/29(水) 22:34:02 ID:Vy3b1LJ+
お知恵をお貸しください。

1,,,,,,
1,,,4,,6,
1,,3,4,5,6,7
1,,3,4,,6,7
1,,3,4,,6,

な値(,で繋がってる値)の配列があって、この値を利用して以下の配列
を作りたいのです。

$count=array('1'=>1の合計,'2'=>2の合計,'3'=>3の合計・・・)

splitで1,2,3をバラバラにするとこまでは出来るのですが、後どうした
らよいかわかりません。だれかアドバイス下さい。お願いします!
164nobodyさん:2006/03/29(水) 22:47:16 ID:xErJGbSu
配列の合計出す関数(explode(",", 配列));
165nobodyさん:2006/03/29(水) 22:48:59 ID:xErJGbSu
あぁ、縦の合計か。スマソ。まぁ同じことか。
166nobodyさん:2006/03/29(水) 22:53:28 ID:Vy3b1LJ+
>>164
まちがってたらすいません。explode()だとsplit()と同じですよね?

array(1,2,3,4,5,6,7)

って配列が出来たとして、これを行分作って足さないといけないんで
しょうか?
167nobodyさん:2006/03/29(水) 23:19:39 ID:???
>>163
質問がわかりにくい。
最初の配列は
$array = array(
'1,,,,,,',
'1,,,4,,6,',
'1,,3,4,5,6,7',
'1,,3,4,,6,7',
'1,,3,4,,6,'
);
で、結果の配列は
$count = array('1' => 5, '2' => 0, '3' => 3, '4' => 4, '5' => 1, '6' => 4, '7' => 2);
になりゃいいの?
7って数字は固定なの?それとも配列の情報から動的に計算しなきゃいけないの?
168nobodyさん:2006/03/29(水) 23:28:55 ID:Vy3b1LJ+
>>167
わかりずらかったですね。すいません。

おっしゃる通りです。7って数字は固定ではなく動的です。
checkboxからの値を","でjoin()されて配列にユーザーごとに格納されて
います。
169nobodyさん:2006/03/29(水) 23:59:17 ID:???
>>168
なんかよーわからんけど、とりあえず。
$array = array(
'1,,,,,,',
'1,,,4,,6,',
'1,,3,4,5,6,7',
'1,,3,4,,6,7',
'1,,3,4,,6,'
);
$count = array();
foreach ($array as $each) {
    foreach (array_count_values(explode(',', $each)) as $n => $cnt) {
        if ($n) {
            @ $count["$n"] += $cnt;
            if (@ $max < $n) $max = $n;
        }
    }
}
for ($i = 1; $i < $max; $i ++) {
    if (! @ $count["$i"]) {
        $count["$i"] = 0;
    }
}
ksort($count);
print_r($count);
170nobodyさん:2006/03/30(木) 00:14:03 ID:???
>>169
夜分遅くにアドバイスありがとうございます。
とりあえず、実装してみます。結果が出ましたらご報告させて頂きます。
本当にありがとうございます。
171nobodyさん:2006/03/30(木) 00:37:11 ID:???
>>169
おかげさまでいけそうです!
本当にありがとうございました。
172nobodyさん:2006/03/30(木) 03:39:49 ID:D3mh+GN9
ものすごく初歩的な質問で申し訳ないんですが・・・

テキストファイル(test.dat)

1=abc
2=def
3=ghi

があったとして

$str=file_get_contents("test.dat");
ereg('1=(.*)',$str,$reg);
print($reg[1]);

abcという結果を期待してるのだけど

abc 2=def 3=ghi

という結果になっちゃうんですが。
パターンを

1=(.*)\n

としても結果は同じになっちゃいます。
(.*)の中に途中の改行も入っちゃってる様子なんですが
どうしたらいいんでしょうか。
173nobodyさん:2006/03/30(木) 05:44:30 ID:???
>>172
[^\n]*
と\nを除外してみては?PHPのことうろ覚えだけど。
174nobodyさん:2006/03/30(木) 05:53:18 ID:???
>>166
explodeとsplitは同じじゃない
explodeの方がはるかに高速です
175nobodyさん:2006/03/30(木) 08:34:57 ID:???
>>172
\n使うなら
''
じゃなくて
""
で括ろうな。
"1=([^\n]*)\n"
で上手くいくだろう
176nobodyさん:2006/03/30(木) 09:07:15 ID:rPy49/sd
>>172
行単位で処理するならfile_get_contentsじゃなくてfile()で配列に読み込んだら
177nobodyさん:2006/03/30(木) 10:11:55 ID:???
>>172
> パターンを
> 1=(.*)\n
> としても結果は同じになっちゃいます。
その場合の書き方は 1=(.*?)\n だ。
?をつけて最短マッチにさせないと、1番後ろの\nを探しにいってしまう。
178nobodyさん:2006/03/30(木) 12:15:52 ID:???
           |\___
           / :::::::。::::::;;;;;;>
          /::::::::::::;;;www
        )ヽ/ とノ (,,゚д゚)つ < みんなジョーズだな
       メノ'\    /
           U"U
179nobodyさん:2006/03/30(木) 13:14:17 ID:???
>>172
>>177で答えは出てるが、別の点で。

ereg系関数は速度的に難があるから使わないほうがいい。
Perl互換正規表現関数のpreg系関数の方が10倍ほど高速。

あとはマニュアル参照
180nobodyさん:2006/03/30(木) 13:26:32 ID:???
>>172
じゃ、俺も別の点で。
preg系のパターンではドットが改行を含まないのでpreg_match_all('/[0-9]+=(.*)/', $str, $m)あたりで意図した結果になるかな。
(逆に改行も含めたいときはsオプションで)
まあ>>172の言うように(特にpregを使うなら)fileやfgetsで一行ずつ処理するほうがやりやすい気はする。
181180:2006/03/30(木) 13:27:37 ID:???
ごめん。アンカーミス
×まあ>>172の言うように
○まあ>>176の言うように
182nobodyさん:2006/03/30(木) 14:01:21 ID:???
ベンチするとpregよりeregの方が速いときもあるけど…
でももう非推奨関数になったんじゃなかったっけ
183nobodyさん:2006/03/30(木) 14:21:52 ID:D3mh+GN9
>>173>>181
みなさんありがとうございました。
preg_matchを使うようにしたいと思います。
184nobodyさん:2006/03/30(木) 19:25:05 ID:???
がぶ飲み!!!!!!!!!1111111111
185nobodyさん:2006/03/30(木) 22:14:09 ID:???
>>172
なんかそういうの取得する関数なかったっけ?
186nobodyさん:2006/03/30(木) 22:18:20 ID:???
ini_parse
187nobodyさん:2006/03/31(金) 00:43:40 ID:???
parse_ini_file じゃね
188nobodyさん:2006/03/31(金) 00:57:09 ID:???
ごめん適当に答えた
189nobodyさん:2006/03/31(金) 01:02:24 ID:???
そうか、素直だから許してやる
190nobodyさん:2006/03/31(金) 01:05:16 ID:???
ありがとう
191nobodyさん:2006/03/31(金) 11:07:26 ID:???
>>186-190
何この面白いやり取り
自作自演?
192nobodyさん:2006/03/31(金) 13:56:53 ID:???
微妙にスレ違いかもしれないけどちょっと質問。
Apache+PHP+MySQLの環境で非商用のサービスを提供してるんだけど、
サーバ機のパーティションの意識しなくていいの?って言われた。
これまでどれも普通にCドライブにインストールしてたんだけど、
ここの人たちは実行ファイルやPHP・HTMLデータでパーティション意識してる?
193nobodyさん:2006/03/31(金) 14:00:03 ID:???
WinとUNIXの話?
194nobodyさん:2006/03/31(金) 14:39:16 ID:???
>>192
おれはパーティションは意識しないが、提供サービスとDB関連は別ドライブに
おいてRAID組んでる。
A.P.M.はメンテとかインスコしやすいなどの都合から同じドライブ(winで
いうところのC:ドライブ)だが。
195nobodyさん:2006/03/31(金) 16:46:00 ID:???
>>192
パンティーは脱がしてからインサートした方がいいぞ。
196nobodyさん:2006/03/31(金) 16:51:07 ID:???
いや、必ずしもそうとは言えないな
197nobodyさん:2006/03/31(金) 16:57:36 ID:???
>>195-196 おまえら板違いですよ。

彼女にINSERT権限がありません
http://pc8.2ch.net/test/read.cgi/db/1057289721/
198nobodyさん:2006/03/31(金) 20:18:11 ID:???
穿かせといて、素材の感触を楽しむのもいいし、ちょっとずらしてインサートもいいよ。
全裸がいいか着衣のままがいいかは個人の趣味だな。

容量が増えてくるのは、DBファイル置いてる所かな?
DBファイルが大きくなったらどうなるかぐらいは考えて鯖建てすべき。
199nobodyさん:2006/03/31(金) 20:45:02 ID:???
スレ違いDQNどもがうぜぇ。はやく学校行け
200nobodyさん:2006/03/31(金) 20:58:24 ID:???
>>199
パンチィねたがお好みですか?
201nobodyさん:2006/03/31(金) 23:41:24 ID:???
>>200
回線切って学校いけ
202nobodyさん:2006/03/31(金) 23:51:06 ID:???
>>201
学校お休みだみょ〜〜ん
203nobodyさん:2006/03/32(土) 00:44:03 ID:???
記念カキコ(^▽^) 3/32
204nobodyさん:2006/03/32(土) 01:38:41 ID:???
4/1を阻止したいFOXの仕業?
205nobodyさん:2006/03/32(土) 11:46:23 ID:???
206nobodyさん:2006/03/32(土) 13:08:55 ID:???
掲示板への投稿されたものを取ってくる関数の戻り値をどうすればいいのか迷っています。

function getPost() は、DBから投稿を取って配列を返す関数なのですが、
DB取得に失敗した場合、return falseにしています。

これだと、成功時に配列、失敗時にfalseというわけのわからない関数になってしまうのですが
みなさんはどうしていますか?
207nobodyさん:2006/03/32(土) 13:32:07 ID:???
>>206
PHPってそういうもん。
それで大丈夫。
どうしても嫌なら例外をthrowする。
208nobodyさん:2006/03/32(土) 13:44:24 ID:???
>>207
ま、マジですか???

呼び出し側で使いづらい…
PHP4なんですが、例外をthrowってできるんでしょうか…
209nobodyさん:2006/03/32(土) 13:52:16 ID:???
>>208
例外はPHP4じゃできない。
呼び出すときは
if ($result === false)
みたいなコードを必ず入れる。
PHPは標準関数だってそういうのだらけでしょ。
別に0件取得できたのと失敗で取得できなかったのとの間に何の違いも必要ないならarray()を返してもいいけど。
いちおう一般的な方法はfalseを返すってことだけ言っておく。
あとは好きにして。
210nobodyさん:2006/03/32(土) 14:06:33 ID:???
>>209
丁寧にありがとうございます。
すごくよくわかりました。

#そっか、0件と失敗は違うか…ヤバイな俺
その通りやってみます。
211nobodyさん:2006/03/32(土) 15:32:40 ID:???
関数が配列とスカラーを混在して返すんだから
配列処理関数(countとか)も引数にスカラーを
受け付けるようにして欲しいよな。(array()と同じ扱いで)
エラー判定マンドクセ
212nobodyさん:2006/03/32(土) 17:02:14 ID:???
俺は使い捨てスクリプトで foreach (glob(〜) as $file) のglobがfalseを返したときのwarningにいつもいらいらするよ。
@ foreach とか書ければましだったのに。
213nobodyさん:2006/03/32(土) 18:25:31 ID:???
そんなもんに焦るとは自分の無知識を自慢してるのか?
214213:2006/03/32(土) 18:26:21 ID:???
すまん、誤爆
215nobodyさん:2006/03/32(土) 18:57:46 ID:???
>>212
たかだか2行ぐらい書くのも出来ないのか?

if ($filelist = glob()) {
 foreach($filelist as $file) {

 }
}
216nobodyさん:2006/03/32(土) 19:03:14 ID:???
>>215
いや、できるけど。
217nobodyさん:2006/03/32(土) 19:24:10 ID:???
>>213
タイミング良すぎw
218nobodyさん:2006/04/02(日) 14:17:12 ID:???
質問です。
「PHP側でHTTPコネクションを接続状態のまま維持しつづけることについて」のご意見をお聞きしたいのです。

やりたいことはレスポンスがほぼリアルタイムなWebチャットです。
現在のWebチャットは、ブラウザが5秒毎や10秒毎にサーバーにHTTP接続し、更新が無いかチェックしていますよね。

それを↓こうすることによって、ほぼ即レスポンスなチャットを実現したいのです。

writeTalk($str); // 自分の発言を記録
while(true)
{
 Sleep(1); // 1秒くらいは流石にスリープさせよう。
 if (checkRenew()) // 更新チェック。
 {
  // 更新があったので、更新内容を受け取らせる
  print readRenew();
  return;
 }
}

実際はクライアント側がタイムアウトしてしまうので、30秒に一度くらいは接続張りなおしが必要になると思いますが、概念的にはこんな感じです。
これなら、理論上1秒ちょい程度の遅れでほぼ即レスポンスなチャットが作れます。
実際にこれで作ってみて、そうなることも確認しました。

ただ、サーバー負荷が非常に心配です。10000人とか接続したらどうなることやら。
更新内容を1秒毎に読みに行っており、例えばfopenでtxtを扱っているとしたらファイル読み込みが頻繁に起こります。
しかもHTTPコネクション張りっぱなしですし。(Apacheはそんなに大量にコネクションを張れるのかな?)

これを軽減する良い知恵はないものでしょうか。
219nobodyさん:2006/04/02(日) 15:02:33 ID:???
>>218
まずベータテストを実施して負荷を計測。
負荷がひどいならサーバを増設するとかキャッシュするとか更新チェックの頻度を減らすとかの処置をする。
220nobodyさん:2006/04/02(日) 15:56:58 ID:???
HTTPでチャット自体無謀だけどね。
1万人が一斉に書き込んで1万人に同時配信するだけでもかなりの帯域が必要。
ログもすぐ溢れるね。
221nobodyさん:2006/04/02(日) 16:05:47 ID:???
そんな規模扱ったことないから知らないけど、10000人が「同時アクセス」する可能性があるってよっぽどじゃないか。
ふつうのサーバでApache使ってちまちまやってる場合じゃなくて分散システムとか導入しないと無理じゃないの?
つーかそんなシステムをPHPで書く時点ですごい度胸だ・・・
222nobodyさん:2006/04/02(日) 17:33:27 ID:???
そういうのって今ならAjaxで組むもんじゃないの?
223nobodyさん:2006/04/02(日) 17:54:33 ID:???
どうやってメッセージデータを交換するんですか?
224nobodyさん:2006/04/02(日) 18:20:25 ID:???
>>219-223
お返事ありがとうございます。

やっぱり実施してみるしかないですかね。

>>221
通常のチャットですと、10000人が利用していても10秒間隔とかだからいいんですけどね。
これでやると実人数と等しい数のコネクトが行われているわけで

>>222
Ajaxは裏でHTTP通信するだけのシステムですから。
実際これのテストはAjaxを使ったチャット+ボードゲームでした。なかなかいいレスポンスでいいんですよね。
大規模に持っていければ商売にと思ってるんですが…
225nobodyさん:2006/04/02(日) 22:45:31 ID:???
むっころす!
226nobodyさん:2006/04/02(日) 23:53:58 ID:???
どんごろす
227nobodyさん:2006/04/03(月) 01:51:15 ID:???
にちゃんで無料で教えてもらった情報で金儲けか。凄いね(w
228nobodyさん:2006/04/03(月) 01:57:26 ID:???
と何もしない外野が言ってるらしいよ
229nobodyさん:2006/04/03(月) 02:07:09 ID:???
>>227
俺、PHPの公式サイトで無料で拾った情報で金儲けしてる。
230nobodyさん:2006/04/03(月) 02:31:50 ID:???
おれも
231nobodyさん:2006/04/03(月) 04:22:01 ID:???
おれも
232nobodyさん:2006/04/03(月) 06:55:49 ID:???
おれも
233nobodyさん:2006/04/03(月) 08:32:05 ID:???
SQLインジェクションについての質問です。

「ぜひ買いたいこの一冊(脆弱性コードレビュー練習用その1)」
http://takagi-hiromitsu.jp/diary/20060114.html#p01
> p.340 に書いてあった。
> function indi_check($p_string, $p_name) {
> if (strlen($p_string) == 0) {
> $this->disp_err_message($p_name." は必ず入力してください");
> }
> }
> 脱力。SQLインジェクション脆弱性だ。

なぜこれがSQLインジェクションになるのかわかりません。その上のコード(SQLを生成している部分)なら話はわかるのですが。

234nobodyさん:2006/04/03(月) 09:07:11 ID:???
>>233
その上のコードでindi_checkとやらを呼び出しているけど、その定義部分で「p.340 に書いてあった〜」のようなチェックしかしていないからSQLインジェクション脆弱性だと言いたいんじゃないの?
235nobodyさん:2006/04/03(月) 10:36:17 ID:???
>>233
SQLインジェクション対策をしているんだろうと思われる関数を見たら文字数しかチェックしてないんで脱力したんだろ。
236nobodyさん:2006/04/03(月) 10:45:25 ID:???
>>234-235
ああなるほど。じゃあfunction indi_check()自体にSQLインジェクションがあるのではないということですね。しかしわかりにくい文章だな。
解答ありがとうございました。
237nobodyさん:2006/04/04(火) 09:37:31 ID:???
php使いはぼったくりが多いですね。
238nobodyさん:2006/04/04(火) 09:50:03 ID:???
ギクッ
239nobodyさん:2006/04/04(火) 09:53:43 ID:???
みんな生活かかってるの!!




必死すぎて笑えるのもいるけど。
240nobodyさん:2006/04/04(火) 10:13:12 ID:???
そうか必死だったんだ。

趣味で書いたコードばら撒いてごめんね。
241nobodyさん:2006/04/04(火) 10:14:23 ID:???
出来るだけ高値で維持しようというのは商売として正しいと思うけどな
仕事くれれば「いくらでもやりますよ」なんて奴が多い業界は終わるだろ。
242nobodyさん:2006/04/04(火) 13:03:45 ID:???
無料で仕入れた情報なら、単価低くてもいいよねって足下見られる。
phpもオープンソースだから無料だよね。じゃあハード代だけでいいよね。

究極は、ハードディスク代出すから、phpのサイトコピーして納品してじゃね?
ソフトウェアは将来無料になるな。
243nobodyさん:2006/04/04(火) 13:34:22 ID:???
営業の腕次第だろ
244nobodyさん:2006/04/04(火) 14:00:54 ID:???
ネットはもっと営利組織増えるべきだと思うよ
無料無料に集中しすぎで労力が対価にあってない
245nobodyさん:2006/04/04(火) 15:06:44 ID:???
帯域も仕事そうだが、無料になったものを有料にするなんて
利用者が納得しない。時代の流れってものがある
テクノロジーの進化、スキルの進化、出来ない企業は淘汰されてゆく
246nobodyさん:2006/04/04(火) 19:55:15 ID:???
有料にしたとたん、無料のオプソを採用する意味が無くなる。
WindowsとASPでもいいじゃん。

帯域は、一般向けは安く定額でも、大規模鯖でIXとかに1Gbpsとかで繋ぐと従量課金だからなあ。
247nobodyさん:2006/04/05(水) 01:17:08 ID:???
要するに品質を問わないものについては薄利多売で価格破壊な勝負をするしかないんだよな。
248nobodyさん:2006/04/05(水) 03:16:31 ID:???
世の中は常に競争が渦巻いてる
経済なんか自然界なみに激しいぜ
249nobodyさん:2006/04/05(水) 17:52:10 ID:zzYD4Tt9
CLIで実行中のホスト名を知ることはできますか?
webで実行する時は、$_SERVER['HTTP_HOST'] で知ることができるのですが…。
250nobodyさん:2006/04/05(水) 18:07:57 ID:???
>>249
CGIならともかくCLIでは判らんと思うよ。
CGIにCLI版を使ってるなら、環境変数に入ってると思うけど。
251nobodyさん:2006/04/05(水) 18:13:46 ID:DBudPhX7
別ドメインから渡されたcookieを読み込むことはできますか?
どういうことかというと、ASP(A8とかcross-A等)がIMGタグで呼び出されたphpファイルからcookieを読み込んでいるようなので、
顧客からの要望でそれと同じことをやりたいんですが・・・。
よろしくお願いします。
252nobodyさん:2006/04/05(水) 18:24:01 ID:???
>>249
OS にもよるけど $_ENV や `hostname` とか
253nobodyさん:2006/04/05(水) 18:43:08 ID:???
>>252
お! php -r 'var_dump($_ENV);' は、 array(0){} で空っぽでした。
が、 php -r 'echo `hostname`;' では、ホスト名取れました!
OSはFreeBSDです。
254nobodyさん:2006/04/05(水) 18:55:17 ID:???
>>251
状況が全然わからん。
ユーザーから実際に送られたクッキーは全て$_COOKIEに入っているし、$_COOKIEで取得できないものはどうあがいても取得できないよ。
PHP内でさらに別のドメインにリクエストを送ってたりするってこと?
255251:2006/04/05(水) 19:15:46 ID:DBudPhX7
>>254
レスありがとうございます。分かりにくい説明ですいません。
自分のサイトAと顧客のサイトBがあるとして、
サイトAでクッキーを発行して、その後サイトBでサイトAのPHPファイルをIMGタグで呼び出してもらいます。
この際に、発行したクッキーを$_COOKIEで読み込むことができないんです。
ただASPはこの方法でクッキー読み込んでいるようなので、
技術的には可能だと思います。
色々調べてみたのですが、分かりませんでした。
宜しくお願いします。
256nobodyさん:2006/04/05(水) 19:26:10 ID:???
>>255
ヘッダにクッキー情報入れてるだけじゃないの?
257nobodyさん:2006/04/05(水) 19:40:25 ID:???
>>255
「サイトAのPHPファイル」でのヘッダ送出順がおかしいだけだと思う。
258nobodyさん:2006/04/05(水) 20:13:50 ID:???
>>255
サイトA - hakkou.php
 <?php setcookie(〜) ?>

サイトB - page.html
 <img src="http://サイトA/image.php" />

サイトA - image.php
 <?php $_COOKIE ?>

これで取得できないってこと?
ユーザーはクッキーを発行するページには前もってアクセスしてるの?
259nobodyさん:2006/04/05(水) 20:30:49 ID:???
まさかAサイトに発行したCookieをBサイトで読み込もうとしていないよな?
260nobodyさん:2006/04/05(水) 21:19:43 ID:???
>>251
A8って自サイトでCookie発行して自サイトで読み込んでるじゃん。
いつから別ドメインで発行するようになったのよ。
261nobodyさん:2006/04/05(水) 23:34:05 ID:m1J71QWp
説明が下手かもしれませんが、質問させてください。

< Query Result >
 hoge | fuga
--------------
  1  | AA
  1  | BB
  1  | CCC
  2  | AA

このようなクエリを返すようにSQLを発酵し、fetchallで全件を$resultに格納しました。
このクエリ結果をsmartyを使ってテンプレートに貼り付けたいのですが、

  1 : AA , BB , CCC
  2 : AA

と表示するようにしたいのです。

そこで、次のようにしてみたのですが、何故か$hogeの最後にスペースが入ってしまい、
テンプレート側で「存在しないインデックス」だと怒られてしまいます。
どうしたら仕様のように表示できるのでしょうか。
262nobodyさん:2006/04/05(水) 23:36:09 ID:m1J71QWp

// 以下ソース
for($i = 0 ; $i < count($result) ; $i++) {
 while(list($key , $val) = each($result[$i])) {
  if($key == "hoge") {
   if(empty($hoge) || ($hoge != $val)) { $hoge = $val; }
  }
  if($key == "fuga") {
   if(empty($data{$hoge})) { $data{$hoge} = $val; }
   else { $data{$hoge} .= " , " . $val; }
  }
 }
}
$arr = array("1" => "あ" , "2" => "い");
$smatry->assign("result_data" , $data);
$smatry->assign("array_data" , $arr);
//----テンプレートファイル
{foreach from $result_data key="key" item="item"}
{$array_data.$key} : {$item}<br>
{/foreach}
263nobodyさん:2006/04/05(水) 23:39:00 ID:m1J71QWp
>>261の表示方法が間違えました

あ : AA , BB , CCC
い : AA

と、表示したいのです
264nobodyさん:2006/04/05(水) 23:55:38 ID:???
ざっと見たけど、これコピペ?
多分これが要因かな→$data{$hoge}
基本的な配列の使い方の間違い

  if($key == "fuga") {
   if(empty($data[$hoge])) { $data[$hoge] = $val; }
   else { $data[$hoge] .= " , " . $val; }
  }

検証してないが
265nobodyさん:2006/04/06(木) 00:01:44 ID:m1J71QWp
あー・・・書いてなかったけど、hogeフィールドに入っている値はchar型なのです・・・
$array[1]とかと同じように、$array[1](1は文字列)ってできるんですか?
殆どの参考文献では、$array{'apple'}みたいな書き方をしていたので・・・

$key = 'apple'; $array{$key} = "red";

みたいな。
266nobodyさん:2006/04/06(木) 00:07:24 ID:???
smartyならこっちでもいいんじゃね
http://pc8.2ch.net/test/read.cgi/php/1118799352/
267nobodyさん:2006/04/06(木) 00:20:22 ID:94BcmyXj
一応、smartyでテンプレートには値が渡っていることは確認済みなんですが、
なぜか$hogeの値が「"1"」でなく「"1 "」になってしまっているんです。
おかげで、$array_data.$keyが「存在しないインデックス」としてエラーになっちゃって・・・

smartyスレにしようかと悩んだのですが、エラー的な部分がsmartyでなく
PHP自体のほうにあると思ったので、こちらで質問させていただいた次第です。

一応、自分なりの解決策として、chop($hoge); を行ってみたのですが、効果はありませんでした。
268nobodyさん:2006/04/06(木) 00:23:55 ID:d/Co19xe
 正規表現がよくわかりません。
どこかPHPの正規表現の解説&サンプルがあるサイトしりませんか?

なければperlでもいいです。
269nobodyさん:2006/04/06(木) 00:42:59 ID:???
>>268
君はググることも知らんのか?
山ほど見つかるだろうに。
270nobodyさん:2006/04/06(木) 00:55:24 ID:???
>>268
ワロタ
271nobodyさん:2006/04/06(木) 00:58:21 ID:???
>>265
> あー・・・書いてなかったけど、hogeフィールドに入っている値はchar型なのです・・・
> $array[1]とかと同じように、$array[1](1は文字列)ってできるんですか?
$array["1"]って書けばOK。

> 殆どの参考文献では、$array{'apple'}みたいな書き方をしていたので・・・
それはPerlの書き方。
272nobodyさん:2006/04/06(木) 01:01:21 ID:???
>>261
262のソースちゃんと読まないで言うが、
array(2) {
["あ"]=>
array(3) {
[0]=>
string(2) "AA"
[1]=>
string(2) "BB"
[2]=>
string(2) "CC"
}
["い"]=>
array(1) {
[0]=>
string(2) "AA"
}
}
こういった配列に集計されるように作った方が良いんではない。
273nobodyさん:2006/04/06(木) 04:52:30 ID:???
>>271
実は$array['1']と$array[1]は同じなんだな。
自動変換が入るので区別するのは無理。

つか
>殆どの参考文献では、$array{'apple'}みたいな書き方をしていたので・・・
の時点で、PHPの参考文献を読み直す時点からやり直し
274nobodyさん:2006/04/06(木) 06:07:05 ID:???
ヨン様バロッシュwwwwwwwwwwwwwwwwww
275nobodyさん:2006/04/06(木) 12:00:50 ID:???
>>274
おいここ市況2じゃねぇぞw
276nobodyさん:2006/04/06(木) 20:36:07 ID:eXsgEaww
クラスについて相談させてください。

エラー時やデバッグ用にログファイルに情報を出力するLogクラスを作りました。
プログラムのどこからでもこのメソッドを簡単に呼べるように
インスタンスを生成することなしに
Log::write_log();
のようにしてアクセスできるようにと考えました。

1つ問題があって
出力先のログファイルを実行時に指定できるようにしたかったのですが
そのためには
インスタンスを生成するようにして
そのインスタンスのメンバ変数を変更するような実装にしないと
実現できませんよね?

ただそれだと、そのインスタンスを
プログラム内のログ処理を行う多くの関数で
グローバル宣言が必要になるので面倒で悩んでます。

よくある処理だと思うのですが
このログ出力のような実装はどのようにするべきなのでしょうか?

・クラスを使わずにただの関数として実装
・インスタンスなしのクラス + ファイル名などの設定値はグローバル変数で実装

一応思いついたのは上の2つですがどうもすっきりしません。
よろしくおねがいします
277nobodyさん:2006/04/06(木) 21:55:17 ID:???
>>276
引数でファイル名渡せばいいじゃん
278nobodyさん:2006/04/06(木) 22:07:12 ID:???
つーかこれ、クラスである必要性あんの?
279nobodyさん:2006/04/06(木) 22:54:00 ID:???
>>276
private static $fileName, $fp;
みたいにしといてLog::fileName()メソッドでファイル名を設定+fopen。
Log::writeLog()メソッドでは、ファイル名が指定されていない場合は例外投げるとかtrigger_error呼ぶとか。

あとクラス使わない他の方法としては、trigger_errorとphp.iniのlog_errorsで対応するとか、ログを取る場所をプログラム内であちこちに分散させないように設計するとか色々。
もちろん普通に関数やメソッドの引数でファイル名指定とかでもいいと思うし。
280nobodyさん:2006/04/06(木) 23:56:36 ID:94BcmyXj
前回の質問ではお世話になりました。
頂いたアドバイスをヒントに考慮した結果、無事に求めていた表示を出すことが出来ました。
281nobodyさん:2006/04/07(金) 00:00:28 ID:???
どう対処したのか教えてくれ
282nobodyさん:2006/04/07(金) 00:15:11 ID:???
$array["1"]も$array[1]も同じ、という一文から、
$array[intval($item)]としてみたら空白が消えた。

よくよく考えたら「数字の文字列」なんだから、数字に変換しても問題ないんじゃないかな、とおもって。
お騒がせしました・・・・orz
283nobodyさん:2006/04/07(金) 03:03:34 ID:???
もう解決したからいいが、
続きなら以前のレス番を書くなり、アンカーなり付けてくれ
284nobodyさん:2006/04/07(金) 05:46:44 ID:???
PHPで品質を問われるものが存在しないので、薄利多売で価格破壊な勝負をするしかない。
鯖の設定ミスでソース見れちゃうような言語はダメ。
285nobodyさん:2006/04/07(金) 06:46:45 ID:???
鯖の設定ミス云々言ってたらキリがないと思いますがww
286276:2006/04/07(金) 10:20:43 ID:???
>>279
ありがとうございます
試してみてうまくいきました
こういうときはメンバ変数もstaticで宣言すればよかったんですね
これですっきり実装できそうです
287nobodyさん:2006/04/07(金) 11:49:59 ID:jJE5oi/7
文字列に関する質問です。PHPのバージョンは 4.3 です。

ある値について、「その値が文字列型であり、かつ、空文字列ではない」かどうかを
手っ取り早く判別する方法があれば教えてください。
単純に boolean 型にキャストするだけだと、'0' が FALSE として扱われるので駄目なのです。

自分が考えたのは、例えば
 ・ (boolean)strlen($var)
 ・ (is_string($var) && $var !== '')
などです。
ただし、前者の場合は、文字数を正確に数えるだけ処理が無駄ですし、
後者の場合はやや煩雑であるのが欠点です。
その他に何か良い方法がありますでしょうか?
288278:2006/04/07(金) 13:56:53 ID:???
>>286
それクラスにするメリットってあるか?
289nobodyさん:2006/04/07(金) 14:02:32 ID:???
再利用できるようにクラスにするんだよ
290nobodyさん:2006/04/07(金) 14:37:53 ID:???
>>287
「その値が文字列型であり、かつ、空文字列ではない」かどうかを調べたいんだから、素直に書いておくのが良いと思う。
(is_string($var) && $var !== '')
よりも良い書き方はなさそう。
あとstrlenが文字数を「数える」と思ってるらしいけど、そんなことはないから安心しなよ。
291nobodyさん:2006/04/07(金) 14:44:13 ID:???
>>288
名前空間が汚れないってこととか、必要ならprivateなメソッドを増やして拡張できること、ってのもあるんじゃない?
あと例えばログのフォーマットをするメソッドをうまく分離しておけば、後々他人が使わざるを得ないときに、継承して楽に拡張できる可能性もある。

すばやくコーディングすることだけが目的ならばクラスは必要ないけどね。
備えあれば憂い無しってやつ。
292nobodyさん:2006/04/07(金) 15:05:53 ID:???
>>290
>あとstrlenが文字数を「数える」と思ってるらしいけど、そんなことはないから安心しなよ。
そうなの?数えないんだ?
mb_strlen() はどうでしょう?こっちは数えますか?
293nobodyさん:2006/04/07(金) 15:25:18 ID:???
>>292
> mb_strlen() はどうでしょう?こっちは数えますか?
エンコーディングの種類に応じて数える。
いろんな長さの文字列で時間測ってみればわかる。

ちなみに手元にあるPHP/4.3.3のソースでは
strlen - Zend/zend_builtin_functions.c:256 zend_if_strlen()
mb_strlen - ext/mbstring/mbfilter.c:7599 mbfl_strlen()

PHP5でもmbstring系のファイル分けで移動されてるけど内容はまったく同じ。
294nobodyさん:2006/04/07(金) 15:30:26 ID:???
>>282
実装上、配列の添え字に数字文字列が与えれた場合、数値にキャストされてから使われるって聞いたが。
295nobodyさん:2006/04/07(金) 17:35:36 ID:???
>>261
今さらだけど、データベースに入ってる値がすでに "1" でなく "1 " になってたりしないか?
296 ◆Ve5JH752sw :2006/04/07(金) 20:34:50 ID:uvHuopgE
$path = pathtopath;
define(PATH, pathtopath);
PHP勉強してる初心者ですが、
変数と定数の機能は同じに思えるのですが
どう違うんでしょうか?
297nobodyさん:2006/04/07(金) 20:41:19 ID:???
> 定数は、前にドル記号($)を要しません。
> 定数を定義することができるのは、define()関数 のみです。単なる代入による定義はできません。
> 定数は、定義することができ、変数のスコープ規則に関係なく、あら ゆる場所からアクセス可能です。
> 定数は一度設定されると再定義または未定義とすることはできません。
> 定数は、スカラー値としてのみ評価可能です。
298nobodyさん:2006/04/07(金) 20:42:47 ID:???
299nobodyさん:2006/04/07(金) 21:19:11 ID:???
>>296
俺も最初同じじゃん、定数いらないじゃんと思っていた。

ポイントは>>297にあるように
1.書き換えられない
2.あらゆる場所からアクセス可能
ってところじゃない
300nobodyさん:2006/04/08(土) 05:19:01 ID:???
レベルの低い話しになるが…

定数って、例えば掲示板なら、ログのパスとか保存件数とかタイトルとか…そういう設定を定義する際に使ってた。
変数と違ってスコープとか関係ないから、関数の中からでもすぐに呼び出せて便利だなとか思ってた。
perlから入ったのでなおさらそう感じていた。(perlでは変数は特に宣言しなければグローバルなので)

ところが、例えばヒアドキュメント内に使いたければ一度変数に入れてから展開しなければいけないとか、
変数と違って"hage{$hoge}fuge"とか出来ないし、web用の設計してるとどうも不便な事が多い(特に出力面で)と感じ始めた。

結局、設定値は$CFGという連想配列作って
$CFG['xxx'] = 'yyy';
$CFG['aaa'] = 'bbb';
という具合に設定するやり方に帰結した。

お前らはどうしてますか?
301nobodyさん:2006/04/08(土) 07:05:30 ID:???
設定を変更する可能性があるものは変数にしないと後々面倒なので
定数の必要性を感じたことがないなあ。
歴史上の人物みたいな過去のものは変わらないので(たまに変わるから侮れない)
定数のほうが便利そう。。。じゃないなやっぱり。
PHP5のオブジェクト定数ならぜひ使いたい!!!のか?
記述は面倒だし一括処理には向いてないし定数自体に魅力がないもん。
global $val を多用する人には便利なんだろうとは思う。
302nobodyさん:2006/04/08(土) 07:31:42 ID:???
定義済みの定数LOCK_EXとかMYSQL_ASSOCみたいに
意味のない数字をわかりやすくするために使うもんだろ
303nobodyさん:2006/04/08(土) 12:40:29 ID:???
>>300
自分は定数は余り使わないのだが、出力の際の面倒さというのは
テンプレートシステムを使ってるので殆ど感じない。
304nobodyさん:2006/04/08(土) 12:50:54 ID:???
>>302 に納得。
設定に何でも定数を使う傾向があるのはどうだろうね。
変更されたくない値に使うのはいいと思うけど…。
305nobodyさん:2006/04/08(土) 14:09:58 ID:???
mb_convert_kanaで記号を全角に変えるのが無いのだけど、どうやって実装するのがいいでしょうか?
306nobodyさん:2006/04/08(土) 14:44:42 ID:CBLWHBmw
apache1.3.27-8
PHP5.0.4-2
を使っています。

PHPでファイルをアップロードするスクリプトを作っているのですが
1MBあたりを超えるとファイル自体はアップロードされるのですが、
壊れてしまって参照することが出来ません。

php.iniやphp.confのpost_max_size,upload_max_filesize,memory_limitの
数字を大きくしてみてもダメでした。PHP5になってから他に設定する
場所等が増えたのでしょうか?

phpinfo();で確認しても設定は反映されていました。
307nobodyさん:2006/04/08(土) 16:22:06 ID:???
特定ディレクトリを tar.gz で圧縮してそのまま
ブラウザのダイアログで表示・ダウンロードさせたいんだけど、
よい方法ないでしょうか?

別場所に tar.gz で一旦作ってから
ダウンロードするのなら簡単にできたんだけど
容量の関係でこれはやりたくないのです。
308nobodyさん:2006/04/08(土) 16:28:13 ID:???
仮にできたとしてもリクエストがある度に作るんでしょ?負荷が凄いだろうね
309nobodyさん:2006/04/08(土) 17:41:51 ID:???
ftpならダウンロード時にやってるサーバもあるね。
ところでgzip圧縮って、いきなり途中を読める圧縮だっけ?
毎回頭から読むのはちょっと現実的じゃないねぇ。
310nobodyさん:2006/04/08(土) 18:34:25 ID:???
つzless
311nobodyさん:2006/04/08(土) 22:27:49 ID:???
>>307
header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename="'.basename($dir).'.tar.gz"');
`tar -cz $dir`;
とかでいいんじゃない?
312nobodyさん:2006/04/08(土) 22:44:56 ID:lXTRpuzL
PHPの窓用のsnapshot( ttp://snaps.php.net/ )が取れなくなってるんだけど、
ごるぁする所知らんので誰かやってくださる親切な人はおられんかのぉ?

まったく、dev版じゃないとちゃんと動かんつーのさえ何とかなってくれれば orz

313nobodyさん:2006/04/08(土) 22:45:34 ID:???
.html.gzでいいじゃん
314初心者:2006/04/09(日) 00:01:38 ID:???
質問なのですが、フォームの内容すべてをハッシュ変数に自動で
保存する方法はあるのでしょうか?

最近perlからphpに移って超初心者です…。
315nobodyさん:2006/04/09(日) 00:17:31 ID:???
>>314
フォームの内容ってのはフォームで送信された内容、ってことでいいの?
だったら$_REQUESTに最初から保存されてる。
316初心者:2006/04/09(日) 00:35:35 ID:???
>>315
なるほど!!ありがとうございます。
見落としていました。
317nobodyさん:2006/04/09(日) 02:19:08 ID:???
$_POST使えよ
318nobodyさん:2006/04/09(日) 02:21:05 ID:???
$_GETでもいいじゃないか
319nobodyさん:2006/04/09(日) 02:40:45 ID:???
「すべて」っていう質問なのに$_GETや$_POSTを持ち出してどーすんだ
320nobodyさん:2006/04/09(日) 02:46:33 ID:???
ファイルの中から特定の部位までを読み込むにはどうすればいいですか?
file_get_contentsのように全て読み込まないで、特定の文字列が来たら終わりというようにしたいのですが。
321nobodyさん:2006/04/09(日) 02:48:06 ID:???
322nobodyさん:2006/04/09(日) 02:51:47 ID:???
>>320
fopen→fgetsをwhileして任意の場所で終了
323nobodyさん:2006/04/09(日) 03:12:58 ID:???
>>322
fgetsだと標準で改行まで読んでくれますが、
仮に特定の文字列が3文字だった場合などはどうすればいいですか?
その行を取り込んで更に処理するしかないでしょうか?
324nobodyさん:2006/04/09(日) 03:16:04 ID:???
>>323
普通なら読むだけ読んで不要なデータを捨てた方が
結果的に処理が速いケースの気がするが、
読み込み自体を防ぎたいという目的(理由が分からんが)なら
freadで1バイトずつ読み込んで該当文字列を探せばいいと思う。
325nobodyさん:2006/04/09(日) 03:28:30 ID:XN61lwuX
すいません、ごく初歩的な質問なのですが

$d="2006-04-25";

という形式で保存されているデータがあるとして、この翌月を「5」ではなく「05」求めたい場合、

date("Y-m-d" , strtotime("+1 month",strtotime($d)));

これしか思いつかなかったんですが、もっとスマートな方法はありますか…?
326nobodyさん:2006/04/09(日) 04:47:34 ID:???
>>325
date("Y-m-d",strtotime($d ."00:00:00 +1 month"));
細かいところにはあえてこだわらない
05の月部分を求めるなら date("m", だろう。
327nobodyさん:2006/04/09(日) 21:24:55 ID:???
SimpleXMLElement Object
(
[0] => hogehoge
)

このようなオブジェクトの0プロパティ(?)にアクセスするにはどうすればいいですか?
$obj->0 としても数字使うなって怒られます。
328nobodyさん:2006/04/09(日) 21:52:21 ID:???
$obj->'0'
329nobodyさん:2006/04/09(日) 21:55:38 ID:???
>>328
シングルクオーテーションですか?それでやってもエラーになってしまいます。
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting T_STRING or T_VARIABLE or '{' or '$'
330nobodyさん:2006/04/09(日) 22:35:29 ID:???
>>329
ワラタ
331nobodyさん:2006/04/10(月) 02:48:26 ID:???
>>327
本当にプロパティ名が 0 で値を持つなんていうオブジェクト作れるのか……?
まぁもし本当にあったら俺は get_object_vars 使って中身を配列で取得するな。
332nobodyさん:2006/04/10(月) 03:41:33 ID:???
ある変数の文字列と、ある変数の文字列をくっつけたいのですが
どうやればいいですか?
333nobodyさん:2006/04/10(月) 03:57:23 ID:???
>>332
$hutari = $pretty . $curecure
334nobodyさん:2006/04/10(月) 04:05:15 ID:???
>>331
プロパティ名を数字にすること自体はPHP4でもPHP5でも可能ですよ。
常用してると後で取り返しの付かないことになりそうだけど。
$ちんぽ = array('10cm', '20cm', '30cm');
$中出し = (object)$ちんぽ;
print_r($中出し);
335nobodyさん:2006/04/11(火) 03:56:23 ID:???
JpGraph2を使用しているんですが、画像中の日本語の文字コードの設定はできないのでしょうか?
例えばソースや内部エンコードをEUCに統一していたとしても、どうやらSJISでしか出力しないようで。
昔1を使用していた時は問題なくできたのですが、今はPHP5では2しか使えないようで困っています。
336nobodyさん:2006/04/11(火) 05:42:05 ID:???
>>335
元のコードはともかくUTF-8に変換して渡すんじゃない?
337nobodyさん:2006/04/11(火) 10:54:39 ID:???
となると文字化けを回避する方法はないということですか?
338nobodyさん:2006/04/11(火) 12:04:35 ID:???
mb関数でエンコできないの?
339nobodyさん:2006/04/11(火) 13:40:40 ID:???
>>338
mb_convert_encodingをかければちゃんと出るみたいなのですが、
全ての箇所にかけるのは手間がかかりますし文字コードの設定で直るならそっちがベターかなと
340nobodyさん:2006/04/11(火) 22:19:23 ID:2AXtnnt+
またはob_start()→出力(mb_convert_encoding())などと組み合わせて使うとか。
出力の方は忘れた。
341nobodyさん:2006/04/11(火) 22:20:41 ID:2AXtnnt+
あ、出力とエンコード逆か
342nobodyさん:2006/04/12(水) 01:22:51 ID:???
>>339
詳しく読んで無いけど、出力バッファリングを使ってみては?
343nobodyさん:2006/04/12(水) 10:30:37 ID:p8Vzvn2B
意味不明
344nobodyさん:2006/04/12(水) 18:50:59 ID:???
GDでJpegが使えないんですがどこを調べれば
原因がわかるでしょうか?

とりあえず、phpinfoではpngは使えるけどjpegは使えないです
345nobodyさん:2006/04/12(水) 18:51:59 ID:???
>>344
環境書き忘れました

Redhat9
php5

です。
346nobodyさん:2006/04/12(水) 18:57:51 ID:6+o4oJzb
あげ
347nobodyさん:2006/04/12(水) 19:06:20 ID:???
>>344
--with-gdでjpegも全部使えるはずだけどね。
jpeg-6bとかgdの再インストールとか試してみたら?
348nobodyさん:2006/04/12(水) 19:10:08 ID:6+o4oJzb
>>347
gd library install
http://www.hizlab.net/app/install/gd.html

とかみながら再インストール試したりしてるんですがダメなんです…
一度消さないとダメですかねぇ。あんまり環境変えたくないんで
なるべく被害すくないのがいいんですけど。

--with-gd

はつけてます…ダメな場合とこかにエラーでたりとかしますでしょうか?
349344:2006/04/12(水) 19:13:36 ID:6+o4oJzb
gd-1.8.4-11
zlib-1.1.4-8
libjpeg-6b-26

がRPMで入ってるます
350nobodyさん:2006/04/12(水) 19:50:25 ID:???
>>349
使えないって具体的にはどういう状態なんだい?
351nobodyさん:2006/04/12(水) 19:56:23 ID:???
>>344
http://www.php.net/image
ここに
> jpeg-6b To enable support for jpeg-6b add --with-jpeg-dir=DIR.
って書いてあるけど、この--with-jpeg-dir=DIRってやついれてphpのconfigureからしなおしてみたらどうだろう?
(元のconfigureオプションはphpinfoに出てるから、その通りやればたぶん環境が変になったりはしないでしょう)
それでも解決しないなら俺にはちょっとわからんかも。

つーかjpegが使えないってことはfunction_exists('imagejpeg')とかがfalseになるの?
phpinfoはJPG Supportの欄がなかったりdisabledになってたりするの?
352344:2006/04/12(水) 19:58:06 ID:6+o4oJzb
>>350-351
>phpinfoはJPG Supportの欄がなかったり
の状態です。欄がないっす

>>351さんの方法を試してみます
353nobodyさん:2006/04/12(水) 20:40:44 ID:???
複数行格納されている変数の値を全てファイルに書き込みたい場合どうしたらいいのでしょうか?
たとえば、$_SERVERを書き込もうとして
fputs( $fp, $_SERVER);
のようなことをしたら、最初の一行しか書き込まれませんでした
354nobodyさん:2006/04/12(水) 20:45:15 ID:???
>>353
言葉使いが微妙におかしいが
つ「foreach」
355nobodyさん:2006/04/12(水) 21:52:07 ID:???
>>354
エスパー乙。俺もそういうことだと思ったから俺もエスパー(゚∀゚)
356nobodyさん:2006/04/12(水) 21:54:51 ID:???
php 5.0.4+mbstring
apache 2.0.52を使用しています。

phpはutf8で記述しています。

HTMLのフォーム(euc-jp)からフィールドに""の文字をポストして、
echo mb_detect_encoding($_POST['field']);
とすると、EUC-JP と表示されます。
echo mb_convert_encoding($_POST['field'], "UTF-8", "EUC-JP");
とすると ASCII と表示されます。

echo mb_convert_encoding($_POST['field'], "UTF-8", "SJIS");
としたら UTF-8 と表示されましたが、
echo $_POST['field'];
したところ "鐔?"こんな風に表示されました。

どうしたら 汲ェ表示できるのでしょうか。
ちなみにmb_language( 'Japanese' );を設定しています。
357nobodyさん:2006/04/12(水) 22:06:51 ID:???
>>353
fputs( $fp, join("\n", $_SERVER));
358nobodyさん:2006/04/12(水) 22:09:44 ID:???
eucjp-winやったらできた
359nobodyさん:2006/04/12(水) 23:17:40 ID:???
少し質問させてください。

次のようなテーブルがあり、ブラウザで内容を表示して
該当レコードを削除する処理を行っているのですが、
何故か一致しないレコードまで消えてしまいます。

仕様上、HTML・PHP・DB(PostgreSQL)の文字コードは変更できないため、
Unicodeでクエリを送信することができません。
(HTMLはSJIS、PHPはEUC、DBはUTF-8)
何かいい方法がありましたら、教えて下さい。

 / table /      / ブラウザ /
+---+----+    +--------------------+
| old | new |    |                |
+---+----+    | old | new | del |
| あ | い |    |----+----+-----|
| 龍 | 竜 |    | あ | い | del|
| 國 | 国 |    | 龍 | 竜 | del|
| 齊 | 斉 |    | 國 | 国 | del|
| 邊 | 辺 |    | 齊 | 斉 | del|
+---+----+    | 邊 | 辺 | del|
            +------+---+---------+

※delに張っているリンク
<a href="javascript:del_rec('あ','い')">del</a>
<a href="javascript:del_rec('龍','竜')">del</a>
360nobodyさん:2006/04/12(水) 23:18:24 ID:Rd5VnMi6
※JavaScript
function del_rec(old_value,new_value){
var frm=document.forms[0];
if(!confirm("このレコードを削除します。")){ return }
frm.ov.value=old_value; // ┐
frm.nv.value=new_value; // ┴hidden要素に格納
frm.action="del.php";  // レコードを削除するPHP
frm.submit();
}

※PHPでの削除部分(若干省略)
$item=cnv_enc_arr($_POST,ENC_EUC,ENC_SJIS);  // $_POSTをSJISからEUCにエンコード
$item=sp_char_arr($item,ENT_QUOTES,ENC_EUC); // $itemのHTMLエンティティ文字を変

$old_v=$item['old_value'];$new_v=$item['new_value'];

$sql="DELETE FROM table WHERE old=:old and new=:new";
$stmt=$db->prepare($sql);
$stmt->bindParam(":old",$old_v);
$stmt->bindParam(":new",$new_v);
$stmt->execute();

/ 実行結果 /
「old=あ , new=い」のレコードをdelしたところ、
「old=龍 , new=竜」のレコード以外が削除される

表がズレた & ID忘れてましたorz
361356:2006/04/12(水) 23:23:08 ID:???
メールで送信する際にjis変換するのですが、同じようになってしまいました。
mb_convert_encoding( "" , "JIS", "UTF-8");

メールで梶A汲ネどを送信する場合はどうするのでしょうか。
362344:2006/04/12(水) 23:32:27 ID:6+o4oJzb
うへぇやっぱダメだー

別鯖で設定してみたらあっさりできたのに、入れたい鯖だけはいってくれないー
JPEGサポートだけだめってどういうことなんだー
363nobodyさん:2006/04/13(木) 00:01:44 ID:???
>>361
それはいわゆる機種依存文字だから
使わない方がいいかもしれない。
364nobodyさん:2006/04/13(木) 00:06:30 ID:???
>>361
・(有)に変換する
・機種依存文字はあきらめる
・JIS以外で送る

上から順におすすめ
365361:2006/04/13(木) 00:10:49 ID:???
ありがとん
メールってjisいがいでおくれるの?
366344:2006/04/13(木) 00:33:25 ID:KnVEm6m2
config.logの

configure:34024: checking for the location of libjpeg

の跡にnot found がでてなければみつかってるはずですよね・・・
あとは何をチェックすればいいんでしょうか・・・
367nobodyさん:2006/04/13(木) 00:42:32 ID:???
>>365
送れなくはないが、ちゃんと表示できるかは相手次第。
というか、それを言い出したら汲ニかの機種依存文字自体、送っちゃダメ。
368344:2006/04/13(木) 01:44:41 ID:KnVEm6m2
phpinfo のGDのバージョンって何のファイルを参考にしたものか
ご存知のかたいませんか?
GDを別にセットアップしても
2.0.28のままで新しくいれたはずの2.0.33にかわらないので・・・
369nobodyさん:2006/04/13(木) 02:38:45 ID:???
>>368
2.0.33って2.0.28と同じディレクトリに上書きでインストールしたの?
370nobodyさん:2006/04/13(木) 03:49:08 ID:???
<?php require( $_SERVER['DOCUMENT_ROOT'] . "/demo.php" ); ?>
とやると、demo.phpは正しく読み込まれるのですが

<img src="<?php echo $_SERVER['DOCUMENT_ROOT'] . "/img/powered-by.png" ; ?>" title="powered-by.png" alt="powered-by.png" >
だと、ソースを見ると正しく
<img src="/www/img/powered-by.png" title="powered-by.png" alt="powered-by.png" >
に正しく変換されているのですが、絵が出ません
これは何が悪いのでしょうか?


PHPは正しく動いているのでPHPの問題じゃないと思うのですが
ほかにどこで聞けばいいのかわからないのでここで質問させてもらいます
すいませんがわかる方いればよろしくお願いいたします
371nobodyさん:2006/04/13(木) 03:59:35 ID:???
>>370
$_SERVER['DOCUMENT_ROOT'] はサーバ上のディスク上のパス
/www なんだろうけど
imgタグに指定するパスはHTTP上のパス例えば
src="http://〜/img/hoge.jpg"
またはドキュメントルートに/imgがあるなら単に
src="/img/hoge.jpg"
でよろし
372nobodyさん:2006/04/13(木) 04:11:09 ID:???
>>371
ありがとうございます・・。
単に src=/img/powered-by.png で、できました。

これに4時間近く悩んでました・・・。 orz

なんで、requireする時はフルパスで・・・
うぅーーむ、わからん。y
373344:2006/04/13(木) 05:13:08 ID:KnVEm6m2
>>369
2.0.28ってのはrh9に最初から入ってたみたいでどこにあるか
よくわからないままに、落としてきた33をコンパイルしていれたので
同じところなのかどうかわからないっす
374nobodyさん:2006/04/13(木) 05:26:46 ID:???
>>372
ブラウザというか外から見るときはApacheのドキュメントルートが一番上になるわけ。
だから /wwwの下がブラウザから見るとルートになる。
ブラウザで/varとかして外から見られちゃまずいでしょ。
requireだって相対パスで見れる。例えば/www/demo.phpで読みたいスクリプトも同じとこならなら
require "./demo.php"でOK。ドキュメントルートからの絶対パスで指定すると他のサーバに持っていって
パスが変わると面倒、と言う理由で相対パスを使うことが多いけど。
375nobodyさん:2006/04/13(木) 07:45:44 ID:???
>>368
php付属のやつだろ
php***/ext/gd/libgd

libgd.soを使うなら
./configure --with-gd=/usr
376nobodyさん:2006/04/13(木) 08:13:44 ID:???
PHPでグローバル変数を定義するときは以下のどれが適切と思いますか?
識者のご意見をお聞かせ下さい。

1.$FOO
2.$_FOO
3.$_foo
377nobodyさん:2006/04/13(木) 08:51:12 ID:???
>>376
自分が(他に開発者居るならその人達と相談の上で)分かりやすいのを選べばいい。
俺は1だな。

>>359
テーブルの設計がおかしい。
ID
378377:2006/04/13(木) 09:00:18 ID:???
>>377を間違えて途中で書き込んでしまった。


>>376
自分が(他に開発者居るならその人達と相談の上で)分かりやすいのを選べばいい。
俺は1だな。

>>359
テーブルの設計がおかしい。
IDをふってそのIDを指定して削除処理を行うべき。
挙動の理由については↓でも見て。
http://www.kanzaki.com/docs/jcode.html
PHPの話しではないが↓とかも参考になるかと。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Match

>>353
fputs($fp, implode("\n", $_SERVER));
要するに$_SERVERの中身を改行で繋いで1行にしてからfputs()って事。

>>354,355
どこがエスパーなのやら。。
379nobodyさん:2006/04/13(木) 10:00:07 ID:???
ちと疑問に思ったんだが、
>>353
>たとえば、$_SERVERを書き込もうとして
>fputs( $fp, $_SERVER);
>のようなことをしたら、最初の一行しか書き込まれませんでした

本当に($_SERVER以外も含めた何かの)最初の1行なのか?
試してないが、全く無関係に「Array」だと思うんだが・・・
380nobodyさん:2006/04/13(木) 12:47:19 ID:y+t9041B
質問です。

ROOT
├LIBLARY
│├ARRAY
││├_array.php
││└arrayFunction.php
││
│└error_code.php

└WEB
 ├ABOUT
 │└about.php
 │
 └index.php
------------------
●_array.php
include_once '../error_code.php'; //★
include_once 'arrayFunction.php';
●about.php
include_once '../../LIBLARY/_array.php';
●index.php
include_once '../LIBLARY/_array.php';
------------------
ファイルの配置と中身なのですが、★の部分でエラーが出ます。
理由は分かっており、includeしたファイルで更にincludeした場合、
カレントディレクトリ→一回目のincludeファイルのディレクトリ
という順でファイルを探すため、error_code.phpが見つからないからです。
それを承知の上での質問なのですが、
上記と同じ処理をできるだけ簡単に実現するには
どうすればいいでしょうか?
今の環境はWindowsXP、PHP4です。
381nobodyさん:2006/04/13(木) 13:00:02 ID:???
>>380
・絶対パスを使う。(よくある方法は「ROOT」にあたる絶対パスを共通のconfigファイル的な部分でdefineしておく)
・php.iniのinclude_pathを利用する。
・どうしても相対的じゃなきゃ嫌な場合はdirname(__FILE__) . '/../error_code.php'のように指定する。
382nobodyさん:2006/04/13(木) 13:01:48 ID:???
>>380

俺だったらconfigファイル作ってパスを定数で宣言しておく。

config.php------------------------
define("DOCUMENT_ROOT", "ROOTのパス");
---------------------------------

about.php-------------------------
include_once("../../CONFIG/config.php");
include_once(DOCUMENT_ROOT."'LIBLARY/_array.php');
---------------------------------

index.php-------------------------
include_once("../CONFIG/config.php");
include_once(DOCUMENT_ROOT."LIBLARY/_array.php");
---------------------------------

_array.php-------------------------
include_once(DOCUMENT_ROOT."LIBLARY/error_code.php");
include_once(DOCUMENT_ROOT."LIBLARY/ARRAY/arrayFunction.php");
---------------------------------
383380:2006/04/13(木) 13:32:36 ID:???
>>381
>>382
絶対パスで実装するのが単純でよさそうですが、
相対パスで実装したいので「dirname(__FILE__)」について調べてみます。
ありがとうございました。
384380:2006/04/13(木) 14:00:31 ID:???
連続投稿申し訳ありません。
「dirname(__FILE__)」でカレントディレクトリ名が取得できました。
応用して「dirname(dirname(__FILE__))」で親ディレクトリ名を取得し、
error_code.phpをincldeすることで解決しました。
>>381さんの「dirname(__FILE__) . '/../error_code.php'」では
途中の../の部分でエラーが出たので…。
385nobodyさん:2006/04/13(木) 14:18:20 ID:???
ヒアドキュメント内で定数を出力するにはどうすればいいですか?
386nobodyさん:2006/04/13(木) 14:38:32 ID:???
無理
387nobodyさん:2006/04/13(木) 14:38:42 ID:???
>>385
できません!
ヒアドキュメント内に入れたいなら一度変数に代入するしかないです。

↑FAQ追加キボンヌ
388nobodyさん:2006/04/13(木) 14:40:32 ID:???
>>385
ヒアドキュメント内で定数は使用できなかったと思う
どうしても定数を使用したいなら、いちど変数に入れなおすか
ヒアドキュメントを辞めて必要な部分だけ
?>
<html>
<?php
echo 定数;
?>
</html>
<?php
って感じでやる方が…
389nobodyさん:2006/04/13(木) 15:32:41 ID:???
PHP6 で対応してほしいなぁ。>ヒアドキュメントに定数埋め込み

あと、Perl や Ruby みたいに
文字列のクォートも指定できるようにしてほしい。

print qq|<a href="$link">{$array['index']}</a>|;

みたいに。
390nobodyさん:2006/04/13(木) 15:47:40 ID:???
>>380
chdir()を使うという手もあるよ。
chdir()についてはマニュアル読んでね。
391nobodyさん:2006/04/13(木) 18:14:36 ID:???
ttp://gi-home.iobb.net/php/check.php
ここはPHPを使っているらしいのですが、
どうやって、ないところはnoneにしてるんですか?
392nobodyさん:2006/04/13(木) 19:04:59 ID:KnVEm6m2
GDをDLしてソースからコンパイルしてapache再起動しても
phpinfoででてくるバージョンが
かわらないままなんですが、どこのgdを入れ替えたら
いいんでしょうか?

libgd.so
のバージョンに依存する?
393nobodyさん:2006/04/13(木) 19:36:38 ID:PiezBhsD
こんにちわ。PHPを使って$_SERVER['user_agent']を偽装したいのですが、
なかなか上手くいきません。良い方法があればご教授いただけませんでしょうか。
宜しくお願いします
394nobodyさん:2006/04/13(木) 19:43:01 ID:???
>>393
こんにちわ。>>4の8.の方法でできる。
395nobodyさん:2006/04/13(木) 19:55:52 ID:PiezBhsD
>>394
ご親切にありがとうございます。調べてやってみます♪
396392:2006/04/13(木) 21:27:38 ID:IrbHDKpJ
だれかー
397359:2006/04/13(木) 22:25:17 ID:???
>>378
ですよね('A`)
IDがあれば削除しやすいんですが・・・
ひとまず、WHERE句の条件を = から Like に変更したら正常に動きました・・・・・('A`)
なんなんだよいったい・・・・・・・
398nobodyさん:2006/04/13(木) 23:36:07 ID:???
>>373
PHPは自分がコンパイル時に指定されたディレクトリ上のライブラリファイルを読み込むから、
同じディレクトリで上ライブラリを書きするか、別のディレクトリを指定してPHPを再コンパイルするか
どっちかしないとそのライブラリは認識できないよ。
399nobodyさん:2006/04/13(木) 23:39:35 ID:???
>>378
> >>354,355
> どこがエスパーなのやら。。
すでに>>357で同じ回答が出てるのに…
400nobodyさん:2006/04/14(金) 01:02:21 ID:lStBexrZ
検索システムもどきを作成しています。結果表示のソースは↓です。(簡易的にしています)

$keyword ="$_POST[keyword]";
$count=count($fi);
$fi = file("search.txt");
for($i=0;$i<$count;$i++){
$kekka="$fi[$i]";
if($keyword=="$kekka"){ print"$kekka"; }
}
search.txtには
テレビ
パソコン

と入っているとします。form.htmlで「テレビ」と入力した時、検索結果に「テレビ」と
表示して欲しいのですが、何も表示されません。search.txt内が1行の時は表示されます。
search.txtが複数行の場合、どうしたらいいのでしょうか?
401nobodyさん:2006/04/14(金) 01:07:38 ID:???
>>400
$kekkaに改行コードがくっついたままだからifで一致しない
402nobodyさん:2006/04/14(金) 01:08:52 ID:???
>>400
さらに詳しく説明すると、
マニュアルにも書いてあるが、file()は改行文字も各配列要素に取り込まれる事になる。
なので、
if(テレビ == テレビ(+改行文字)) となり、一致しない。
403400:2006/04/14(金) 01:22:47 ID:???
>>402
私も改行コードについて気になっていました。
しかし、どうやって改行コード(\n)を取り除いて出力するのかわかりません・・。
404nobodyさん:2006/04/14(金) 01:36:47 ID:???
>>403
いや、出力以前に検索ができてないだろ。
ちなみにrtrim()っていう関数がある。
405nobodyさん:2006/04/14(金) 02:56:28 ID:???
提示のソースなら順序は
$fi = file("search.txt");
$count=count($fi);
だろ。
406344,392:2006/04/14(金) 04:16:40 ID:xKvM6FxT
でけた…

再コンパイルするときって前コンパイルに使ったところでもう一回
./configure
からやっても無駄なのね。
ダウンロードして、解凍しなおしたものでやりなおしたらできますた。
回答してくださった方、ありがとうございました。<m(_)m>


407nobodyさん:2006/04/14(金) 09:58:42 ID:nvaHi/Q0
ひとまず>>405が正解だろ。改行なんてあと。
408nobodyさん:2006/04/14(金) 10:02:18 ID:???
半角、全角関係なく検索する関数ってないでしょうか?
大文字、小文字関係なく、なら見つけたのですが。
あまりにも全角英数字入力する人が多くて。

一旦変数を半角に変換して、ということも考えましたが、
その他の文字列も含むので行えませんでした。
全てが全角ならまだしも一部だけ半角とかで検索する人がいるんで
やっかいです
409nobodyさん:2006/04/14(金) 10:14:48 ID:???
>>407
それは単なる写し間違いだと思ってたから気にもしてなかった。
だって、本物がそれだったら中身1行でも全く出力されてないはずじゃん。
410nobodyさん:2006/04/14(金) 10:17:58 ID:???
>>408
全角英数だけ半角変換すればいいじゃない
その他の文字列ってなんだ?
411nobodyさん:2006/04/14(金) 10:32:20 ID:???
>>391
$_SERVERの中身を出力してるだけだけど、それの何が分からないのかが分からない。

>>397
お節介だとは思うけど、やはりテーブルの設計(というかDBの設定)からやり直した方がいいよ。急がば回れっていうでしょ。
Likeにしたら正常に動いたってのは偶然の話し。ヒントはUTF-8。
UTF-8とは何なのか理解できてるのかな?
http://e-words.jp/w/UTF-8.html (UTF-8の簡単な説明)
そもそもあえてDBをUTF-8にしてる理由は何なのかが俺には疑問です。きっと理由はあるのでしょうが。

>>400
$fi = array_map('trim', file('search.txt'));
if (in_array($keyword, $fi)) { echo($keyword); }
全く同じ挙動でいいなら2行で書ける。
PHPって何でも関数が用意されてるので、関数リファレンス本を一冊買ってざっと読んでみるといいよ。(trim系の関数も知らないみたいなので)

>>408
>>410に賛成。半角に変換する方法が分からないならmb_convert_kana()を参照。
PHPって本当に楽ちん。
412nobodyさん:2006/04/14(金) 10:59:38 ID:???
>>411>>359
別にDBは扱いが容易な文字コードであれば何だっていいと思うんだが
(そのPHPプログラムからしか使わないとは限らないんだしな)
それより気になるのは
>>359
> 仕様上、HTML・PHP・DB(PostgreSQL)の文字コードは変更できないため、
> Unicodeでクエリを送信することができません。
> (HTMLはSJIS、PHPはEUC、DBはUTF-8)
なんでUTF-8でクエリを発行できないのかということだよ。
普通にPOSTデータをUTF-8に変換してクエリを組み立てれば済む話じゃん。
ソースコードがEUCだからってデータがEUCしか扱えないわけじゃあるまいし。
413nobodyさん:2006/04/14(金) 11:06:25 ID:???
?xxxx;形式の文字ってなんていうんですか?
またこの形式の文字を他の文字に変換したいのですがどうすればいいですか?

よろしくお願いします。
414413:2006/04/14(金) 11:07:18 ID:???
>>413
化けちゃいましたが
&#xxxx;形式です。
415nobodyさん:2006/04/14(金) 11:14:57 ID:???
>>413
> なんていうんですか?
「数値文字参照」
> この形式の文字を他の文字に変換したい
preg_replace辺りで好きに変換すれば?
416413:2006/04/14(金) 11:21:53 ID:???
>415
ご回答ありがとうございます。
そういう変換関数はないということですか?
417nobodyさん:2006/04/14(金) 11:23:40 ID:???
「そういう変換関数」が何を意味するのか分からん。
preg_replaceはそういう変換関数だと思うが?
418413:2006/04/14(金) 11:28:51 ID:???
>416
欲しい関数は
"&#x30B7;" → "シ"
というような関数です。
419ras ◆3TeOwx/x8k :2006/04/14(金) 11:31:55 ID:???
>>418の>416は>417の間違いです。
すいません。
420nobodyさん:2006/04/14(金) 11:34:38 ID:???
mb_convert_kana
421420:2006/04/14(金) 11:35:50 ID:???
更新してなかったorz
422nobodyさん:2006/04/14(金) 11:49:56 ID:???
>>418
マニュアルを探して無いようならば作るしかあるまい
以前範囲限定で作ったのが
$out=preg_replace('/&#(63\d{3});/e', 'pack("n", "$1")', $out);
$out=preg_replace('/&#x?(f[\da-f]{3});/ie', 'pack("H4", "$1")', $out);// 絵文字実体参照の変換


413の脳を収縮させる悪い漏れ('A`)
423400:2006/04/14(金) 11:54:36 ID:???
遅くなりましたが、皆様ありがとうございます。
関数をもっと勉強致します。
424413:2006/04/14(金) 12:02:25 ID:???
>420どもです。

「数値参照文字」でML等をググってみたところ
mb_decode_numericentityという関数があって数値参照文字を変換できるみたいです。
ただ、mb_decode_numericentityは16進数には対応していないので一度16進数を10進数に変換してあげないといけないみたいです。

以下、サンプルです。
$str_x16 = "&#x30B7;&#x30B9;&#x30C6;&#x30E0;"
$str_num = preg_replace( '/?x([0-9a-fA-F]+);/e', '"?" . hexdec( "\\1" ) . ";"', $str_x16);
$str = mb_decode_numericentity($str_num, array(0, 0xffff, 0, 0xffff), "euc-jp");

ありがとうございました。
425nobodyさん:2006/04/14(金) 12:04:22 ID:???
>>418
だからそういう関数→特定の形式のパターンを任意の文字に変換→正規表現置換関数。
文字参照の文字は実際の文字データで表記できないものもあるから標準では用意のしようがないかと。
426nobodyさん:2006/04/14(金) 12:07:13 ID:???
>>424
「他の文字」ってそういう意味だたのか
427nobodyさん:2006/04/14(金) 13:04:52 ID:???
現在、HTTP_Requestを使用しhttpsなURLにアクセスをするプログラムを書いているのですが
どうしても上手く行きません。

phpに--with-opensslをつけ再コンパイルしてもRegistered PHP Streamsの項目にhttpsが追加されません。
各モジュールのインストール手順を以下に記述します。

opessl-0.9.7i
# ./config --prefix=/usr/local --openssldir=/usr/local/openssl -fPIC
# make
# make install

apache_1.3.34 + mod_ssl-2.8.25-1.3.34
# ./configure --with-apache=../apache_1.3.34 \
--with-ssl=../openssl-0.9.7i \
--prefix=/usr/local/apache \
--enable-shared=ssl \
--enable-module=so

# cd ../apache_1.3.34
# make
# make certificate
# make install

php-4.4.2
# ./configure --with-apxs=/usr/local/apache/bin/apxs \
--with-openssl \
--with-mysql \
--enable-mbstring \
--enable-mbstr-enc-trans
# make
# make install
428427:2006/04/14(金) 13:06:55 ID:???
追記です。

実際のHTTP_Requestを使用しているプログラム内容を以下に記述します。

<?php
include_once("class/Request.php");

$req =& new HTTP_Request("https://www.google.co.jp");
if(!PEAR::isError($req->sendRequest())){
echo $req->getResponseBody();
}else{
echo "エラー";
}
?>

出力はエラーのみ表示されてしまいます。
429nobodyさん:2006/04/15(土) 00:56:45 ID:???
ループ処理で配列に要素を追加しているのですが、希望と違うものになってしまいます。

追加する処理は以下のようになっています。
$list = explode("\t", $sometextfile);
$arr = array();
foreach ($list as $line) {
$arr[] = $line;
}

しかし上記のようにしますと配列が以下のような連想配列になってしまいます。
$arr = array(0 => 'hoge', 1 => 'hage');
配列の希望は
$arr = array('hoge', 'hage');
です。

たぶん$arr[]のあたりの処理だと思うのですが、当方解決方法が分かりません。
おわかりになられる方がいらっしゃいましたらご教示下さい。
430nobodyさん:2006/04/15(土) 01:35:37 ID:???
>>429
最後の$arrの中を見てみたら?
431nobodyさん:2006/04/15(土) 01:41:08 ID:???
様々なファイルをアップロードするスクリプトを勉強を兼ねて作成しています。
単なるファイル操作なら簡単にできそうですが、
途中でアップロードファイルの解析、例えばwordやpowerpointのファイルに含まれている概要情報
(作成者やタイトル)などをphpで取得する方法はありますか?
432nobodyさん:2006/04/15(土) 02:53:11 ID:???
>>429
それで希望通り
433nobodyさん:2006/04/15(土) 02:55:21 ID:???
>>431
freadで中身を読み込んで特定のバイト位置のデータ内容を調べて
そのデータ形式になってるかどうかバイナリ判別。
データ形式とその判別法は頑張って情報を探しましょう。
434nobodyさん:2006/04/15(土) 04:03:02 ID:???
>>429
PHPでは連想配列と通常の配列の区別は特に無い。
$arr = explode("\t", $sometextfile);
だけでOK。
435nobodyさん:2006/04/15(土) 07:29:18 ID:???
>>429
<?php
$arr = array('hoge', 'hage');
print_r($arr);
echo "<br>\n";
$arr = array(0 => 'hoge', 1 => 'hage');
print_r($arr);
?>
436nobodyさん:2006/04/15(土) 09:31:23 ID:???
>>429
さんざん出てるけど、「PHPの言語仕様」という事で希望の状況は無理
そもそも連想配列だと困る事があるの?

(´-`).。oO(珍しく「ご教示」だ・・・)
437nobodyさん:2006/04/15(土) 15:36:11 ID:???
>>436
> 希望の状況は無理
違う。「最初から希望の状況になってる」が正しい。
$a = array("a", "b");
$b[] = "a";
$b[] = "b";
var_dump($a);
var_dump($b);

結果
array(2) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
}
array(2) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
}
438nobodyさん:2006/04/15(土) 15:37:44 ID:???
>>436
> そもそも連想配列だと困る事があるの?
連想配列(キーが文字列)と普通の配列(キーが数値)では
配列のキーを操作する関数で動きが変わる場合があるね。
なので、両者は区別して扱わないと変なとこではまる。

$x[3] = "xxx";
array_unshift($x, "yyy");
$y["a"] = "xxx";
array_unshift($y, "yyy");
var_dump($x);
var_dump($y);

結果
array(2) {
[0]=>
string(3) "yyy"
[1]=>
string(3) "xxx"
}
array(2) {
[0]=>
string(3) "yyy"
["a"]=>
string(3) "xxx"
}
連想配列ならキーの振り直しは行われないが、ただの配列だとキーが変わる。
439nobodyさん:2006/04/15(土) 17:17:51 ID:???
unshiftだと前に追加だけど、
後ろに追加する方法って $array[]= しかない?
440nobodyさん:2006/04/15(土) 18:19:21 ID:???
>>437
>>429は「添え字のつかない連想でないは配列が希望」なので希望通りではないよ
>>438
>>429が困るのか?」の話であって、一般的な問題は聞いていない

>>439
pushじゃないの
つかarray_unshiftのマニュアルに参照が先として載ってるが・・・
441nobodyさん:2006/04/16(日) 00:51:39 ID:???
おかしい。
ふつうセッションとか、setcookieつかうとHTTPレスポンスヘッダーに
Set-Cookie: ???????
がつくよね。
でもこのサイトwww.netprice.co.jp つかないんだけど
なんで?
442nobodyさん:2006/04/16(日) 01:11:40 ID:???
>>440
> 添え字のつかない連想ではない配列
いつ>>429がそんなこと書いた?
429の希望はあくまで「$arr = array('hoge', 'hage');」であってそれ以外の希望は書いていない。
これは0と1の添え字を持つ連想ではない配列だ。
443nobodyさん:2006/04/16(日) 01:54:19 ID:???
>>441
どうやって確認したのか知らんが、普通にSet-Cookieヘッダがついてたよ。
初回のクッキーはこんなんだった。
Set-Cookie: isAvailableCookie=ok; Domain=netprice.co.jp; Expires=Mon, 15-May-2006 16:50:53 GMT; Path=/
さらにこのヘッダではステータスで302が返ってLocationで次のページに飛ばされてて、
そこでこのクッキーが記録されているかを確認してクッキーがONかどうかを判定してる。
444441:2006/04/16(日) 10:05:39 ID:???
>>443
firefoxのlive HTTP Headersで見たんだけど、
Set-Cookieはやっぱりなかったです。
445nobodyさん:2006/04/16(日) 12:35:32 ID:???
>>444
フィルタリングしてないか?
446nobodyさん:2006/04/16(日) 12:55:35 ID:???
>>444
同じもので確認してみた。
ヘッダはちゃんとある。
お前の確認方法が悪いだけ。
447441:2006/04/16(日) 12:57:31 ID:???
>>445

してないです。
自分で作ったセッション使ったページ、他のサイトでは表示されます。

netpriceでは表示されないです。
>>444さんはどうやってレスポンスヘッダーを表示されましたか?
448nobodyさん:2006/04/16(日) 13:01:40 ID:???
>>447
カートに入れるボタンを押したときのレスポンスヘッダをそのまま表示してみただけだが…
449nobodyさん:2006/04/16(日) 13:40:29 ID:???
>>447

外部から接続できるなら
http://fula.jp/cgi-bin/head/
http://fula.jp/cgi-bin/head2/

これ使ってみれば
450nobodyさん:2006/04/16(日) 13:51:33 ID:???
>>449
多分、ツールはどれでも関係なくて、>>447
「セッションを使うサイトは最初のページでいきなりクッキーを発行してるはず」
というPHPサイトの固定概念に惑わされてるだけ。
netpriceでは要所要所、必要なポイントでしかクッキーを発行していない。
451441:2006/04/16(日) 14:47:45 ID:???
phpを使用してセッションを使うならば
session_start();
を実行すると思うのですが、netpriceはphp de セッションを
使用しているのに挙動が違うのが気になったのです。

カート情報 etc.を保持するならば全ページでsession_startしている
と思うのですが
452nobodyさん:2006/04/16(日) 15:06:18 ID:???
CookieとSessionをごっちゃにしてないか?
453441:2006/04/16(日) 15:08:59 ID:???
ごっちゃになってます。:-(
セッションを使うとsetcookieが使われますよね。
454nobodyさん:2006/04/16(日) 15:33:37 ID:???
>>451
> カート情報 etc.を保持するならば全ページでsession_startしている
ここが誤解。別に全ページでそんなのする必要は無い。
455nobodyさん:2006/04/16(日) 23:04:14 ID:???
セッションって、ずばりこれだ、というドキュメントがないから
繰り返し質問が出てくるね
456nobodyさん:2006/04/17(月) 00:29:11 ID:ivoWdWE5
PHP&MySQLの携帯対応のノーマル掲示板の(・∀・)イイ!スクリプトない?
457nobodyさん:2006/04/17(月) 00:53:40 ID:???
458441:2006/04/17(月) 01:42:11 ID:???
>>454さん
セッションへ格納する際にsession_start()するとして
また、購入ページに戻ったときに$_SESSION['????']で
参照できません。
459nobodyさん:2006/04/17(月) 02:16:55 ID:???
>>458
購入ページとカート内確認ページ&支払いページ以外でまで
セッションを読み書きする必要はないじゃん
そこだけsession_startしてるんでしょ
460nobodyさん:2006/04/17(月) 02:27:37 ID:???
>>458
全てのページで$_SESSIONを参照する必要性がどこにある。
461nobodyさん:2006/04/17(月) 08:37:34 ID:ivoWdWE5
>>457
ありがとう
462441:2006/04/17(月) 08:53:47 ID:???
アマゾンみたいに全ページにカートを表示しているんですよ。
463nobodyさん:2006/04/17(月) 10:29:15 ID:???
>>462
すまんがnetpriceのページ見てもどこでカート内容の表示なんてしてるのかが分からない。どこよそれ?
どう見ても、ページ上部の「カートを見る」をクリックしたときしか表示してないように見えるんだが…
(当然、ここをクリックするとクッキーが発行される)
464441:2006/04/17(月) 12:18:02 ID:???
>>463
すみません、自分で作ったページでは全ページにカートを表示しています。
465nobodyさん:2006/04/17(月) 12:21:04 ID:???
>>464
何が言いたいのか分からん。netpriceの話じゃなかったのか。
466nobodyさん:2006/04/17(月) 12:27:13 ID:???
>>455
もはやそんなレベルの話ではないなw
467nobodyさん:2006/04/17(月) 16:25:10 ID:???
http://pc8.2ch.net/test/read.cgi/php/1064399467/
【PHP】セッションについて語ろう!【PHP】

↑みたいなスレもあるみたいだがセッションだけの話しではないから駄目か?
468nobodyさん:2006/04/17(月) 17:49:35 ID:???
というか、質問者が頭悪いだけじゃないの?
469441:2006/04/18(火) 09:20:14 ID:???
session_start()すると、そのページのHTTPレスポンスヘッダに
Set-Cookie: PHPSESSID=***************************; path=/
が付加されるよな。

そんでそのページ内だったら$_SESSで値を参照できると
思うのだが違うのか?
470nobodyさん:2006/04/18(火) 11:55:20 ID:???
> session_start()すると、そのページのHTTPレスポンスヘッダに

> そのページのHTTPレスポンスヘッダに

> HTTPレスポンスヘッダに

> レスポンス

そのとおりだね


> そんでそのページ内だったら$_SESSで値を参照できると
> 思うのだが違うのか?

事実違うんでしょ?

結論:>>468
471nobodyさん:2006/04/18(火) 12:10:37 ID:???
>>469
まだ居たのか?
>>441の疑問は>>450で解決したんだろ?
472nobodyさん:2006/04/18(火) 14:03:14 ID:???
>>469
netpriceがどういうプログラムを作ってるかはとりあえず置いといて概論で話をすると、

> session_start()すると、そのページのHTTPレスポンスヘッダに
> Set-Cookie: PHPSESSID=***************************; path=/
> が付加されるよな。
これはクッキーを使う設定の場合のみ。

> そんでそのページ内だったら$_SESSで値を参照できると
> 思うのだが違うのか?
クッキーを使わない設定にしてても発行済みのクッキーからセッションIDは読み取れるので
そこから$_SESSIONの参照は可能ではある。

netpriceに関しては、「クッキーを発行してないのに明らかに$_SESSIONの内容を表示してる」
とかいうページがどこなのか分からんので、そこを具体的に示してくれんことには話にならん。
473nobodyさん:2006/04/18(火) 16:11:15 ID:???
PHPに差分をとるライブラリなんかないでしょうか?
diffみたいなものです。
474nobodyさん:2006/04/18(火) 17:00:18 ID:???
Pearにあったよ、Peclにもextensionがあったと思う。
日本語に対応してるかは知らんけど
475nobodyさん:2006/04/19(水) 00:55:56 ID:X+QcIjUE
メールサーバを用意しました。
今までPHPのmail()でlocalhostから送信してたのですが、
これをメールサーバから送信するようにするにはどうしたら良いのでしょうか?
もしかしてmail()じゃ無理っすか?
もう動いちゃってるのでプログラムの変更は最小限にしたいと思っております。
サーバの設定等でできるとうれしいです。
環境は
CentOS
Apache2
Php4.3.10
Qmail
です。
476nobodyさん:2006/04/19(水) 05:45:46 ID:???
>>475
ini_set('SMTP', SMTPサーバー名 or IPアドレス);
477nobodyさん:2006/04/19(水) 07:18:21 ID:???
>>476
php.iniのSMTPが有効なのは、win32環境の時のみ。

>>475
fsockopen()を使って自力でSMTPを喋るか、pearのmailパッケージあたりを使うのがいいんじゃないかな。
てか、localhostでもいいと思うんだが。
478nobodyさん:2006/04/19(水) 11:58:00 ID:???
SMTPサーバって適当なところ指定したら送れたんだけど、勝手に使っちゃっていいの?
IDやパスもいらなかった
479nobodyさん:2006/04/19(水) 12:23:55 ID:???
>>478
使っていけないのならPOP before SMTPとかSMTP AUTHとか設定してるはず
480nobodyさん:2006/04/19(水) 13:30:26 ID:???
>>478
勝手に使うのはいけません
481nobodyさん:2006/04/19(水) 13:44:43 ID:???
>>478
今時オープンリレーなんて豪気だなと思って、
その懐の豊かさを晒してやれ(w

ただ、喪前は積極的には使うなよ。
482nobodyさん:2006/04/19(水) 13:53:59 ID:???
「適当な」SMTPサーバってのは、自分が使ってるISPのSMTP鯖なんじゃないかと
ふと思った。太っ腹オープンリレー鯖のことかもしれないけど。
483ぺこり:2006/04/19(水) 17:17:30 ID:QMAjoMk/
↑の問題を誰か解いてくれませんか??どうぞよろしくお願いします
m(_ _)m
484ぺこり:2006/04/19(水) 17:18:03 ID:QMAjoMk/
1行に一つの数字が書かれているデータファイル indata.dat がある.
このファイルから1行ずつ文字を読み込み,(2_3), (2_4),(2_5)のように
表示するプログラムを,各々再帰関数を用いて作成せよ.
なお,プログラム中で配列を用いてはならない.

indata.dat
1
2
3
4
5
6
7
8
9

(2_3):(正順に表示する)
1 2 3 4 5 6 7 8 9

(2_4):(逆順に表示する)
9 8 7 6 5 4 3 2 1

(2_5):(3組ずつ逆順に表示する)
3 2 1 6 5 4 9 8 7

485nobodyさん:2006/04/19(水) 17:26:11 ID:???
>>484
宿題は自分で考えましょう。
出来ないからといって、他人を頼ってはいけません。
「出来ない」それが今のあなたの評価なのですから。
486nobodyさん:2006/04/19(水) 17:38:59 ID:???
こういう問題のための問題ってやる気しないな
配列使用不可とか目的が分からん
487nobodyさん:2006/04/19(水) 17:40:53 ID:???
>>486
勉強なんてそんなもんだべ。
一通り勉強させるのは学校のお仕事、それを考えて活用するのが開発のお仕事。
488nobodyさん:2006/04/19(水) 17:45:06 ID:???
>>487
そこを>>484みたいな馬鹿は楽しようとするから
うちのY野みたいに使えない奴が平気でプログラマーを名乗るんだわorz
489nobodyさん:2006/04/19(水) 17:54:36 ID:???
>>488
あー、うちのN上みたいなやつか。
同情するぜorz
490えび:2006/04/19(水) 18:22:48 ID:iaJ4T1lt
fortranで「k(3<k<9)時の入力に対し、
     時計の長針と短針が初めて直角になる時刻
     k時m分n秒を出力するプログラム」
を作るにはどうしたらいいのでしょうか?
教えてください!(>_<)
491nobodyさん:2006/04/19(水) 18:44:03 ID:???
>>490
PHPのスクリプトで良いのか?良いんだな?
492nobodyさん:2006/04/19(水) 19:08:25 ID:???
矢野
野上
493nobodyさん:2006/04/19(水) 19:14:42 ID:???
吉野
中上
494nobodyさん:2006/04/19(水) 20:24:44 ID:???
PH
HP
495475:2006/04/20(木) 02:08:23 ID:qPD81MYc
>>477
レスありがとうございます。
あわよくばサーバの設定でどうにかならんのかとも思ったのですが無理みたいですね。
pear使うように変更します。
会員向けの全配信を行っていてlocalhostだとちょっと負荷がかかりすぎてしまうんです。
スパムじゃないっす。
496nobodyさん:2006/04/20(木) 05:55:41 ID:???
しばらくぐぐっても見つからなかったので、質問します。

MySQLの特定データベースに接続してテーブルを作成して・・・というのは出来るのですが、
MySQLに接続してPHPからデータベース自体を作成する関数・コマンドがわかりません。

もしご存じであれば、説明しているサイトややり方を教えていただければと思います。
497nobodyさん:2006/04/20(木) 06:12:41 ID:???
>>496
確認してないんだけどmysql_queryでCREATE TABLE実行できない?
mysqli->queryはマニュアルにサンプルがあるけど。
ちなみにXOOPSがテーブル作成をやってたと思う。
498nobodyさん:2006/04/20(木) 06:26:49 ID:???
>>497
確認してないんだけど、それって「テーブルを作る」方法であって、
「データベース自体を作成する関数・コマンド」では無いよね?

>>496
シラネ
499nobodyさん:2006/04/20(木) 07:24:05 ID:???
>>496
mysql_auery("create database hoge");
500nobodyさん:2006/04/20(木) 07:25:42 ID:???
確認すればそんな恥ずかしい発言しなくて済んだのに。。。
501nobodyさん:2006/04/20(木) 08:24:03 ID:???
>>496
そんなアホみたいに簡単なことでも専用のmysql_create_db()てのがあるぞ!
て言おうと思ったら廃止予定だってw誰も遣ってなかったって事屋根。
502496:2006/04/20(木) 13:12:41 ID:???
みなさん、アドバイスありがとうございます。

>>501
てことは、もう使えないんですかね?
テスト環境はPHP5.1+MySQL5.0.18なんです。
だから確実に古い関数は消えているかと・・。

どうしたら良いんだろうな・・・
503nobodyさん:2006/04/20(木) 13:32:23 ID:???
>>502
>>499 が見えないのかアフォ
504nobodyさん:2006/04/20(木) 13:39:41 ID:???
mysql_auery

こんな関数あるの?
505496:2006/04/20(木) 13:56:58 ID:???
すみません、499さんの書いているのでいけました。(mysql_query)
以下のようなソースでOKだったんですね。。勉強になりました。

$DBSERVER="localhost";
$DBUSER="test";
$DBPASSWORD="test";
$DBNAME="hoge";

$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$rst = mysql_query("create database $DBNAME");

if($rst){
print"$DBNAMEを作成しました。";
}else{
print"失敗しました";
}
506nobodyさん:2006/04/20(木) 14:04:57 ID:???
>>502
まだ使えるだろ
PHP6で使えなくなるかもしれないってことだ
507nobodyさん:2006/04/20(木) 16:24:06 ID:iuRzPwTn
ffmpegをPHPから使えるffmpeg-php使ってる方いませんか?
ffmpeg_animated_gif オブジェクトを new で作成すると、セグメンテーションフォルトでプロセスがダウンしてしまいます。
Apacheモジュール版でも、CLI版でも同じようになってしまいます。
これってなにか解決法はないでしょうか?

環境
Fedora Core 5 (カーネル 2.6.15-1.2054_FC5)
Apache 2.2.0 (自前ビルド)
PHP 5.1.2 (Zend Thread Safetyなし 自前ビルド)
ffmpeg 0.4.9-0.21.20051228.lvn5 (livnaのRPM)
ffmpeg-php 0.4.6
508507:2006/04/20(木) 21:57:54 ID:RzC6bNe0
事故レス
ffmpeg-phpの最新版をCVSから取得してコンパイル・インストールしたら、問題が起こらなくなりました。
509nobodyさん:2006/04/21(金) 02:08:58 ID:???
>>505
貴方はPHPのソースうんぬんよりも、SQLを勉強すべきだと思う。特にDDL。
510nobodyさん:2006/04/23(日) 08:13:06 ID:paGhm8t3
php入れたんですがphp.iniを読み込んでくれません。
WinXPなので、c:\windowsフォルダにphp.iniを入れたのですが
読み込んでくれなくて困ってます。
考えられる原因はなんでしょうか?

Apacheで動作確認すると、一応PHPは動きます。
phpinfoも表示されます。
phpinfoでのphp.iniの場所はc:\windowsになってます
php.iniを削除しても↑のままです
けど、あってもなくても、中身はみられてなくて、デフォルト設定のままです
他の場所を検索してもphp.iniは見当たりませんでした
511nobodyさん:2006/04/23(日) 09:44:42 ID:???
>>510
Apacheは再起動してる?
あとphp.iniに構文エラーはないかどうかとか。
512nobodyさん:2006/04/23(日) 10:40:54 ID:???
>>510
php.ini-distのままだとか…んなわきゃないか
513nobodyさん:2006/04/23(日) 10:50:30 ID:62aZMTpX
phpinfo()でphp.iniのパス確認できるから。
514nobodyさん:2006/04/23(日) 10:51:33 ID:???
ああすみません
よく読んでナカータ。。。
515nobodyさん:2006/04/23(日) 11:47:09 ID:paGhm8t3
>>511
再起動してます。PCごと再起動もやってみましたがダメでした
php.iniの構文エラーのチェック方法ってありますでしょうか?
http.confはチェックプログラムありましたけど・・・

>>512
ファイル名は確認しました
拡張子表示してるので、こっそり.txtとかってこともないです
516nobodyさん:2006/04/23(日) 12:05:25 ID:???
>>515
ハードディスクの中全部でphp.iniがどこにあるか検索しちゃどう?
phpinfoでのパスが合ってるということなのでアレですが、以下はphp.iniの探す順番
http://www.php.net/manual/ja/configuration.php#configuration.file
517nobodyさん:2006/04/23(日) 12:52:11 ID:???
そのphp.iniを消す(またはリネームする)とどうなる?
518nobodyさん:2006/04/23(日) 13:08:42 ID:???
>>516
全部でさがしても一つだけでした

>>517
phpinfoの内容はかわらないまま、普通に動きます
519nobodyさん:2006/04/23(日) 13:21:21 ID:???
>>510
「読み込んでいない」っていうのはそもそもどういう状態?
別の部分の動作確認してて、php.iniを読んでないような「気がしてるだけ」ってことない?
520nobodyさん:2006/04/23(日) 13:44:45 ID:???
状況がよく分からんが、php.iniに多少書き間違いがあっても正しい部分だけを使って開始するよ。
構文チェックツールがあるかどうかは知らない。GUIで作成するツールはなんかあった希ガス。
>>519と被るが、どうやって「反映されない」事を確認したのかが気になるな。
521nobodyさん:2006/04/23(日) 15:38:21 ID:LKBdtcmu
soapを使用したソース1を
nusoap.phpを使用したソース2のように変更したところ
116.555と表示されていたものが、
0と表示されてしまいます。
どこが駄目なのかわからないのですが。

【ソース1】
-------------------------------------------------
<?php
$client = new soapclient("http://www.webservicex.com/CurrencyConvertor.asmx?wsdl");
$param = array('FromCurrency'=>'USD','ToCurrency' =>'JPY');
$result = $client->ConversionRate($param);
echo $result->ConversionRateResult;
?>
-------------------------------------------------
【ソース2】
-------------------------------------------------
<?php
include("nusoap.php");
$client = new nusoapclient("http://www.webservicex.com/CurrencyConvertor.asmx?wsdl",TRUE);
$objPx=$client->getProxy();
$param = array('FromCurrency'=>'USD','ToCurrency'=>'JPY');
$result = $objPx->ConversionRate($param);
echo $result['ConversionRateResult'];
?>
-------------------------------------------------
522nobodyさん:2006/04/23(日) 17:16:19 ID:???
Apache2.2にPHP5.1.2をインストールしたけど、*.phpにアクセスしたら実行されずにソースがテキストで返ってくる。
たぶんapacheの設定が足りないと思うんだけど、なにをしたらいいんでしょうか。
今は
LoadModule php5_module modules/libphp5.so
という一行を追加しただけ。
Apache2.0はこれでうまくいったんだけどなー。
523nobodyさん:2006/04/23(日) 17:22:06 ID:???
>>522
AddType application/x-httpd-php .php
たぶん2.0もこれ入れないと動かないような気が・・・
524nobodyさん:2006/04/23(日) 17:22:31 ID:???
>>522
AddType application/x-httpd-php .php
が足りませんでした。お恥ずかしい。
525nobodyさん:2006/04/24(月) 03:51:43 ID:VfLSu+M7
XMLテキストを作る時、
データの実体参照化は
htmlspecialchars
htmlentities
どちらを使った方がいいでしょうか?
526nobodyさん:2006/04/24(月) 04:12:16 ID:???
>>525
htmlentitiesのほうがいいんじゃないかな。
第二、第三引数とかで柔軟に使えると思う。
527nobodyさん:2006/04/24(月) 11:37:04 ID:PGhFNhwX
海外からの英文広告に悩まされています
で、全角が一個もないのでスパム! って判定をしたいのですが
 判定が成功しません。どなたか教えてください

環境:UTF-8 $messageに内容が文字列がはいってます。

if(mb_strlen($message) >400){ #400文字以上の場合チェック
if (ereg('~ /[\xc0-\xf7][\x80-\xbf]/',$message)) {
広告ではない
}else{
きっとSPAM
}
}

参考にした文字コード
ttp://ash.jp/code/code.htm
528nobodyさん:2006/04/24(月) 11:46:08 ID:???
>>527
> ~
何これ?
529527:2006/04/24(月) 12:06:59 ID:???
ハッΣ(゜ロ゜〃) と思って

やたのですが
 if (ereg('/[\xc0-\xf7][\x80-\xbf]/',$message)) {

 でもだめでした。
530nobodyさん:2006/04/24(月) 12:16:14 ID:???
>>529
なぜ、mb_eregを使わない?
531527:2006/04/24(月) 12:24:34 ID:???
if (mb_ereg('/[\xc0-\xf7][\x80-\xbf]/',$message)) {

 駄目でした。。 (ノ◇≦。) ビェーン!!
532nobodyさん:2006/04/24(月) 12:45:40 ID:???
>>531
正規表現の前後に「/」が必要なのはpreg_*だけ!
533527:2006/04/24(月) 12:49:18 ID:???
; ̄ロ ̄)!!

先週までPerlやってたので混乱してました

if (preg_match('/[\xc0-\xf7][\x80-\xbf]/',$message)) {

 で、OKでした。。  氏にたくなった。。
これから飯喰いに逝って来ます。
 ああ、、時間が。。 カロリーメイトだな。。。゜゜(>ヘ<)゜ ゜

 ありがとうございました。
534nobodyさん:2006/04/24(月) 14:41:16 ID:???
詰まったときに、飯食うなどして頭冷やして考え直さないやつっていつまでも詰まり続けるよな。
535527:2006/04/24(月) 14:53:41 ID:???
若禿かもしれないですが、なにか?
 
 でも、そうだよね。ハマるよな
少し離れて冷静に、、ありがとね。
536nobodyさん:2006/04/24(月) 15:49:24 ID:???
こういうときはペアプロだとありがたい

537527:2006/04/24(月) 16:27:30 ID:???
んですよね。
ところで、改行コード(行数)を数えるのに
 substr_count($message,'\n'); は、駄目で
 substr_count($message,"\n"); で、OKなのは、なんで?

ダブルクォーテーションとシングルなんて、意識しないで使ってました。
 これで、3時間悩んだ。 詳しい人がいないとつらいです。

 腹減った。
538nobodyさん:2006/04/24(月) 16:31:45 ID:???
>>537
そこはPerlと一緒だ
539nobodyさん:2006/04/24(月) 16:33:49 ID:???
540nobodyさん:2006/04/24(月) 16:49:20 ID:???
541527:2006/04/24(月) 16:56:35 ID:???
ありがとです。今まで、
 $text = "<BR>" . $meg ;

 $text = '<BR>' . $meg ; も、結果が同じなので、意識せずに使ってたので
・・と、いうか、
 いま手を加えているプログラムBy前任者(転職)が、混ぜ混ぜに書かれている・
で、同じのかと..(・Θ・;)
 
 行数数える 、substr_count($message,'\n'); でハマっちゃいました。
’を疑いもしなかった自分は厨だと気づいたしだいです。
今は大丈夫です。 
 腹減ったんで、飯くいに行きます。
542nobodyさん:2006/04/24(月) 17:06:20 ID:???
>>527 が いい加減 ウザイ と 感じる 今日の午後
543nobodyさん:2006/04/24(月) 17:41:43 ID:???
コテハンはウザイよな。でも質問スレだ。
544nobodyさん:2006/04/24(月) 17:51:23 ID:???
文法の基礎の基礎であるシングルクオートとダブルクオートの違いすら知らないで
いきなり正規表現なんて書いてるんじゃねーよ、と。
545nobodyさん:2006/04/24(月) 18:05:13 ID:???
実は俺もテケトウだったんだ。シングルとダブル....
546nobodyさん:2006/04/24(月) 21:27:56 ID:???
最初はダブルクォートよく使ってたが最近はシングルの方が多いな。
Shiftキーいちいち入力するの面倒くさいし
547nobodyさん:2006/04/24(月) 21:45:34 ID:QMCT6jyE
>>546
548nobodyさん:2006/04/24(月) 21:57:29 ID:???
$hoge = ''hogehoge $hage hoge'';
549527:2006/04/24(月) 23:51:26 ID:???
今日は本当にありがとうございました。
明日から nobody に戻ります。
これから帰宅と...
550nobodyさん:2006/04/25(火) 06:46:22 ID:???
PHPにIPアドレスの範囲

例えば 0.0.0.0-0.0.10.0

の様な書式を認識させる簡単な方法はないでしょうか?
551nobodyさん:2006/04/25(火) 07:06:49 ID:???
>>550
16進数に変換してつなげる
552nobodyさん:2006/04/25(火) 07:46:57 ID:???
>>550
ip2long("0.0.10.0");
553sage:2006/04/25(火) 11:55:50 ID:5pP/wi9o
自作のPHPをローカル環境で作成したのですが
急に永久ループに陥りました。
プログラムの内容は永久ループ前と変更していないのですが
それまで使えていたものが急に永久ループになることはあるのでしょうか。

それとちなみに永久ループになった場合はApacheを再起動させれば復活するんですよね?
554nobodyさん:2006/04/25(火) 11:57:11 ID:???
間違えて名前にsageをいれてしまった・・・
555nobodyさん:2006/04/25(火) 12:40:51 ID:???
>>553
永久にループするよ
556おっぱい:2006/04/25(火) 13:53:15 ID:VQos3Exk
舐めたい
557nobodyさん:2006/04/25(火) 14:35:25 ID:???
>>553
使ってる条件次第でしょ
558nobodyさん:2006/04/25(火) 17:16:13 ID:???
>>553
最初から全てのバグが表面化してくれれば苦労しない
max_execution_timeで止まらないの
559nobodyさん:2006/04/25(火) 23:21:16 ID:???
>>558
Profilerでどこがループしてるか調べたら?

560nobodyさん:2006/04/25(火) 23:30:50 ID:???
Profiler って Zend とか?
phpeclipseでもあるのかな・・
561nobodyさん:2006/04/25(火) 23:56:06 ID:N5syBJe4
gd関連の質問です。
gdで作った画像を変数に取り込んでおいて、ページ表示時に表示したい場所に表示する事は可能でしょうか?

例えばgdで作った画像を
$x = imagePng($image);
としておいて、あとで
$fp = fopen('読み込むテンプレートHTMLページ.html', 'r');
while ($x = fgets($fp, 1092)) {
$x = ereg_replace('%%pict%%', $x , mb_convert_encoding($x, 'SJIS','SJIS'));
echo $x;
}
みたいな感じで。
どなたかご存知の方。お教えください
562nobodyさん:2006/04/25(火) 23:57:46 ID:N5syBJe4
ごめん。$xが重複してた
$image = imagePng($image);
としておいて、あとで
$fp = fopen('読み込むテンプレートHTMLページ.html', 'r');
while ($x = fgets($fp, 1092)) {
$x = ereg_replace('%%pict%%', $image , mb_convert_encoding($x, 'SJIS','SJIS'));
echo $x;
}

って感じです。よろしくお願いいたします。
563nobodyさん:2006/04/26(水) 00:58:35 ID:???
>>561
無理。
HTML上にあるのはIMGタグだけで画像本体はブラウザがまた個別に呼び出すから。
HTML表示の段階では画像データは使わない。
564nobodyさん:2006/04/26(水) 01:46:23 ID:???
>>561
つか、<img src="hoge.php" />

hoge.phpが画像を出す
じゃダメなの?
565nobodyさん:2006/04/26(水) 07:32:44 ID:???
>>562
SJISからSJISにコンバートするのは何か理由があるのでしょうか
それと正規表現使ってないのにereg_replaceを使うのも何か理由が
566nobodyさん:2006/04/26(水) 09:21:26 ID:???
シングルは微妙にイヤンな位置にあるのでついついダブルを押したくなる・・・
567nobodyさん:2006/04/26(水) 09:27:19 ID:QZAjiKq9
少し質問させてください。

PHPを使ってメールを送信するプログラムを作成し、動作確認を行いました。
送信タイプをTEXTかHTMLか選べる項目があり、
HTMLを指定してHTMLファイルを選択して送信すると、そのHTMLファイルの内容でHTMLメールを送信します。

何事も問題なく送信・受信され、次の作業に入ろうとしたとき、ふとしたことに気づきました。
HTMLソースに「sample.php?num=40」という文字列があるのですが、
受信したときによくみてみたら「sample.php?num@」になっていました。
調べたところ、「@」のASCIIコードが「0x40」らしく、そのせいじゃないかと思ってます。

ほかの2バイト文字(漢字・ひらがな等)はちゃんと表示されています。
文字コードのあたりだとは思うのですが、化けているのがこのあたりだけなので、
どの文字コードにすればいいのかがわかりません。

何かいい対処法等がありましたら、教えてください。
568nobodyさん:2006/04/26(水) 10:08:22 ID:???
>>567
文字コードっつーかBase64エンコーディングのミスかなんかじゃないの
HTMLメールをどうやって作って送信したのかも分からんのに何を回答しろと
569nobodyさん:2006/04/26(水) 11:34:55 ID:???
PHP の mail() で添付や HTML メールに対応すれば
この FAQ もなくなるのにね。
570nobodyさん:2006/04/26(水) 12:40:52 ID:???
>>569
つ[ PEAR ]
571nobodyさん:2006/04/26(水) 13:21:28 ID:???
PEAR そのままじゃ日本語のファイル名ダメだよね
572nobodyさん:2006/04/26(水) 13:51:12 ID:???
YAHOO!とかでもそうですが、会員制サイトなど、一度ログインして
再びログインしてもログイン状態が保持されているサイトがあります。
あれってクッキーをしようしているんですよね?
最初のログイン時にクッキーを作成して、次のログイン時に自動的に
フォームに値が入る(もしくはログインの状態になる)ような。

セッションだとブラウザを閉じたら無効になりますし。。ただ、クッキーでどうやって
ずっとログイン状態にするのか、いまいち掴めません。
何かアドバイスでも良いので教えて下さい。
573nobodyさん:2006/04/26(水) 14:00:57 ID:???
一回目
ログインフォーム(値無し)入力→ログイン→なんかする

二回目
ログインフォーム(一回目の値が入っている)入力→ログイン→なんかする

ということか?あんたの言い方だとログイン後にまたフォームがあるみたいだが?
574nobodyさん:2006/04/26(水) 14:13:59 ID:RN5imsk+
>セッションだとブラウザを閉じたら無効になりますし。
これは思い込みだ。
575573:2006/04/26(水) 14:17:42 ID:???
>>573
573が書いてくれているパターンです。

>>574
たまに残りますが、PCを再起動したりすると消えます。

今まで作っていたのは、ログインが正常に行われた時に$_SESSION['name']などで
ログイン状態を保持していました。しかし、再度アクセスした時に573さんのような状態や、
元からログイン済みの状態にしたいと思いまして。
576572:2006/04/26(水) 14:18:39 ID:???
↑名前間違えました。572です・・。
577nobodyさん:2006/04/26(水) 14:38:14 ID:???
>>574
どういうこと?
578nobodyさん:2006/04/26(水) 14:51:14 ID:???
>>577
セッションIDをワンタイムクッキーで保持するか期日指定のクッキーで保持するかは
好き勝手できるんだから、ブラウザ閉じたらクッキーと共にセッションIDも消えるなんてのは
あくまでデフォルトの実装に従った場合だけ。ってことじゃない?
579nobodyさん:2006/04/26(水) 15:19:27 ID:???
要は「情報をCookieで保存」であって、
その情報が、セッションIDだろうが、ログインアカウントだろうが関係ない。
580nobodyさん:2006/04/26(水) 15:22:28 ID:???
>>575
573の方式なら、1ヶ月くらい有効にしたクッキーにIDとパスも記録してるだけだろ
581nobodyさん:2006/04/26(水) 15:22:29 ID:???
phpでブログ作ってるんですが、携帯で投稿するのってどうやって
実装するのがスマートなんでしょうか?

phpからメールボックスに定期的に確認しにいって
反映させるとか?
メールなげたらなるべく早く反映してほしいのがユーザー心理ですし
定期的にしたら遅そうですよね。サーバ負荷も気になるし。

いい方法があったら教えてください
582nobodyさん:2006/04/26(水) 15:24:16 ID:???
>>581
メール受信即反映ならMTAの設定で指定アカウントの受信メールのフォワード先に
PHPプログラムをパイプ渡しで設定しとくだけ。
これで1通ずつ自動的にプログラムが起動する。
583581:2006/04/26(水) 16:19:27 ID:???
>>582
あ、そんな設定ができるのですね。
参考になりました。ありがとうございました。調べてみますー
584nobodyさん:2006/04/27(木) 10:39:36 ID:???
phpと直接関係ないのですが、どのスレがいいのかわからなかったもので。。。

ディレクトリ全体にログインページをかませたいのですが、どのような作りがあるのでしょうか?
BASIC認証のログインページ版があればいいのですが、それらしいのが見つかりませんでした。

mod_auth_script ... denyやpromptを返さなかった場合はどうなるのかわからん。。。
mod_auth_pgsql, mod_auth_mysql ,mod_auth_external ... う〜ん、違うかんじ

単純に全てphpを通せばいいのだから、mod_aliasのようなものなんでしょうか?


585584:2006/04/27(木) 10:41:15 ID:6Nv6WHAT
すみません。ID表示させるの忘れてました。
586nobodyさん:2006/04/27(木) 11:49:16 ID:???
>>584
BASIC認証のログインページ版 ってなんだ?
BASIC認証のアカウントならPHPから利用可能なわけだが?
ってか、BASIC認証自体PHPで行えばいい訳で・・・
587584:2006/04/27(木) 12:34:25 ID:6Nv6WHAT
>>586
レスありがとうございます。
通常のクライアントブラウザの提供するポップアップが嫌だったので
HTMLで整形したログインページをかませないものかな〜と考えておりました。

認証の必要なディレクトリ以下にある文書に直接リンクされていた場合、
必ず認証ページをかますようにするにはどうしたらいいのかなと。。。

588nobodyさん:2006/04/27(木) 14:56:41 ID:???
>>587
公式サイトのマニュアルに、Basic認証をHTMLフォーム+PHPで実装するサンプルが載ってる
589nobodyさん:2006/04/27(木) 15:08:32 ID:???
Digest認証をPHPで出来ないものかなぁ
590nobodyさん:2006/04/27(木) 15:15:29 ID:???
>>589
それも公式にサンプルあるじゃん
591584:2006/04/27(木) 20:50:30 ID:???
レスをくれた方ありがとうございました。
592nobodyさん:2006/04/28(金) 07:29:06 ID:/7GydfKt
PHP4.4.2(mod)を使用しています。
fsockopenを使用しようとしているのですが、なぜかリソースとして受け取れていないようなのです。

$rs = fsockopen('***', '80', $err, $errno, '10');
var_dump($sock);
とすると、bool(true)となっていて、
var_dump(get_resource_type($sock));
とすると、
Warning: get_resource_type(): supplied argument is not a valid stream resource in...
となっています。

どうして通信が出来ないのかいまいちよくわかりません。どなたか解る方がいましたら教えてください。。
593nobodyさん:2006/04/28(金) 09:04:06 ID:???
$sockってどっからやってきたの?
594nobodyさん:2006/04/28(金) 11:34:09 ID:???
>>592
$rsを$sockに書き直せばOK
595nobodyさん:2006/04/28(金) 12:52:14 ID:QM49d57B
いきなりすみません
PHPでディレクトリ内のファイルを取得して配列に格納したいのですが、うまくいかないので質問させてください
ディレクトリの中にさらにディレクトリがあった場合の処理がどうしてもうまくいきません
スクリプトは書くと迷惑になるかもしれないので控えます
もしよろしければお教えください
596nobodyさん:2006/04/28(金) 12:59:36 ID:???
>>595
> スクリプトは書くと迷惑になるかもしれないので控えます
そう思うのならくだらない質問スレに行きなさい。
自分がどこまでやったか、どこまで調べたかも示さずに「全部作って」とは何事か。
597nobodyさん:2006/04/28(金) 13:06:30 ID:???
つか探すと結構サンプルがあるけどね
598nobodyさん:2006/04/28(金) 13:41:24 ID:???
再帰glob
599nobodyさん:2006/04/28(金) 17:53:59 ID:???
array_mapに複数の引数を渡すときはどうすればいですか?
600nobodyさん:2006/04/28(金) 18:23:34 ID:RQqf08Pg
array_map("foo", $array1, $array2);
好きなだけ続けなさい
601nobodyさん:2006/04/28(金) 22:24:24 ID:???
system関数を使って別のPHPをバックグラウンドで実行させたいんだが、どうも思うように動かない。
hoge.php から foo.php にデータを引数として送り、foo.php 内で処理をしたいんだ。
何がいけないのかがさっぱりわからない。誰かボスケテ。

[hoge.php]
for($i=0;$i<7;$i++){
$ret=system("/usr/bin/php -f foo.php?id=".$i." > /dev/null &");
echo $ret;
}

[foo.php]
$array=array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
$id=$_GET['id'];   ←Undefined Indexになる。$_SERVER自体にもうまく渡っていないみたい。
$echo $array[$id];
602nobodyさん:2006/04/28(金) 22:34:19 ID:???
>>601
CLIで動作する場合引数の渡し方を変える。

systemのとこは
php foo.php ".$i
として
$id = $argv[1];
でどう?
603nobodyさん:2006/04/28(金) 22:37:21 ID:???
>>602
-fのオプションはつけなくてもいいの?
PGに編集できるの、月曜になるから確認できなくて・・・
604nobodyさん:2006/04/28(金) 22:39:36 ID:???
>>603
-f オプションに指定したファイル名をパースし、 実行します。このスイッチはオプションで省略することもできます。
実行するスクリプトを指定するだけで充分です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
605nobodyさん:2006/04/28(金) 22:42:42 ID:???
>>603
604はあってもなくても同じってことね。

それと時間があるみたいだからここ読んどけ。パラメータの渡し方な。

http://jp.php.net/manual/ja/features.commandline.php
例 43-1. コマンドラインから実行されることを意図したスクリプト(script.php)
606nobodyさん:2006/04/28(金) 23:17:48 ID:???
>>605
なるほど 素直にスペースで区切って$argvで受け取ればいいのか・・・・

でも、確認してたときに
system("/usr/bin/php -f foo.php id=".$i." > /dev/null &");
としていたことがあったんだが、何も起きなかったような・・・
$argvで受け取れるってことは、$_SERVER['argv']にも値が入っているんだよね・・・?

それとも、/dev/nullが不要?
先方が指定してたSystem関数の引数がこうなってたから、
疑いもせずに使ってたけど・・・
607nobodyさん:2006/04/28(金) 23:27:39 ID:???
>>606
$_SERVER["argv"]はarray
マニュアル読んどけ
http://jp.php.net/manual/ja/reserved.variables.php#reserved.variables.server
608595:2006/04/29(土) 00:39:42 ID:cDiLaugn
度々すみません
1つ目のディレクトリはきちんともぐってくれるんですが、2,3となるともぐってくれない状況です
while($file = $dir_file[$i]->read()) {
if(!is_dir($dir_open ."/". $file) && $file != '.' && $file != '..') {
$file_w[] = $file;
}
609nobodyさん:2006/04/29(土) 00:56:25 ID:???
>>608
再帰しないとメンドイ
マニュアルのパクリ
<?php
function getFiles($directory) {
if($dir = opendir($directory)) {
$tmp = Array();
while($file = readdir($dir)) {
if($file != "." && $file != ".." && $file[0] != '.') {
if(is_dir($directory . "/" . $file)) {
$tmp2 = getFiles($directory . "/" . $file);
if(is_array($tmp2)) {
$tmp = array_merge($tmp, $tmp2);
}
} else {
array_push($tmp, $file);
}
}
}
closedir($dir);
return $tmp;
}
}

print_r(getFiles('./'));
?>
610609:2006/04/29(土) 00:59:57 ID:???
609の
} else {
array_push($tmp, $file);
}

} else {
array_push($tmp, $directory . "/" . $file);
}
にしといて(ファイル名のみになってた)
611nobodyさん:2006/04/29(土) 02:49:50 ID:cDiLaugn
>>610
ご丁寧にありがとうございます。
無事動作いたしました

解決してすぐの質問になり申し訳ないのですが、
[function]について詳しく書かれているwebページをお教えしていただませんでしょうか?
マニュアルにはあまり詳しい説明がないようです
612nobodyさん:2006/04/29(土) 03:20:14 ID:???
>>611
functionて「関数」のこと?マニュアルでわかんないと難しいかもね
http://e-words.jp/w/E996A2E695B0.html
http://jp.php.net/manual/ja/language.functions.php
phpのマニュアルの各関数の下にUser Contributed Notesというとこに有用なサンプルがあったりする。

ユーザ定義関数をかいつまんで説明すると何か処理をさせる単位。
function hoge(引数) { 命令群; } で一つのユーザ定義関数
<?php
//これはユーザ定義関数まずは何も実行されない
function hoge($a, $b) {
return $a * $b;
}
//hogeを呼ぶと上の関数が処理されてreturnで指定した値が返ってくる
echo hoge(2, 3); // 6
// echoは関数ではない(言語構造)
// printfとかstrlenとかは内部関数
?>
こんな感じ
613nobodyさん:2006/04/29(土) 10:28:54 ID:???
FreeBSD(98) R4.11 (Apache-1.3.33 + MySQL-4.1.7) に ports で php4 (mod_php4-4.3.10,1)
をインストールしたのですが、テストページ (test.php) が表示できません。やったことは、

1) ports でインストール

  # cd /usr/ports/www/mod_php4
  # make install clean

2) php.ini のコピー・編集

  # cp /usr/local/etc/php.ini-dist /usr/local/lib/php.ini
  # vi /usr/local/lib/php.in
  
  error_reporting = E_ALL & ~E_NOTICE
  display_startup_errors = Off
  display_errors = Off
  log_errors = On
  error_log = /var/log/php
  ;error_log = syslog

3) httpd.conf の編集

  LoadModule php4_module libexec/libphp4.so
  AddModule mod_php4.c
  AddType application/x-httpd-php .php .phtml

4) apache の再起動

  # apachectl restart

続く
614613:2006/04/29(土) 10:33:27 ID:???
続き

/public_html/ に test.phtml というファイルを用意しました。

  <html><body>
   <?
   phpinfo();
   ?>
  </body></html>

しかし、ブラウザでは何も表示されません。

/var/log/httpd-error には以下のようにありました。

  [notice] Apache/1.3.33 (Unix) PHP/4.3.10 configured -- resuming normal operations

まだ情報不足かもしれませんが、よろしくお願いします。

615613:2006/04/29(土) 10:35:05 ID:???
訂正

  # vi /usr/local/lib/php.in

は php.ini の間違い (タイプミス) です。
616nobodyさん:2006/04/29(土) 14:38:21 ID:???
>>614
その/public_htmlに
<html>
OK
</html>
という内容のtest.htmlを置いたとき、それはOKと表示されるのか?
617nobodyさん:2006/04/29(土) 18:43:39 ID:???
とあるOSSで
if(なんたら) {
return;
}

というのを見たのですが、この場合 return; は何を返すのでしょうか?
618nobodyさん:2006/04/29(土) 18:59:40 ID:???
>>617
何も返さない
619nobodyさん:2006/04/29(土) 19:02:23 ID:???
いや、借りたものはきちんと返せと
620nobodyさん:2006/04/29(土) 21:16:42 ID:???
>616
apacheは正常に動いているので、OKは表示されます。
621nobodyさん:2006/04/29(土) 21:32:58 ID:???
携帯の機種振り分けをしたいのですが、ASTELとj-poneいれると何故かうまく振り分けてくれないんです…
何が問題なんでしょうか??
あとみなさん、willcomって振り分けてます?
622nobodyさん:2006/04/29(土) 21:48:35 ID:???
>>618
NULLも返さないってこと?
623nobodyさん:2006/04/29(土) 21:48:36 ID:???
>>621
【モバイル】携帯電話向け開発について語るスレ
http://pc8.2ch.net/test/read.cgi/php/1144504375/
624nobodyさん:2006/04/29(土) 22:00:52 ID:???
>>622
NULLを返したいなら、return NULL; しる
625nobodyさん:2006/04/29(土) 22:29:55 ID:???
>>622
何も返してないので受け取り側はNULLを受け取る。
これを「NULLを返してる」と受け取りたいならそう受け取れば?
626613:2006/04/30(日) 01:47:17 ID:???
よくわかりませんが、自己解決しました。

おそらく何のオプションもつけずに configure してしまったのが
原因だと思います。

  # cd /usr/ports/lang/php4
  # make configure --with-apxs=/usr/local/sbin/apxs --with-mysql
  # make install clean

で、apache の再起動ではだめだったんで、OS 自体を再起動させたら
普通に php のテストページがみれました。

ご迷惑おかけしました。m(__ __)m
627nobodyさん:2006/04/30(日) 20:43:34 ID:VjCRbLRm
簡単なショッピングカートを作成に当たってヒントをいただきたいです。
現在、以下のような想定をしています。

1:フォームのそれぞれの項目に対して値を与える
2:submitボタンを押すと、SESSION["price"]に値が入る
3:買い物カゴのページでその内容が表示(session_start();をする)
4:前に戻って再度2をする
5:SESSIONに値が追加される
6:購入処理(メールフォーム)

SESSIONに値を入れる辺りがどうも違う気がします。1つしかはいらないし・・。
628nobodyさん:2006/04/30(日) 20:50:36 ID:???
>>627
セッションに配列を入れなさい
629nobodyさん:2006/05/01(月) 03:46:18 ID:YO7NPy3z
クライアントサイドのJSで
encodeURIComponentを使い
UTF-8にして送信
→phpでmb_convert_encodingを使い、SJISに変換して表示

というプログラムを書きましたが、
「_」を送ると「?」になってしまいます。
ちゃんと_として表示するためには
どこを直せばいいのでしょうか?
630nobodyさん:2006/05/01(月) 03:47:09 ID:???
UTF-8に_なんてあったっけか?
631629:2006/05/01(月) 04:13:03 ID:???
SJIS-winに変換すればOKでした。
>>630
_だけを記述してUTF-8で保存したテキストファイルも作れるので
あるようですね
632nobodyさん:2006/05/01(月) 06:53:09 ID:???
_
EF BB BF E3 8D 89
らしい
633nobodyさん:2006/05/01(月) 15:51:20 ID:???
ユーザ定義関数で引数をいくらでも付けられるようにするにはどうすればいいの?
634nobodyさん:2006/05/01(月) 16:09:01 ID:???
>>633
公式マニュアルの関数の章に引数→可変長引数リストって説明があるからそれ参照
635nobodyさん:2006/05/01(月) 16:10:04 ID:???
>>634
THX!!
636nobodyさん:2006/05/01(月) 18:28:00 ID:fXCmLkU0
そもそもShift_JISに_ってあんの?と思ったら>>631に答えがあったか
637nobodyさん:2006/05/01(月) 22:16:04 ID:???
php_manual_ja.chmをDLしたのですが、
開くと「取り消されたアクション」と出てしまいます。
他のページを見ると「ページを表示できません」と出ます。
何故でしょう?ちなみにウイルスソフトなどオフにしてもダメでした。
OSはXPです。
638nobodyさん:2006/05/02(火) 10:14:22 ID:???
FAQについてで申し訳ないですが教えてください。

>>4
【簡易FAQ】

2. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
 → できません

のincludeについて下記URLのPHPマニュアルの「例 16-7. HTTP経由のinclude()」を
みるとできそうなこと書いてるんですよね。しかし実行すると変数がセットされずに
〜.phpが実行されるだけなんですよ。やはり無理と言うことなんでしょうか。
http://www.php.net/manual/ja/function.include.php
639nobodyさん:2006/05/02(火) 10:17:34 ID:HxbVnoAW
「include/requireにパラメーターを付けたい」っていう考えがそもそも間違ってると思う。
関数を定義して、include/requireで読み込んで、関数を引数つきで呼び出すのが筋だろって思う
640nobodyさん:2006/05/02(火) 10:20:03 ID:???
include 'http://example.com/hohe.php&a=1';
のようにHTTP経由 ("http://")でしてる?ローカルファイルではできないとかいてあるよ。
641nobodyさん:2006/05/02(火) 12:10:48 ID:???
考え方というか、パラメータを付けたいと言うのは間違ってはいないと思う。
実現の仕方が多少違うけど、似たような事は出来るやり方は色々ある。
642nobodyさん:2006/05/02(火) 14:28:24 ID:CS7Fc+RR
自分のディレクトリパスを取得したいのですが
$_SERVER['DOCUMENT_ROOT']
をすると、借りているサーバのディレクトリパスになってしまいます
自分の借りているのは
http://www.example.jp/~hoge/
という感じでホームディレクトリ貰っています
調べたら、/usr/home/hogeなのですが
これをPHPで取得する方法はないでしょうか?
643nobodyさん:2006/05/02(火) 14:49:10 ID:???
>>642
何がほしいのかよくわがんね
DocumentRootからスクリプトが存在する相対パスが欲しいってこと?
644638:2006/05/02(火) 15:00:39 ID:???
レスくれた方ありがとう。
他の方法を検討します。
645nobodyさん:2006/05/02(火) 15:19:44 ID:???
>>643
ありがとうございます
/usr/home/hoge
この値がほしいです。
毎回これを書くと移動させるとややこしくなるので
なにか取得する方法があるのなら知りたいです。
646nobodyさん:2006/05/02(火) 15:20:42 ID:???
>>642
お好きなものをどうぞ。

[1]print_r($_SERVER) の中から使えそうな奴を使う。
[2]__FILE__
[3]あと連想配列で色々返す関数あった気がするがど忘れした。
647nobodyさん:2006/05/02(火) 15:26:16 ID:???
>>645
自分のディレクトリパス=/usr/home/hoge
で、「自分のディレクトリパス」とは何なの?
648nobodyさん:2006/05/02(火) 16:19:21 ID:???
>>645
getcwd()とか

普通相対パスで自分のディレクトリと書きにしないけど
649nobodyさん:2006/05/02(火) 17:17:48 ID:???
>>642
「自分のディレクトリパス」と「借りているサーバのディレクトリパス」の意味が分からん。
$_SERVER['DOCUMENT_ROOT']で何が返ってきてるんだ?
/usr/home/hogeってのはどうやって調べたんだ?
650nobodyさん:2006/05/02(火) 17:28:50 ID:???
>>637
http://054.info/054_44749.zip.html
このヘルプなら見れると思う。パスはphp
651nobodyさん:2006/05/02(火) 17:46:51 ID:???
>>649
多分、root(www.hoge.comとか)のdocument_rootが帰ってきてると思う
652nobodyさん:2006/05/02(火) 20:57:36 ID:???
>>651
example.com使えボケ
653nobodyさん:2006/05/02(火) 21:32:05 ID:1egQQzgH
FreeBSD 5.4-RELEASE、PHP5.1.2、Apache1.3.34。MySQL5.0.19です
PEAR::DBで、

$sql = "SELECT * FROM category WHERE id = '1'";
$rs = $db->query($sql);

は成功するのですが、

$sql = "UPDATE category SET hoge = 'huge' WHERE id = '2'";
$rs = $db->query($sql);
は、エラーは出ないもののUPDATEされません。

おなじSQL文をPHPMyAdminで実行させると、うまくいきます。

queryじゃない別の関数があるのかなとも思ったもののなさそうです。
こういう場合どうすればいいのでしょうか?
654nobodyさん:2006/05/02(火) 22:21:39 ID:???
西暦から和暦にへの変換、その逆、
西暦から書式の異なる西暦(20060502→2006/05/02,2006/05/02→2006年5月2日など)
への変換などのクラスモジュールってありますか?
あったら教えて下さい
655nobodyさん:2006/05/02(火) 23:52:14 ID:???
>>654
正規表現一発で済むような物に、クラスモジュールって必要か?
656nobodyさん:2006/05/03(水) 00:16:50 ID:???
> strstr() は PHP 4.3.0 以降バイナリセーフになりました。
とか書いてますけど
strpos()にはバイナリセーフとかまったく書いてないのにバイナリ文字列使えます。
てことは最初からバイナリセーフだったってことですよね
最初から使える、今も使えないという関数の見分けはどうすればいいですか?
(使って調べるとかいうのは無しでお願いします)
657654:2006/05/03(水) 00:48:14 ID:???
>>655
レスありがとうございます。
正規表現を使えば西暦から和暦とかにも変換で来ちゃうんですかね?
658653:2006/05/03(水) 01:51:04 ID:RT4qdpx1
すいません、かんちがいしてました。いけました
659nobodyさん:2006/05/03(水) 04:20:12 ID:???
>>654
和暦変換は明治〜平成だけならPEAR::JpCalendarとかいうのがあるみたい。
ttp://pear.php.net/pepr/pepr-proposal-show.php?id=345
今年できたばっかで大して練られてないっぽい気もするが。

西暦書式変換は普通はstrtotime+dateの組み合わせでやっちゃうと思う。
660nobodyさん:2006/05/03(水) 07:28:26 ID:???
>>659
JpCalendarはDraftが提出されただけでまだPEAR承認はされてないんじゃ
661nobodyさん:2006/05/03(水) 10:57:39 ID:???
皇紀にしてしまえばおk
西暦+660
662nobodyさん:2006/05/03(水) 11:36:50 ID:???
>>661
元年は何月何日から?
663nobodyさん:2006/05/03(水) 12:53:18 ID:???
>>657
正規表現じゃなくて、sscanf→strtotime→date or trftime
あたりがベターかと思う。
664637:2006/05/03(水) 13:45:39 ID:???
>>650
今見ました。ごめんなさい。
もう一度アップしていただけませんか?
665nobodyさん:2006/05/03(水) 16:26:01 ID:???
>>664
http://up.viploader.net/src/viploader23190.zip.html
はい。エロ広告が出てくるので注意
666nobodyさん:2006/05/03(水) 17:02:04 ID:???
PHP 4.4.x 系からでるようになったNotice 
PHP Notice: Only variable references should be returned by reference in

なのですが、どういうことをしなければこのnoticeが出ないコーディングができますか?
667637:2006/05/03(水) 17:09:28 ID:???
>>665
ありがとうございます!
助かりました。
668nobodyさん:2006/05/03(水) 17:29:48 ID:???
>>666
参照返しの関数でnewで作成したオブジェクトを直接returnに指定している場合や
値を返しているのに参照代入にした場合に出る・・と思ふ

XOOPSなら
システム管理>一般設定(サイト一般設定)>一般設定>デバッグモードを有効にする>オフ

それ以外はパッチ当てるか、ソースでerror_reportingがあれば
error_reporting(E_ALL & ~E_NOTICE);とでもすれば
とりあえずエラーは消える
669nobodyさん:2006/05/03(水) 17:32:58 ID:???
Noticeの表示なんて開発中以外は無駄だよな
670nobodyさん:2006/05/03(水) 17:39:22 ID:???
読んで字のごとく、リファレンス返しをする時は値のリファレンスを返す必要がある。
function & foo(){ return "value"; } ってのが典型的な例だな。
notice絡みでは、もう一つ
"Only variables should be assigned by reference" ってのもある。
違いが分っかるかなー?
671666:2006/05/03(水) 17:49:27 ID:???
>>668-670
ありがとうございます。でもちょっと難しいですねぇ。
XOOPSの問題でなく自分でプログラムを組んで勉強中です。

参照返しの関数ってreturn $hoge の$hogeが参照って理解でいいですか?
それとも function &foo() ってことでしょうか?

もう一つの方も分からないです…
672nobodyさん:2006/05/03(水) 18:46:58 ID:???
なんか質問の意図が良くわからんが、参照返しの関数というなら
多分下だろう
673666:2006/05/03(水) 19:45:40 ID:???
>>>668さんの言う
「参照返しの関数」の意味がわからなかったもので…

>>670さんの言う
"Only variables should be assigned by reference" の場合は、どうするべきなのですか?
674nobodyさん:2006/05/03(水) 20:07:04 ID:???
>>673
実際にどこの部分でそのNoticeが出てるか、ソース見せた方がいいかと
675666:2006/05/03(水) 21:23:50 ID:???
mojavi2 のmojavi-all-classes.php line 907です。

function & removeAttribute ($name) {
if (isset($this->attributes[$name]))
{
  $value =& $this->attributes[$name];
unset($this->attributes[$name]);
return $value;
}
}
676nobodyさん:2006/05/03(水) 21:53:24 ID:???
>>675
この場合だとissetでfalseになる場合はreturnを実行しないので何も返さないが、
関数は&付きなのでリファレンスを返すことになっていてNoticeになると思われ。
条件に該当しない場合でもダミーのデータのリファレンスを返しちゃえばNoticeは出なくなると思うが
それではたして誤動作しないかは、戻り値の受け取り側を確認しないと不明。
677666:2006/05/03(水) 22:00:11 ID:???
ダミーのリファレンスは、例えば

$value =& NULL;
return $value;

でよろしいですか?

あと、function removeAttribute
と値渡しにするという解決方法があるかなぁと思ったのですが、まずいですか?
678nobodyさん:2006/05/03(水) 22:21:42 ID:???
1.変数や引数の参照は分かったんだけど、関数の参照ってどういう意味があるの?

2.クラス内のメソッドのstaticはどういう利点があるの?
インスタンス作らないで呼べるってことくらいしかよくわからない。$this使えないし。
どういう場合に使い分けるものなの?
679nobodyさん:2006/05/03(水) 22:33:51 ID:???
mojavi 2.0.2 (svnでのみ取得できるやつ)は、
> Fixed "incorrect" reference passing for PHP 4.4.0 compatibility.
ってことで、それの修正がされている。
svnの導入が面倒かも知れないけど、まぁ他でも使うかも知れんしsvn入れて取得してみれ。

具体的にはこんな感じに修正されている。
function & removeAttribute ($name)
{
 if (isset($this->attributes[$name]))
 {
  $value = $this->attributes[$name];
  unset($this->attributes[$name]);
  return $value;
 }
 $null = NULL;
 return $null;
}
680nobodyさん:2006/05/03(水) 22:35:50 ID:???
数学系とか日付関連の関数って実体化したって意味無いじゃん。
一個あれば充分
681666:2006/05/03(水) 22:37:07 ID:???
>>679
> mojavi 2.0.2 (svnでのみ取得できるやつ)は、
げ、2.0.2が出てるのか!さんすこ。
682だいすけ:2006/05/04(木) 03:24:23 ID:NNjSW7+f
PHP5.1.2を使っています。

昔は余裕でできた、たんじゅんなメールフォームを、
一年ぶりにつくろうとしたら、動かなくなってしまいました。
ブラウザでは送信できているように見えるのですが、メールが到着しません。
なお、下記contactからmiyagawaへエイリアスしてるのですが、
ふつうのメーラで[email protected]へ送信したら、[email protected] へ転送されました。

以下コードです。

$body = "●お名前:{$_REQUEST['name']}\n";
$body .= "●メールアドレス:{$_REQUEST['email']}\n";
$body .= "●コメント:\n";
$body .= "{$_REQUEST["comment"]}\n";
$body .= "●UserAgent:{$_SERVER['HTTP_USER_AGENT']}";

$headers = 'From: [email protected]';
mb_language("Japanese");
$rt = mb_send_mail("[email protected]", "[email protected]/お問い合わせ", $body, $headers);

print "***" . $rt . ***;

最終行の$rtは空白です(******)となってしまう。

解決方法おわかりの方、いらっしゃったら、教えていただければ幸いです。

なお、内部エンコーディングをutf8にしてるのですが、これは関係あるでしょうか?
683nobodyさん:2006/05/04(木) 09:49:37 ID:???
display_errors = On とかにしてもエラーでないの?
あとは、MTAのログをみてみるとか。
684nobodyさん:2006/05/04(木) 15:49:10 ID:???
変数をまとめて管理したいのですが
--- var.php
<?php
$home_dir = "/home";
$root_dir = "/";
?>
のようなファイルをWebサイト上に置いておき

--- index.php
<?php include "http://www.example.jp/var.php"; ?>
<?php echo $home_dir; ?>
のようにして、読み込んで利用したいのですが
echoがうまく表示されません、こういう使い方はできないのでしょうか?
685nobodyさん:2006/05/04(木) 16:12:32 ID:???
むちゃくちゃだなw
allow_url_fopen off とか?

よれよりネットからとってこないでローカルから取れ
686684:2006/05/04(木) 16:21:30 ID:???
>>685
allow_url_fopenはonにしています
--- var.php
<?php
$home_dir = "/home";
$root_dir = "/";
echo $home_dir;
?>
とやったとき、
--- index.php
<?php include "http://www.example.jp/var.php"; ?>
とすると、$home_dirは表示されます。

687nobodyさん:2006/05/04(木) 16:38:55 ID:???
var.phpをvar.incにしてみ
688nobodyさん:2006/05/04(木) 18:09:57 ID:???
>>684
リモートファイルはApacheでPHPとして実行された後のが呼び出されてるから
多分そのincludeの中身は空っぽ。
.incなり.txtなり、中身をそのまま表示する拡張子にしとけばおっけー
689nobodyさん:2006/05/04(木) 19:53:50 ID:???
if(strpos(getenv("QUERY_STRING"), "/") != False){
 $limit = strpos(getenv("QUERY_STRING"), "/");
}

もうちょっとスマートに書く方法無い?
690nobodyさん:2006/05/04(木) 19:58:03 ID:???
>>689
if(($l = strpos(getenv("QUERY_STRING"), "/")) !== False) $limit = $l;
691nobodyさん:2006/05/04(木) 20:00:16 ID:???
>>689
list($limit) = explode('/', getenv('QUERY_STRING'), 2);
692691:2006/05/04(木) 20:01:27 ID:???
読み違えたorz
忘れて。
693682:2006/05/04(木) 23:34:23 ID:NNjSW7+f
>>682 ってどなたかわからないでしょうか?
ひょっとして的なヒントでもいいので。。。
よろしくお願いします。
694nobodyさん:2006/05/04(木) 23:51:44 ID:???
>>693
とりあえずそのスクリプト置いてるサーバで
mail("[email protected]", "test", "test");
して届くかやってみたら
695nobodyさん:2006/05/05(金) 00:41:51 ID:???
>>693

>>683 は虫か
696682:2006/05/05(金) 01:20:45 ID:+fwaxrpT
>>693さん
すいません。>>683をみすごしてました。

エラー表示はonにしても、エラー表示はウェブブラウザにでませんでした。

で、/var/log/maillogをみたら、

May 5 01:10:04 www sendmail[5775]: NOQUEUE: SYSERR(www): can not chdir(/var/spool/clientmqueue/): Permission denied
と言われました。

で、/var/spool/clientmqueue/ のパーミッションを755にしたら

May 5 01:18:37 www sendmail[8616]: k44GIbxh008616: SYSERR(www): queueup: cannot create queue file ./qfk44GIbxh008616, euid=80, fd=-1, fp=0x0: Permission denied
と言われてしまいました。sendmailの知識は詳しくないのですが、
このキューが入るのはどこのディレクトリで、パーミッションはいくつにすればよいのでしょうか?
697682:2006/05/05(金) 01:57:05 ID:???
(>=696)です
パーミッションについて、
/var/spool/clientmqueue/ については、
dangerous permissions=40755 on queue directory /var/spool/clientmqueue/
と言われてしまいました。

つけたしまでにて
698nobodyさん:2006/05/05(金) 02:06:18 ID:???
>>697
SendmailのInstallation and Operation Guide に、

The directory /var/spool/clientmqueue should be created to hold the mail queue.
This directory should be mode 0770 and owned by user smmsp, group smmsp.

とあるよ。オーナーも確認が必要
699682:2006/05/05(金) 02:18:59 ID:???
>>698さん
ありがとうございます。
>>698さんんの書き込みをもとに、
#chown smmsp:smmsp /var/spool/clientmqueue
# chmod 770 /var/spool/clientmqueue
# chmod 700 /var/spool/mqueue
したらエラーがMTAでなくなり、メールも正常にとどきました。
ありがとうございました。
700nobodyさん:2006/05/05(金) 19:40:53 ID:???
文章の中から、たくさん使われているキーワードを抽出したいんですが
これはどういう感じで作っていったらいいんですか?
皆目検討がつきません
701nobodyさん:2006/05/05(金) 19:50:38 ID:???
>>700
kakasiやchasenで単語に切り分け、インデックス化しておき、抽出はインデックスからする。
…って、namazuそのものじゃん。
702nobodyさん:2006/05/05(金) 23:39:40 ID:???
>>700
「形態素解析」っつー考え方があって、その処理によって日本語を単語分解する。
ttp://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90
ttp://www.unixuser.org/~euske/doc/nlpintro/
分解さえできればあとはキーワードごとにカウントするだけでしょ。

問題はこの形態素解析で、日本語の解析は真面目にやると極めて難しいよ。
この辺は何十年も昔から研究が続けられてる分野なので、その辺を勉強してみるとよろし。
具体的な実装例としては「自然言語による検索」や「日本語構文を意識した漢字変換」など。
703nobodyさん:2006/05/06(土) 02:06:14 ID:???
人工知能を作るための研究だとばかり思ってたww
704nobodyさん:2006/05/06(土) 02:55:08 ID:???
むしろ人工無能
705nobodyさん:2006/05/06(土) 16:15:13 ID:Lx+KF6I8
ちょっと質問させていただきたいのですが。
いまswitchで条件分岐をするものを書いてます。
単純に
switch($_POST['type']) {
case '1' :
/*処理*/
break;
case '2' :
/*処理*/
break;
default :
/*処理*/
break;
}
といったものですが、どうやらcase 2 :に何か問題があるのか、このファイルを実行すると、
ブラウザいっぱいに意味のない文字列が並んでしまいます。
この現象は「/*case 2 : ・・・・ break;*/」といった感じにcase 2の部分を
コメントアウトしてもなおらず、完全に削除するとなおります。
どういう事なんでしょうか??
どなたか思い当たる事がある方いらっしゃったら、教えてください。
ちなみにphp-5.1.4を使用してます。5.1.4のバグでしょうか??
706nobodyさん:2006/05/06(土) 16:53:58 ID:???
妥当なメールアドレスかをチェックしてくれる関数ってphpになかったっけ?
707nobodyさん:2006/05/06(土) 17:01:56 ID:???
>>705
caseの中身も見ないと想像もつかんなー
708nobodyさん:2006/05/06(土) 17:48:02 ID:???
PHP-5.1.4ってデフォルトでPDO sqlite3はオフになってる?
てかPDO mysqlのドライバもロード出来なくなった。こっちはちゃんとインストールされているのに・・・
709nobodyさん:2006/05/06(土) 19:37:27 ID:o9+nMx/2
>>707
中身よりも自分としては/*〜*/でコメントアウトしてもおかしな動き(意味不明な文字群を表示する)
ことに驚きを覚えてます。

なんでコメントアウトしてもそいつが影響するの?
そしてその部分を削除すると、なぜ正常に動くの?
こういったケースって、皆さん経験ありますか?
710nobodyさん:2006/05/06(土) 19:40:03 ID:???
コメントをネストしてるんだろこのマトリョシカめ
711nobodyさん:2006/05/06(土) 19:40:14 ID:???
>>709
ない
712nobodyさん:2006/05/06(土) 19:47:44 ID:???
>>705>>709
バカかお前。
「中身よりも〜」などと自分で勝手に決め付けるのなら、ここで質問なんかするなボケ。
お前が勘違いしてるだけかもしれないだろう。

必要なソースを全部見なきゃこっちは分からん。エスパーじゃないんだから。
713nobodyさん:2006/05/06(土) 19:58:09 ID:???
>>705
> 意味不明な文字群
ってのは具体的になんだ?ちょっとコピペして見せてみ。
実はNoticeエラーの類だったりしないか?
714nobodyさん:2006/05/06(土) 20:36:16 ID:CLVxxZvd
$arrに
array(1 => 'a' => 'b', 2 => 'c' => 'd');
という配列が入っています。

foreachで$arrを回して値を変数に代入しているのですが、先頭の数字(1と2)が必要ないため
スキップさせたいのですが、何かよい方法はありませんか?

現在はforeach一回で第二引数までしか取得できないため、foreachで2回処理しています。
よろしくお願いします。
715nobodyさん:2006/05/06(土) 20:37:54 ID:???
>>714
なんか配列がそもそもおかしいぞ。
716nobodyさん:2006/05/06(土) 20:40:09 ID:o9+nMx/2
>>713
こんなやつ
????唯???正效????????湯散???瑣??条?獵?桃??橢?????????湯散?潮???橢??????楮却慥?????植据
??潟据???????瑣??慳?慫敢?畴???歡?慨?????????湯散?潮???潯?潮??敷?牡??歡健灯???????慴??
????瑳牡????花菌腹???誉鋺???卓???????????欧?慳????卓??????????????????湯散?牡档???????
なんて感じで画面いっぱいにでる。
717nobodyさん:2006/05/06(土) 20:51:38 ID:???
>>716
お前は適切な質問の仕方も知らなければマナーも知らない、
おまけにエンコードの基礎知識すら知らないのか。

精子から出直せ。
718nobodyさん:2006/05/06(土) 21:05:58 ID:???
>>714
どんな形式の配列かさっぱり分からないので
$arrをvar_dumpした結果を書け。
あとforeachで取得できる「第二引数」って何のこと?
719nobodyさん:2006/05/06(土) 21:06:44 ID:???
>>716
1度PHPをアンインストールしてインストールし直してみれば?
ライブラリファイルのどれかが壊れてたりするんじゃないのか。
720nobodyさん:2006/05/06(土) 21:09:11 ID:o9+nMx/2
>>717
エンコードぐらいしってる。
他のページは普通に動く(このページも、case 2:の部分を完全に削除すれば普通に動く)
ただ、コメントアウトしただけだと、上記のような文字化けしたような文字で、画面がいっぱいになる。

全くもって始めての出来事。
>>717は、こんな事なったことあるの??
721nobodyさん:2006/05/06(土) 21:14:41 ID:???
コメントアウトの前に全角スペースが入ってるとか。
722nobodyさん:2006/05/06(土) 21:21:35 ID:???
>>716は「UAがShift_JISを期待してるとこへ、UTF-8を吐いてみました」に見えるけど
内緒のcase 2:にどんな謎があるのかも、>>716状態で何が困るのかもわからない。
723nobodyさん:2006/05/06(土) 21:45:15 ID:???
>>720
コード晒せと言われてて晒さずにあーでもねーこーでもねー..おまえの質問の仕方最低だよ
まぁ別に解決しなくてもみんな不幸にはならないわけだが
724nobodyさん:2006/05/06(土) 21:51:59 ID:/tb17VG7
初めまして。
「鏡の国」の2ch風掲示板のCGIを、
自分のレンタルサーバーにて利用させてもらおうと検討している者ですが、
投稿者のログ(投稿者のip、投稿日時、内容等を記録したもの)などは、
投稿自体が削除されても残るのでしょうか?

初歩的な質問で申し訳ありませんが、
知ってる方がいらっしゃれば、よろしくお願いいたします。
725nobodyさん:2006/05/06(土) 21:55:44 ID:???
>>724
んなもん、ここで聞くより実際に試してみた方が早い
726nobodyさん:2006/05/06(土) 21:55:59 ID:???
マルチはうんこ
727nobodyさん:2006/05/06(土) 21:56:03 ID:???
>>724
自分で設置して試せば良いでしょ。
やってわからないことを聞く場所であって、人にやらせる場所ではない。
728nobodyさん:2006/05/06(土) 22:26:44 ID:eYJY8dWg
>>722
includeしまくってるからコードさらしてもしょうがないような気がしたもので・・・
とりあえず、以下のようなコード
case '2' :
//計算実施
include_once('nomade/object/keisan/answerObj.php');
$Aobj = new answerObj();

$Aobj -> qArr[0]['netuDendouRitu']['amt'] = $_POST['naibuNetuDentaturitu'];
if($_POST['naibuNetuDentaturituUnit'] == 'W/m2k'){
$Aobj -> qArr[0]['netuDendouRitu']['unit'] = 'W/mK';
} else {
$Aobj -> qArr[0]['netuDendouRitu']['unit'] = 'kcal/h・m・℃';
}
$Aobj -> qArr[0]['zaiAtu']['amt'] = '1';
$Aobj -> qArr[0]['zaiAtu']['unit'] = 'm';

$Aobj -> qArr[0]['netuDendouRitu']['unit'] = $_POST['naibuOndoUnit'];
//本文が長過ぎるみたいなので、一部省略
include_once('nomade/tool/keisan/netu/ondoPart.php');
$calcObj = new ondoPart();
$calcObj -> doKeisan($Aobj);
$Aobj -> printCalc('ondoPart0');
break;

これみてもわかんないでしょ。
729nobodyさん:2006/05/06(土) 22:33:00 ID:???
>>728
>これみてもわかんないでしょ。
だったら聞くなよ。ソース晒せって言ってる人がいる、晒してもわからないでしょ
とあなたはほざく。なんか噛み合って無い

includeで何やってるかが問題だと思うのだがそういうことは考えないのね。
デバッグの手法も自分なりに考えるのが基本だと思うのだけどそれすらできないのね。
730nobodyさん:2006/05/06(土) 22:34:53 ID:???
>>728
switch〜case'1':の部分が無いとそりゃ分からん。おかしいのはそっちだろ?
731nobodyさん:2006/05/06(土) 22:47:59 ID:???
>>728
> $Aobj -> qArr[0]['netuDendouRitu']['unit'] = 'kcal/h・m・℃';
ソース中に「・」なんて半角カナ文字が入ってるみたいだけど、
それとphp.iniのインターナルエンコーディングがかみ合ってないとか?
732nobodyさん:2006/05/06(土) 22:48:49 ID:???
switchが無理ならif使えばいいじゃん
733nobodyさん:2006/05/06(土) 22:51:58 ID:???
>>732
5.1.4ってバグあるの?って話じゃないのか
734nobodyさん:2006/05/06(土) 22:57:30 ID:???
>>716
これ、ブラウザのエンコード設定をUTF-8にすると何て表示される?
735nobodyさん:2006/05/06(土) 23:16:31 ID:???
なんだかんだ言って、お前ら優しいな。
けど、優しさが罪ってこともあるんだ。
736nobodyさん:2006/05/06(土) 23:27:00 ID:PirDF9V7
>>731さん
その通りでした。
しかもよそからコピペしたため・だけUTF-8だったみたい。
(スクリプトはすべてsjisで書いてるのに)
ありがとう。
でも合ってないエンコードを一文字書いただけであんな画面になっちゃうんですね。
勉強になりました。
エラーメッセージにはなれてたけど、あんな文字化けだらけの画面は衝撃的でした。
>>734さん
ブラウザのエンコード換えても分けわかんない文字列の羅列でした。(ご報告まで)
お騒がせいたしました。
737nobodyさん:2006/05/06(土) 23:41:23 ID:???
かなり偶然だったけど問題に該当できたようで何より。
コメントアウトしてもダメって言ってたからincludeしてるファイルは関係ないと思ってたんだけど…
(変な文字コードが入ってたために、コメントもそこで崩れる状態になってたんだろうね)
インターナルとかみ合わない文字を入れてるとそこから文法解析が狂うから何が起きるか分からんよ。

最後にこれだけ
> これみてもわかんないでしょ。
思い込みはデバッグの大敵。
全体を削除しないとダメだったのなら、さらに1行ずつ減らしていくなど
どの部分がダメなのかを徹底的に洗い直すようじゃなきゃいかんかと。
738nobodyさん:2006/05/07(日) 00:30:57 ID:MBZ5M05L
>>737さん。
そうですね。ある程度経験を積んでいるというおごり(とはいえ2年程度かな?)で、
勝手に問題を絞り込んでしまっていて、その絞り込んだ中に問題が潜んでなくってうろたえたみたいです。
勉強させていただきました。ありがとう。
739nobodyさん:2006/05/07(日) 22:49:12 ID:???
外のfunctionにある変数やオブジェクトを中のfunctionで利用したいのですが、
どうすれば利用できますか?

functon outside() {
$model->init();
$hoge = 'hoge';

function inside() {
global $hoge; // これはできなかった
global $model; // できなかった

$model->init(); // これがしたい
$fuga = $hoge; // ここで$hogeを使いたい
}
}
740nobodyさん:2006/05/07(日) 22:58:31 ID:???
引数で渡せば
741nobodyさん:2006/05/07(日) 23:09:53 ID:???
最近apache2.0.58でウェブ鯖を立ち上げ、PHP5.14をインスコした初心者です。(WindowsXP)

直接html内に<?php>〜<?>を使ってphpを動作させることには成功したんですが
例えば掲示板を設置する場合、外部の掲示板スクリプトファイルをrequireで読み込めばいいんですよね?

その場合その掲示板スクリプトファイルはどのフォルダに置けばいいのでしょうか?apacheのフォルダ?phpフォルダ?
当たり前のことだろうけど、全く分かりません。適当に教えてもらえるとありがたいです。

あるいは、そういった一連の流れが書かれてある解説サイトを教えていただけると助かります。
742nobodyさん:2006/05/07(日) 23:29:07 ID:???
>>740
いじれない関数なので引数で渡せない状況なのですが、他に方法はないでしょうか?

743nobodyさん:2006/05/07(日) 23:29:15 ID:???
>>739
「中のファンクション」なんてものは無いし。それは「中で定義してる」だけ。
だからこれならできるよ。
functon outside() {
global $hoge; //最初から全部
global $model; //globalにしちゃえばいいのよ
$model->init();
$hoge = 'hoge';

function inside() {
global $hoge; // これはできなかった
global $model; // できなかった

$model->init(); // これがしたい
$fuga = $hoge; // ここで$hogeを使いたい
}
}
744nobodyさん:2006/05/07(日) 23:30:41 ID:???
>>742
これってクラスのメソッドなの?だったらextendすれば?
「いじれない関数」の意味がよく分からん。
容易にいじれるようにするためのオブジェクト指向じゃないのか。
745nobodyさん:2006/05/07(日) 23:31:51 ID:???
>>741
> 例えば掲示板を設置する場合、外部の掲示板スクリプトファイルをrequireで読み込めばいいんですよね?
ちがう。
普通にその掲示板にリンクを張ってやるだけ。
746nobodyさん:2006/05/08(月) 04:03:57 ID:???
>>736>>738
お前、自分の発言を読み返して反省しろ&謝罪しろよ。
さんざん能書き垂れといて、結局お前の思い込み勘違いが原因じゃないか。
みんなの予想通りだ。
しかもそのソースは「よそからコピペ」って・・・、お前全て他力本願だな。
747nobodyさん:2006/05/08(月) 06:08:15 ID:???
ソースがコピペっつーか、表示で出す単位の記号文字だけコピペっぽいけどね。
748みかん:2006/05/08(月) 18:27:35 ID:kXy5iJS4
質問させてください。

入力に応じてファイルの中身を読み込み、表示するCGIを作成しています。
ファイルの読み込みには file_get_contents を用いており、
読み込むファイルはドキュメントルートより上のディレクトリに置きたいと考えています。

ファイル置き場
/tmp/file/hoge.txt

プログラム(test.php)
<?php
$txt = file_get_contents("/tmp/file/hoge.txt");
var_dump($txt);
?>

この場合、コンソールから
# php test.php
とした場合にはhoge.txtの内容が表示されるのですが、
CGIとしてブラウザからアクセスした場合には

bool(false)

とだけ表示され、ファイルオープンに失敗しているようです。
hoge.txtをドキュメントルート以下に設置した場合は読み込むことができましたが、できればドキュメントルート下には置きたくないのです。
どのようにしたら、/tmp/file/などに置いたファイルをCGIから読み込めるように出来るのでしょうか。
749nobodyさん:2006/05/08(月) 18:32:39 ID:???
権限ないんじゃね?
750nobodyさん:2006/05/08(月) 18:38:12 ID:???
それか、safe_modeがon、open_basedirが制限されてるとか
751nobodyさん:2006/05/08(月) 18:39:10 ID:???
>>748
>ドキュメントルートより上のディレクトリ

そりゃ読めちゃったら逆に困るでしょ。
752みかん:2006/05/08(月) 19:12:52 ID:kXy5iJS4
>749
ファイルの権限
-rw-r--r-- 1 mikan
CGIの権限
-rw-r--r-- 1 mikan
こんな感じに、共に自分の所有になっています。

>750
safe_modeはOff, open_basedirはコメントアウトしてあります。

>751
やはりそうなのでしょうか。
自分がルートのマシンなので、設定さえ適切なら可能なのかと思って質問させて頂きました。

ドキュメントルート下に設置して、そちらをブラウザからは見られないように制限をかける方向で進めてみようかと思います。
皆様、回答ありがとうございました。
753nobodyさん:2006/05/08(月) 20:12:54 ID:???
>>751
へ?何が困る?
754nobodyさん:2006/05/08(月) 20:34:24 ID:8RW8wwlk
共有サーバとかで、PEARがデフォルトで使えない場合でも、
たとえばPEAR::DBならhttp://pear.php.net/package/DB
からまるごとダウンロードしてincludeするだけで
(つまりコンパイルとかする必要なく)
いちいちSSH接続する必要なく、共有サーバでも使えますか?
755nobodyさん:2006/05/08(月) 20:46:56 ID:w88YtdTU
PHP 4.4.2をApache2で使用しています。

例えば
<?php
header('Location: http://~~~');

sleep (60);

system('touch /tmp/test');
?>

というスクリプトがあったとすると、
60秒ブラウザは待機してしまいます。

先にリダイレクトを行わせておいて、
サーバー側で処理を続行するには
どうすればよいのでしょうか?

時間のかかる処理があるのですが、
特にエラー等を表示させる必要がないため
ブラウザにリダイレクトさせておいておきたいのです。

よろしくお願いします。
756nobodyさん:2006/05/08(月) 21:18:36 ID:???
>>755
試してねーけど
<?php
system('./touch.php /tmp/test > /dev/null &');
header('Location: http://~~~');
exit;
?>
にして

[touch.php]
<?php
sleep(60);
system("touch $argv[1]");
?>
とかしたらできねーか?

ひょっとしたら
system('./touch.php /tmp/test > /dev/null &');
ここは標準エラー出力も/dev/nullに捨てるようにしないとダメかもだが。
757755:2006/05/08(月) 21:42:07 ID:w88YtdTU
ご返答ありがとうございます。
使用するプログラムの内部なのですが、
POSTされてきたデータに変更を加えてPostgresSQLに保存ということを行っています。

なので、なるべく1スクリプトで済ませてしまいたいのですが、無理でしょうか。。

ob_start()とprintを組み合わせてみたりもしてみたのですが、全く対策にならず、、
758nobodyさん:2006/05/08(月) 22:53:51 ID:???
>>757
基本的には「標準出力を閉じた」バックグラウンドプロセスを走らせた状態にして
親プログラムは即座に終了、という形を取らないと無理じゃないかと思う。

保守性を求めてスクリプトを1本にしたいだけだったら、両プログラムの機能を
同じincludeファイルの中に関数で定義しといてそれぞれで別々の部分を呼ぶとか、
あるいはsystemでの実行を自分自身をパラメータ付きで呼ぶようにして
パラメータ付加時はバックグラウンド処理を実行するよう切り替えるとか、
いくらでも手はあるんじゃない?
759nobodyさん:2006/05/09(火) 02:41:56 ID:???
<?php
include 'Zend.php';
Zend::loadClass('Zend_Controller_Front');
$cnt = Zend_Controller_Front::getInstance();
$cnt->setControllerDirectory(' [Zend Frameworkのパス]/controllers');
$cnt->dispatch();
?>

とかにある :: ってなに?
760nobodyさん:2006/05/09(火) 02:43:59 ID:???
子クラスから親クラスのメソッドを呼び出せる
なのね
761nobodyさん:2006/05/09(火) 02:53:47 ID:???
>>760
この場合はオブジェクトを生成しない、静的なクラス関数呼び出し。
762759:2006/05/09(火) 03:03:39 ID:???
サンクスコ!
もうちょっと触ってみて覚えなあかんね
763nobodyさん:2006/05/09(火) 08:40:20 ID:???
POSTでオブジェクトって送信できますか?
なんかいちいち<input type="text">で送るのめんどくさくて
一つのクラスにまとめて送信しちゃおうと思ったんですが、
どうもやり方がわからなくて。
764nobodyさん:2006/05/09(火) 09:12:54 ID:???
>>763
あのね。POSTはHTTPの話なの。で、オブジェクトはPHPの話なの。
なんかフレームワークとか使わないと無理。
765nobodyさん:2006/05/09(火) 09:16:36 ID:???
つシリアライズ
766nobodyさん:2006/05/09(火) 09:46:19 ID:???
>>765
今はserialize()して、ファイルをアップロードして、
次のページでそのファイルをunserialize()するって
作業をしてるんですが、ファイルを作るのがどうも
ひっかかるんですよね。
http://jp.php.net/manual/ja/language.oop.serialization.php
767763:2006/05/09(火) 09:47:59 ID:???
すみません、>766=>763でした
768nobodyさん:2006/05/09(火) 10:08:39 ID:???
>>766
アップロード??サーバーから同じサーバーへ??
769nobodyさん:2006/05/09(火) 10:23:13 ID:???
>>766
serializeした文字列をPOSTすれば?
770nobodyさん:2006/05/09(火) 10:29:39 ID:???
>>763
> なんかいちいち<input type="text">で送るのめんどくさくて
セッションに格納するとか
771nobodyさん:2006/05/09(火) 11:36:45 ID:???
質問です。
文章中の特定の語句を、「str_replace」を使って別の語句に一括置換する際、
htmlタグ内部の語句についてはエスケープさせたいのですがうまくいきません。

[文章例]
<a href="ttp://abc.def/" title="リンク先">某サイト</a>へリンクします。

上記例では、「 title="リンク先">」の「リンク」については置換せずに、
「リンクします。」の「リンク」だけを置換したいのです。

どなたかヒントを含め、何か教えていただけると助かります。
772766:2006/05/09(火) 11:50:43 ID:???
>>768
マジ初心者ですみません。単にサーバ上でファイルに書き込むだけです。

>>769
serializeした文字列をPOSTしたあと、次のページで
http://jp.php.net/manual/ja/language.oop.serialization.php
の例の

$s = implode("", @file("store"));
$a = unserialize($s);

に対応する部分が書けず、仕方なく例と同じ手段をとってます。

>>770
まだセッションについて全く理解してないので調べてみます。

まさかこんなにレスが付くと思いませんでした。感謝です。
773nobodyさん:2006/05/09(火) 12:15:28 ID:???
>>771
str_replaceでやるのは難しいんじゃないかい。
preg_replaceとかで正規表現駆使せんと。
774nobodyさん:2006/05/09(火) 12:17:38 ID:???
>>766>>772
普通にやりゃいいだけの話なのに自分が未熟だからコードが書けないだけで
> ファイルを作るのがどうもひっかかるんですよね。
とか言われても回答に窮するだけだと思うんだが。
775771:2006/05/09(火) 14:16:59 ID:???
>>773
やはりそうですか。
少し考えたのですが、htmlタグをエスケープするのが難しいです。

置換前の語句を\wordとして、次のようなコードなどを含め何個か試したけど全滅。orz

$text = preg_replace('/^(<\/?)('.$word.')^([^>]*>)/e', '<a href="/link.php">\\2</a>', $text);

正規表現の才能が欲しいです。。
776nobodyさん:2006/05/09(火) 14:48:06 ID:hIUILZCE
ディレクトリAの中のもの(ファイル&ディレクトリ)をディレクトリBに移したいのですが
、そのようなことは可能でしょうか?
ファイルはコピーできたのですが、ディレクトリのコピーができません
777nobodyさん:2006/05/09(火) 14:52:31 ID:???
>>775
しますまで入れて
リンクします→○○します
にすればいいのでは?
778nobodyさん:2006/05/09(火) 15:16:13 ID:???
>>776 system()
779754:2006/05/09(火) 15:32:47 ID:???
すいません、どなたか
>>754
を・・・。
780nobodyさん:2006/05/09(火) 15:51:24 ID:???
>>779
>>754って日本語が変なんだもん。全部で1つの文になってて、
「共有サーバとかで、〜(中略)〜共有サーバでも使えますか?」
もうちょっと他人にわかるように書きなさいな。
781nobodyさん:2006/05/09(火) 15:53:44 ID:???
>>780
まあ意地悪してやんなさんな。
大体わかるでしょ(間違ってたらしょんぼりだけど)

>>779
正しく設置、includeされていればいけるはず。
というか、なんで試さないの?
無料のところでもいいから試して見れば早いかと。
782nobodyさん:2006/05/09(火) 17:36:59 ID:???
>>778
マニュアル見ますたが、わかんないです(;;^ω^)ノ
詳しくお願いします
783nobodyさん:2006/05/09(火) 18:32:44 ID:???
UNIXのコマンド覚えればokかな
784nobodyさん:2006/05/09(火) 22:31:33 ID:???
>>741に答えて
785nobodyさん:2006/05/09(火) 22:59:03 ID:???
使用する掲示板のスクリプトに説明ないの?
786nobodyさん:2006/05/09(火) 23:31:47 ID:???
>>784
お前、質問する態度としては最低の部類に入るクチだな。
そういう態度ではなおさら答える気にもならん。

情報はタダで手に入るのが当然だ、と思ってる感じが気に入らない。
しかも自分でもロクに検索すらしてないようだし。
787nobodyさん:2006/05/09(火) 23:45:55 ID:???
>>771
基本的には該当文字の両脇が>と<で挟まれてたらマッチ対象になると考えればいい
preg_replace("/(>[^<]*)$from([^>]*<)/", '$1'.$to.'$2', $text);

>>784
>745で答え貰ってるだろ
788nobodyさん:2006/05/09(火) 23:51:41 ID:???
PDO&Mysqlを使用してます。

まず SELECT COUNT(*)して全体のレコード数を取得して
その値に+1したものをPRIMARYにしているのですが、

beginTransaction();
した後にはクエリーを1回しか発行できないようです。
beginTransaction();の前にPRIMARYを求めるのが普通なのでしょうか
789nobodyさん:2006/05/10(水) 00:35:21 ID:WURMeF5p
;mb_string.func_overload =0

という設定がphp.iniありますが、これはどうことをするためのものなんでしょうか?
790nobodyさん:2006/05/10(水) 00:37:12 ID:???
PRIMARYというのは?
>beginTransaction();
>した後にはクエリーを1回しか発行できないようです。
どうして
791nobodyさん:2006/05/10(水) 00:38:21 ID:???
>>789
ttp://www.php.net/manual/ja/ref.mbstring.phpより

>シングルバイト対応の関数を mbstring 関数の対応する関数でオーバーロード (置換)します。

ドキュメントくらい読もうよ…
792nobodyさん:2006/05/10(水) 00:51:23 ID:???
>>788
回答じゃないけど、auto_incrementって何か面倒な問題抱えてるの?
793771:2006/05/10(水) 01:00:35 ID:???
>>787
この正規表現をベースに実現できそうです。
ありがとうございました。
794nobodyさん:2006/05/10(水) 01:23:33 ID:EkcMnrpq
phpをはじめようと思いまして
xamppをインストーラーで全てインストールしました。
apacheを起動して
http://localhost/xampp/

http://localhost/
にも接続してみましたがxamppのコントロールパネルなどに接続できず、
テスト用のphpにもひょうじされません。
これはどのような原因が考えられますか?よろしくご指導ください。

環境はXP・IE6です。
795nobodyさん:2006/05/10(水) 01:34:01 ID:???
PRIMARYというのはPRIMARYキーです。
PRIMARYキーとなる$idをSQL発行で取得。
そのごprepareを受け付けてくれないのです。

>>792
mysqlに依存しているので、できればauto_incrementは使いたくないですね。

796794:2006/05/10(水) 01:49:33 ID:EkcMnrpq
ちなみにエラーメッセージは「取り消されたアクション」
とでてしまいます。
わかりにくい説明でもうしわけありませんが、よろしくお願いします。
797nobodyさん:2006/05/10(水) 03:15:21 ID:hRdDy7di
共通関数の管理について質問です。

a.phpとb.phpで共通利用する関数などは
common.php等に書いておいてincludeするものだと思いますが、
複数の共通関数があるとincludeしたものの使用しない関数もあると思います。
高アクセス条件下においてはメモリの消費も馬鹿には出来ません。

極論を言えば関数毎にファイルを分ければ良いのでしょうが、
それもなんだかめんどくさいので、何か良い知恵があれば
教えてください。
798nobodyさん:2006/05/10(水) 03:37:14 ID:???
>>796
とりあえずそういう挙動は単にhttpdが動いてない時のもの
/logs/error.logに何か書いてあるかも

>>797
ベンチマークの取り方を覚えるといいんじゃないかな
799nobodyさん:2006/05/10(水) 05:26:20 ID:???
>>796
Winのスタートメニューのアパッチに「Monitor Apache Servers」ってのもあるよ
アパッチがきちんと起動出来ているかこれで確認できる。
800nobodyさん:2006/05/10(水) 06:21:43 ID:???
>>797
そこまで気にするなら、中間コードをキャッシュさせればいいじゃん。
801nobodyさん:2006/05/10(水) 09:19:05 ID:???
>>797
共通関数を別ファイル(ライブラリ化)するメリットは、メモリ消費云々よりも後々のメンテや生産性の向上の為であると思うけどね。
最近の鯖スペックなら多少の事なら誤差の範囲。
決め付けるわけではないが、そういう細かい事にこだわる人に限って、肝心な部分が見えてない人が多いと最近特に感じる。
802nobodyさん:2006/05/10(水) 11:08:25 ID:???
>>797
コードキャッシュ型のアクセラレーターを使うのがいいんじゃないかな。
でもまず、commonとかに全部押し込まないで機能カテゴリー別にファイル分けれ、って思うけど。
まさか10個やそこらの関数でメモリ消費云々言うとも思えないし。
803nobodyさん:2006/05/10(水) 12:34:18 ID:ADlLU0Cj
自分で定義した関数の中で、処理に一番時間のかかる関数を特定するにはどういった方法がありますか?
804nobodyさん:2006/05/10(水) 12:38:58 ID:???
>>803
ベンチマーク
805803:2006/05/10(水) 13:47:10 ID:ADlLU0Cj
>>804
レスありがとうございます。
関数ごとにベンチマークをとる場合、全ての関数に時間を測るコードを埋め込むしかないでしょうか?
806nobodyさん:2006/05/10(水) 18:58:52 ID:???
>>805
別に呼び出し側でやってもいいんじゃないの
807nobodyさん:2006/05/10(水) 19:28:55 ID:???
808794:2006/05/10(水) 21:44:19 ID:qX9rDLEh
>>799
ありがとうございます。
ApacheMonitor.exeを立ち上げましたが、
running all apache services
と表示されて特に問題はなさそうです。

>>798
ありがとうございます。
ログですが、かなり溜まっているようです。77kBありました。
下の10行ほどを抜き出してみます。

C:\Program Files\xampp\apache\logsから

PHP Warning: Function registration failed - duplicate name - openssl_pkcs7_encrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_private_encrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_private_decrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_public_encrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_public_decrypt in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - openssl_error_string in Unknown on line 0
PHP Warning: openssl: Unable to register functions, unable to load in Unknown on line 0
[Wed May 10 21:39:24 2006] [notice] Child 3656: Child process is running
[Wed May 10 21:39:24 2006] [notice] Child 3656: Acquired the start mutex.
[Wed May 10 21:39:24 2006] [notice] Child 3656: Starting 250 worker threads.
[Wed May 10 21:39:25 2006] [notice] Child 3656: Starting thread to listen on port 80.
[Wed May 10 21:39:25 2006] [notice] Child 3656: Starting thread to listen on port 443.

こんなエラーが出ているのですが、原因はなんなのでしょうか?
ご存知のかたいらっしゃいましたらどうかよろしくお願いします。
809spam業者のアドレス:2006/05/10(水) 23:28:55 ID:???
>>794
apacheスレ池
810nobodyさん:2006/05/11(木) 00:25:10 ID:???
配列の値に対するキーを返す関数ってありませんか?
811nobodyさん:2006/05/11(木) 01:26:06 ID:???
リファレンス(笑)
812nobodyさん:2006/05/11(木) 01:53:39 ID:???
DBへフォームからの入力値を格納する場合
htmlspecialcharをしてから格納をしたほうがいいですか?

それとも
DBから引き出した後にhtmlspecialcharしたほうがいいですか
813nobodyさん:2006/05/11(木) 02:17:25 ID:???
>>812
お、お前・・・・・・・・。

その関数の働きや、それを使う意味を全く理解してないからこその質問だな。
まず一回氏んでこい。そしてとりあえず「サイテロ」でも読んでこい。
814nobodyさん:2006/05/11(木) 02:56:15 ID:???
>>810
array_search
かな

関数ぐらい自分で調べる手段を確立しないと上達のしようが無い
815nobodyさん:2006/05/11(木) 08:47:25 ID:Nnnm8SbY
以下のコメントの部分を一発で処理する関数ってないでしょうか。
これで一応動くのですが、カッコ悪いので。
使い方としては、ファイルの一レコード目にキーを書いておいて、
2レコード目以下の条件にあったものを連想配列でアクセスする
といったことを考えています。

$keys = array("id","name");
$value = array("99999","小泉純一郎",);
//-----
$count = count($keys);
for($i = 0;$i < $count;$i++){
  $rensou [$keys[$i]] = $value[$i];
}
//-----
816nobodyさん:2006/05/11(木) 08:53:26 ID:???
>>815
ずばりarray_combine。
つーかファイルから読み込んでる時点で$rensouにちゃんと入れてけばいいんでないの?
817nobodyさん:2006/05/11(木) 09:21:14 ID:???
>>812
後者が良い。

>>813
初心者の内は誰もが疑問に思う事だと思うが、addslashes()とかと勘違いしてない?
818nobodyさん:2006/05/11(木) 09:26:46 ID:???
おお、PHP5からそんな関数が出来てたんですね。
でも使っているのは4.xだ。
ファイルで読み込むときは$rensouに直接放り込んでます。
サンクスです。
819nobodyさん:2006/05/11(木) 10:23:28 ID:???
>>817
>>812じゃないけどDB格納後の方が良いメリットってある?
DB格納前にサニタイズしておけば
表示側でのサニタイズのコード入れてなくていいから
それはそれで楽でセキュアなような気もしなくもないんだけど
(HTMLコード自体を入れるカラムとは例外として)
820nobodyさん:2006/05/11(木) 10:38:15 ID:???
サニタイズって呼ぶなキャンペーン。
821nobodyさん:2006/05/11(木) 10:56:38 ID:???
>>819
>>817じゃないが、うちもそのままサニタイズして表示するようなものの場合は、基本的に処理後にDBに記録してるな。
動的動作のものが殆どなので、多少コストも緩和されるしね。
まぁ、前か後か1アプリ内で統一させておかないと後々ややこしい事になると思うけど。
メリットとしてはなんだろうね。
CSVとかで保存した時に、色んなものでログの使い回しが利くとか…?
822nobodyさん:2006/05/11(木) 11:19:59 ID:???
>>819>>820みたいな考え方でスクリプトを組むと、
必ずどこかで漏れが生じてセキュリティに問題が発生する。

HTMLにしろSQLにしろ、エスケープはとにかく「直前」&「確実」が基本。
823nobodyさん:2006/05/11(木) 11:23:25 ID:???
ftp_関数系を使って
ファイルの内容(ソース)を変数に格納するのに最も簡単な方法はなんでしょうか?
直接file_get_contents()みたいなものを使えればいいんですが、
一旦一時ファイルを作って、それをfopenしてftp_fgetみたいな方法しか
思いつきませんでした。
もっとシンプルな方法あったらお願いします
ttp://jp.php.net/manual/ja/ref.ftp.php
824nobodyさん:2006/05/11(木) 11:32:12 ID:???
>>822
サニタイズって呼ぶなキャンペーン。って
http://takagi-hiromitsu.jp/diary/20051231.html
のことなんだけど。
正しくは『サニタイズ言うなキャンペーン』だったが。
825nobodyさん:2006/05/11(木) 12:26:52 ID:???
>>819
不可逆変換して保存すると元のデータに戻せないから
後でデータから"<a"タグを検索して抜き出したいとか思ったときに"&lt;a"が変換でそうなったのか元からそうなのか判断できない
826nobodyさん:2006/05/11(木) 12:34:00 ID:???
>>819,821
DBに対する考え方の違いかな?
先の例でいうとhtmlspecialchar()で変換後のデータをDBに入れるとか俺的にはありえないな。生理的に気持ち悪い。
例えば検索処理で要らないものまで拾ったりしそうだしさ。

例えば少しでも負荷の軽減をと考えるのであれば、処理後のデータをキャッシュしておいて、
そのキャッシュを表示させると考えるのが普通だと思うのだけどね。DB接続も入らないし。
827nobodyさん:2006/05/11(木) 12:48:25 ID:???
なんだそのWebサイトをホームページって言うなキャンペーンみたいのは。
828nobodyさん:2006/05/11(木) 13:15:26 ID:0g4oanFp
Linux・PHP5・postgresの環境で、データをcsvや.xlsらに落とそうと思っています。
(細かいバージョンは今頃SEがつめてるはず)
特にデータを落とす先のファイルの形式指定はありませんが、
ファイルじたいにパスワードをかけなければなりません。
となると、やっぱエクセルか??、と。

エクセルの場合Spreadsheet_Excel_Writerが結構実用的じゃないかってとこは分かったのですが
パスワードがかけれる云々に言及した資料は未だ捜索中です。

この場合、皆さんならどういった開発方法を考えられますか?
よろしくお願いいたします
829spam業者のアドレス:2006/05/11(木) 15:14:38 ID:???
>>828
落としたファイルをzip圧縮してパスワードとか。
頻繁に落とす意味もよくわからんけど

・・・phpの質問スレっていうのはスレ違い感があるような
830nobodyさん:2006/05/11(木) 16:09:40 ID:???
ディレクトリAの中のもの(ファイル&ディレクトリ)をディレクトリBに移したいのですが
、そのようなことは可能でしょうか?
再帰使ってたら頭こんがらがってきて…
無限ループ・無限ループ・無限ループ・・・・・・
831828:2006/05/11(木) 16:15:30 ID:0g4oanFp
>>829
まぁ、微妙だけどPHPだしな〜〜と思ったので。すみません
ところで、Zipに圧縮ってPHPでできましたっけ?

・・・.netにしてくれりゃー一発で終了なのに・・・クソSE
832nobodyさん:2006/05/11(木) 16:18:25 ID:???
へるぷみーーーー
833nobodyさん:2006/05/11(木) 16:24:41 ID:???
>>830
mvじゃいかんの?
834830:2006/05/11(木) 16:34:26 ID:???
>>833
レスありがとうございます
>mv
もしよろしければ詳しく教えていただけないでしょうか?

830を分かりやすくいうと、ディレクトリAの中のディレクトリやファイルをBにそっくりそのまま移すという感じになります
835nobodyさん:2006/05/11(木) 16:47:17 ID:???
836nobodyさん:2006/05/11(木) 16:47:43 ID:???
>>834
ディレクトリを移動させればいいわけだから
`mv -f $from $to`;
でいいんじゃない?
phpのrename()はディレクトリには使えないっぽいからね。

移動させるときに他の処理が必要なら頑張って再帰かな。
5.1以降ならSPLにRecursiveDirectoryIteratorなんてのがあるけど、これどうなんだろう?
837836:2006/05/11(木) 16:52:07 ID:???
スマソ
renameでもディレクトリ移動できたorz
838830:2006/05/11(木) 17:18:20 ID:???
度々すみません
移動ではなくコピーです
言葉足らずで申し訳ありません
839nobodyさん:2006/05/11(木) 17:31:13 ID:???
840nobodyさん:2006/05/11(木) 17:35:03 ID:???
>>839
それは参考になりません
841nobodyさん:2006/05/11(木) 17:43:24 ID:???
>>840
839じゃないがどこに目をつけてるんだ
頭は生きているうちに使うもんだ
つUser Contributed Notes
842823:2006/05/11(木) 18:01:21 ID:???
へるぷみーーー
843nobodyさん:2006/05/11(木) 18:12:23 ID:g/mQfyCd
PHPとMySQLの接続について質問です。やりたいことは、
テーブル「name」が[hoge]の場合に表示する。
変数を$list[name]に置き換える。

$conn = mysql_connect(localhost, root, 1111);
$selectdb = mysql_select_db(list, $conn);
$sql = "select * from list where name=hoge";
$rst=mysql_query($sql,$conn);
while($list=mysql_fetch_array($rst)){
echo $list['name'];
}

しかし、whileの行がmysql_fetch_array(): supplied argument is not a valid MySQL result resource
というエラーが出ます。どうしたら良いのでしょうか?
844nobodyさん:2006/05/11(木) 18:16:03 ID:???
>>842
ftp_fgetでやれや。どうしてもってんならSocket使えば?
>>843
mysql_queryでエラーになってんじゃ?
name = 'hoge'
845nobodyさん:2006/05/11(木) 18:21:20 ID:???
>>842
リモートファイル開いて一行ずつ処理するか
http://jp.php.net/manual/ja/features.remote-files.php
ソケット関数で原始的に処理するか。
"簡単に"ということなので後者なら、お膳立てされたライブラリがないか
まずは探してみることだね。PEARのはftp関数と同じでファイルとして落とす必要がある。
846823:2006/05/11(木) 18:29:42 ID:???
>>844-845
サンクス、参考にします
847844:2006/05/11(木) 18:34:02 ID:???
>>846
今しがたの思いつき
file_get_contents("ftp://user:[email protected]/pub/file.txt")
とかはどうよ。
848843:2006/05/11(木) 18:40:03 ID:???
>>844
以下のようにしろと言うことですよね?
$sql = "select * from list where name='hoge'";

しかし、特に変化ありません・・。というか、何も表示されません
849823:2006/05/11(木) 18:45:08 ID:???
>>847

ブラボーです、ありがとうございます
m(_ _)m
850nobodyさん:2006/05/11(木) 18:45:20 ID:???
>>848
エラーはどうなったんだよ?
それとレコードはあるのか? nameがhogeのレコード
つか、デバッグの方法を覚えるというか考えろよな
$sql = "select * from list LIMIT 10";
にして最後に
echo "読み込んだ件数:".mysql_num_rows($rst);
とかしてみるとか
851nobodyさん:2006/05/11(木) 19:24:05 ID:???
>>843
意味がわからん。
テーブルlistのカラムnameがhogeのものを取得したいのか?
852nobodyさん:2006/05/11(木) 19:35:54 ID:???
>>824
そんな宗教運動には興味が無い。
853nobodyさん:2006/05/11(木) 20:49:14 ID:???
PHP「関連の人」について質問ですが、
komagataさんに何があったんでしょうか・・・。
随分長い間blog更新しないなぁと思ってたらいきなり「退職しました」ですもの。
なんかすごい気になる・・・。
いつもblog楽しみにしてたので、何かマイナスな事があったのなら悲しいなぁ・・・。
854nobodyさん:2006/05/12(金) 01:13:33 ID:???
>>843
whileの前でmysql_error()を表示すればいい。
$rstをvar_dumpしても載ってたと思う。
855nobodyさん:2006/05/12(金) 09:23:53 ID:???
>>853
それは本人に聞くべき事でスレで聞くことじゃない。
てか、スレ違い。
856nobodyさん:2006/05/12(金) 10:00:39 ID:???
>>855
本人に聞けるかバカw
857nobodyさん:2006/05/12(金) 12:58:53 ID:???
本人に聞けないならここに知っている人もいない
858nobodyさん:2006/05/12(金) 14:19:27 ID:???
>>856
本人に聞けないことを2chで詮索してんじゃないよバカw
859nobodyさん:2006/05/12(金) 17:22:14 ID:???
つーかkomagataって誰やねん。
860nobodyさん:2006/05/12(金) 17:50:08 ID:???
kuwagataのことなんてどーでもいいよ。
861nobodyさん:2006/05/12(金) 19:36:15 ID:???
>>859
同意
862nobodyさん:2006/05/12(金) 20:08:50 ID:???
phpファイル内でssiを書きたいのですが、可能でしょうか?
apacheを設定しないとだめなのでしょうか?
863nobodyさん:2006/05/12(金) 21:09:48 ID:???
>>862
可能だけど、PHPでスクリプトを処理した後
その出力を更にSSIとしてhttpdに処理させなくてはならない。
ApacheなんかだとApache2じゃないと無理だし、設定も必要。
全部PHPで処理した方が良いよ。
864nobodyさん:2006/05/12(金) 23:47:57 ID:???
phpでhtml(shtml)ファイルを生成して、Location
効率悪すぎるけど・・・

その前に、phpではなくssiで処理する必要があることって何だろう?
865nobodyさん:2006/05/13(土) 00:29:00 ID:???
>>819
というよりDBの内容をメールしたいとなった時どうするの?
データってHTMLだけに出すものじゃないでしょ?
検索したりさ。
866nobodyさん:2006/05/13(土) 09:09:58 ID:sR0lmg54
初歩的な質問ですみません。

PHPを自分のパソコンで動かそうとしたんですけど
Apacheをインスコしたのは良いものの、どうやってするか教えていただけませんか?
867nobodyさん:2006/05/13(土) 09:16:34 ID:???
>>866
1.とりあえずApacheの動作を確認する
2.PHPのマニュアル、インストールの章を読む
3.手順に沿ってインストール
868spam業者のアドレス:2006/05/13(土) 11:50:55 ID:???
>>866
グーグルで調べたらインストール方法ぐらいいくらでもでてくる
869nobodyさん:2006/05/13(土) 13:03:48 ID:???
ファイルをアップロードする際に、アップロード完了後ではなく、アップロードを開始する時点で
そのファイルサイズを取得する方法はないでしょうか?
870nobodyさん:2006/05/13(土) 13:21:31 ID:???
>>869
てかPHPの場合、ファイルがアップロードされ終わってからスクリプトの実行が開始される。
871nobodyさん:2006/05/13(土) 13:24:09 ID:???
>>870
PHPに限った事?
872nobodyさん:2006/05/13(土) 14:07:20 ID:???
869=871?
873nobodyさん:2006/05/13(土) 14:24:48 ID:l8EeBxVx
<a name= でページ内リンクをしていて、他リンクから *.php?test#id30 とした時
$_SERVER['QUERY_STRING'] は test になりますが、
#(ハッシュ?)移行の文字列の取得はどうすれば良いでしょうか?
874nobodyさん:2006/05/13(土) 14:41:22 ID:???
>>873
それクライアントのみ
875873:2006/05/13(土) 15:04:34 ID:l8EeBxVx
>>874
ありがとうございます。やはり取得不可能でしたか

*.php?test-id30 などにして下記で飛ばすようにします。
$query = str_replace("-","#",$_SERVER['QUERY_STRING']);
header("Location: http://example.com/test.php?" . $query);
876nobodyさん:2006/05/13(土) 15:21:17 ID:???
不正値確認しろよ

'/(\w+?)\-(\w+?)/'
877873:2006/05/13(土) 17:00:43 ID:???
>>876
いいえ、それはトムです。
878nobodyさん:2006/05/13(土) 19:35:06 ID:jirCYTM4
WindowsXPでApache2.0とPHP5.0.1.4の環境でmb_send_mailとmail関数が使えないのですが、設定ミスなんでしょうか。LINUXでは問題なく動作します。考えられる設定等ありましたらご指摘お願い致します。
879nobodyさん:2006/05/13(土) 21:56:48 ID:???
そんなバージョンはねぇぇぇぇぇ!!!
設定ミスだ。dll加えてないだけだろ。
つーかくだ質レベルの質問するな。
880nobodyさん:2006/05/13(土) 22:21:22 ID:jirCYTM4
すいません、なんていうDLLですか?
881nobodyさん:2006/05/13(土) 22:36:10 ID:???
>>880
WindowsにSMTPサーバは入ってない
882nobodyさん:2006/05/13(土) 22:45:36 ID:sR0lmg54
お返事遅れました

>>867
Apacheはちゃんと動きます。
でも、PHPを実行させたときにどうやってApacheを使うかわかりません

883nobodyさん:2006/05/13(土) 22:46:31 ID:???
>>881
Windowsの場合は、ローカルにSMTPサーバは不要。
884nobodyさん:2006/05/13(土) 23:04:46 ID:sR0lmg54
Apacheのインストール
(http://www.apache.jp/dist/httpd/binaries/win32/apache_2.2.2-win32-x86-no_ssl.msi )
動作確認(http://localhost/)OK
PHPのインストール(PHP 4.4.2)
ApacheとPHPの連携
conf/httpd.confが見つからないので書き換えできない

とりあえずここまで作業進めたんですけど。
PHPを自分の鯖で実行というのはどうすればできるのですか?
885nobodyさん:2006/05/13(土) 23:24:47 ID:???
>>884
上でも言われたように、マニュアル読もうぜ。
ttp://www.php.net/manual/ja/install.windows.php
それと、apache2.2系列は内部的に大きく変更があったので、PHP側の対応が追いついていない。
2.0系列を使うよろし。
(snapshot版の方は使えるが、普通のユーザはそこまでして使う理由はあるまい)
886nobodyさん:2006/05/14(日) 00:47:47 ID:fxMAnAYJ
俺は普通にApache 2.2 使ってるんだが、対応が追いついてないところを教えてほしい
887nobodyさん:2006/05/14(日) 00:50:00 ID:w7OEC7Lo
>>885
ごめんなさい、Apache2.0.58でした。
マニュアル読んでみたのですが、
CGI バイナリの使用じゃなくてApache モジュールの使用で大丈夫なのですよね?

php4apache2.dllがPHPにもApacheにもないんですけど、別途ダウソ必要なんですか?
888nobodyさん:2006/05/14(日) 00:51:06 ID:???
>>887
phpのzipアーカイブを解凍したら出てくる
889nobodyさん:2006/05/14(日) 00:54:19 ID:w7OEC7Lo
>>888
ZIPすらありませぬ・・・
890nobodyさん:2006/05/14(日) 00:54:19 ID:???
>>887
/sapi にあるだろ
891nobodyさん:2006/05/14(日) 00:56:48 ID:w7OEC7Lo
>>890
Apacheですか?
PHPの中にはフォルダが3つとファイルがちょこっとです。
892nobodyさん:2006/05/14(日) 01:21:46 ID:???
>>887
ttp://www.php.net/downloads.php
Installer なんか使うな。CGI only ってわざわざ書かれてるだろう。
ZIP 版使ってインストールやり直せ。
つーかマニュアルちゃんと嫁
893878:2006/05/14(日) 10:52:28 ID:Kk5ImAZs
SMTPを用意したら動くんですね、やってみます。ローカルホストのみの使用です。
894nobodyさん:2006/05/14(日) 12:59:06 ID:w7OEC7Lo
>>892
すんません。
設定はできました。
index.phpを作って実行したのですけど、IEで開いても何もおきません。
Sleipnilで開くと、index.phpのダウンロードになります。
実行されないです¨
895nobodyさん:2006/05/14(日) 13:34:17 ID:???
ていうかそんなの参考書の一番初めに書いてるだろ。設定されてねーんだよ。そのくらい買ってこいよ。
896nobodyさん:2006/05/14(日) 14:46:14 ID:???
>>894
.phpでPHPモジュールを実行する、という設定がApacheに足りてない
897nobodyさん:2006/05/14(日) 14:55:31 ID:???
>>893
Windows版では簡易的(本当に簡易的)にSMTPを話す機能が
組み込まれてるから別途MTAを用意しなくても構わない。
WindowsだとスタンダードなMTAを用意するの面倒でしょ。
898nobodyさん:2006/05/14(日) 15:55:45 ID:???
MTAって何って香具師がいっぱい居る悪寒。とにかくぐぐれ(w


ところでmysql_query()とかで得たSQLの結果を、そのままmysqlみたいに表示するにはどうすればいい?
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
ってのは、地道にmysql_field_name()とmysql_fetch_row()とechoを駆使するしか無い?
echo "+----------+\n"
echo "| ", mysql_field_name($result, 0), " |\n";
echo "+----------+\n"
while($i = mysql_fetch_row($result)) {
echo "| $i[0] |\n";
}
echo "+----------+\n"
なんか面倒だね(w
899nobodyさん:2006/05/14(日) 16:30:11 ID:???
さっそくですが質問させてください。MTAてなんですか?
900nobodyさん:2006/05/14(日) 16:43:16 ID:???
>>898
そのレベルで面倒とか言われると…
そもそもmysql形式での表示が面倒くさいんだよな。
while($data = mysql_fetch_assoc($result)) {
foreach($data as $k => $v) {
echo "$k: $v "
}
echo "\n";
}
こっちの方がよほど簡単で利便性も高いと思うんだがダメか?
901nobodyさん:2006/05/14(日) 16:51:58 ID:???
systemでmysql実行してmysqlの出力受けとりゃいい
902nobodyさん:2006/05/14(日) 17:00:33 ID:???
>>899
M まぁ!
T チンコ
A 暖かい!
903nobodyさん:2006/05/14(日) 17:03:16 ID:???
氏ねカスがいノドアメイジンググレイスカイライン工場
904nobodyさん:2006/05/14(日) 17:14:57 ID:???
>>899
Mail Transfer Agent。sendmail/qmail/postfixなんかの、主にメールの配送を行うソフトウェアのこと。
ついでにMDA, MUAなんかを調べておくといいよ。で、お前に言いたいのだが

      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 2006 〜 没年不明 )
905nobodyさん:2006/05/14(日) 17:39:32 ID:???
>>900
Database: mysql
Database: test
って表示か。
これって何形式? >>900形式フォーマット?

>>901
マジでやってそうな香具師が居る所が恐ス(w
パスワード変更を、$passwd_done = system('sudo mysqladmin -u user password new_password'); とか。
906nobodyさん:2006/05/14(日) 17:44:24 ID:???
>>905
わざわざXX形式とか意識してダンプすんの?
907nobodyさん:2006/05/14(日) 17:47:30 ID:???
>>898
while($data = mysql_fetch_assoc($result)) print_r($data);
でじゅーぶん
908nobodyさん:2006/05/14(日) 18:04:13 ID:???
>>899
M マンコ
T チンコ
A アナル
909nobodyさん:2006/05/14(日) 18:05:11 ID:???
Array
(
[Database] => mysql
)
Array
(
[Database] => test
)
1行はいいね。デバック向けかも。でも表示はたくさんあると凄ス(w
910nobodyさん:2006/05/14(日) 18:32:02 ID:???
だれか903のガイドライン建ててください。
911nobodyさん:2006/05/14(日) 20:37:05 ID:???
>>905
あれれ、最初からrootにしといてsudoは省略するのが常識ですよ。
912nobodyさん:2006/05/14(日) 20:54:40 ID:Kk5ImAZs
WINDOWS環境でMAIL関数が使えておられる方いらっしゃいますか?
913nobodyさん:2006/05/14(日) 21:10:30 ID:???
>>912
windowsの場合、SMTPサーバにネットワーク接続してメールを送信する。
相手のSMTPサーバ名はphp.iniのSMTPで設定する。
(マニュアルのwindowsの場合は.. という但し書きは、このためのもの)
ローカルホストだけで運用するなら、ローカルホストでSMTPサーバを立ち上げる必要がある。

プロバイダのメールサーバを使う事もできるが、プロバイダ側の方針で
pop befor smtpなどを使う必要があるのならあきらめれ。
(pearのパッケージに対応したものはある)

Unix系の場合は、メール送信プログラムを直接起動している
(なので、sendmailへのファイルパスを適切に設定する必要がある)
914nobodyさん:2006/05/14(日) 21:13:38 ID:???
ちょっと脳みそ貸してください

adodbでデバッグしているのですが、<html>がはじまる前にprintでデバッグ情報を
出力します。これによりHTMLがくずれます。

できれば別ウィンドウなどでデバッグ情報を出力したいのですが、よい方法ってないで
しょうか?

できれば、その他の自分が書いたHTML以前に出力するデバッグprintをまとめて
別ウィンドウで出したいのですが、よい方法ってないですか?
915nobodyさん:2006/05/14(日) 21:24:03 ID:???
ob_start()とかの出力制御関数を使えばよくね?
916nobodyさん:2006/05/14(日) 21:40:03 ID:yvznY1na
phpはあまり触ったことがないのですが、私の運営する個人サイトに
一行コメントをつけたいと考えています。
できれば自分でつくってみたいのですが、最低限の(コメントする)機能を
一から解説しているサイトはないでしょうか?

googleで調べたらみつからなかったので、ヒントなどでもよろしくお願いします。
917nobodyさん:2006/05/14(日) 22:16:25 ID:???
914さんありがとうございます。教えていただいたことをもとにやってみます。
918nobodyさん:2006/05/14(日) 22:40:10 ID:???
root権限でphp動かしてるなんて凄杉。
まあウィンドウズだとアドミン権限実行は普通だろうけど。

別に、phpにこだわらず一行掲示板のCGIスクリプトを拾って来て設置したほうが速いと思う。
ググっても見つけられないとか、解説サイト求めてる程度だし。php本でも買って一から覚える気もないでしょ?
919nobodyさん:2006/05/14(日) 22:44:35 ID:???
よかったら作りますよ。どちらにお住まいですか?
920nobodyさん:2006/05/14(日) 23:25:53 ID:???
>>916
そんなくだらんプログラムを一から解説してる暇なサイトは確かに見たことないかも…
921nobodyさん:2006/05/14(日) 23:32:56 ID:???
☆★☆掲示板の作り方☆★☆
http://pc8.2ch.net/test/read.cgi/php/1097759967/l50

せっかくだからPHPで掲示板作ってみませんか?
http://pc8.2ch.net/test/read.cgi/php/982779383/l50

オマエラPHPで掲示板つくれませんか?
http://pc8.2ch.net/test/read.cgi/php/1026233119/l50
922nobodyさん:2006/05/14(日) 23:39:34 ID:yvznY1na
>>921
お、ありがとうございます。
現在、実は既にcgiで掲示板も動いていて、ムーバブルタイプも動いてたりするのですが、
別にブログほど大げさじゃなくて、自宅サーバであんまり思いの処理させるのも嫌だったので
じゃ、phpでやってみようかなとなったわけです。
というわけで、いってみます
923nobodyさん:2006/05/15(月) 01:26:32 ID:???
>>919がスルーされてるのでワロタ
924nobodyさん:2006/05/15(月) 06:31:02 ID:???
リンク集にタグなどをつけて、閲覧者が指定したタグのものを表示〜
というのをしたいんですが
これってSQL使わないと処理が重くなりすぎますか?

1つのリンクを1つのxmlファイルにしちゃうのが楽そうだなあと思っているんですが。
925nobodyさん:2006/05/15(月) 06:31:57 ID:???
ちなみにリンクの数は4桁いく予定です。
926nobodyさん:2006/05/15(月) 06:35:11 ID:???
>>924
ごめん。「タグ」の意味がわかんない。
927924 925:2006/05/15(月) 06:40:18 ID:???
すみません。
キーワードといったほうがいいんですかね。

ディレクトリみたいな分類方法ではなく、
一つのリンクに対して複数のキーワードを指定するタイプのものです。
928nobodyさん:2006/05/15(月) 08:14:18 ID:???
>>924
アクセス数にもよる。まあRDBMS使うことになるだろう。
リンク数>>関連ワード種なら関連ワードでインデクシングすればファイルでもそんな重くならないと思う
929nobodyさん:2006/05/15(月) 08:28:16 ID:???
更新頻度にも寄るなあ。
滅多に更新しないようなのなら、手元のスクリプトでHTML生成させてうpさせるだけでも十分だし。
930894:2006/05/15(月) 09:08:33 ID:JZwWRF2V
# PHP 4 の場合
LoadModule php4_module "c:/php/php4apache2.dll"
# sapi ディレクトリから php4apache2.dll をコピーするのを忘れないこと!
AddType application/x-httpd-php .php

# PHP 5 の場合
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php

# php.ini の場所を設定
PHPIniDir "C:/php"


これですよね。
ちゃんと設定したのですが・・・
931nobodyさん:2006/05/15(月) 11:46:54 ID:xX88XBiy
質問です。

あるドメイン名が既に取得されているか、まだ取得されていないかを
確かめるにはどのようにすればいいでしょうか?
たとえば、『abc.com』の場合は1を返し、『ouashoghasoifpoashfua.com』
の場合は0を返す、というようにしたいです。

OS・バージョン:CentOSのバージョン2
やってみたこと:『$result = `whois abc.com`;』の結果に"not found"や"no match"が
         含まれているかどうか、という判断基準では思った結果が得られませんでした。

よろしくお願いします。
932nobodyさん:2006/05/15(月) 12:17:27 ID:???
>>930
Apacheの再起動
Apacheのエラーログを見る
933nobodyさん:2006/05/15(月) 12:35:24 ID:???
934nobodyさん:2006/05/15(月) 13:13:07 ID:JZwWRF2V
>>932
どこか、PHP+Apacheを詳しく紹介しているサイトありませんか?
935nobodyさん:2006/05/15(月) 13:13:48 ID:???
ぐぐれば見つかるだろ
936nobodyさん:2006/05/15(月) 14:30:17 ID:xX88XBiy
>>933さん
ありがとうございます。
しかし会社の都合でPearは使えないので、純粋にPHPだけでやりたいのですが…
無理でしょうか?
937nobodyさん:2006/05/15(月) 14:34:48 ID:???
Pearったってアップロードすりゃいいだけじゃん。
特にNet_whoisなんて.phpファイル1個しか無いんだから。
これって純粋にPHPだけじゃないのか?
938nobodyさん:2006/05/15(月) 15:16:12 ID:xX88XBiy
>>937さん
なるほど、そうだったんですね。知りませんでした。
ttp://www.res-system.com/weblog/item/572
↑これを参考にやってみたのですが、どうもWhoisの結果を返してくれるだけのようなのですが…
『ドメインが取得済みかどうか』を調べることもできるのでしょうか?
英語が全然ダメなものですみません…
939nobodyさん:2006/05/15(月) 15:25:18 ID:???
>>938

そもそも、
>やってみたこと:『$result = `whois abc.com`;』の結果に"not found"や"no match"が
>         含まれているかどうか、という判断基準では思った結果が得られませんでした。

思った結果とはなに?
940nobodyさん:2006/05/15(月) 15:34:51 ID:xX88XBiy
>>939さん
> あるドメイン名が既に取得されているか、まだ取得されていないかを確かめる
という部分です。たとえば、

if(eregi("not found") || eregi("no match")){
return 0;
}else{
return 1;
}

とした場合には、取得済みドメインのWhoisの結果でも「not found」という文字が含まれている場合があるため、
『取得されているかどうかの判定』にはならなかった、という意味で書きました。
わかりにくくてすみません。
941nobodyさん:2006/05/15(月) 15:35:25 ID:???
.JPの場合、
>※ レジストリデータベースに該当するデータが存在しないだけであり、
>そのドメイン名などの登録を保証するものではありません。
>登録可能かどうかを確認する場合はhttp://jpsearch.jp/ をご覧ください。
なんてあるから、http://jpsearch.jp/にクエリー投げて、レスポンスを分析すれば
いいんじゃない?
942nobodyさん:2006/05/15(月) 15:49:52 ID:xX88XBiy
>>941さん
やはり返ってきたデータを分析するしかないんですかね…
.comや.twなど様々なドメインに対応する必要があるので、レジストリごとに分析してやる必要がありそうです。
かなりめんどくさいですががんばります。
ありがとうございました。
943nobodyさん:2006/05/15(月) 16:21:10 ID:???
ファイルとディレクトリ削除の質問です。
ディレクトリ内に3つのファイルがあった場合、

unlink(a.gif);
unlink(b.gif);
unlink(c.gif);
rmdir(hoge);

で、ディレクトリ内のファイルは削除されますが、ファイルが5つあるけど
実際にデータベースに登録されているファイルは3つの場合、2つ削除出来ないから
エラーになります。

つまり、ディレクトリごとすべて削除する場合、どうすればいいのでしょうか?
944nobodyさん:2006/05/15(月) 16:28:14 ID:???
ディレクトリ内のファイル一覧を取得して削除。
何が難しいの?ハテ??
945943:2006/05/15(月) 16:48:39 ID:???
>>944
ありがとうございます。下記のように書いてみたのですが、
unlink(.../files/hoge..): Is a directory in
というようなエラーが出ます。しかし、ディレクトリは削除出来ています。
どこがおかしいのでしょうか?

<?
$name="hoge";
$dir_name="../files/$name/";
$dh=opendir($dir_name);
while($file=readdir($dh)){
unlink($dir_name . $file);
}
rmdir("../files/$name");
closedir($dh);
?>
946nobodyさん:2006/05/15(月) 17:09:21 ID:???
推測だけど
opendir($dir_name);した時点でカレント移動してて
ディレクトリのズレが生じてる気がする
相対パスじゃなくて絶対でやってみて
947943:2006/05/15(月) 17:17:55 ID:???
絶対パスにするとは、例えば以下のような事ですか?
$dir_name="../files/$name/";

$dir_name="http://***.com/files/$name/";

しかし、こうするとfailed to open dir: not implemented inというエラーが出ます。
948nobodyさん:2006/05/15(月) 17:43:43 ID:???
違うよ・・・
鯖によって違うと思うけど↓みたいなやつ
/virtual/user/public_html/
949nobodyさん:2006/05/15(月) 17:46:34 ID:???
ごめん上のカレントとかは忘れて、エラー見てなかった
ディレクトリ関数つかったら
.   カレント
..  親ディレクトリ
のパスのあとにファイル名とかくるから
is_file()でファイルが確認してからunlinkして
950nobodyさん:2006/05/15(月) 18:12:52 ID:???
CURLで他所からHTMLを取って来て、具をGDでレンダリングしてくれる
イカすライブラリはありませんか?
951943:2006/05/15(月) 18:20:41 ID:???
>>948-949
ちょっと変ですが、以下のソースで出来ました!アドバイスありがとうございました。

<?
$name="hoge";
$dir_name="../files/";
$dh=opendir("$dir_name/$name/");
$dir_name_path="$file_name/$c_id/";
while($file=readdir($dh)){
if(is_file($file)){
unlink($dir_name_path . $file);
}
}
rmdir("$dir_name/$name");
closedir($dh);
?>
952nobodyさん:2006/05/15(月) 20:56:00 ID:???
>>951
解決したみたいだけど、ディレクトリの中の全ファイル削除ならそれで問題ないと思う。
ディレクトリの中に更にディレクトリとかあるのなら話しは別だけど。

>>945のエラーについては、$fileを出力すればエラーの理由が分かると思うよ。
953943:2006/05/15(月) 21:33:59 ID:???
何度もすみません。。
readdirを使うと0があるファイル名を読み込む時、FALSEと見なして
意図しない動作になると、リファレンスに記述がありました。

事実、それでずっと特定のファイルが削除されずに悩んでいたのですが、
ローマ字だけのファイルなどは問題なく削除されるので、0の問題があると思います。
上記のソースで、0を含むファイル名の場合の対処法をご存じであれば教えて下さい
954nobodyさん:2006/05/15(月) 21:38:33 ID:???
>>953
while(($file=readdir($dh)) !== FALSE){
955943:2006/05/15(月) 21:42:50 ID:???
>>954
ありがとうございます。ただ、それにしたのですが、特に無反応でした。
ファイル表示も削除もされませんでした・・・
956nobodyさん:2006/05/15(月) 21:51:39 ID:???
>>953
readdirで正常動作しないのは「0」という名前のファイルのときであって
0を含むというだけなら全然関係ない。
別の問題があるんじゃないか?具体的にどんなファイル名が表示できてないのよ。
957943:2006/05/15(月) 22:03:00 ID:???
>>956
マイクロタイム形式の「1140930321.jpg」こういうファイルです。
例えばtest.jpgとかindex.phpとかのファイルの場合は、問題なく削除出来ます。

同じソースでそういうわけなので、「0」の問題かと思っています。
かれこれ2時間悩んであれこれテストしてみたのですが、いきつく結果は
それかと思っているのですが・・。
958nobodyさん:2006/05/15(月) 22:05:36 ID:???
>>957
それは0は関係ない。
ソースってこれか?
while($file=readdir($dh)){
if(is_file($file)){
unlink($dir_name_path . $file);
}
}
> if(is_file($file)){

if(is_file($dir_name_path . $file)){
にしてもダメか?
959nobodyさん:2006/05/15(月) 22:07:24 ID:???
つーか
$dh=opendir("$dir_name/$name/");
$dir_name_path="$file_name/$c_id/";
なんでopendirの引数と$dir_name_pathの内容が違うの?
960943:2006/05/15(月) 22:08:18 ID:???
>>958
if(is_file($dir_name_path . $file)){

これにしたら出来ました!!
自分ではどうしてかよくわからないのですが、、もう一度調べてみます。
何度もありがとうございました。
961nobodyさん:2006/05/15(月) 22:09:34 ID:???
逆に、ローマ字だけのファイルなら動いてたって方が怖いくらいだ。
962943:2006/05/15(月) 22:10:12 ID:???
>>959
すみません、色々とやってたので変更せずにそのまま投稿してしまいました・・。
ただしくは
$dh=opendir("$dir_name/$name/");
$dir_name_path="$dir_name/$name/";

です。。
963943:2006/05/15(月) 22:11:45 ID:???
>>961
何か理由があるんですかね?全く持って不思議ですが・・。
私の書き方にも問題あると思いますが、動作しない理由が
よくわからないことがあります。リファレンス見ながらやっているのですが・・。

とりあえず、大変参考になりました。これでディレクトリ内一括削除はできそうです。
964nobodyさん:2006/05/15(月) 22:15:46 ID:???
>>963
is_file($file)だとパスなしのファイル名になるから
実際はカレントディレクトリにそのファイルがあるかどうか、を判別してる。
多分、削除できてたローマ字ファイル名とやらは該当のディレクトリだけじゃなく
プログラムと同じ場所にも同名ファイルが置いてあって、
数字のファイル名は該当のディレクトリにしか無かったというオチ。
965nobodyさん:2006/05/16(火) 02:12:09 ID:luYBLTx6
LoadModule php4_module C:/php/sapi/php4apache.dll
これでApacheとPHPを連携させるのですよね。

これで、localhostは見れたのですけど
C:\Program Files\Apache Group\Apache\htdocsに
test.phpを入れてhttp://localhost/test.php
でアクセスすると、
test.phpをダウンロードしますか?と出ます
何の設定が足りていないのでしょうか
966nobodyさん:2006/05/16(火) 02:15:04 ID:luYBLTx6
ちなみに、PHPは4.4.2、Apacheは1.3.35
967nobodyさん:2006/05/16(火) 02:15:16 ID:???
SELECTタグ(コンボボックス)で、アイテムを選択した瞬間に
別のコンボボックスのデータを変えたいのですが、
どこもかしこも「onChange=""」でJavaScriptの関数を呼び出せ、
としか書いてありません。
JavaScriptに一切頼らず、PHPの処理だけでこれを実現することは不可能なのでしょうか?
968nobodyさん:2006/05/16(火) 03:51:08 ID:???
>>965
これで、localhostは見れたのですけど
C:\Program Files\Apache Group\Apache\htdocsに
test.phpを入れてhttp://localhost/test.php

>localhostは見れた

どういうこと?何が見れたの?
969nobodyさん:2006/05/16(火) 03:55:33 ID:???
>>967
phpはサーバサイドなので一度サーバになんらか送信しないと表示している画面を変更することはできません。
で、JavaScript(onchange)を使いたくないというなら「無理」
970nobodyさん:2006/05/16(火) 04:07:31 ID:???
>>965

えと、寝る前に気がついたので再度(968っす)
http://localhost/でindex.htmlが見れたってことかな
であれば.phpが何で動くかって指定してないのではないかと

AddType application/x-httpd-php .php
とかをhttpd.confに設定してないんじゃない?
971967:2006/05/16(火) 04:39:14 ID:???
>>969
やっぱりそうでしたか。あんがとですー。
972nobodyさん:2006/05/16(火) 07:36:41 ID:???
>>965
Apache1.3ならAddModuleも必要だ
2.0ならいらないけど
973nobodyさん:2006/05/16(火) 07:56:03 ID:???
>>972
必要ねぇよ。嘘教えてんなよ。
サンプルのhttpd.confはClearModuleListを使って順序を決めなおしてるから
ちょっと冗長なんだよ。
974nobodyさん:2006/05/16(火) 09:06:05 ID:???
>>967
コンボボックスってのはセレクトボックス+テキストボックスで
与えられた選択対象に目的のものがない場合に、ユーザが入力できるUIのことだ。
JavaScriptのライブラリでも使って特別に実装しない限り、コンボボックスにはなり得ない。
975nobodyさん:2006/05/16(火) 09:07:20 ID:XeHcc5dB
>>970
AddType application/x-httpd-php .php
と、もうひとつの行は書き込んであります。

>>972
AddModuleが上の設定ではないのですか?

>>973
('A`)ヴァー
976965(975):2006/05/16(火) 09:09:54 ID:XeHcc5dB
すみません、もうひとつ。

LoadModule php4_module "C:/php/php4apache.dll"
AddModule mod_php4.c
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
↑これはhttpd.confに設定しました。


Action application/x-httpd-php "/php/php.exe"
SetEnv PHPRC C:/php
上記の2行は必要ですか?
977nobodyさん:2006/05/16(火) 09:27:07 ID:???
モジュールの設定って、こんなに必要ないような気が。
Apache2.0+Winだけど、俺はこれだけ。
LoadModule php4_module "D:/path/to/php4apache2.dll"
AddType application/x-httpd-php .php

Apache再起動したの?
978965(975):2006/05/16(火) 09:33:27 ID:XeHcc5dB
>>977
しました、でも無理でした。
DLLをWINDOWS/system32/にコピーってのは必要なのですか?
979965(975):2006/05/16(火) 09:39:13 ID:XeHcc5dB
とりあえず、今学校なので帰ったら2.0にして、>>977のやり方で試してみます
980nobodyさん:2006/05/16(火) 10:25:30 ID:???
>>978
php4ts.dll は WINDOWSフォルダに置いたな(WindowsXP)
981nobodyさん:2006/05/16(火) 10:36:24 ID:???
982965(975):2006/05/16(火) 10:49:37 ID:XeHcc5dB
>>981
Apache2?
983nobodyさん:2006/05/16(火) 11:25:21 ID:???
> DLLを全部WINDOWS/system32/にコピー
これはやった事ないけどなぁ。
984965(975):2006/05/16(火) 11:28:37 ID:XeHcc5dB
>>983
ttp://allabout.co.jp/internet/database/closeup/CU20031114
これのPHP設定に書いてあったんだが
必要ないのかな?
985nobodyさん:2006/05/16(火) 11:33:17 ID:???
>>980
>>981

もうその情報は過去のものだお。ちゃんとマニュアル嫁。

>古いバージョンのマニュアルでは、ini ファイルおよび DLL ファイルをシステムフォルダ (C:\WINDOWS など) へ移動させることを推奨していました。
>新しいバージョンのインストールにあたっては、これら移動させたファイル(システムフォルダ内の php.ini や PHP 関連の DLLなど)をすべて削除することを推奨します。
986nobodyさん:2006/05/16(火) 12:03:19 ID:???
987965(975):2006/05/16(火) 12:06:53 ID:XeHcc5dB
PHP を Windows 上の Apache 2.0.x で動作させるには、2種類の方法が あります。
一つは、CGI バイナリを使用する方法、もう一つ は Apache モジュール DLL を使用する方法です。
どちらの場合も httpd.conf を編集して Apache が PHP を利用できるようにした後、 Apache サーバを再起動する必要があります。



この2種類は何が違うんですか?
988spam業者のアドレス:2006/05/16(火) 12:21:26 ID:???
初心者スレ最近みてないが機能してないのか?
989nobodyさん:2006/05/16(火) 12:32:38 ID:???
ファイルをクローズするとロックも自動的に解除されるのでしょうか?
990nobodyさん:2006/05/16(火) 13:25:12 ID:???
>>989
マニュアルにちゃんと記載してあるのだが・・・
>ロックは fclose() でも解放されます (スクリプトが終了した場合も自動的にコールされます) 。

故にfcloseの直前で明示的にロックを開放する必要はないし、しない方がいい
991nobodyさん:2006/05/16(火) 13:33:38 ID:???
添付ファイルをメールで送信したいのですが、どのようにやればいいのでしょうか?
992nobodyさん:2006/05/16(火) 13:55:26 ID:???
$info['user'][$i]['name']
$info['user'][$i]['age']
$info['user'][$i]['sex']
のような配列を使っていたのですが、途中に数字が入るのにどうも違和感があったので
$info['user']['name'][$i]
$info['user']['age'][$i]
$info['user']['sex'][$i]
のような形に変えました。
しかしageでソートするのに以前の形式ではusort()を使って簡単にできたのですが、
変更後ではageしかソートされず困っています。
こういう場合どうすればいでしょうか?
993nobodyさん:2006/05/16(火) 15:38:33 ID:???
すみません、session変数の値の保持時間を指定したいのですが
php.iniではなくプログラム側で指定する方法はありませんか?
994nobodyさん:2006/05/16(火) 16:07:20 ID:???
ini_set
995nobodyさん
質問者諸君、お前らが忘れてるスレ

【PHP】下らねぇ質問はここに書き込みやがれpart20
http://pc8.2ch.net/test/read.cgi/php/1146165153/

こっち行け。やさしく対応して貰えるかもよ。