海人, 因为我是新手,我想检查文件路径是否是图像
<? if(strpos($row['dfilepath'],'jpg') != false)
{
<img src=" <?= base_url().'/uploads/'.$row['dFilePath']?>" />
}
else
{
<input type="button" onclick="loaddetails('<?php echo $row['dFilePath'];?>');" value="<?php echo $row['dFilePath'];?>">
}
?>
我的情况是否正确。我的错误
意外'&lt;'
答案 0 :(得分:2)
您的代码不正确。假设您的$row
数组有效,这应该可以正常工作。
<?php
$ext = substr( $row[ 'dfilepath' ], strpos( $row[ 'dfilepath', '.' ) );
if($ext == 'jpg')
{
?>
<img src="<?php echo base_url().'/uploads/'.$row['dFilePath']?>" />
<?php
}
else
{
?>
<input type="button" onclick="loaddetails('<?php echo $row['dFilePath'];?>');" value="<?php echo $row['dFilePath'];?>">
<?php
}
?>
答案 1 :(得分:0)
这会检查$row['dfilepath']
中是否包含字符串'jpg',因此无法满足您的要求。
答案 2 :(得分:0)
我这样做只会检查文件字符串的最后三个字符,否则名为“jpg.png”的文件会导致代码尝试显示图像:
<?php
$file = $row['dfilepath'];
$file_ending = substr($file, strlen($file) - 3);
if('jpg' == $file_ending) { ?>
<img src=" <?php echo base_url().'/uploads/'.$file?>" />
<?php } else { ?>
<input type="button" onclick="loaddetails('<?php echo $file;?>');" value="<?php echo $file?>">
<?php } ?>
答案 3 :(得分:0)
使用扩展程序检查文件类型通常是一个坏习惯。我可以轻松地创建一个文本文件并将其重命名为.jpg。根据此代码,它将突然变为实际图像。甚至更邪恶:我可能通过创建一个实际执行某些代码的虚假jpg来利用webbrowsers中的一些错误。
除此之外,我可能会将我的jpeg文件命名为JPEG,jPG,jpG,JPeg或您可能想到的任何其他组合。然后还有其他格式而不是jpeg。我不知道你的其余代码,但也许你希望有人允许上传png或gif图像。
如果您想更确定自己实际拥有图像文件,可以使用getimagesize更加确定的方法。这确实需要GD扩展。如果该功能为您提供了看似可能真实的输出,那么将该文件用作图像会更加安全。当然有些情况下您不关心并且只想检查文件的扩展名。但我觉得这段代码应该有点公开。一个小例子:
<?php
$file = $row['dfilepath'];
// where upload_dir is a function that somehow finds
// the absolute path of the upload dir
$path = upload_dir() . DIRECTORY_SEPARATOR . $file;
$valid = array('image/jpeg', 'image/gif', 'image/png');
$info = getimagesize($path);
if($info !== false && in_array($info['mime'], $valid) {
// more likely you'll actually have an image here
// now you might want to print some html here, like:
?><img src="/uploads/<?php print $file; ?>" alt="" /><?php
}
?>
答案 4 :(得分:0)
if(strpos($row['dfilepath'],'jpg') != false)
如果'jpg'恰好发生在搜索字符串的开头,这是一个小问题。对于匹配,strpos将正确返回0,但在标准相等测试中,0将评估为false。你最终会得到(假!=假)。
如果你使用strpos专门测试是否存在子字符串,你必须使用strict ===和!==运算符(注意extra =),它不仅要比较值,还要比较类型,其中0!== false将评估为true。整数0并不严格等于布尔值false,即使它们具有相同的值0。