【PHP】質問スレッドpart17【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/05/17 17:14ID:AT+bUkag・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
抜けているものがあったら補足願います
0076nobodyさん
04/05/20 18:55ID:???0079nobodyさん
04/05/20 20:02ID:???0080nobodyさん
04/05/20 21:18ID:???例えば"あひゃ"を反転させ、"ゃひあ"にしたいんですが
現時点では"痰ミあ"となってしまいます。
0081nobodyさん
04/05/20 21:23ID:???0083nobodyさん
04/05/20 22:22ID:???ここにある高速チャットを設置すると以下のようなエラーメッセージが出るんですが
どうすればうまく行きますか?
Warning: session_start(): open(/tmp\sess_7bede8e58cf70ade30189aa799a60b24, O_RDWR) failed: No such file or directory (2) in C:\home\chat.php on line 2
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\home\chat.php:2) in C:\home\chat.php on line 2
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\home\chat.php:2) in C:\home\chat.php on line 2
Warning: Unknown(): open(/tmp\sess_7bede8e58cf70ade30189aa799a60b24, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
0084nobodyさん
04/05/20 22:23ID:???Perlの時に動いていたSuexec機能はPHPでは効いていないようで、PHPから作成したファイル・ディレクトリが全てapacheのデフォルトの権限で作成されてしまいます。
なんとかPHPでもSuexec機能を使うことはできませんでしょうか?
環境は
FreeBSD 4.9
Apache 2.0.49+PHP4.3.6+MySQL4+Suexecです。
宜しくお願いします。
0085nobodyさん
04/05/20 22:34ID:???いわゆるオブジェクト指向的な
プログラミングの参考には
それほどならないだろう。
0088nobodyさん
04/05/20 23:36ID:???アプリの使い方は、アプリのところ(最も適した場所)で訊きなさい。
>>84
PHPをApacheのDSOとして組み込んじゃなくて、
CGI版のPHPをsuExecと組み合わせる。
今のバージョンのPHPはデフォルトでCLI版はビルドするけど
CGI版はオプションつけてやらないと生成しなくなってた気がする。
ところで"Suexec機能"って何?
その辺で認識違がある気がしないでもない。
0089nobodyさん
04/05/20 23:37ID:???アプリの使い方は、アプリのところ(最も適した場所)で訊きなさい。
>>84
PHPをApacheのDSOとして組み込んじゃなくて、
CGI版のPHPをsuExecと組み合わせる。
今のバージョンのPHPはデフォルトでCLI版はビルドするけど
CGI版はオプションつけてやらないと生成しなくなってた気がする。
ところで"Suexec機能"って何?
その辺で認識違がある気がしないでもない。
009089
04/05/20 23:37ID:???0091vv
04/05/21 02:16ID:???レンタル鯖使ってケータイ用サイト作ってます。
が、エンコード方法で困ってます。
やってること:
1 EUCで保存しているテキストファイルを読み込み
2 Shift-Jis変換してEchoで表示させる
ということをしたいのですが
mb_http_output('SJIS');
とかやってもうまくいきません。
なにか別の方法があるのでせうか?
0092nobodyさん
04/05/21 04:03ID:???echo mb_convert_encoding($str, "sjis", "euc");
とりあえずこれでやれ
それでなんでうまくいかないかは調べろ
てかマニュアル嫁
0094nobodyさん
04/05/21 13:35ID:9biQDb7uサイト閲覧者のブラウザー情報のうち、
表示領域の高さを取得することってできますでしょうか?
わかるかた、おながいします!
0096nobodyさん
04/05/21 13:45ID:???0097nobodyさん
04/05/21 13:50ID:???0098nobodyさん
04/05/21 13:55ID:9biQDb7u分かるのかな。などと、考えていたの私が愚かでした。
java縄で首括ってきます。
ブラウザーの検出方法
ttp://hotwired.goo.ne.jp/webmonkey/review/index82_page2.html
色深度の検出方法
ttp://hotwired.goo.ne.jp/webmonkey/2001/18/index0a.html
0099nobodyさん
04/05/21 14:02ID:???PHPで色深度検出ってなんじゃそりゃって思ったら、そういう環境変数を吐くブラウザの話じゃねーか
同じことしたいなら環境変数に「表示領域の高さ」吐くブラウザ作れ
でもってその場合もやっぱり板違い
0100nobodyさん
04/05/21 14:04ID:9YHKUH0F0101nobodyさん
04/05/21 14:12ID:???板違い
0102nobodyさん
04/05/21 14:36ID:fvdu+npM「$a = &$b;」と「$a =& $b;」は同じと考えても良いのでしょうか?
また、同じだとすると何故書き方が二通りあるの?
0104nobodyさん
04/05/21 15:16ID:???動作は同じだけど区別して書いている場合
$a = &$b; は"$bの参照"を渡す
$a =& $b; は"$b"の"参照渡し"
の意味合いを含ませているかも知れん。
0106102
04/05/21 15:55ID:???回答、ありがとうございます!では気にしないことにします。
書き方が二通りあるからには生成されるコードが違うのかも?
と気になって仕方がありませんでした。
これで心安らかにコーディングできます。
>>104
これは確かに微妙。だけど言いたいことは何となく…
0107nobodyさん
04/05/21 17:31ID:???0108nobodyさん
04/05/21 18:31ID:???PHPはCとは違うので、渡すのはあくまでも
リファレンスであってアドレスではない。
呼び名が違うということだけではなく、
仕組み上でもリファレンス≠アドレスだ。
0109nobodyさん
04/05/21 19:37ID:???disk-idにはCDを見分けるための番号
priceはそのCDの価格。
shopはいずれかのショップ名(A店,B店,C店,D店)
resultは順位
disk_id | shop_id | price | result
--------+---------+-------+--------
D151 | shopC | 1720 | 4
D151 | shopB | 1680 | 3
D151 | shopA | 1620 | 2
D151 | shopD | 1590 | 1
D152 | shopA | 2120 | 4
:
:
〜
〜
続く
0110nobodyさん
04/05/21 19:38ID:???$disk_id
array([0]=>D151[1]=>D151[2]=>D151[3]=>D151[4]=>D152)
$shop_id
array([0]=>shopC[1]=>shopB[2]=>shopA[3]=>shopD[4]=>shopA)
$result
array([0]=>4[1]=>3[2]=>2[3]=>1[4]=>4)
とこんな感じになっているのですが、これをphpでテーブルに表示する際
+------+------+------+------+------+
| D151 | shopA | shopB | shopC | shopD |
+------+------+------+------+------+
| 2 | 3 | 1 | 4 |
+------+------+------+------+
とshopAからDと順に表示するにはどうしたらいいでしょう?アドバイスよろしくお願いします。
0111nobodyさん
04/05/21 20:49ID:???+------+------+------+------+------+
| D151 | shopA | shopB | shopC | shopD |
+------+------+------+------+------+
| 2 | 3 | 4 | 1 |
+------+------+------+------+
こうだ、スンマソ
0112nobodyさん
04/05/21 21:15ID:???データベースからの取り出し方が悪いわな。
shop_id順に並べるならそのように取り出すべきでは?
SELECT * FROM table WHERE disk_id='D151' ORDER BY shop_id;
0113nobodyさん
04/05/21 21:28ID:???もしこれを一覧表示にするとなるとしてもSQL文でなんとかなりますでしょうか?
+------+------+------+------+------+
| D151 | shopA | shopB | shopC | shopD |
+------+------+------+------+------+
| 2 | 3 | 4 | 1 |
+------+------+------+------+
| D154 | shopA | shopB | shopC | shopD |
+------+------+------+------+------+
0115nobodyさん
04/05/21 22:17ID:???0116nobodyさん
04/05/21 22:19ID:???0117nobodyさん
04/05/21 22:25ID:???のですが、どういう風な記述をすればいいのでしょうか?
ereg_replaceを用いても、うまくできませんでした……。
0119nobodyさん
04/05/22 00:16ID:???0120nobodyさん
04/05/22 00:22ID:???いろいろ半端だねぇ
0122nobodyさん
04/05/22 09:16ID:FrQVvRLq3.3 クラスライブラリで汎用化のP137〜P143のサンプルプログラムを自環境で実行させたところ、(ソースの含まれるpdf:ttp://www.net-newbie.com/support/pdf2/PHP4_Part-2.pdf)
Warning: pg_num_rows(): supplied argument is not a valid PostgreSQL result resource in /home/hoge/public_html/lib/pgselect.inc on line 33
Warning: pg_num_fields(): supplied argument is not a valid PostgreSQL result resource in /home/hoge/public_html/lib/pgselect.inc on line 34
とエラーがでて動きません。
その前の章(3.2 PHPを使ってテーブル内容を表示する)のライブラリに分けないべたなスクリプトはちゃんと動作したのですが。
だいぶ見直してみましたが、エラーのでる原因が掴めません。
助言頂けませんでしょうか。
debianアンダーでapache2.0.49/PHP4.3.4の環境で動作させています。
よろしくお願いいたします。
0124nobodyさん
04/05/22 10:26ID:prWBgoDShttp://www.csmoon.com/prog/dcnt.html ここにあるサンプルCGIを設置したんだけど
なぜかinternal Server Error が出まくって全然動かない
環境はRed Hat Linux + Apache 2.0.48です
パーミッション、転送法などが原因かな?
だれか教えて!
0126nobodyさん
04/05/22 12:15ID:FrQVvRLq>>123
pg_connectは成功してます。たぶん。。。
>>122であげましたpdfファイルのP134〜P135のスクリプトではpg_num_rowsは動いてます。
多分引数の受け渡しがおかしいような気がするのですが、いろいろやってみてもうまくいかないのです。。。
0128nobodyさん
04/05/22 12:50ID:FrQVvRLqpdfファイルからソースをコピペします。
ちょっと長いですがご容赦ください。
【ex2.php】
1 <html>
2 <head><title>Example 2</title></head>
3 <body>
4 <?php
5 require_once("pgselect.inc");
6
7 $sel = new PgSelect;
8 $sel->doSelect("SELECT day AS 年月日, tenki AS 天気, ondo AS 温度, uryou AS
雨量FROM otenki ORDER BY day");
9 ?>
10 </body>
11 </html>
0129nobodyさん
04/05/22 12:51ID:FrQVvRLq<?php
define("DBNAME", "foo"); // データベース名
define("HOST", ""); // ホスト名
define("PORT", ""); // ポート番号
define("USER", ""); // ユーザ名
define("PASSWORD", ""); // パスワード
?>
0130nobodyさん
04/05/22 12:52ID:FrQVvRLq1 <?php
2 /*
3 * 検索結果をテーブル形式で表示する
4 */
5 require_once("dbconnect.inc");
6
7 class PgSelect {
8 var $db; // データベース接続ハンドル
9
10 // コンストラクタ
11 function PgSelect() {
12 $this->db = new DbConnect();
13 }
14
15 // テーブル開始タグの印字
16 function printTableHeader() {
17 print("<table border>\n");
18 }
19
20 // 列名の印字
21 function printHeader($i, $str) {
22 print("<th>$str</th>");
23 }
24
25 // データの印字
26 function printData($i, $str) {
27 printf("<td>%s</td>\n",htmlspecialchars($str));
28 }
0131nobodyさん
04/05/22 12:52ID:FrQVvRLq30 // 検索の実行
31 function doSelect($sql) {
32 $result = $this->db->doQuery($sql); // selectを実行
33 $rows = pg_num_rows($result); // 行数を取得
34 $columns = pg_num_fields($result); // 列数を取得
35
36 $this->printTableHeader();
37
38 for ($j = 0;$j < $rows;$j++) {
39 if ($j == 0) {
40 print("<tr>");
41 for ($i = 0;$i < $columns;$i++) {
42 $str = pg_field_name($result,$i); // 列名の取り出し
43 $this->printHeader($i, $str);
44 }
45 print("</tr>\n");
46 }
47 print("<tr>");
48 for ($i = 0;$i < $columns;$i++) {
49 $str = pg_fetch_result($result,$j,$i); // データの取り出し
50 $this->printData($i, $str);
51 }
52 print("</tr>\n");
53 }
54 print("</table>\n");
55 return true;
56 }
57 }
58 ?>
0132nobodyさん
04/05/22 12:53ID:FrQVvRLq1 <?php
2 /*
3 * PostgreSQLデータベースへの接続を行なうクラス
4 */
5 require_once("def.inc");
6
7 class DbConnect {
8 var $dbname = DBNAME; // データベース名
9 var $host = HOST; // ホスト名
10 var $port = PORT; // ポート番号
11 var $user = USER; // ユーザ名
12 var $password = PASSWORD; // パスワード
13 var $con = false; // コネクションハンドル
14
15 function DbConnect() { // コンストラクタ
16 $this->getConnection();
17 }
18
19 // コネクションハンドルを返す
20 function getConnection() {
21 if ($this->con == false) {
22 return($this->doConnect());
23 }
24 return($this->con);
25 }
26
0133nobodyさん
04/05/22 12:54ID:FrQVvRLq28 // データベースに接続する
29 $constr = "";
30 if ($this->dbname != "") {
31 $constr .= "dbname={$this->dbname} ";
32 }
33 if ($this->host != "") {
34 $constr .= "host={$this->host} ";
35 }
36 if ($this->port != "") {
37 $constr .= "port={$this->port} ";
38 }
39 if ($this->user != "") {
40 $constr .= "user={$this->user} ";
41 }
42 if ($this->password != "") {
43 $constr .= "password={$this->password} ";
44 }
45
46 @$this->con = pg_connect($constr);
47 if ($this->con == false) {
48 print("データベースに接続できませんでした。理由: $php_errormsg<br>\n");
49 exit;
50 }
51 return($this->con);
52 }
53
0134nobodyさん
04/05/22 12:55ID:FrQVvRLq55 function doClose() {
56 if ($this->con != false) {
57 pg_close($this->con);
58 $this->con = false;
59 }
60 }
61
62 // データベースへの問い合わせの実行
63 function doQuery($sql) {
64 if ($this->con == false) {
65 $this->doConnect();
66 }
67 @$result = pg_query($this->$con, $sql); // selectを実行
68 if ($result == false) {
69 printf("SQL($sql)の実行に失敗しました。理由: " . pg_last_error($this->con));
70 return false;
71 }
72 return $result;
73 }
74 }
75 ?>
0135nobodyさん
04/05/22 12:59ID:???("SELECT day AS 年月日, tenki AS 天気, ondo AS 温度, uryou AS
雨量FROM otenki ORDER BY day");
雨量とFROMの間にスペースが無い
あとAS 〜でエイリアス名つけるのはいいけど英字にしといた方が無難
0136nobodyさん
04/05/22 12:59ID:???これは単なる荒らしにしか見えん
0137nobodyさん
04/05/22 13:19ID:FrQVvRLq>>135
元はそう印刷されてましたが直してます。
そのまま書き込んじゃってすみません。
>>136
すみませんでした。
uk.geocities.com/tdwconvmetwbmxkt/ex2.zip
うpしました。
0138nobodyさん
04/05/22 13:35ID:???$this->conでは?
0140nobodyさん
04/05/22 14:18ID:???作成中のスクリプトには
error_reporting(E_ALL);
これを最初に入れろ。これだけでエラーはずいぶん探しやすくなる。
上記のならUndefined variable : con とNOTICEエラーが出るし。
0141nobodyさん
04/05/22 14:22ID:???nullの判定ができなくなる
0142141
04/05/22 14:23ID:???簡単なデバッグ作業として入れろってことか
早とちりスマソ・・・
0143nobodyさん
04/05/22 14:28ID:???DB接続>処理A>DBからの戻り値をセット>DB切断
・
別処理
・
DB接続>処理B>DBからの戻り値をセット>DB切断
・
別処理
・
DB接続>処理C>DBからの戻り値をセット>DB切断
この方法と
DB接続>処理A>DBからの戻り値をセット
・
別処理
・
DB接続>処理B>DBからの戻り値をセット
・
別処理
・
DB接続>処理C>DBからの戻り値をセット>DB切断
この場合、どちらがベストなんでしょうか?
0144nobodyさん
04/05/22 14:30ID:???上と下の処理の違いで下の処理では
DB接続>処理A>DBからの戻り値をセット
^^^^^^^
これはナシとみなしてください。
0145nobodyさん
04/05/22 14:36ID:???両方試して時間測ってみろ
何でも人に聞いてばかりだと進歩しねえぞ
0146nobodyさん
04/05/22 14:50ID:???PHPが処理中にユーザがブラウザを閉じて処理を強制的に終了する
これを多用された時、サーバの負担及びDBの安全性はどうなるのか?という疑問が出たから質問したのです。処理速度はダントツに下の方法なのは当たり前です。
ここで質問したかったのは「安全策と処理のバランス」です。
0147nobodyさん
04/05/22 14:56ID:???ていうか、スレ違い
0148nobodyさん
04/05/22 15:06ID:???一応訊いとくけど、上のパターンも下のパターンも
共にひとつのPHPプロセスに処理がまとまってる前提だよな?
単純にはDBのコネクションにはコスト(PCの何らかの資産を使うということ)
が掛かるから頻繁に接続/切断はしない方が良い。それは接続/切断をしない
作りをするとともに、接続を継続しても支障の無い環境も整備するということ。
PHPでは下のような作りをする必要はまず無いが、システムによっては下の
パターンにならざるを得ないケースもある。145に言うとおり自分の頭で
考えられないときは、自分の手で試すことも重要。他人を余り信用はするな。
0149nobodyさん
04/05/22 15:18ID:???仮に一回の処理毎にPHPレベルで切断しても
処理してる途中に切られる可能性もあるわけで
よっぽどクリティカルなシステムでもない限り
そこまで気にしなくていいんじゃないかと
0150nobodyさん
04/05/22 15:21ID:???PHPのプロセスは、HTTPコネクションと連動して動いている訳ではない。
特に切断・終了のタイミングの点で。
データベースのロックの解除処理だけは気をつけろ。
0151150
04/05/22 15:25ID:???ユーザがブラウザでアクセスしてる/してないかが
HTTPコネクションとは必ずしも連動してない。
0153茶番 ◆4JCPHWjCgk
04/05/22 22:27ID:hmZH94bq0155茶番 ◆4JCPHWjCgk
04/05/22 22:38ID:hmZH94bqどうもありがとうございます。
0157Parse error
04/05/22 23:51ID:???えと、bbsに書き込みした方のサイトを「HP」という字ではなく、
home.gif なんかのアイコンにしようと思い、弄くっております。
// フォーマット
if($url) $url = "<a href=\"http://$url\" target=\"_blank\">".HP."</a>";
となっておりましたので、「HP」の所に
<img src="home.gif" width="11" height="17">
と入れましたら、鯖に解析してやらねぇと言われました・・・ (´Д`;)
ぬーんと思い
<img src=\"cup_ra.gif\" width=\"11\" height=\"17\">
などと斬新な事もしてみましたが、やっぱり鯖に ( ´,_ゝ`)プ と言われ・・・
こんな幼稚園質問で申し訳ありませんが、ご教授頂けないものかとお願いに上がりました。
一々ご面倒とも思いますので、参考場所の手引きでも頂ければ幸いなのですが・・・
宜しくお願いいたします。
0158nobodyさん
04/05/22 23:55ID:???つまらんネタまじりじゃなくどうやったかズバリ書けばいいだろうが。
0159nobodyさん
04/05/22 23:58ID:???0160nobodyさん
04/05/22 23:58ID:???if($url) $url = "<a href=\"http://$url\" target=\"_blank\"><img src=\"home.gif\" width=\"11\" height=\"17\"></a>";
0161Parse error
04/05/23 00:08ID:???微妙に惜しい・・・ 座布団半分って感じだったのですね・・・
さっそくやってみます! o(´ω`*) ありがとうございました!
>158
ごめんなさい。 素だった・・・
0162nobodyさん
04/05/23 02:35ID:???0164nobodyさん
04/05/23 03:22ID:XXLnBAc7http://fol.axisz.jp/php/ を HTML4.0 Transitional としてチェックしました。
192個のエラーがありました。このHTMLは -161点です。タグが 18種類 257組使われています。文字コードは Shift JIS のようです。
0165nobodyさん
04/05/23 03:54ID:???0166nobodyさん
04/05/23 04:51ID:???Results
Address: http://fol.axisz.jp/php/
Encoding: shift_jis (detect automatically)
Doctype: HTML 4.0 Transitional (detect automatically)
Errors: 67
http://validator.w3.org/check?uri=http%3A%2F%2Ffol.axisz.jp%2Fphp%2F&charset=shift_jis+%28Japanese%2C+Win%2FMac%29
0167nobodyさん
04/05/23 04:56ID:???http://pc5.2ch.net/test/read.cgi/php/1079460638/
0168nobodyさん
04/05/23 05:29ID:???ファイルの中身を上から順に読んで条件Bに一致するデータを変数xに格納して表示、
ファイルの中身を上から順に読んで条件Cに一致するデータを変数xに格納して表示、
と複数回ループさせるのと、
ファイルの中身を上から順に読んで条件Aに一致するデータを変数aに格納、
条件Bに一致するデータを変数bに格納、
条件Cに一致するデータを変数cに格納、
最後に変数を順に表示
と一回のループで一度にやってしまうのとどっちが処理は速いのでしょうか。
ちなみに読み込むファイルは150行程度、条件は10個程度で変数は1条件あたり30個くらい使うのですが・・・
0171nobodyさん
04/05/23 15:25ID:???インデント幅を 2から 4に変更したいんですが、どうすればいいんでしょうか?
pearのコーディング規約とかも 4 にしなさいみたいなこと書いてあったのに
デフォルトはなんで2になってるんだろう。
「emacs php-mode インデント 幅」でググるとなぜか xyzzyの情報ばかり...
0172171
04/05/23 15:33ID:???に
(defun php-mode-hook ()
(setq tab-width 4
c-basic-offset 4
c-hanging-comment-ender-p nil
indent-tabs-mode
(not
(and (string-match "/\\(PEAR\\|pear\\)/" (buffer-file-name))
(string-match "\.php$" (buffer-file-name))))))
って書いてあるけど、これって書き方の例だよね?
これをそのまま .xemacs.el に書いてもダメだた。
0173nobodyさん
04/05/23 16:56ID:???PHPに関連してるようでスレ違いじゃねえか?
なぜemacsスレで聞かない?
■ このスレッドは過去ログ倉庫に格納されています