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

7kqas0il  于 2023-10-15  发布在  PHP
关注(0)|答案(7)|浏览(110)

我可以像这样获取文件的Web路径:

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

但如果文件不存在,那么我最终会得到一个损坏的图像链接。
我试过这个:

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

当然,这不起作用,因为file_exists不适用于url。
我该怎么解决这个问题?
1.)我可以在Magento中转换系统路径和Web URL吗?
例如:(pseudocode):

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

看上去很对称而且便于携带。
或者2.)是否有一些PHP或Magento功能来检查远程资源的存在?但这似乎是一种浪费,因为资源实际上是本地的。PHP使用http方法来检查本地文件是愚蠢的,不是吗?
我目前使用的解决方案:

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

然后检查是否为file_exists,如果是,则显示img。但是我不喜欢必须硬编码系统路径的部分路径和使用url路径的方法之间的不对称。如果能有一个方法来解决这两个问题就好了。

cwtwac6a

cwtwac6a1#

功能

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

将返回与

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

而是在本地文件系统上。你可以省略'_default' => false参数,它仍然可以工作(我把它留在那里只是因为getSkinUrl也在内部设置它)。
请注意,getSkinUrl和getFilm的参数可以是文件或目录,但应始终使用完整路径(带文件名),以便回退机制正常工作。
审议这一局势
skin/default/default/manufacturertab/a.jpg
skin/yourtheme/default/manufacturertab/b.jpg
在这种情况下,如果文件名作为参数提供,则对getSkinUrl或getFilm的调用将返回a.jpg和b.jpg的路径,但对于您仅设置文件夹名称的情况,它将返回skin/yourtheme/default/fullertab/,并且当您附加文件名并检查a.jpg时,检查将失败。这就是为什么你应该总是提供整个路径作为参数。
您仍然需要使用自己的函数来检查文件是否存在,因为getFilm函数在文件不存在时返回默认路径(如果文件不存在,则返回skin/default/default/filrertab/foo.jpg)。

展开查看全部
n3h0vuf2

n3h0vuf22#

它帮助我:

  1. $url = getimagesize($imagepath); //print_r($url); returns an array
  2. if (!is_array($url))
  3. {
  4. //if file does not exists
  5. $imagepath=Mage::getDesign()->getSkinUrl('default path to image');
  6. }
pzfprimi

pzfprimi3#

  1. $fileUrl = $this->getSkinUrl('images/elephant.jpg');
  2. $filePath = str_replace( Mage::getBaseUrl(), Mage::getBaseDir() . '/', $fileUrl);
  3. if (file_exists($filePath)) {
  4. // display image ($fileUrl)
  5. }
wixjitnu

wixjitnu4#

您可以使用

  1. $thumb_image = file_get_contents($full_path) //if full path is url
  2. //then check for empty
  3. if (@$http_response_header == NULL) {
  4. // run check
  5. }

你也可以使用curl或者试试这个链接http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/

esyap4oy

esyap4oy5#

Mage::getBaseDir()就是你要的对于您的场景,getSkinBaseDir()将执行更好的工作。

  1. $filename = 'elephant.jpg';
  2. $full_path = Mage::getDesign()->getSkinBaseDir().'/manufacturertab/'.$filename;
  3. $full_URL=$this->getSkinUrl('manufacturertab/').$filename;
  4. if(!is_file($full_path)) {
  5. Mage::log('File doesn\'t exist.');
  6. } else {
  7. ?><img src="<?php echo $full_URL ?>" /><?php
  8. }

请注意,对于<img src>,您需要URL,而不是系统路径。. is_file(),而不是file_exists(),在这种情况下,如果你确定你正在检查一个文件,而不是一个目录,可能是一个很好的选择。

bwleehnv

bwleehnv6#

您可以使用以下内容:

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

为我工作时,试图检查是否存在图像的网址

cuxqih21

cuxqih217#

  1. <?php
  2. namespace Your\Module\FileCheck;
  3. use Magento\Framework\Filesystem;
  4. use Magento\Framework\App\Filesystem\DirectoryList;
  5. use Magento\Framework\Filesystem\Directory\WriteInterface;
  6. class ImagePath
  7. {
  8. /**
  9. * @var WriteInterface
  10. */
  11. protected $mediaDirectory;
  12. public function __construct(
  13. Filesystem $filesystem
  14. ) {
  15. $this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
  16. }
  17. public function checkImagePath()
  18. {
  19. $imagePath = '/catalog/product/placeholder/default/coming-soon.jpg';
  20. if ($this->mediaDirectory->isFile($imagePath)) {
  21. // code for file is available
  22. }
  23. }
  24. }
展开查看全部

相关问题