这个php语法是否正确?

时间:2010-01-22 13:38:53

标签: php if-statement

海人,    因为我是新手,我想检查文件路径是否是图像

<? 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;'

5 个答案:

答案 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。