3

我能够像这样获取文件的网络路径:

$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_exists不适用于 url。

我该如何解决这个问题?

1.) 我可以在 Magento 中的系统路径和网址之间进行翻译吗?

例如类似(伪代码):

$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 的参数可以是文件或目录,但您应始终使用整个路径(带有文件名),以便回退机制正常工作。

考虑情况

皮肤/默认/默认/manufacturertab/a.jpg

皮肤/yourtheme/default/manufacturertab/b.jpg

在这种情况下,如果文件名作为参数提供,但对于您只设置文件夹名称的情况,它会返回 skin/yourtheme/ default/manufacturertab/ 对于这两种情况,当您附加文件名并检查 a.jpg 时,检查将失败。这就是为什么您始终提供整个路径作为参数的原因。

您仍然必须使用自己的函数来检查文件是否存在,因为 getFilename 函数返回默认路径如果文件不存在(返回 skin/default/default/manufacturertab/foo.jpg 如果manufacturertab/foo.jpg 不存在)。

于 2013-01-26T11:22:57.190 回答
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 回答
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 回答
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 回答