私は次のようなフォルダ構造を持っています:
mydomain.com
->Folder-A
->Folder-B
「../Folder-B/image1.jpg」というデータベースの文字列があり、これはFolder-Bの画像を指します。
Folder-Aのスクリプト内で、dirname([〜#〜] file [〜#〜])を使用してファイル名を取得し、mydomain.com/Folder-A
を取得しています。このスクリプト内では、'mydomain.com/Folder-B/image1.jpg
という文字列を取得する必要があります。私は試した
$path=dirname(__FILE__).'/'.'../Folder-B/image1.jpg';
これはmydomain.com%2FFolder-A%2F..%2FFolder-B%2Fimage1.jpg
として表示されます
これはFacebookの共有ボタン用であり、正しい画像を取得できません。誰でもパスを正しく取得する方法を知っていますか?
編集:URL >>> mydomain.com%2FFolder-B%2Fimage1.jpgを取得したい
PHP <5.3を使用:
$upOne = realpath(dirname(__FILE__) . '/..');
In PHP 5.3から5.6で使用:
$upOne = realpath(__DIR__ . '/..');
PHP> = 7.0を使用:
$upOne = dirname(__DIR__, 1);
Php 7.0以降を使用している場合は、レベルを使用できます。
dirname( __FILE__, 2 )
2番目のパラメーターを使用すると、戻るレベルの量を定義できます。
これを試して
dirname(dirname( __ FILE__))
編集:正しい構文ではないため、「./」を削除しました。それがなければ、完全に機能します。
PHPのdirname関数を使用できます。 <?php echo dirname(__DIR__); ?>
。これにより、現在のディレクトリを格納する__DIR__
の親ディレクトリの名前がわかります。
realpath
を使用して、不要な部分を削除できます。
// One level up
echo str_replace(realpath(dirname(__FILE__) . '/..'), '', realpath(dirname(__FILE__)));
// Two levels etc.
echo str_replace(realpath(dirname(__FILE__) . '/../..'), '', realpath(dirname(__FILE__)));
Windowsでは、URLで必要な場合は\
を/
に置き換えます。
dirname(__DIR__,level);
dirname(__DIR__,1);
レベルは何回フォルダに戻るかです
誰に、共有ホスティング環境を扱っていて、現在PHP 7.0未満)を持っている可能性dirname( __FILE__, 2 );
を持たない人は、以下を使用することができます。
function dirname_safe($path, $level = 0){
$dir = explode(DIRECTORY_SEPARATOR, $path);
$level = $level * -1;
if($level == 0) $level = count($dir);
array_splice($dir, $level);
return implode($dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
}
print_r(dirname_safe(__DIR__, 2));
1つ上のレベルで、私は使用しました:
str_replace(basename(__DIR__) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php';
またはphp <5.3の場合:
str_replace(basename(dirname(__FILE__)) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php';