3

次のようにファイルへのWebパスを取得できます。

$filename = 'elephant.jpg';
$path_to_file = $this->getSkinUrl('manufacturertab');
$full_path = $path_to_file . '/' . $filename;

しかし、ファイルが存在しない場合は、画像リンクが壊れてしまいます。

私はこれを試しました:

if(!file_exists($full_path)) {
  Mage::log('File doesn\'t exist.');
} else {
  ?><img src="<?php echo $full_path ?>" /><?php
}

もちろん、file_existsURLでは機能しないため、機能しませんでした。

どうすればこれを解決できますか?

1.)MagentoでシステムパスとWeb URLを変換できますか?

例:(擬似コード)のようなもの:

$system_path = $this->getSystemPath('manufacturertab');

それは対称的でポータブルに見えます。

または2.)リモートリソースの存在をチェックするためのPHPまたはMagento関数はありますか?しかし、リソースは本当にローカルであるため、それは無駄に思えます。PHPがhttpメソッドを使用してローカルファイルをチェックするのはばかげているでしょう。

私が現在使用している解決策:

$system_path = Mage::getBaseDir('skin') . '/frontend/default/mytheme/manufacturertab'; // portable, but not pretty
$file_path = $system_path . '/' . $filename;

次に、表示するかどうかfile_existsを確認し、表示する場合はを表示しimgます。しかし、システムパスのパスの一部をハードコーディングする必要があることと、URLパスのメソッドを使用することの非対称性は好きではありません。両方の方法があるといいでしょう。

4

6 に答える 6

4

関数

$localPath = Mage::getSingleton( 'core/design_package' )->getFilename( 'manufacturertab/' . $filename, array( '_type' => 'skin', '_default' => false ) );

と同じパスを返します

$urlPath = $this->getSkinUrl( 'manufacturertab/' . $filename );

ただし、ローカル ファイル システムでは。'_default' => false パラメーターを省略しても問題ありません (getSkinUrl も内部的に設定するため、そのままにしておきました)。

getSkinUrl と getFilename のパラメーターはファイルまたはディレクトリのいずれかですが、フォールバック メカニズムが正しく機能するように、常にパス全体 (ファイル名を含む) を使用する必要があることに注意してください。

状況を考慮する

スキン/デフォルト/デフォルト/メーカータブ/a.jpg

スキン/あなたのテーマ/デフォルト/manufacturertab/b.jpg

この場合、 getSkinUrl または getFilename への呼び出しは、ファイル名がパラメーターとして提供されている場合、両方の場合で a.jpg および b.jpg へのパスを返しますが、フォルダー名のみを設定する場合は、skin/yourtheme/ を返します。どちらの場合も default/manufacturertab/ であり、ファイル名を添付して a.jpg をチェックすると、チェックは失敗します。そのため、常にパス全体をパラメーターとして指定する必要があります。

ファイルが存在しない場合は getFilename 関数がデフォルト パスを返すため、独自の関数を使用してファイルが存在するかどうかを確認する必要があります (manufacturertab/foo.jpg が存在しない場合は、skin/default/default/manufacturertab/foo.jpg を返します)。 )。

于 2013-01-26T11:22:57.190 に答える
3
$fileUrl = $this->getSkinUrl('images/elephant.jpg');
$filePath = str_replace( Mage::getBaseUrl(), Mage::getBaseDir() . '/', $fileUrl);

if (file_exists($filePath)) {
  // display image ($fileUrl)
}
于 2013-06-05T06:04:06.730 に答える
3

それは私を助けます:

  $url = getimagesize($imagepath); //print_r($url); returns an array

    if (!is_array($url)) 
    {

                    //if file does not exists
    $imagepath=Mage::getDesign()->getSkinUrl('default path to image');

    }
于 2013-07-31T04:09:29.043 に答える
2

あなたが使用することができます

$thumb_image = file_get_contents($full_path) //if full path is url

//then check for empty
if (@$http_response_header == NULL) {
  // run check
}

curlを使用するか、このリンクを試すこともできますhttp://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/

于 2013-01-26T05:59:46.443 に答える
2

Mage::getBaseDir()あなたが求めているものです。あなたのシナリオでgetSkinBaseDir()は、より良い仕事をします。

    $filename = 'elephant.jpg';
    $full_path = Mage::getDesign()->getSkinBaseDir().'/manufacturertab/'.$filename;
    $full_URL=$this->getSkinUrl('manufacturertab/').$filename;

    if(!is_file($full_path)) {
      Mage::log('File doesn\'t exist.');
    } else {
      ?><img src="<?php echo $full_URL ?>" /><?php
    }

<img src>には、システム パスではなく URL が必要であることに注意してください。... is_file()ではなくfile_exists()、この場合、ディレクトリではなくファイルをチェックしていると確信している場合は、適切なオプションになる可能性があります。

于 2013-08-09T14:18:55.750 に答える
1

以下を使用できます。

$file = 'http://mysite.co.za/files/image.jpg';
$file_exists = (@fopen($file, "r")) ? true : false;

URLに画像が存在するかどうかを確認しようとしたときにうまくいきました

于 2016-05-24T07:16:47.260 に答える