Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Magento PHP中显示之前检查文件是否存在?_Php_File_Magento - Fatal编程技术网

在Magento PHP中显示之前检查文件是否存在?

在Magento PHP中显示之前检查文件是否存在?,php,file,magento,Php,File,Magento,我能够获得文件的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

我能够获得文件的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
}
它看起来对称,便于携带

或 2.) 是否有一些PHP或Magento函数用于检查远程资源是否存在?但这似乎是一种浪费,因为资源实际上是本地的。PHP使用http方法检查本地文件是愚蠢的,不是吗

我当前使用的解决方案:

$system_path = Mage::getBaseDir('skin') . '/frontend/default/mytheme/manufacturertab'; // portable, but not pretty
$file_path = $system_path . '/' . $filename;
然后检查
文件\u是否存在
,如果存在,则显示
img
。但是,我不喜欢必须为系统路径硬编码部分路径和为url路径使用方法之间的不对称性。最好能有一个同时适用于两者的方法。

您可以使用

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

//then check for empty
if (@$http_response_header == NULL) {
  // run check
}
您也可以使用curl或尝试此链接功能

$localPath = Mage::getSingleton( 'core/design_package' )->getFilename( 'manufacturertab/' . $filename, array( '_type' => 'skin', '_default' => false ) );
将返回与相同的路径

$urlPath = $this->getSkinUrl( 'manufacturertab/' . $filename );
但是在本地文件系统上。您可以省略'_default'=>false参数,它仍然可以工作(我之所以将其保留在那里,是因为getSkinUrl也将其设置为内部)

请注意,getSkinUrl和getFilename的参数可以是文件或目录,但应始终使用整个路径(使用文件名),以便回退机制正常工作

考虑一下情况

皮肤/default/default/manufacturertab/a.jpg

皮肤/yourtheme/default/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)。

它帮助我:

  $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');

    }
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
    }
$filename='elephant.jpg';
$full_path=Mage::getDesign()->getSkinBaseDir()。/manufacturertab/。$filename;
$full_URL=$this->getSkinUrl('manufacturertab/')。$filename;
如果(!is_文件($full_路径)){
Mage::log('文件不存在');
}否则{

?>“/>您可以使用以下选项:

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

当我试图检查URL上是否存在图像时,这对我很有用。谢谢。不过我不想使用HTTP方法。当它是本地文件时,这似乎是一种浪费。不管怎样+1。你可以给本地主机路径。是的,我猜如果启用了环回,对吗?当有本地文件时,使用它仍然感觉很奇怪。这似乎不是正确的方法,不是吗o do it.whwt警告您?我在这里试图做的部分工作是编写代码,如果我将站点传输到另一个具有不同文件层次结构的服务器,这些代码仍然可以工作。您说的是使用
$filename
中的完整路径,但我从哪里获得完整路径?我没有说$filename中的完整路径与文件系统根目录中的路径相同。我的意思是,您不应该编写
$file\u path=$this->getSkinUrl('manufacturertab')./'.$filename;
,而是应该编写
$file\u path=$this->getSkinUrl('manufacturertab/'.filename);
因为这使得getSkinUrl函数不仅可以检查文件夹是否存在,还可以检查文件是否存在。getFilename函数也是如此。请注意,路径没有改变-唯一改变的是,调用函数之前还是之后,是否连接了skin文件夹中的名称和相对路径。
    $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
    }
$file = 'http://mysite.co.za/files/image.jpg';
$file_exists = (@fopen($file, "r")) ? true : false;