2010-01-22 103 views
1

海家伙, 因为我是一个新手,我想检查文件路径是一个图像或不这个php语法是否正确?

<? 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'];?>"> 
    } 
    ?> 

我的条件是正确的还是错误not..My

意外'< '

回答

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 
    } 
?> 
0

,将检查是否$row['dfilepath']包含字符串“JPG”内的任何地方,所以它不会满足您的要求。

+0

请参阅我的编辑问题... – udaya 2010-01-22 13:43:08

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 } ?> 
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 
} 

?> 
0
if(strpos($row['dfilepath'],'jpg') != false) 

这是一个小的疑难杂症,如果“JPG”发生在字符串的开头被搜索发生。 strpos将正确地返回0,但在标准相等性测试中0评估为false。你会以(false!= false)结束。

如果你使用strpos来专门测试一个子字符串的存在,你必须使用strict ===和!==运算符(注意extra =),它不仅比较值而且类型也是如此,其中0!== false将评估为true。整数0并不严格等于boolean false,即使它们具有相同的值0.