トップページ⇒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辺り
0175nobodyさん2005/11/05(土) 16:21:46ID:???
$_SESSION['xxx']
だけ生存期間を短くしたいのですが、
どうすればいいのでしょうか
誰かお願いします
0176nobodyさん2005/11/05(土) 16:54:41ID:???
>>175
手製のガーベージコレクタを動かして
短い期間で消す。
0177nobodyさん2005/11/05(土) 18:25:59ID:???
すいませんがアカウント作成まわりで質問があります。

1.メールアドレスを入力して送信
2.メールにURLが表示
3.URLをクリックするとアカウント登録完了

としたいのですが、URLを

***.php?[メールアドレス][日時][アドレスと日時のハッシュコード]

という風にしてハッシュの整合性をチェックして
アカウント作成、という風にしたら
何か問題があると思いますか?
ハッシュが解読されない限り大丈夫だとは思うんですが、何か心配です
0178nobodyさん2005/11/05(土) 18:26:47ID:???
日時が入ってるのは、期限を1日とか決めたいからです
0179nobodyさん2005/11/05(土) 18:36:03ID:???
ハッシュの元を含めるのはどうかと思う
0180nobodyさん2005/11/05(土) 18:48:45ID:???
うーん、でもAさんとBさんが同時に仮登録した場合
どっちかを見分ける必要がありますよね

鍵付きのハッシュで鍵を長くしても駄目でしょうか
0181nobodyさん2005/11/05(土) 19:12:30ID:???
>>180
1.メールアドレスを入力させる
2.ユーザはメールアドレスを入力しPOSTする
3.システムがメールアドレスからハッシュを取得する
4.システムはハッシュ値と日付をどこかに保存する(DBとか)
5.システムが
 http://example.com/hoge.php?[ハッシュ]
 を含んだメールを入力されたアドレスに送信する。
6.ユーザが上記のアドレスにアクセスする
7.システムは保存されたハッシュを検索する
以下略
0182nobodyさん2005/11/05(土) 19:29:17ID:???
ハッシュのアルゴリズムってmd5使ってる? sha1? オリジナル?
0183nobodyさん2005/11/05(土) 19:43:57ID:???
>181
なるほど。
177さんではありませんが勉強になります。
0184nobodyさん2005/11/05(土) 22:10:21ID:???
今回のヴァージョンアップってさー
GLOBALSに外部ユーザーからの値を受け取らないように組んでればOK
ってことだよね
若干騒ぎすぎな気がする。
0185nobodyさん2005/11/05(土) 22:20:31ID:???
ヒント:騒いで不安を煽った後で、「セキュリティ強化キャンペーン」を実施し、小遣いGET
0186nobodyさん2005/11/05(土) 22:48:28ID:???
>>182
md5('a')
0187nobodyさん2005/11/05(土) 22:58:28ID:???
最初プギャーってやってるのかと思った
0188nobodyさん2005/11/05(土) 23:09:30ID:???
'a' とか単純な数値の md5 値をググると大量にヒットするよね
0189nobodyさん2005/11/05(土) 23:17:36ID:???
PHPに深刻な脆弱性が見つかったと聞いて飛んできました。
0190nobodyさん2005/11/05(土) 23:18:44ID:???
>>189
もう終わったよ
0191nobodyさん2005/11/05(土) 23:20:54ID:???
PHP が
0192nobodyさん2005/11/05(土) 23:42:15ID:???
>>186
> >>182
> md5('a')

m9('A')
0193nobodyさん2005/11/05(土) 23:53:12ID:???
>>182
md5の結果を自前で適当に変換してる
md5そのままだと、それっぽいのがなんだかな〜って気がするので
0194nobodyさん2005/11/06(日) 02:19:18ID:???
コマンドラインで実行されたのと
サーバ上で呼び出されたのとを
区別する方法ってありませんでしょうか?
0195nobodyさん2005/11/06(日) 02:34:36ID:???
>>194
php_sapi_name()かisset($argv)あたりかな
0196nobodyさん2005/11/06(日) 02:44:47ID:???
>>195
$argv は php.ini の register_argc_argv が On なら CLI じゃなくてもありますよ。(CLI では強制 On)
CLI + Apache モジュールなら php_sapi_name() 関数か PHP_SAPI 定数で判別できますね。
CGI としてインストールされてるなら判定用の環境変数を仕込むのがいいんじゃないかと。
0197nobodyさん2005/11/06(日) 03:44:17ID:???
>>192
>>>186
>> >>182
>> md5('a')
>>
>m9('A')

m9(^Д^)
0198nobodyさん2005/11/06(日) 15:31:18ID:???
メール送信フォームを作るときに、
メール本文はどこで定義していますか?

メール本文に受け付けたクエリを載せるとしたら
やっぱりそのプログラム内部に .= とか ヒアドキュメントとかで
書くしかないのかな?

メール本文だけ外部ファイルにして、
requireしようかと思ったけどなんか違う。
外部ファイルをevalしようかと思ったけどこれもまたなんか違う。
やっぱり本文に書くのみ!?
別変数で定義しておいて、
あとから参照しようとしても上と同じことになるし…

Perl使ってたときは、外部ファイルにして
クエリ載せるところは正規表現で全部置換してたんだけどなぁ
0199nobodyさん2005/11/06(日) 15:42:09ID:???
>>198
日本語で喋ってくれ。頼む
0200nobodyさん2005/11/06(日) 15:42:46ID:???
>Perl使ってたときは、外部ファイルにして
>クエリ載せるところは正規表現で全部置換してたんだけどなぁ
じゃあそすればいいじゃない。
つうか、別に正規表現使わなくてもできるよね。
0201nobodyさん2005/11/06(日) 15:43:46ID:???
>>198
どうしっくり来ないのか判らないんだけど、漏れは外部ファイルに置いて
文字列に取り込んでる。

$message = file_get_contents('mailtemplate.txt');
02021982005/11/06(日) 15:51:28ID:???
>>199

駄文申し訳ない。別に問題ないことなんだけど、
周りはどうしてるのかなーと気になっただけです。

>>200

PHPらしく考えると、正規表現を使うよりは
変数展開の方がいいかなーと勝手に思ってしまったです。
そうなると外部ファイルに持つ方がしんどくなるので…

>>201

メール本文がクエリによって可変でないなら
file_get_contentsがスマートですね。
可変になったらどうしてます??
02032012005/11/06(日) 15:51:34ID:???
>>201
ありゃ。後半が切れた…
で、$message内のキーワードをstr_replaceで置換して本文を生成。
02041982005/11/06(日) 15:54:49ID:???
>>203

なるほどどうもです。
PHPだと <?=$hoge?> で変数展開できるのに
変数毎に置換することを考えると
ちょっとしっくり来ないんですよね。
(どうでもいいことか…
02052012005/11/06(日) 16:11:54ID:???
>>204
あ〜、なるほど。しっくり来ないのはその辺なんすね。
HTMLファイルなんかもそうだけど、テンプレートはあくまでもテンプレートであって
必ずしもPHPプログラマがいじる物とは限らないので、PHP色は排除してる。
もう少し具体的に書くと、こんな感じ。
これがベストとは思わないけど、ウチではこうやってるよ、ということで。
実際にはサニタイジング、文字コード変換等やっているので、その辺のツッコミはなしよ。

---mailtemplate.txt(テンプレートファイル)---
送信者:#FROM#
タイトル:#TITIE#
ご質問内容:
#MESSAGE#

---php---
$message = file_get_contents('mailtemplate.txt');
$message = str_replace(
 array('#FROM#', '#TITLE#', '#MESSAGE#'),
 array($_POST['from'], $_POST['title'], $_POST['message']),
 $message);
mb_send_mail(SUBJECT, $message, ...);
0206nobodyさん2005/11/06(日) 16:27:23ID:???
>>205
なるほど、非常に参考になります。

外部ファイルの置換文字列自体を
<?=?>等のPHP変数にして、
本体からrequireしてしまえば
いいかなとも思ったんですが、
本体見ないと何してるのかわからないんすよね…

ってrequireじゃダメか…
となるとeval…となるとエスケープがめんどい。。

201さんのやり方が一番いいかもしれないすね
02071982005/11/06(日) 16:27:53ID:???
206=198 デス…
0208nobodyさん2005/11/06(日) 17:28:47ID:???
<?php =$hoge ?>にこだわる?意味がわからんが
require使いたければ

$hoge = "aaa";
$piyo = "bbb";
としておいて

require "orz.php";

----- orz.php
....
{$hoge}さまへのメール
{$piyo}のお知らせ
-------
とかでいいじゃね?
02092082005/11/06(日) 17:31:56ID:???
ちと補足つか舌足らずごめん

---- orz.php
$mail_body = <<<EOF

{$hoge}さまへのメール
{$piyo}のお知らせ
-------
ということね^^;
0210nobodyさん2005/11/06(日) 19:14:21ID:???
そんな時、ob_*使えば、良いじゃない。
02111982005/11/06(日) 21:25:54ID:???
>>209

レスありがとうございます。

<?=?>にこだわっているというよりは、
PHPらしさにこだわっているってことでしょうか(汗

確かにrequireだと、ヒアドキュメントとかになっちゃうんですよね。
(そうなるとあまり外部にする旨みがなくなってしまうかな…)
0212nobodyさん2005/11/06(日) 21:32:52ID:???
include/requireを使うなら>>210の言うとおり、
ob_*を使って任意の変数に取り込めばいい
phpコードを含められるって利点くらいしかなさそうだけど。
02131982005/11/06(日) 21:39:10ID:???
>>210,212

レスありがとうございます。

なるほど、ob_* って手もありましたね。
ただここまでくると、PHPコードで展開するか
既定文字列を置換するかどっちかですね。

今までどおりプログラム本体にヒアドキュメントが
一番楽でシンプルかな…

ありがとうございます
0214nobodyさん2005/11/07(月) 00:19:44ID:VYJqOcB8
PHPでHTMLを解析して、HTML内の特定位置の情報(テキストやタグの
アトリビュートの値)を抽出するようなライブラリはないでしょうか。
PerlだとTemplate::Extractというのがあるようです。
ttp://naoya.dyndns.org/~naoya/mt/archives/000833.html
XML_HTMLSaxでも実現可能そうですが、Template::Extractのように
ルール定義だけで抽出できるようなのを探しています。
0215nobodyさん2005/11/07(月) 16:30:23ID:QyO81Mjh
あげ
0216nobodyさん2005/11/07(月) 19:07:15ID:???
PHPぁぷろだや双葉などのGDを使用する画像掲示板スクリプトを
設置したのですが、GDは入っているのにGDを使う部分だけ動作しません。
GDを動かすにはどのようにすればいいでしょうか。ご教授願います。

環境は Vine Linux , Apache1.3 , php 4.4.1 です。
0217nobodyさん2005/11/07(月) 19:12:44ID:???
>>216
>GDを使う部分だけ動作しません。
エラーが出てると思われるので、まずはそれを提示すること。
0218nobodyさん2005/11/07(月) 19:13:03ID:???
エスパー出動願います.
0219nobodyさん2005/11/07(月) 19:14:51ID:???
>>216
>GDは入っているのに
phpinfo(); で本当に入っているか確認されましたか?
0220nobodyさん2005/11/07(月) 19:34:47ID:O90JEyy/
fopen()
と
@fopen
の違いってなんでつか?
0221nobodyさん2005/11/07(月) 20:12:54ID:???
>>217
CGIの方ではGDが入っているかを判別して使わないようにしているようです。
どうやらPHPでGDが認識されてないみたいです。
>>219
やってみましたが駄目でした。
GD自体はapt-getを使用してインストールしました。
0222nobodyさん2005/11/07(月) 20:18:55ID:???
>>220
よっ、そこの兄ちゃん。
騙されたと思ってマニュアルのfopen()のところ見てみ。
02232162005/11/07(月) 20:34:32ID:???
phpinfo();の結果です。
ttp://rep2.net/up/data/630.txt
0224nobodyさん2005/11/07(月) 20:49:47ID:???
>>223
gdの文字を探しても見つからないから、
鯖の中にGDライブラリは存在するが、PHPと連携できるようになっていない。って所かと。
vineのrpmってこんなさっぱりしたconfigureなのかなぁ。。。
自力でconfigureするなら、--with-gd(必要なら=DIR)てな感じでgdを使うよーって指定してあげてください。
0225nobodyさん2005/11/07(月) 20:52:04ID:???
>>233
GD拡張が入ってないね。
パッケージ構成良く判らないけど、php4-gdとかない?
0226nobodyさん2005/11/07(月) 21:01:33ID:???
>>233
GD入ってるの確かならライブラリ入ってるPATHを
ld.so.confに念のため追加して
./configure --with-gd=PATH 追加してmake してみたら?

0227nobodyさん2005/11/07(月) 21:03:59ID:???
>>233
インストールできたらphpinfoで↓が出るはず。
gd
---------------------------------------
GD Support enabled
GD Version 2.0 or higher
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled

Jpeg GIF Freetype などのライブラリも入れるの忘れるなよ。
0228nobodyさん2005/11/07(月) 21:05:10ID:???
やけに親切だなww
0229nobodyさん2005/11/07(月) 21:13:03ID:???
ボキもお役に立ちたいので、windowsを消去してvineをインストールしている所です。
0230nobodyさん2005/11/07(月) 21:19:54ID:???
rpmで楽せずにソースコンパイルしる!
0231nobodyさん2005/11/07(月) 22:27:26ID:vt3MtPM6
Quickformにて、セレクトボックスの値を受け取る場合

$form->addElement('select ', 'address[]', '東京都中央区');
$form->addElement('select ', 'address[]', '東京都千代田区');
$form->addElement('select ', 'address[]', '東京都新宿区');
$form->addElement('select ', 'address[]', '東京都渋谷区');
と書きたいのですが、当然[]がsmartyの方でエラーになってしまい、使えません。
何かよい方法ありますか?
0232nobodyさん2005/11/07(月) 22:33:23ID:???
>>231
$form.address.0.
だったかな.....外してたら須磨
0233nobodyさん2005/11/07(月) 22:37:12ID:???
そんな風にひとつひとつ追加しないとだめだったっけ・・・?
0234nobodyさん2005/11/07(月) 22:37:33ID:vt3MtPM6
ありがとうございます。

0235nobodyさん2005/11/07(月) 22:56:57ID:vt3MtPM6
できれば$form.address.0と一つ一つ指定していかずに書きたいのですが、何か方法ありますか?
0236nobodyさん2005/11/07(月) 23:29:36ID:+B+7rA33
1: $strXml = "http://example.com/test.xml";
2: $strXsl = "./test.xsl";
3: $obj=xslt_create();
4: $result=xslt_process($obj,$strXml,$strXsl);

xmlファイルをローカルに置いてやってみるとエラーもなく動くのですが
↑のように他のサーバーにあるXMLを読み込もうとすると
Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in /test.php on line 4
というエラーが出てしまいます
解決策がありましたらお願いします
02372162005/11/08(火) 00:17:30ID:???
>>224-227
色々試してみましたが、どうもうまくいきませんでした。

path指定無しのGD付き指定configureだと状況変わらずだし。
path指定してみたら今度はファイルが足りませんと。むずかしいなあ。
まだやってない方法もあるのでまた試してみます。

レスしてくださった皆様ありがとうございました。
0238nobodyさん2005/11/08(火) 01:27:12ID:???
gdはPHPバンドル版を使って、他のライブラリはパスを明示するのが吉。
Linuxよく知らないんだけど/usrに色々入ってると仮定して、こんな感じで。(パスは適宜読み替えてね)
--with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-freetype-dir=/usr/X11R6 --enable-gd-native-ttf
0239nobodyさん2005/11/08(火) 13:44:53ID:SGMtFQHw
preg_replace("/\{$/", "", $line);

で 末尾の{が、

preg_replace("/\{.*\}$/", "", $line);

で { hogehoge;} が消えてくれないんだけど、何か間違ってる?
02402392005/11/08(火) 13:46:30ID:SGMtFQHw
あ、アスタの前のピリオド消えてます。すいません。
0241nobodyさん2005/11/08(火) 13:52:23ID:???
>>239
俺のとこでは消えたけど。
ダメならこうしたら?
preg_replace("/\\{\$/", "", $line);
preg_replace("/\\{.*\\}\$/", "", $line);
02422392005/11/08(火) 14:40:48ID:SGMtFQHw
すんません。初歩的ミスで、preg_replaceの結果を
変数に受け取ってませんでした(汗

ありがとうございました。
0243nobodyさん2005/11/08(火) 14:41:50ID:???
>>242
perl使いがよくやるミスだなw
0244nobodyさん2005/11/08(火) 14:57:23ID:???
>>235
テンプレ側

{foreach from=$form.address item=element}
{$element.html}
{/foreach}
0245862005/11/08(火) 15:30:56ID:???
再POSTすみません。
以下のPerlをPHPにしたいのですが、
とりあえず
>>87さんのおかげで(遅レスすみません)
PHPでPOSTメソッドで送信を行うには
HTTP_requestを使えばよいというのがわかったのですが、
cgiプログラムに ファイル 'test.txt'を
渡す部分がPHPでどう書けばよいのかが
分かりません。
よろしくお願いします。

my $argv = shift @ARGV;
my $browser = LWP::UserAgent->new;
my $url = 'http://www.hogehoge.jp/cgi-bin/hogehoge.cgi';
my $response = $browser->post($url ,
[
foo => '2ch' ,
bar => 'orz',
file => [
undef, 'test.txt',
Content_Type => 'text/plain',
Content => $argv]
] ,
Content_Type => 'form-data'
);

die " Error!", $response->status_line unless $response->is_success;
print $response->content;
0246nobodyさん2005/11/08(火) 15:51:28ID:???
>>245
ttp://www.1x1.jp/php/manual_pear/html/package.http.http-request.html
読んでからもう一度
0247"php include"で調べましたが、よく分かりません。2005/11/08(火) 16:09:10ID:KaRV4LV5
php単独で動くrssリーダーのmagpierssをいじり、
ssiでインクルードして表示させることは出来るようになりました。

<?php
error_reporting(E_ERROR);
require_once './rss_fetch.inc';//設定ファイル
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');

$url = 'hogehoge.rdf'; //rssのありか
$rss = fetch_rss($url);
$title = $rss->channel['title'];

echo "<h2><a href=\"$url\">$title</a></h2>\n";
foreach ($rss->items as $item ) {
echo "<dl>\n";
$title = htmlspecialchars($item['title']);
$description = htmlspecialchars($item['description']);
$url = htmlspecialchars($item['link']);

$time = $item[dc][date];
$time = Rtrim("$time","\+09:00");
$time = StrTr("$time","T-"," /");

echo "<dt><a href=\"$url\">$title</a></dt>\n";
echo "<dd> ($time)</dd>\n";
echo "</dl>\n\n";
}
?>

これをphpで実行させ、表示するとなるとどうすればよいのでしょうか。
つまり、ssiの<!-- #include virtual="./xxx.php" -->に相当する手法を知りたいです。
<? php include=('xxx.php')?>ではうまくいきません。どなたかご教示ください。御願いします。
0248nobodyさん2005/11/08(火) 16:33:26ID:???
釣?

つ【マニュアル】
0249nobodyさん2005/11/08(火) 16:55:03ID:???
>>245
HTTP_Request

void addPostData(string name, string value [, bool preencoded])

PEAR_Error addFile(string name, string file_path [, string content-type])

addFileが呼ばれると自動的にmultipart/form-data形式になる
02502452005/11/08(火) 16:59:14ID:???
>>249
ありがとうございます。
02512472005/11/08(火) 17:49:51ID:KaRV4LV5
>>248
あ、すみません。
.htaccessの設定がおかしいみたいです。
他のディレクトリでは普通にphpのincludeで出来ました。
お騒がせしました...orz
(でもおかしい設定は無いと思うのだけれど・・・
phpinfoさえも出来ないディレクトリってなんでだろう・・・)
02522472005/11/08(火) 17:52:50ID:KaRV4LV5
あ、まさか相対パスの記述がそもそも
無理なんじゃ・・・同一ディレクトリだったら問題ないし。
ああ・・・
0253nobodyさん2005/11/08(火) 17:59:05ID:???
>>252
単にCGIが実行できるディレクトリが別鯖に分離されてるだけじゃないの?
02542472005/11/08(火) 18:08:09ID:KaRV4LV5
>>253
ありがと。
おそらくそれかも。
すれ違いなのでこのあたりで・・・
02552472005/11/08(火) 18:13:54ID:KaRV4LV5
>>253
その通りでした。
正常に動作しました。
お騒がせしてスミマセンでした。
02562162005/11/08(火) 22:01:33ID:???
ソースコードからのインストールは色々試しましたが、自分の力不足か
結局GDをうまく認識できませんでした。
そこで、最初のRPMによるインストールを見直すことにしました。
php pear を最初に入れて次にphp apache1 を入れるように二段階に手順を別けて
インストールしたところ、きちんとGDを認識してくれました。

自分のやり方が間違ってたようで、ご迷惑おかけしました。
0257nobodyさん2005/11/09(水) 00:59:47ID:???
ファイル処理をするに際しサーバー内のみで通用する絶対パスを使って
ファイルを指定してきました。その結果ブラウザに表示させたいファイル、
ここでは例としてjpgファイルとします、が得られたとします。

/usr/local/public_html/pic/sample.jpg

この形式のままimgタグに当てはめてもブラウザには表示されません。
ブラウザに表示できるようなパスの形式に変換する方法、あるいは
関数はありますか?
0258nobodyさん2005/11/09(水) 01:06:41ID:???
/usr/local/public_html/がホームディレクトリなら
/usr/local/public_html/を削ればいいじゃん
方法くらいPHPのマニュアル見ればわかるだろ。

しかし/usr/local/public_html ってのは普通はあり得ない設定だよな。
0259nobodyさん2005/11/09(水) 01:07:25ID:???
>>257
HTML上では
<img src="image.php">
のような形でPHPファイルを参照させておいて、image.phpでそのJPEGファイルを取得して表示させる。
sample.jpgだけでなく、色々なファイルを表示させたい場合は
表示したいファイル名を
image.php?file=hoge.jpg
のようにimage.phpの引数に渡してあげて画像ファイルを取得する。
02602572005/11/09(水) 01:17:04ID:???
>>258
> /usr/local/public_html/がホームディレクトリなら
> /usr/local/public_html/を削ればいいじゃん

はい、まず初めに考えたのがその方法なんですが、環境が違うとき、
たとえばレンタル鯖にアップする前、自宅鯖で表示確認を行いたいときなど

/usr/local/public_html/

の部分が一般的には違うので、その環境に依存する違いをどう吸収させようか
という点で詰まってしまいまして。その鯖のホームディレクトリをはき出して
くれる関数があれば実現できるんでしょうが・・・

> しかし/usr/local/public_html ってのは普通はあり得ない設定だよな。

これは単なる仮定です^^;)

>>259
> <img src="image.php">
> のような形でPHPファイルを参照させておいて、image.phpでそのJPEGファイルを取得して表示させる。

なるほど、ImageCreateのような描画関数はサーバーの絶対パスを引数とする点を活用
しようというわけですね。そっちのほうから攻めると意外と解決は簡単かもしれませんね。
02612572005/11/09(水) 01:56:55ID:???
> その鯖のホームディレクトリをはき出して
> くれる関数があれば実現できるんでしょうが・・・

自己レスですが、ルートにPHPファイルを置いて、その中で
__FILE__なりで絶対パスを吐かせればサーバー毎の環境の
違いを吸収できそうですね。
0262nobodyさん2005/11/09(水) 02:14:51ID:???
>>257
というかそんな面倒なことで鯖互換とか考えるくらいなら
相対で書けばいいじゃないか
アプローチが間違ってない?
0263nobodyさん2005/11/09(水) 02:27:31ID:???
>>260
>/usr/local/public_html/
>の部分が一般的には違うので
環境に依存する部分だけ設定ファイルに記述して
必ずそれをincludeしたら?
0264nobodyさん2005/11/09(水) 02:32:23ID:???
どうしても(システムファイル上での)絶対パスを使いたいなら、
define("MY_APP_HOME","/usr/local/public_html/"); として、
MY_APP_HOME . 'pic/sample.jpg' のように使うとか。
0265nobodyさん2005/11/09(水) 02:58:37ID:???
こんなかんじ?

 echo "<img src=\"".htmlpath(getcwd())."/hoge.jpg">;

function htmlpath($relative_path) {
  $realpath=realpath($relative_path);
  $htmlpath=str_replace($_SERVER['DOCUMENT_ROOT'],'',$realpath);
  return $htmlpath;
}
0266nobodyさん2005/11/09(水) 03:16:36ID:???
>>265
hoge.jpgがphpと同じ場所かそれ以下にあればそれでいいけど、そうじゃない場合は困るね
ていうかそこまで手間かけるなら>>262だと思う
02672652005/11/09(水) 03:17:02ID:???
265をちょと修正
htmlpath(getcwd()) getcwd()は不要だた。"./"でおk

それと
>/usr/local/public_html/
>の部分が一般的には違うので、その環境に依存する違いをどう吸収させようか
が気になったので一言
ブラウザからはDocumentRoot以上は見えないのでブラウザにとって / が一番上=DocumentRoot
ブラウザの/pic/hoge.jpg = サーバの/usr/local/public_html/pic/hoge.jpgだから
DocumentRoot以下を同じ構成にしておけば問題ない。
02682652005/11/09(水) 03:20:06ID:???
>>266
/usr/local/public_html/が本番、テスト機で違うからということと
画像はサーバの絶対パスがわかってるから問題ないんじゃね?
0269nobodyさん2005/11/09(水) 03:27:14ID:???
ま、確かに>>257を見る限りDocumentRootを理解できてなさそうではあるな
つか俺この質問どこかで見たことあるぞ?
0270nobodyさん2005/11/09(水) 03:29:57ID:???
>>268
つか画像をphpで処理するわけでもないのに絶対パス指定する意味が全然分らん
>>257が激しく勘違いしてるとしか思えない
0271nobodyさん2005/11/09(水) 03:44:14ID:???
public_html以上のパスを変えれば表示されるってんなら
DocumentRoot以下の構造は同じってことだろ
なんでこんな面倒くさい話になってるの?
02722652005/11/09(水) 04:18:19ID:???
よく読み返したら258でそのまんま回答でてるし

<丶`∀´><asahi-netとキムチは寄生虫ニダ
02732572005/11/09(水) 14:16:28ID:???
>>262
> 相対で書けばいいじゃないか
> アプローチが間違ってない?

PHPのスクリプトとjpegファイルの場所が全く違うものでして
その違いを吸収させるために楽な絶対パスを使ってきました。
でも最終的にブラウザに表示するには相対パスでやりくり
したほうが楽そうですね。

相対パスで記述できないか見直してみます。
0274nobodyさん2005/11/09(水) 14:32:37ID:???
>>257はまだ何か勘違いをしているような気がするなぁ。
例えば
http://hoge1.com/img/image.jpg も
http://hoge2.com/img/image.jpg も
各鯖内のhtmlで<img src="/img/image.jpg">と記述すれば表示できる。
DocumentRoot以下を絶対パスで表記してるからね。

ローカルの絶対パスなんて使う余地すらないんだけど、
phpの中で加工でもしてるの?
■ このスレッドは過去ログ倉庫に格納されています