【PHP】質問スレッドpart24【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/11/01 04:09:15ID:???・新規質問の方は上げてください。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改行しないぞ、<br>だけなら改行するけど
0580nobodyさん
04/11/13 12:31:52ID:???0582nobodyさん
04/11/13 13:17:11ID:???独学でやってきたけど、ずーーっとecho使ってました。
そもそも使い方が違うのですか?
0583nobodyさん
04/11/13 13:17:57ID:???0584nobodyさん
04/11/13 13:31:11ID:???0585nobodyさん
04/11/13 13:32:38ID:???かなりワロタ
$a = print('A');
$a = echo('A');
前者は普通に動くけど、後者はエラー。
print 'A','B';
echo 'A','B';
後者は普通に動くけど、前者はエラー。
<?='A'?>
echoには省略形もある。
# これはまた別と考えるべきかもしれないけど
違いはこれぐらいだよ。同じと思うべきかと。
0590nobodyさん
04/11/13 16:50:56ID:???0591nobodyさん
04/11/13 17:29:26ID:6u/jhtaTもっと簡単で、やりたい事を直感的にプラグラミングできる言語が
開発されたらいいのになぁ。
0592nobodyさん
04/11/13 17:34:31ID:???簡単だと汎用性に乏しくなるし。。。
0593nobodyさん
04/11/13 17:44:13ID:???俺の悩みはPHPのマニュアル内の検索の仕方がわからない
右上の検索欄は「関数名」しか対応してないみたいだし
0596nobodyさん
04/11/13 18:57:25ID:???Perlで
$str =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
と置換するのと同じ事をPHPでやるにはどうしたらよいのでしょうか?
部分的に置換などの方法は分かるのですが、上記のように
:はA
;はB
<はC
というように対応させたいのですが、PHPにそのような関数が見つからずに困っています。
どなたかご存じないでしょうか?
トリップ変換の時に使うところね。strtr関数がそのまま使える。
http://f9.aaa.livedoor.jp/~fcafe/fbox/lib/trip.phps
# 懲りずに自分のソースを晒してみる
0601nobodyさん
04/11/13 20:37:07ID:???スピードで言えばただ単純に出力するなら作りの問題で、若干echoの方が早い。
(作りに問題があるからではない。要するに別名ではなく、別物だから)
あくまでも若干ね。
使い方については>>587
0602nobodyさん
04/11/13 21:20:10ID:???Simple Projectを削除(コンテンツは削除しないで)
New Projectで、PHPプロジェクトを選んで、そのSimple Projectと同じ名前で
プロジェクト作成、ワーニング出るが、それをよく読んで実行。
きっちり検証してないから、どうなってもしらんぞ。
CVSに放り込むなり、バックアップ取るなりしろよ。
0604570
04/11/13 21:56:56ID:???親切にどうもありがとう!
『新規でPHP Project を作って、コンテンツを”コピー”』で、できました。
0605596
04/11/13 22:12:47ID:???ソースまでいただけるとは思いませんでした。
$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:???しかし、それが気になるということは、ものすごいアクセス数なんだろうな。
0608nobodyさん
04/11/14 01:05:38ID:???0610nobodyさん
04/11/14 01:24:59ID:???0611nobodyさん
04/11/14 01:47:19ID:ojuplhFmcronの利用をしたくないか、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:???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:???0615613
04/11/14 02:30:12ID:???0616613
04/11/14 02:46:16ID:???PHPマニュアルより
読み込むファイルはまずカレントのワーキングディレクトリからの
相対パスとしてinclude_path で探され、それから、カレントのスクリプトの
ディレクトリからの相対パスとしてinclude_path で探されます。
…とあるのですが、これなら例に挙げたものも動きそうなんですが…??
もう少し悩んでみます。
0617nobodyさん
04/11/14 03:01:54ID:???0618613
04/11/14 03:13:19ID:vN4rnj6xもちろん試しました。
…下げてた。ごめんなさい。
0619nobodyさん
04/11/14 04:30:54ID:???呼び出し元からのパスで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の方が適切でしょ。
chdir関数でカレントディレクトリを統一してみ。
0622nobodyさん
04/11/14 11:34:10ID:TN0m6TVj正規表現なんですけど、|\\-|\\.の部分がよくわかりません
|はORのことですよね\\は¥を含むってことですか?
0623nobodyさん
04/11/14 11:49:27ID:???\\. → \. → .
0625nobodyさん
04/11/14 12:16:10ID:TN0m6TVj\\て¥のあとの文字を表示するんではないんですか?
PHPはじめてなもんですみません
¥^なら^とかって本にかいてたんで
0627613
04/11/14 13:39:18ID:???いや…メンテナンス性とか解り易さを求めているからソース分けしている訳で。
mainやsubからutil使う時、utilの中身なんて意識したくないでしょ。隠蔽っていうの?
…と思ってたのですが、PHPではそういう考え方はしないみたいですね。
諦めて別の方法を考えます。皆さんありがとうございました。
0628613
04/11/14 13:40:40ID:???お邪魔しました。
0629nobodyさん
04/11/14 13:48:02ID:???C言語でもincludeの元にincludeとか当たり前だし。
階層化してるんだったらそれでいいと思う
0630nobodyさん
04/11/14 14:08:21ID:???0631620
04/11/14 14:13:53ID:???だからよぅ…
あなたみたいな設計ももちろんする場合があるし、
そんな事以前に " require_once() "つうのがあるって言ってるじゃん(涙
0633nobodyさん
04/11/14 14:56:51ID:???他言語と同じ平凡なパス管理なんだけど。
カレントディレクトリを設定してるのは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みたいにディレクトリをハード
コーディングしないよう定数作るとか、正規のライブラリを使うとかいろいろあるだろ
うから好きにやればいいんだが、よほど多くのファイルが構造化されていない限り
インターフェイスとなるカレントスクリプトからライブラリを操作するという設計に
変更するべきだろうな。
0638nobodyさん
04/11/14 16:16:44ID:/FGTdaOrhtttpsのものは何か特別なことをしなくてはいけないのでしょうか?
それとも出来ないのでしょうか?
0639nobodyさん
04/11/14 16:17:44ID:???0640nobodyさん
04/11/14 16:19:40ID:???/ || ̄ ̄|| <⌒ヽ )) < >>636 はてさて、
| ||__|| < 丿 | どこを縦に読みゃいいんだ?
| ̄ ̄\三⊂/ ̄ ̄ ̄/ \___________
| | ( ./ /
0641nobodyさん
04/11/14 16:20:21ID:???何が楽しいのかね。
0643nobodyさん
04/11/14 16:21:30ID:???0644nobodyさん
04/11/14 16:22:35ID:Do7sGTWF0646nobodyさん
04/11/14 16:27:52ID:???このスレに憑き物がいるのは事実だと思うが、
普通人が消えた今ここにいるそういう連中は正常
なんじゃなかろうか。何も楽しんでいないんじゃな
かろうか。
0648nobodyさん
04/11/14 16:29:52ID:???pathinfo()って関数名やばくね?やばくね?
0649nobodyさん
04/11/14 16:32:01ID:???まあこのろくろ首でもみてまったりようよ。
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:???俺に分からないような質問をもってこいよ池沼質問者ども
0652nobodyさん
04/11/14 16:39:21ID:???0653nobodyさん
04/11/14 17:01:12ID:TN0m6TVj$str = "94852-769493"
if(ereg("[0-9\-]",$str2))
この場合だと\\-じゃなくて\-なんだけど
\\-になるときと\-になる違いていうのはなんですか?
参考書しらべまくってるんだけど正規表現あんまり詳しくのってないんです
ご存知のかたいたら教えてください。お願いします。
""で囲む時の\の動作が一定じゃないのよね。
"\\-" == "\-"
"\\n" != "\n"
echoして調べてみるべし。
0655nobodyさん
04/11/14 20:19:07ID:???マニュアルにも載っているのだが、
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:???おかずにより、負荷がかなりことなります。
0658nobodyさん
04/11/14 22:01:51ID:???普通はサーバのログから解析するもんだと思うが。
特に負荷云々を気にするぐらいなら。
サーバでログ出力させた方が遥かに負荷が少ない。
0659nobodyさん
04/11/14 22:15:59ID:???まぁたしかにそうなのかも・・・・ ありがとう。
0662nobodyさん
04/11/14 23:59:40ID:???HTMLのフォームでやたら<hidden>が多くなってしまいました。
なんか、見ためかっちょ悪いです。
0663nobodyさん
04/11/15 00:10:28ID:???0664nobodyさん
04/11/15 00:29:48ID:???そういう場合はしょうがないのでしょうか。
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:???aタグにsrcなんて属性あったっけ?
つーか、タグが滅茶苦茶だ。開いてないのに閉じてるし。
まあ、どうでもイイコトはおいといて、
$cdの行をコメントアウトして、$cdirに自分のホームディレクトリを指定して他は"そのまま"動かしたけど
ちゃんと、ディレクトリのみリンクが表示されたよ。
変数を一個一個echoして表示させてみたら?
例えば、ifの前後に$dnameをechoしてみるとか。
#環境も書かないでどうしたいのだろうか?
0669nobodyさん
04/11/15 10:03:08ID:???hidden の値がクライアント側で変化するか否かできまるんじゃない?
変化しないなら、サーバ側で、$_SESSIONで代替できるだろうし。
変化するなら、使わざるを得ないと。
0670nobodyさん
04/11/15 18:42:53ID:ObsXoKC2判断することって出来ますか?
0673nobodyさん
04/11/15 19:26:11ID:???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でやってないのは、ひとつの言語でエンコードが複数あるなんて
言語(アジア圏)は余りないからでしょ。
0674673
04/11/15 19:28:05ID:???エンコーディングなんで注意してね。(つまりMySQL4.1以降)
0675673
04/11/15 19:31:47ID:???×:SHOW STATUS
○:SHOW VARIABLES
0676670
04/11/15 19:44:03ID:???ありがとです。
■ このスレッドは過去ログ倉庫に格納されています