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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/11/01 04:09:15ID:???
・PHP全般の質問スレです。 
・新規質問の方は上げてください。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 
0577nobodyさん04/11/13 12:13:58ID:Yc7DSHDt
でも多言語だと¥nだけで改行するけどphpは¥nだけだと
改行しないぞ、<br>だけなら改行するけど
0578nobodyさん04/11/13 12:17:42ID:???
>>576
0579nobodyさん04/11/13 12:31:22ID:???
>>575
釣りでしょ
0580nobodyさん04/11/13 12:31:52ID:???
ヒアドキュメントってナンデスカァ?(。・_・。)キリリッ
0581nobodyさん04/11/13 12:59:14ID:???
>>577

× phpは¥nだけだと改行しないぞ
○ htmlは¥nだけだと改行しないぞ
0582nobodyさん04/11/13 13:17:11ID:???
htmlなんかを出力する場合、echoとprintどっちがいいの?
独学でやってきたけど、ずーーっとecho使ってました。
そもそも使い方が違うのですか?
0583nobodyさん04/11/13 13:17:57ID:???
くだ質でやれつってんだろ池沼
0584nobodyさん04/11/13 13:31:11ID:???
同じだろハゲ
0585nobodyさん04/11/13 13:32:38ID:???
>545-546
かなりワロタ
0586nobodyさん04/11/13 13:47:38ID:???
>>573
少し前に見たぞ、多分前スレくらい

>>575
ソース覗けばいいと思うよ
0587 ◆.jC7ANgFY. 04/11/13 14:29:12ID:???
>>582
$a = print('A');
$a = echo('A');
前者は普通に動くけど、後者はエラー。

print 'A','B';
echo 'A','B';
後者は普通に動くけど、前者はエラー。

<?='A'?>
echoには省略形もある。
# これはまた別と考えるべきかもしれないけど

違いはこれぐらいだよ。同じと思うべきかと。
0588KB04/11/13 15:00:00ID:???
>>587

そんな違いがあったんだ。
といってもそんな使い方する場面が思い浮かばない^^;
0589nobodyさん04/11/13 16:02:53ID:???
>>587
80へぇ〜を超えましたので記念に
0590nobodyさん04/11/13 16:50:56ID:???
銀の脳がプログラムのお手伝いをします。
0591nobodyさん04/11/13 17:29:26ID:6u/jhtaT
たしかにPHPはPerlよりは初心者にも分かりやすいけど、
もっと簡単で、やりたい事を直感的にプラグラミングできる言語が
開発されたらいいのになぁ。
0592nobodyさん04/11/13 17:34:31ID:???
RubyかSmartyテンプレートかな
簡単だと汎用性に乏しくなるし。。。
0593nobodyさん04/11/13 17:44:13ID:???
PHPはマニュアルが整ってるからマニュアル片目に作るといいね

俺の悩みはPHPのマニュアル内の検索の仕方がわからない
右上の検索欄は「関数名」しか対応してないみたいだし
0594nobodyさん04/11/13 17:52:24ID:???
>>593
漏れはもうググッてるよw
そっちのほうが早い
0595nobodyさん04/11/13 18:03:14ID:???
>>593
そこでManualをNamazuで構築ですよ


その代わりわかちガキだから半端なところで関数名切ると出てこないけど
0596nobodyさん04/11/13 18:57:25ID:???
PHP4+Apacheの環境です。

Perlで

$str =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;

と置換するのと同じ事をPHPでやるにはどうしたらよいのでしょうか?
部分的に置換などの方法は分かるのですが、上記のように
:はA
;はB
<はC

というように対応させたいのですが、PHPにそのような関数が見つからずに困っています。
どなたかご存じないでしょうか?
0597nobodyさん04/11/13 19:15:51ID:???
>>593
winHLEP形式じゃだめなのか?
0598nobodyさん04/11/13 19:43:06ID:???
>>596
preg_replace
0599 ◆.jC7ANgFY. 04/11/13 20:11:21ID:???
>>596
トリップ変換の時に使うところね。strtr関数がそのまま使える。
http://f9.aaa.livedoor.jp/~fcafe/fbox/lib/trip.phps
# 懲りずに自分のソースを晒してみる
060058204/11/13 20:29:08ID:???
>>587
ありがトン、するってぇと好みということですね。
0601nobodyさん04/11/13 20:37:07ID:???
>>582
スピードで言えばただ単純に出力するなら作りの問題で、若干echoの方が早い。
(作りに問題があるからではない。要するに別名ではなく、別物だから)
あくまでも若干ね。
使い方については>>587

0602nobodyさん04/11/13 21:20:10ID:???
>>570
Simple Projectを削除(コンテンツは削除しないで)
New Projectで、PHPプロジェクトを選んで、そのSimple Projectと同じ名前で
プロジェクト作成、ワーニング出るが、それをよく読んで実行。

きっちり検証してないから、どうなってもしらんぞ。
CVSに放り込むなり、バックアップ取るなりしろよ。
060360204/11/13 21:30:58ID:???
>>570
あ、そうだ、俺なら新規でPHP Project 作って、コンテンツを”コピー”するな。
060457004/11/13 21:56:56ID:???
>602

親切にどうもありがとう!
『新規でPHP Project を作って、コンテンツを”コピー”』で、できました。
060559604/11/13 22:12:47ID:???
>>598さん、>>599さんありがとうございます。

ソースまでいただけるとは思いませんでした。

$salt = ereg_replace("[^\.-z]", ".", $salt);

この部分まではなんとか関数調べて出来たんですが

$salt = strtr($salt, ":;<=>?@[\\]^_`", "ABCDEFGabcdef");

この関数まで見つけられませんでした。^^;

とりあえず実装してみて、キャップ機能は自分で移植できそうなのでがんばります。
ほんとにありがとうございました。
0606nobodyさん04/11/14 00:53:26ID:???
質問させて下さい。よろしくおねがいします。
PHP4+Apacheの環境です。

私はウェブサイトのトップページをphp(index.php)で作っているのですが、
アクセスする度にMYSQLに接続しDBからデータを
引っ張ってきている為、トップページが少し重くなっています。

それを解消する為にindex.phpを実行した結果をindex.htmlとして
吐き出して、訪問者にはindex.htmlという静的なページを見てもらえれば
サイトが軽くなると考えました。

自分でindex.phpにアクセスして
そのページのソースをコピーしてindex.htmlとして
保存すれば簡単なのですが、これを自動で出来る方法は
ありませんか?

一定時間毎にindex.phpからindex.htmlを吐き出す方法はないものでしょうか。
0607nobodyさん04/11/14 00:58:11ID:???
cronでwget?
しかし、それが気になるということは、ものすごいアクセス数なんだろうな。
0608nobodyさん04/11/14 01:05:38ID:???
一定時間毎に吐き出すぐらいなら記事追加時とか、変更があったときだけ吐き出せばいい
0609nobodyさん04/11/14 01:07:17ID:???
>>606
やはりcronかな?
wget使う使わないは好みで
0610nobodyさん04/11/14 01:24:59ID:???
単にindex.phpを簡単なスクリプトにして一定時間後に踏んだ人だけ更新用のスクリプトを読み込ませればいいじゃん。
0611nobodyさん04/11/14 01:47:19ID:ojuplhFm
>>606

cronの利用をしたくないか、cronの利用ができない場合は、
Smartyテンプレートを利用することをおすすめします。
Smartyのキャッシュ機能を利用することで、
例えば、キャッシュが有効な間はDBへのアクセスなどをスキップさせる
事ができます。

require_once("Smarty.class.php");

$smarty =& new Smarty();
$smarty->template_dir = "./templates/";
$smarty->compile_dir = "./templates_c/";
$smarty->caching = 2;
$smarty->compile_check = true;
$smarty->cache_lifetime = 60; // キャッシュの有効時間を1分に設定

$template = "index.tpl";

if(!$smarty->is_cached($template)) {
// このへんにDBへのアクセスとか
// $smarty->assign("変数名", "値");を行う
// キャッシュの有効期限が切れるまでは、ここは実行されない
}

// 画面表示
$smarty->displary($template);

※適当に書いたのでこのままでは動かないかもしれないけど、
雰囲気的にはこんな感じ。
0612nobodyさん04/11/14 01:51:34ID:???
mmcacheだかなんだか、使えないの?
0613nobodyさん04/11/14 02:05:55ID:???
素人なんで教えてください。

【やりたい事】
以下のファイルが存在します。
main.php
sub/sub.php
util/util.php
config/config.php
main.phpとsub.phpはそれぞれ、util.phpを使用します。
util.phpは、config.phpを使用します。

【やってみた事】
main,subそれぞれで、requireを使ってutil.phpを呼びました。(相対パス)
util.phpでconfig.phpを呼びました。(相対パス)

【結果と疑問点】
subは正常に動作しました。
mainは、utilでのconfigの呼び出しに失敗しました。
requireで読み込んだutilが、mainやsubの場所で動いているから
こうなるんだろうという事までは理解したのですが、
この仕組みを意図したとおりに動かすにはどうすれば良いでしょう?
reauireを使うのがそもそも誤りかと思ったのですが、
手元のリファレンスには適切な関数が見当たりません…。

ちなみに当方Java経験者(初心者だけど)で、
requireをimportの乗りで使ってました…(汗)
0614nobodyさん04/11/14 02:08:10ID:???
include
061561304/11/14 02:30:12ID:???
includeとrequireはエラーの扱い方が違うだけとありましたが…。
061661304/11/14 02:46:16ID:???
includeについても調べてみました。

PHPマニュアルより
読み込むファイルはまずカレントのワーキングディレクトリからの
相対パスとしてinclude_path で探され、それから、カレントのスクリプトの
ディレクトリからの相対パスとしてinclude_path で探されます。

…とあるのですが、これなら例に挙げたものも動きそうなんですが…??
もう少し悩んでみます。
0617nobodyさん04/11/14 03:01:54ID:???
試せばいいだろ
061861304/11/14 03:13:19ID:vN4rnj6x
>617さん
もちろん試しました。

…下げてた。ごめんなさい。
0619nobodyさん04/11/14 04:30:54ID:???
>>613
呼び出し元からのパスでrequireなりinclude。
ていうかさ、呼び出し先でまたrequireとかあったら、メンテナンス性も糞もないと思うけど。
何のためにソース分けてるのか意味分からん。

main.php
require('util/util.php');
require('config/config.php');

sub/sub.php
require('../util/util.php');
require('../config/config.php');

ソースの見易さやメンテナンス性からいっても、requireはソースの先頭でまとめて宣言すれば?
メモリ節約とかでの例外はあるけどね。

あとincludeとrequireの違いは、↓読め
http://jp2.php.net/manual/ja/function.include.php

今回のケースではrequireの方が適切でしょ。
0620nobodyさん04/11/14 10:01:14ID:???
>>613
require_once()で、解決。
0621 ◆.jC7ANgFY. 04/11/14 10:48:03ID:???
>>613
chdir関数でカレントディレクトリを統一してみ。
0622nobodyさん04/11/14 11:34:10ID:TN0m6TVj
^([a-z0-9_]|\\-|\\.)
正規表現なんですけど、|\\-|\\.の部分がよくわかりません
|はORのことですよね\\は¥を含むってことですか?
0623nobodyさん04/11/14 11:49:27ID:???
\\- → \- → -
\\. → \. → .
0624nobodyさん04/11/14 11:50:58ID:???
>>622
^ ([-.a-z0-9_])
と同じじゃないの?
0625nobodyさん04/11/14 12:16:10ID:TN0m6TVj
>>623
\\て¥のあとの文字を表示するんではないんですか?
PHPはじめてなもんですみません
¥^なら^とかって本にかいてたんで
0626nobodyさん04/11/14 13:10:05ID:???
>>625
PHPパーサが\\を\にするから正規表現パーサには\.が渡される
062761304/11/14 13:39:18ID:???
>619
いや…メンテナンス性とか解り易さを求めているからソース分けしている訳で。
mainやsubからutil使う時、utilの中身なんて意識したくないでしょ。隠蔽っていうの?

…と思ってたのですが、PHPではそういう考え方はしないみたいですね。
諦めて別の方法を考えます。皆さんありがとうございました。
062861304/11/14 13:40:40ID:???
訂正。別の方法ってか設計自体やりなおします、の間違いでした。
お邪魔しました。
0629nobodyさん04/11/14 13:48:02ID:???
別にいいんじゃないの?
C言語でもincludeの元にincludeとか当たり前だし。
階層化してるんだったらそれでいいと思う
0630nobodyさん04/11/14 14:08:21ID:???
スコープ内でinclude使っといてどこがimportの乗りなんだか
063162004/11/14 14:13:53ID:???
>>627
だからよぅ…

あなたみたいな設計ももちろんする場合があるし、
そんな事以前に " require_once() "つうのがあるって言ってるじゃん(涙
0632nobodyさん04/11/14 14:40:04ID:???
>>631
読み込むのがProcedure fileだったりしてw
0633nobodyさん04/11/14 14:56:51ID:???
ん?Importは依存ライブラリの隠蔽なんかしないぞ。
他言語と同じ平凡なパス管理なんだけど。

カレントディレクトリを設定してるのはOSね。
よくわからんのなら__file__定数を使って解決つーのが手っ取り早い。
includeんとこにも載ってるが。

あと一般論として野良ライブラリはブラックボックス化するとメンテに
手間かかるよ。
0634nobodyさん04/11/14 14:59:41ID:???
> ライブラリはブラックボックス化〜

ファイルの依存関係をクライアントプログラムから隠すつーことに限ってね。
0635nobodyさん04/11/14 15:22:31ID:???
まぁ、なんだ。
纏めるとこういうことか。

[前提条件、つーか仕様]
include,require等は、最初に起動したスクリプトからの
相対パスで指定しなければならない

[実際の利用方法]
ネストしてinclude,requireする場合は
・_FILE_を使って上記の相対パスに変換する。
・chdir()を使う。
・require_onceを使う。

require_onceを言ってる人は、
・それぞれのファイルの中で そのファイルからの相対パスをrequire_onceすりゃいい。
・ネストが1つ上のファイルでもrequire_onceするのを忘れるな。
・その結果、一番最初に起動するスクリプトの指定が有効になりうまく動く。
ってことでいいのかな。
0636nobodyさん04/11/14 15:54:38ID:???
ライブラリならグローバルスコープでインクルードするに決まってるんだから
require_onceしとけば十分だろ。ディレクトリ固定なら__autoloadを使う手もあるが、
どのみちディレクトリ構造指向ならimport文と同じことだからネストする意味が
全く無い気もするな。インクルード用のコマンダこさえるのに比べれば何ぼかマシ
かも知れんが。手段はset_include_path使うとか、Cみたいにディレクトリをハード
コーディングしないよう定数作るとか、正規のライブラリを使うとかいろいろあるだろ
うから好きにやればいいんだが、よほど多くのファイルが構造化されていない限り
インターフェイスとなるカレントスクリプトからライブラリを操作するという設計に
変更するべきだろうな。
0637nobodyさん04/11/14 16:16:08ID:???
>>636
トリみたいに騒ぐなw
0638nobodyさん04/11/14 16:16:44ID:/FGTdaOr
httpのWEBファイルはファイルとして簡単に取得出来るのですが
htttpsのものは何か特別なことをしなくてはいけないのでしょうか?
それとも出来ないのでしょうか?
0639nobodyさん04/11/14 16:17:44ID:???
どこを縦よm(ry
0640nobodyさん04/11/14 16:19:40ID:???
   ___    クルッ…   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  / || ̄ ̄|| <⌒ヽ ))  < >>636 はてさて、
  |  ||__|| <  丿    | どこを縦に読みゃいいんだ?
  | ̄ ̄\三⊂/ ̄ ̄ ̄/  \___________
  |    | ( ./     /
0641nobodyさん04/11/14 16:20:21ID:???
アホネタ投下してんの同一人物だろ。
何が楽しいのかね。
0642nobodyさん04/11/14 16:21:22ID:???
>>641
ありえない質問に普通に回答が帰ってくるこのスレの回答者のありえなさが
0643nobodyさん04/11/14 16:21:30ID:???
636=641
0644nobodyさん04/11/14 16:22:35ID:Do7sGTWF
どうでもいいけど鳥って何だ
0645nobodyさん04/11/14 16:23:03ID:???
>>644
おまい
0646nobodyさん04/11/14 16:27:52ID:???
>>641
このスレに憑き物がいるのは事実だと思うが、
普通人が消えた今ここにいるそういう連中は正常
なんじゃなかろうか。何も楽しんでいないんじゃな
かろうか。
0647nobodyさん04/11/14 16:29:03ID:???
>>644
触れるな
0648nobodyさん04/11/14 16:29:52ID:???
ちょっと質問なんだけどさあ
pathinfo()って関数名やばくね?やばくね?
0649nobodyさん04/11/14 16:32:01ID:???
>>641-648
まあこのろくろ首でもみてまったりようよ。
http://www.tk3.speed.co.jp/gewa/mi-ke/save0000.jpg
0650nobodyさん04/11/14 16:35:03ID:???
鳥が騒ぐと言うのは交尾を表す慣用表現。
0651nobodyさん04/11/14 16:37:26ID:???
inlcudeだのなんだのマニュアルレベルばっかだな
俺に分からないような質問をもってこいよ池沼質問者ども
0652nobodyさん04/11/14 16:39:21ID:???
inlcude = インルキュード
0653nobodyさん04/11/14 17:01:12ID:TN0m6TVj
>>626
$str = "94852-769493"
if(ereg("[0-9\-]",$str2))

この場合だと\\-じゃなくて\-なんだけど
\\-になるときと\-になる違いていうのはなんですか?
参考書しらべまくってるんだけど正規表現あんまり詳しくのってないんです
ご存知のかたいたら教えてください。お願いします。
0654 ◆.jC7ANgFY. 04/11/14 18:34:04ID:???
>>653
""で囲む時の\の動作が一定じゃないのよね。
"\\-" == "\-"
"\\n" != "\n"
echoして調べてみるべし。
0655nobodyさん04/11/14 20:19:07ID:???
>>653
マニュアルにも載っているのだが、
ttp://jp.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double
>この他の文字をエスケープしようとした場合には、バックスラッシュも出力されます!

\が出力されるのは、-や.がエスケープシーケンスに含まれていないのがその理由
0656nobodyさん04/11/14 21:28:42ID:???
すみません。サイトにアクセス解析を置きたいのですが、
まぁ自作スクリプトのヘタレ具合は別として、TOPページを
index.shtml としてperlでシコシコ書いたものと、
index.php としてphpでシコシコ書いたものでは、どちらが負荷が大きいんでしょう?

全部のページを解析しようとすると、全ページ XXX.php に?
コレって負荷大きすぎないんですか?

ヘタレですけど、がんばりますんで よろしくお願いします。
0657nobodyさん04/11/14 21:56:42ID:???
phpでシコシコ書いたものは
おかずにより、負荷がかなりことなります。
0658nobodyさん04/11/14 22:01:51ID:???
>>656
普通はサーバのログから解析するもんだと思うが。
特に負荷云々を気にするぐらいなら。
サーバでログ出力させた方が遥かに負荷が少ない。
0659nobodyさん04/11/14 22:15:59ID:???
ミもフタもない答えが・・・・

まぁたしかにそうなのかも・・・・  ありがとう。
0660 ◆.jC7ANgFY. 04/11/14 23:15:06ID:???
phpの方が一般的にはやいといわれているよ。
0661nobodyさん04/11/14 23:22:28ID:???
>>656
普通にHTMLで書いて<img src=解析スクリプト>を埋め込んだらダメなのかと
0662nobodyさん04/11/14 23:59:40ID:???
アプリPHPで組んでいるんですけど
HTMLのフォームでやたら<hidden>が多くなってしまいました。
なんか、見ためかっちょ悪いです。
0663nobodyさん04/11/15 00:10:28ID:???
そろそろセッションの使い方を覚えてもいい頃やね
0664nobodyさん04/11/15 00:29:48ID:???
MVCでVは<hidden>の値で分岐処理などおこなっています。
そういう場合はしょうがないのでしょうか。
0665nobodyさん04/11/15 01:11:07ID:Uy1hSbYj
すいません。

以下のように、ディレクトリ名を取得してアンカーを指定したいのですが、
ディレクトリ以外のもの、(ディレクトリの中には、htmlファイル以外を置かないのでhtmlファイル)
をとってきてしまい困っています。

$cd = $_REQUEST['path'];
$cdir = opendir("/myhome$cd/");
while(($dname = readdir($cdir)) !==false){
if(is_dir($dname) && $dname != "." && $dname != ".."){
print "<b><a href=$dname/index.html target=main src $dname/index.html>$dname</a> </b></font>";
}
}

$dnameがディレクトリのときだけアンカーをつけて表示させるように記述しているのに
どうしても、htmlファイルを取ってきてしまいます。どうすれば、ディレクトリ名だけを取るのか
ご存知の方、お知恵をお貸しください、
0666nobodyさん04/11/15 02:23:42ID:???
>>665
aタグにsrcなんて属性あったっけ?
つーか、タグが滅茶苦茶だ。開いてないのに閉じてるし。
まあ、どうでもイイコトはおいといて、
$cdの行をコメントアウトして、$cdirに自分のホームディレクトリを指定して他は"そのまま"動かしたけど
ちゃんと、ディレクトリのみリンクが表示されたよ。

変数を一個一個echoして表示させてみたら?
例えば、ifの前後に$dnameをechoしてみるとか。

#環境も書かないでどうしたいのだろうか?
0667nobodyさん04/11/15 02:47:43ID:???
>>666
>aタグにsrcなんて属性あったっけ?
ないよ。
0668nobodyさん04/11/15 09:45:52ID:???
>>667 ちょうーまじ
0669nobodyさん04/11/15 10:03:08ID:???
>>664
hidden の値がクライアント側で変化するか否かできまるんじゃない?

変化しないなら、サーバ側で、$_SESSIONで代替できるだろうし。
変化するなら、使わざるを得ないと。
0670nobodyさん04/11/15 18:42:53ID:ObsXoKC2
PHPから接続したMySQLがSJIS・EUCどちらの文字コードをサポートしているかを
判断することって出来ますか?
0671nobodyさん04/11/15 18:57:22ID:???
>>670
出来たら phpMyAdmin はとっくに実装してるだろうがな……
067267004/11/15 19:07:14ID:???
>>671
ですよね…
無理矢理、MySQLの設定ファイルを読み込んでっていうのもあるけど、現実的じゃない orz
0673nobodyさん04/11/15 19:26:11ID:???
>>670
MySQLサーバやクライアントのバージョンも、
PHPのバージョンも書いて無いので回答に困る
(バージョンによる差異の大きいところだから)が、
一般的にはSHOW STATUSで取れる

最近では関数も増えて
http://www.php.net/manual/ja/function.mysql-stat.php
http://www.php.net/manual/ja/function.mysql-client-encoding.php
なども使える。

phpmyadminでやってないのは、ひとつの言語でエンコードが複数あるなんて
言語(アジア圏)は余りないからでしょ。
067467304/11/15 19:28:05ID:???
mysql-client-encodingで取れるのは、クライアント側の
エンコーディングなんで注意してね。(つまりMySQL4.1以降)
067567304/11/15 19:31:47ID:???
ゴメン。
×:SHOW STATUS
○:SHOW VARIABLES
067667004/11/15 19:44:03ID:???
あ、SHOW VARIAVLES LIKE 'character\_set%';で取得できました。
ありがとです。
■ このスレッドは過去ログ倉庫に格納されています