правильный ли синтаксис php? - PullRequest
1 голос
/ 22 января 2010

хай, ребята, Поскольку я новичок, я хочу проверить путь к файлу изображения или нет

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

правильное ли у меня состояние или нет .. Моя ошибка

неожиданно '<' </p>

Ответы [ 5 ]

2 голосов
/ 22 января 2010

Ваш код неверен. Это должно работать при условии, что ваш массив $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 голосов
/ 22 января 2010
if(strpos($row['dfilepath'],'jpg') != false)

Это небольшая ошибка, если в начале искомой строки происходит 'jpg'. strpos будет правильно возвращать 0 для попадания, но 0 оценивается как ложное в стандартном тесте на равенство. Вы получите (false! = False).

Если вы используете strpos исключительно для проверки существования подстроки, вы должны использовать строгие операторы === и! == (обратите внимание на дополнительные =), которые не только сравнивают значения, но и типы, где 0! == false будет оцениваться как true. Целое число 0 не совсем равно логическому значению false, даже если они имеют одинаковое значение 0.

0 голосов
/ 22 января 2010

Обычно плохая привычка проверять тип файла, используя расширение. Я могу легко создать текстовый файл и переименовать его .jpg Согласно этому коду он внезапно станет настоящим изображением. Или даже еще большее зло: я мог бы использовать какую-то ошибку в веб-браузерах, создав поддельный jpg, который фактически выполняет некоторый код.

Кроме того, я могу назвать свои файлы в формате 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 голосов
/ 22 января 2010

Я бы сделал так, чтобы он проверял только три последних символа строки вашего файла, в противном случае файл с именем "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 голосов
/ 22 января 2010

Это проверит, содержит ли $row['dfilepath'] строку 'jpg' где-либо внутри, так что она не будет соответствовать вашим требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...