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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/10/25(火) 06:50:06ID:Q4oGlTH3
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。

過去スレ、関連リンク、FAQ等>>2-10辺り
0455nobodyさん2005/11/14(月) 12:18:02ID:???
>>454
php.netでもできるな
http://www.php.net/phpinfo

それはともかく、phpinfo()の出力を眺めれば分かるかも
0456nobodyさん2005/11/14(月) 12:21:34ID:???
まず以下のコードを見てください。
function search(& $all, & $key, $left = 0, $right = count($all))
{
if ($left == $right) return false;
$middle = floor(($left + $right) / 2);
list($number, $value) = explode("\t", $all[$middle]);
if ($value == $key) return $number;
else if ($value > $key) return search($all, $key, $left, $middle);
else return search($all, $key, $middle, $right);
}

データファイルを検索する関数なのですが、
PHP Parse error: syntax error, unexpected '(', expecting ')' in c:\php\search.php on line 2
と言われてしまいます。
どのように変更すればできますか?
0457nobodyさん2005/11/14(月) 12:22:05ID:???
>>454
mod_rewrite
0458nobodyさん2005/11/14(月) 12:25:49ID:???
>>454
PATHINFO
0459nobodyさん2005/11/14(月) 12:26:53ID:???
>>456
right = count($all)
がまずいんじゃねーの?
0460nobodyさん2005/11/14(月) 12:27:59ID:???
>>453
つか、$_COOKIEでも$_POSTでも、うまく取得できなかったら、
それぞれの配列がどうなっているかチェックする。

print_r($_COOKIE)
とか
var_dump($_COOKIE)
とかさ。

0461nobodyさん2005/11/14(月) 12:28:47ID:???
>>456
くだ質でやれよ
0462nobodyさん2005/11/14(月) 12:29:19ID:???
ちまちまエコーしてないで
HTTPの応答をフックしてみたほうが速いぞ
04634562005/11/14(月) 12:32:25ID:???
>>459
たぶんそうだとおもいます
04644562005/11/14(月) 12:36:39ID:???
呼び出すときに$number = search(file('data.dat', 'xxx');みたいに省略して書くので、何とかなりませんかね?
0465下質レベルだ・・・2005/11/14(月) 12:53:01ID:???
>>464
そんなもんアルゴリズムで解消しろよ

function search(& $all, & $key, $left = 0, $right = FALSE)
{
if ($right === FALSE) $right=count($all);
0466nobodyさん2005/11/14(月) 12:57:05ID:???
わからない五大理由
1 読まない
2 調べない
3 試さない
4 理解力が足りない
5 人を利用することしか頭にない ←>>456
0467nobodyさん2005/11/14(月) 13:00:39ID:???
ただの馬鹿だろ?
解答してる奴もいっしょに死んで来いよ
0468nobodyさん2005/11/14(月) 13:03:48ID:???
市ね市ね言うなよ!
世界じゃ3秒に一人死んでるんだよ!
04694562005/11/14(月) 13:15:30ID:???
>>465
THXです!!
できました!!

と、思ったら肝心の検索がうまくいかないとです。
もう頭限界…
0470nobodyさん2005/11/14(月) 13:20:07ID:???
>>468
もっと凄い勢いで死んでるぞ
0471nobodyさん2005/11/14(月) 13:36:12ID:???
自分の書いたコードではないんだが、数MBのデータを渡したりしているので何もかもが参照渡しになっていた。
それがボトルネックになっているのではと睨んで、とりあえず値渡しの場合と実行速度を比較してみたんだが、なんと一部を値渡しにしたほうが圧倒的に速くなった(比にして数百〜数千倍)。
釈然としないながらも値渡しのほうに修正しておいたが、一般論に反するので原因究明のためにopcodeを出してみた。
あいにくopcodeの仕様を定義している資料が見つからなかったために、結局悶々としている状態。
どなたかopcodeの仕様に関する資料はお持ちではないですか?
04724532005/11/14(月) 13:54:18ID:3QndTAPn
>>460
さらなる情報、どうもありがとうございます。
便利な関数があるのですね。とても参考になりました。
0473nobodyさん2005/11/14(月) 14:05:14ID:???
$param = 'デカイデータ';
foo($param);

↓爆速
function foo($param) {
$var = $param;
}

↓爆遅
function foo(&$param) {
$var = $param
}

PHPはメソッド内で変更がなきゃデフォで参照渡し
上の場合は参照→参照
下のは参照→値コピー

逆に

↓爆遅
function foo($param) {
$param .= 'hoge'
}

↓爆速
function foo(&$param) {
$param .= 'hoge';
}
0474nobodyさん2005/11/14(月) 14:08:46ID:???
>>472
便利な関数がある……って、もう少し基本を学びましょうよ。
04754712005/11/14(月) 14:24:39ID:???
>>473
御見それしました。
ここまで予想外にして明快な回答が返ってくるとは驚きました。
opcodeの情報探しをしていた時間がまるで夢のよう。
どうもありがとうございました。
0476nobodyさん2005/11/14(月) 14:45:47ID:???
>>473
ちまちました細かいつっこみ入れると
>PHPはメソッド内で変更がなきゃデフォで参照渡し
に勝手になるわけではなく、「値渡しだけど実質上参照渡しと変わらない」というだけだったりもする。
0477nobodyさん2005/11/14(月) 14:47:16ID:???
>>456 >>469
どーせtrimしてないだけだったりして
0478nobodyさん2005/11/14(月) 14:47:46ID:???
それがリファレンスカウンティング・クォリティ
0479nobodyさん2005/11/14(月) 14:52:06ID:???
opcodeって要はPHPのバイトコードのことだよね?
確かに情報公開されてないな。
0480nobodyさん2005/11/14(月) 15:48:26ID:???
>>479
つ[ZE2のソース]

公開されてないってより、まとまったドキュメントになってない。
zendのとこで質問すると、別に隠蔽してる訳でもないので
普通に回答あるけど、ZEのソース読んでることが前提だから敷居はそれなりに。
まあ内部のことを余り気にするのも良し悪しだけどね。
(Javaなのに気にしないとならないケータイPGなので...)
0481nobodyさん2005/11/14(月) 16:16:49ID:???
ざっと見た感じopcodeの使用箇所はZendディレクトリ内で分散されてるな。マクロの名前とか意味不明じゃん。
拡張モジュールの書き方なんかはマニュアルに載ってるけど、ZEのソース読んでるの前提ってまさか
こ れ を 全 部 読 め と ?
0482nobodyさん2005/11/14(月) 16:23:50ID:???
それぐらい読めないようなやつが手を出すのは
ま だ は や い ってことじゃね?
0483nobodyさん2005/11/14(月) 16:36:05ID:???
あのコード見てそれぐらいとか言える奴ワロス
0484nobodyさん2005/11/14(月) 16:43:30ID:???
APCでも憤死者がでそうな勢いだったしな。
0485nobodyさん2005/11/14(月) 16:49:46ID:D+CBz70Z
キリストですが何か質問がありますか?
0486nobodyさん2005/11/14(月) 16:51:16ID:???
>>482
難しくて読めないんじゃなくて、汚くて読めないの。
おまいはまずLispの処理系くらい作れるようになってから来ようね。

>>484
APCで憤死者って?
0487nobodyさん2005/11/14(月) 17:48:30ID:???
>>485
クリスマスがウザイんですけど、なんとかなりませんか?
0488nobodyさん2005/11/14(月) 17:50:21ID:???
>>485
クリトリスがクサイんですけど、なんとかなりませんか?
0489nobodyさん2005/11/14(月) 17:57:48ID:???
>>486
APC3が安定するまでにずいぶんと時間がかかったことかな?
eAcceleratorも一から書き直してるってサイトに書いてあるけど、完遂できるかちと心配。
PHP6ではOpcode Cacheが本体につく予定なんだよね?
0490nobodyさん2005/11/15(火) 00:53:24ID:EuotBK4K
早急に教えてもらえますか?
ブラウザに以下の説明が出ます。
Unable to connect to PostgreSQL
server: unknown host name: localhost
port=8040
dbname=testdb2
user=testuser2

OSはfedoraCore4 php5 apache2を使用しています。
ポストグレ側の設定がおかしいのでしょうか?
わかる方、お願いします。
0491nobodyさん2005/11/15(火) 01:18:48ID:???
>>490
それのドがphp?
0492nobodyさん2005/11/15(火) 01:19:20ID:???
ドコが
0493nobodyさん2005/11/15(火) 01:20:49ID:???
>>490

>>5をよく読んでくれ
04944902005/11/15(火) 01:24:09ID:EuotBK4K
>>493
いま、確認してみます。

04954902005/11/15(火) 01:27:26ID:EuotBK4K
というか、急いでるんです。
わかる方いませんか?
0496nobodyさん2005/11/15(火) 01:29:13ID:???
>>490
少し落ち着け。それだけじゃ何も分らん。
まず何をしようとしてその表示が出るのか、
急になったのか最初からなのか。
俺らはお前の鯖見れないんだからよ。
0497nobodyさん2005/11/15(火) 01:29:29ID:???
>>495
>>5の5を取り合えず嫁
0498nobodyさん2005/11/15(火) 01:31:57ID:???
夜中に釣りかよ
熱心だね
0499nobodyさん2005/11/15(火) 01:33:09ID:???
エスパー光臨待ち
05004902005/11/15(火) 01:35:16ID:EuotBK4K
config.phpの中身が、
<?php
if(ereg("config.php",$_SERVER["PHP_SELF"]))
{
exit();
}
define("DB_HOST","localhost");
define("DB_PORT",8040);
define("DB_NAME","testdb2");
define("DB_USER","testuser2");
define("DB_PASS","abcd1234");

define("DB_CONN","host=" .DB_HOST
."port=" .DB_PORT
."dbname=" .DB_NAME
."user=" .DB_USER
."password=" .DB_PASS);
?>
05014902005/11/15(火) 01:36:10ID:EuotBK4K
500続き、
3-4-1.phpの中身が、
<?php
require("config.php");
$db=pg_connect(DB_CONN);
header("Content-Type:text/plain;Charset=EUC-JP");
if($db==FALSE)
{
echo " not connect db?n " ;
}
else
{
echo "database connect ok?n" ;
}
?>
です。
何か間違っていますか?
0502nobodyさん2005/11/15(火) 01:37:56ID:???
>>500-501
いや、お前な、マジで少し落ち着け。
そのconfig.phpって何のスクリプトに内包されてる奴よ?
自作じゃないだろ?

で、「急になったのか最初からなのか」はどうなのよ?
最初からならpsqlが動いてるかどうか確認しろ。
0503nobodyさん2005/11/15(火) 01:39:40ID:???
$hoge==FALSEとか使ってるスクリプト見ると吐き気を催す
0504nobodyさん2005/11/15(火) 01:41:23ID:???
つか課題くさいなこれ
05054902005/11/15(火) 01:43:26ID:EuotBK4K
最初からです。
/user/local/apache2/bin/apachectl start
pg_ctl -o "-i"
で動作中です。しかし>>490掲載 エラーです。
localhostの意味がよくわかりません。
書籍を参考に勉強中です。
0506nobodyさん2005/11/15(火) 01:46:38ID:???
localhostってソースにあるっしょ。これが見つからないといっている
ポートがデフォルトじゃないけどいいの?

>>define("DB_HOST","localhost");
>>define("DB_PORT",8040);
05074902005/11/15(火) 01:47:45ID:EuotBK4K
define("DB_HOST","localhost");
に問題があるのでしょうか?
設定がよくわかりません。
ポストグレの設定に問題あるのか、
PHPの設定に問題があるのか。。。
0508nobodyさん2005/11/15(火) 01:48:10ID:???
>>506
ポートは合ってるよな?
DBとユーザーは作成済みだよな?
05094902005/11/15(火) 01:49:09ID:EuotBK4K
>ポートがデフォルトじゃないけどいいの?
とは、なんでしょうか?
どう設定すればいいのでしょうか?
よくわからないもので..
0510nobodyさん2005/11/15(火) 01:50:00ID:???
あ、間違えた。>>505宛ね・・・つか被ったorz

>>507
おまえさ、急ぐ必要なさそうだからちょっとじっくり勉強しなおせ
05114902005/11/15(火) 01:50:02ID:EuotBK4K
>>508
はい。作成済みです。
0512nobodyさん2005/11/15(火) 01:52:55ID:???
DBサーバとphpが動いているサーバは同じでOK?
05134902005/11/15(火) 01:55:34ID:EuotBK4K
/home/xxxxx/pgsql
/user/local/apache2
にインストールしています。
はい。同じサーバです。
0514nobodyさん2005/11/15(火) 02:03:52ID:???
psql -l
は動く?
05154902005/11/15(火) 02:05:05ID:EuotBK4K
はい。うごきます。
05164902005/11/15(火) 02:06:10ID:EuotBK4K
phpinfo();
も大丈夫なんですが、pgsqlはエラーで、ダメみたいです。。。
0517nobodyさん2005/11/15(火) 02:07:32ID:???
俺はもう降りる。やってられん。
05184902005/11/15(火) 02:09:41ID:EuotBK4K
>>517
いろいろありがとうございました。
ちょっと自分で本屋に行って勉強してみます。
ほんとに感謝します^^
では。
0519nobodyさん2005/11/15(火) 02:15:58ID:???
急いで無ぇーw
0520nobodyさん2005/11/15(火) 02:16:01ID:???
もう見てないかな
portを5432
にしてどうかな?
0521nobodyさん2005/11/15(火) 02:23:55ID:???
はたから見てるとポートが怪しんだけど、わざわざ8040ってするぐらいだから
合ってんだろうなぁ。試しに、
psql --help
としてヘルプを出してみたときに、-p オプション説明のところに
defaultが書いてあると思うが、どうなってる?

いっそうの事、port=8040を渡さずに接続してみるのも手か?
0522nobodyさん2005/11/15(火) 02:31:57ID:???
localhostもportもよくわがんねってぐらいだからな〜
わざわざポートを変えるかって気もするけど。

pg使ったこと無いんだけど、portが開いてなくても
unknownになるですかね?
05235212005/11/15(火) 02:55:51ID:???
>>522
そなだ。

> server: unknown host name: localhost

ポートどころか、それ以前の問題っぽいな。
でも、localhostがunkownって...
0524nobodyさん2005/11/15(火) 03:39:25ID:2PUyzd2z
テンプレは読みましたが、質問の仕方がわからない程の初心者です。

DBの内容が
フィールド 1,2、3、4
レコードの内容 1=(A,B)
         2=(C,D)
         3=(E,F)
         4=(G,H)
だとすると、今の知識ではHTMLに書き出すとき、
A,B
C,D
E,F
G, H
と表示できるのですが、
C,B
E,D
G,F
と情報を斜めに表示するにはどうすればいいのでしょう? 
0525nobodyさん2005/11/15(火) 03:47:34ID:???
>>542
>>テンプレは読みましたが、質問の仕方がわからない程の初心者です。
日本語を勉強することをおすすめします。


フィールドとかレコードとか理解してる?
テーブルをExcelみたいな表形式で表現してみなよ
0526nobodyさん2005/11/15(火) 04:03:26ID:???
>>524
どっち?

  1 2 3 4  (←フィールド1からフィールド4)
1 A C E G  (←レコード1)
2 B D F H  (←レコード2)

  1 2      (←フィールド1とフィールド2)
1 A B      (←レコード1)
2 C D      (←レコード2)
3 E F      (←レコード3)
4 G H      (←レコード4)
05275242005/11/15(火) 04:10:48ID:2PUyzd2z
>>525
>>テンプレは読みましたが、質問の仕方がわからない程の初心者です。
テンプレは理解できても、PHPは理解できてないから上手く表現できないかもしれない。って言いたかったです><

>>526
後者です
0528nobodyさん2005/11/15(火) 04:14:25ID:???
>>526
レスありがとうございます。
フィールド→0843
レコード1→BAKA
レコード2→AHO
となっています。
0529nobodyさん2005/11/15(火) 04:38:47ID:???
>>524
phpが理解っていうよりプログラム言語一般の理解不足って感じがするけど

フィールドの2つ目はなんか入ってる必須&エラーとか考えずだけど

$result = mysql_query("select f1,f2 from table order by ?");
$f2 = "";
while ($row = mysql_fetch_array($result)) {
 if ($f2 == "") $f2 = $row["f2"];
 else {
   echo $row["f1"].",".$f2."<br>\n";
   $f2 = $row["f2"];
 }
}
でどう?
05305242005/11/15(火) 05:35:05ID:2PUyzd2z
出来ました!どうもありがとうございました
0531nobodyさん2005/11/15(火) 05:36:04ID:???
お前遅くというか、早いって言うかなんかがんばってるなw
0532nobodyさん2005/11/15(火) 06:53:34ID:???
>490
ひさびさに ワロスww


期待の大型新人ですね。
いいなあ、みんな。また、あえるかなw
05334082005/11/15(火) 10:08:42ID:???
>>418
遅くなりました。超ありがとうございます。
0534nobodyさん2005/11/15(火) 11:33:49ID:0AfHumhW
>>503が$hoge==FALSEはダメといってますが
こういう記述ってまずいんでしょうか。
自分も普通に使ってるときがあるんですが
どのような記述がよいのでしょうか。
0535nobodyさん2005/11/15(火) 11:40:56ID:???
>>534
!$hoge
とか?
0536nobodyさん2005/11/15(火) 11:44:30ID:???
うそん
もうちっとマトモな理由だと思ってROMしてるんですが…
0537nobodyさん2005/11/15(火) 11:47:05ID:???
>>534
$hoge = 0;
や
$hoge = "";
の時の動作をどうするかですね
$hoge == FALSE
だと$hoge が0や""でも該当するので好きではない
普通は
$hoge === FALSE
を使う
0538nobodyさん2005/11/15(火) 11:50:07ID:???
phpとmysqlで住所録みたいなのを作っています。
ロリポップを借りているのですが、データベースをいじるときに
phpmyadminではなく、直接クエリを発行するにはどうすればいいですか?
コマンドプロンプトでできますか?
0539nobodyさん2005/11/15(火) 11:54:56ID:???
>>538
phpのmysql関数じゃだめなの?
0540nobodyさん2005/11/15(火) 11:55:16ID:???
>>538
ちーっとは自分で調べようね
0541nobodyさん2005/11/15(火) 11:57:59ID:???
まぁ今回は優しく教えてあげよう

コマンドプロンプトって書いてるからwin版だと仮定して
c:\mysql\bin\mysql

いじょう
0542nobodyさん2005/11/15(火) 12:00:11ID:???
>>537
ほーーー
そんな記述方法があったとは勉強になりました。

でも503の言う吐き気のコードが直前のソースの、

$db=pg_connect(DB_CONN);
…
if($db==FALSE)
{
…
}

だとしたら、pg_connect()の返り値はFALSEかresouce型だから、0とか空文字とか
って可能性は無いしとりあえずは問題無いんじゃないのでしょうかと聞いてみる
0543nobodyさん2005/11/15(火) 12:07:34ID:???
>>541
ロリポってWindowsサーバーなの?
0544nobodyさん2005/11/15(火) 12:11:10ID:???
>>537
ありがとうございます。
よく解りました。
0545nobodyさん2005/11/15(火) 12:12:09ID:???
>>538
なぁ、マジメに聞くんだが、オマイはその質問がPHPと関係あると思ったから
このスレに書き込んでるんだよな?
どういう判断で、関係あると思ったのか教えてくれまいか。
0546nobodyさん2005/11/15(火) 12:12:20ID:???
>>543
ひぃぃ 見落としてたわ
まぁでもわかるでしょ。これでわからなければ一から出直せと。。。
0547nobodyさん2005/11/15(火) 12:14:19ID:???
>>546
つか、PHPとMySQLで住所録みたいなのを作っていて、
どうしてこういう質問なのだろう、ってとこだよな。
「作っていて」じゃなくて「作ろうとして」なんだとは思うが。

0548nobodyさん2005/11/15(火) 12:18:48ID:???
まぁphpMyAdminでもSQL直打ちはできるんだが。
最近、くだスレの方がまともな質問が多い気がするのは気のせい?
0549nobodyさん2005/11/15(火) 13:42:35ID:???
>>548
自分の質問がくだらない質問だとわからない奴ほど、くだらない質問をするからでしょうね
0550nobodyさん2005/11/15(火) 17:43:42ID:BTJCOqzC
FedoraCore 4
MySQL 4.1.14
PHP 5.0.4    を使ってます。

<?PHP
$conn = mysql_connect("localhost", "usr","pass");
mysql_select_db("kisop", $conn);
$res = mysql_query("SHOW TABLES",$conn);
if($res == TRUE){ print("データ獲得に成功しました。");
}else{ print("失敗"); }
?>

とやっても、ページが真っ白になるだけでMySQLに接続できません。
usrはきちんと作られており、また、PHPもSQL接続以外は問題なく動いています。
また、ODBCからの接続は問題なかったりします・・・
何が悪いのか、心当たりある方、ご教授ください。
0551nobodyさん2005/11/15(火) 17:51:23ID:???
>>550
とりあえず
error_reporting(E_ALL);
0552nobodyさん2005/11/15(火) 17:51:35ID:???
全角スペースらしきものが見えるが
エラー無視ってるわけじゃないだろうな
0553nobodyさん2005/11/15(火) 18:02:11ID:???
>>550
真っ白なページが表示されるのは、PHPレベルでのエラーが発生していると思われるので
MySQLがどうこうは関係ないはず。
php.iniかスクリプトで設定して、エラーをブラウザに表示させるところから始めよう。
スクリプトで設定する場合は、先頭に以下を記述。
ini_set('display_errors', true);
error_reporting(E_ALL);

それ以降の話だけど、$res を == TRUE で判定するのは危ないと思われ。
$res === FALSE(=== 3つであることに注意)の方が安全。
0554nobodyさん2005/11/15(火) 18:04:15ID:???
いや、エラー取得しろよ
■ このスレッドは過去ログ倉庫に格納されています