我可以像这样获取文件的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_exists
不适用于网址。
我该如何解决这个问题?
1)。 我可以在Magento中的系统路径和网址之间进行转换吗?
e.g。像(伪代码):
$system_path = $this->getSystemPath('manufacturertab');
看起来对称且便携。
或 2.) 是否有一些PHP或Magento函数用于检查远程资源的存在?但这似乎是浪费,因为资源实际上是本地的。使用http方法检查本地文件对PHP来说是愚蠢的,不是吗?
我目前正在使用的解决方案:
$system_path = Mage::getBaseDir('skin') . '/frontend/default/mytheme/manufacturertab'; // portable, but not pretty
$file_path = $system_path . '/' . $filename;
然后检查file_exists
是否img
,如果是,我会显示{{1}}。但我不喜欢必须硬编码系统路径的部分路径和使用url路径的方法之间的不对称性。为两者都有一个方法会很好。
答案 0 :(得分:4)
功能
$localPath = Mage::getSingleton( 'core/design_package' )->getFilename( 'manufacturertab/' . $filename, array( '_type' => 'skin', '_default' => false ) );
将返回与
相同的路径$urlPath = $this->getSkinUrl( 'manufacturertab/' . $filename );
但在您的本地文件系统上。你可以省略'_default'=&gt;假参数,它将工作(我把它留在那里只是因为getSkinUrl也设置它internaly)。
请注意,getSkinUrl和getFilename的参数可以是文件或目录,但是您应该始终使用整个路径(使用文件名),以便回退机制能够正常工作。
考虑情况
皮肤/默认/默认/ manufacturertab / A.JPG
皮肤/ yourtheme /默认/ manufacturertab / B.JPG
在这种情况下,对getSkinUrl或getFilename的调用将返回a.jpg和b.jpg的路径,如果文件名作为参数提供,但在您只设置文件夹名称的情况下,它将返回皮肤/ yourtheme / default / manufacturertab /对于这两种情况,当您附加文件名并检查a.jpg时,检查将失败。这就是为什么你总是提供整个路径作为参数。
你仍然必须使用你自己的函数检查文件是否存在,因为如果文件不存在,getFilename函数返回默认路径(如果manufactrtab / foo.jpg没有,则返回skin / default / default / manufacturertab / foo.jpg不存在。。
答案 1 :(得分:3)
$fileUrl = $this->getSkinUrl('images/elephant.jpg');
$filePath = str_replace( Mage::getBaseUrl(), Mage::getBaseDir() . '/', $fileUrl);
if (file_exists($filePath)) {
// display image ($fileUrl)
}
答案 2 :(得分: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');
}
答案 3 :(得分: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/
答案 4 :(得分: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()
,如果您确定要检查文件而不是目录,则可能是一个不错的选择。
答案 5 :(得分:1)
您可以使用以下内容:
$file = 'http://mysite.co.za/files/image.jpg';
$file_exists = (@fopen($file, "r")) ? true : false;
在尝试检查网址上是否存在图片
时为我工作