0

私のホスティングサービスはphpの絶対パスを「/customers/ 12345 / BASEPATHOFMYWEBSPACE」に設定しているので、MYFOLDERにアクセスするには「/ customers / 12345 / BASEPATHOFMYWEBSPACE / MYFOLDER」と入力する必要がありますが、htmlでは「/MYFOLDER」は完全に機能します。

私のサイトの構造のせいで、これは私にとって大きな問題です...

関数を思い付く方法はありますか?それから、phpをだましてMYFOLDERへの絶対パスとして「/ MYFOLDER」を受け入れるようにするすべてのphpファイルに含めますか?

4

2 に答える 2

1

これは私にとって大きな問題です...

しかし、これはまさにその通りです-それはあなたのホスティングプロバイダーに固有のものではありません。URLパスとファイルシステムパスの違いを理解できない場合は、多くの問題が発生します。

Webサーバーが違いをすでに知っている可能性があります-phpinfo()の出力を見てください。

独自の仮想ホストをお持ちの場合は、 "/ customers / 12345 / BASEPATHOFMYWEBSPACE" = $ _SERVER ["DOCUMENT_ROOT"];

したがって、URLをファイルシステムパスにマップする場合は、次のようにします。

function to_file_path($url)
{
   $parts=parse_url($url);
   return $_SERVER["DOCUMENT_ROOT"] . $parts['path']
}

逆に:

function to_url_path($file)
{
  $file=realname($file);
  if (substr($file, 0, strlen($_SERVER["DOCUMENT_ROOT"]))
        !==$_SERVER["DOCUMENT_ROOT"]) {
     return false;
  }
  return substr($file, strlen($_SERVER["DOCUMENT_ROOT"]));
}
于 2012-05-02T15:15:08.730 に答える
0

safe_modephpが有効になっているかどうかに応じて、include_pathを使用ini_set()またはset_include_path()変更できます。

これにより、その後相対パスを使用できるようになります。たとえば、サイトの構成(またはすべてのページに含まれる他のファイル)では、次のようにすることができます。

<?php
// This will allow all files to have relative path access to the
// "/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER" directory.
set_include_path(get_include_path() . PATH_SEPARATOR . "/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER");

// Eg: now you can write require('myfile.php') and
// it will search inside of "/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER"
于 2012-05-02T15:10:30.477 に答える