【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
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:???ありがとです。
0677nobodyさん
04/11/15 19:44:59ID:HnT7CqLI<input type=hidden name=mode value="weq">
<input type=hidden name=name value=ore>
<input type=hidden name=id value=042>
<input type=image src='http://aaa.com/img/bbb.gif' width=60 height=30'>ddd</form>
↑こんな感じのCGIへ送信するフォームを
例えば30分ごとに繰り返したい場合 、
前後をどんな風にすればいいでしょうか。
0679nobodyさん
04/11/15 19:58:57ID:???違うフォームを30分ごとに生成すんのか?
初心者にも判るように正確に丁寧に質問してください。
0680nobodyさん
04/11/15 21:09:53ID:???MySQLで日本語のソーティングがうまくいかないときは
Binaryモードに変更すればいい。たいていの場合は
解決できると思う。
0684665
04/11/15 22:21:09ID:Uy1hSbYjRedHat9
PHP4です。
>666さん
私も、ホームディレクトリでは動きました。
しかし、その下の「/homedir/hoge」まで記述すると何もとらなくなってしまいます。
ところが、「is_dir」を「!is_dir」にすると、ディレクトリとともにhtmlファイルもとってきてしまいました。
ためしに、hoge.jpgとダミーのファイルを置いたらそれもとってきてしまいました。
まぁ当然といえば当然なのですが、なぜ「!is_dir」でディレクトリまで取得するのがわかりません。
ソースを元に戻して、hoge配下にindex.htmlファイルとDirディレクトリを置いて、
if文の前後にechoを記述したところif文の前に書いたecho文に「...index.htmlDir」
と出てきてしまいました。これは、どういう意味なのでしょうか?
また、どうすれば、「Dir」だけを取り出せるのでしょうか
お知恵をお貸しください。
0685nobodyさん
04/11/15 22:23:45ID:Uy1hSbYjありがとうございます。
>666, 667 html部分はコピペで気づかずそのまま利用してしまいました。
申し訳ないです。<font>もコピーするとき切れてしまいました。・・・orz
0686nobodyさん
04/11/15 22:29:31ID:???ΩΩΩ ナンダッテー!!
0687nobodyさん
04/11/15 22:47:05ID:???まだ解決してなかったのかい。
例えば
$dname = readdir($cdir)
この $dname はパスを含まないファイル名かディレクトリ名。
だからファイル操作する時の引数には $cdir.$dname にしないとだめだ。
>なぜ「!is_dir」でディレクトリまで取得するのがわかりません。
存在しないファイル名を is_dir で判定してたら全部 false になって当然。
0688nobodyさん
04/11/15 23:59:08ID:7AtpKkGf以下のような感じで書きました。
function test(){
$num = func_num_args();
if ($num > 0){
$a = func_get_arg();
}
if ($num > 1){
$b = func_get_arg();
}
if ($num > 2){
$c = func_get_arg();
}
}
ifの羅列がいまいちやぼったい気がします。
もっとエクセレントな書き方はないものでしょうか?
0689nobodyさん
04/11/16 00:05:42ID:2ZViTd8dありがとうございます。
パスをつけて実行したらうまくいきました。
パスが必要だったとは・・・orz
感謝感謝です。
これで動かないことはない、って感じ。
指定されてないものにはNULLが入ります。
function test() {
list($a, $b, $c) = func_get_args();
}
0691nobodyさん
04/11/16 00:58:36ID:???$a,$b,$c…ってのに納めようとするから野暮ったくなってるんでは?
なんかに格納したいんなら、素直に、配列に落とし込めば良いと思う。
あるいは、最大で3つしか引数を取らないって言うなら、3引数の関数作って
デフォルトを与えた方が良いと思う。
0692nobodyさん
04/11/16 01:48:09ID:L8Qhj36n同じ制御構造で代入以外の操作をしたいなら
switch(func_num_args()){
case 1:
/* 引数1つ以上のときの操作 */
case 2:
/* 引数2つ以上のときの操作 */
・・・
case n:
/* 引数nのときの操作 */
break;
default:
/* その他 */
}
まぁ、>688の場合は>>690
0693nobodyさん
04/11/16 02:42:05ID:???なるほど!勉強になります。
690さんの方法で行こうと思います。ちょうどNULLが入って欲しかったので!
ありがとうございました。
0695nobodyさん
04/11/16 10:31:57ID:kHelo3UAこんなときの対処法を教えていただきたいのですが。
環境は Linux+PHP4+Smarty+Apache+MySQL4.0です。
文字列検索をクエリーで行い、結果のリストを表示します。
リストはページングします。
select * from tablename where search_text like '%入力値%' limit x, y;
みたいな検索をするのですが、
対象データが10万件とかを超えるような場合、
結果表示が遅いことが想像できると思います。
なにも考えずに作ると、
ページを移動する毎に(limit指定のみ変わった)
重いクエリーを実行する必要があるため、
パフォーマンスの問題があります。
最初の一回のクエリーは重くてもいいとして、
ページングを軽くする方法はないでしょうか?
0696nobodyさん
04/11/16 11:12:45ID:t4iPftE+PHP4.3.4
ですが、
セッンションを登録すると
内容が、すべて、Nになっているのですが、
何かヒントございませんでしょうか
よろしくお願いします
$s_start_time = strftime("",time()); ←ココでは、$s_start_timeに現在時刻(文字列)がきちんと入っている
session_start(); の後、
session_register("start_time");
として、trueが帰ってくる
結果をみるために、プリントすると
print "[".trim($start_time)."]"; ←こちらは、現在日付時刻が入っている
print "[".trim($_SESSION["start_time"])."]";
←コチラは、空文字になっている
■ このスレッドは過去ログ倉庫に格納されています