Как обслуживать несколько изображений, которые находятся над корнем www на одной странице? - PullRequest
5 голосов
/ 08 июля 2011

Я надеюсь предложить пользователям представленную галерею изображений. Я написал скрипт загрузки, который сохраняет файл над корнем www. Я знаю, что могу обработать файл, указав заголовок страницы и затем используя файл чтения, однако я планирую добавить изображения в таблицу для отображения с другой информацией и не думаю, что заголовок / файл чтения является лучшим решением. Я думаю, может быть, символические ссылки, но я не уверен.

Каков наилучший метод для достижения этой цели?

Ответы [ 3 ]

5 голосов
/ 08 июля 2011

Вам понадобится скрипт типа getimage.php, который отправляет заголовки изображения и выводит его содержимое.Затем в своем HTML вы просто используете его как <img src=''> в своем HTML. только цель getimage.php - получить и вывести изображение.Он остается отдельным от того, какой PHP вы используете для генерации HTML, отправленного в браузер.

Кроме того, вы можете проверить, есть ли у пользователя допустимый сеанс и есть ли у него разрешение на просмотр изображения в getimage.php, а если нет, отправьтевместо этого - какое-то изображение с отказом в доступе.

Содержимое getimage.php маленькое и простое:

// Check user permissions if necessary...

// Retrieve your image from $_GET['imgId'] however appropriate to your file structure
// Whatever is necessary to determine the image file path from the imgId parameter.

// Output the image.
$img = file_get_contents("/path/to/image.jpg");
header("Content-type: image/jpeg");
echo($img);
exit();

В вашем HTML:

<!-- as many as you need -->
<img src='getimage.php?imgId=12345' />
<img src='getimage.php?imgId=23456' />
<img src='getimage.php?imgId=34567' />

Этозатем становится задачей браузера вызывать getimage.php?imgId=12345 в качестве пути к изображению.Браузер понятия не имеет, что он вызывает скрипт PHP, а не изображение в доступном через Интернет каталоге.

0 голосов
/ 08 июля 2011

Что-то, что всегда работало хорошо для меня, - это чтобы пользователи загружали свои изображения прямо в мою базу данных mysql.PHP закодирует в base64 и сохранит в BLOB-объект.Затем вы делаете что-то похожее на то, что сказал Майкл, чтобы получить и отобразить изображение.Я включил некоторый код из проекта, над которым я работал в 2008 году. Я бы не стал копировать его точно, если это метод, который вам интересен, поскольку он старый код.

Это PHP для загрузки и сохранения в БД.Очевидно, замените вашу информацию и подключитесь к вашей собственной БД.

<?php
include("auth.php");
// uploadimg.php               
// By Tyler Biscoe             
// 09 Mar 2008                 
// Test file for image uploads
include("connect.php");
include("include/header.php");
$max_file_size = 786432;
$max_kb = $max_file_size/1024;

if($_POST["imgsubmit"])
{
if($_FILES["file"]["size"] > $max_file_size)
    {
        $error = "Error: File size must be under ". $max_kb . " kb.";
    }

if (!($_FILES["file"]["type"] == "image/gif") && !($_FILES["file"]["type"] == "image/jpeg") && !($_FILES["file"]["type"] == "image/pjpeg"))
    {
        $error .= "Error: Invalid file type. Use gif or jpg files only.";

    }

if(!$error)
    {
        echo "<div id='alertBox'> Image has been successfully uploaded! </div>";
        $handle = fopen($_FILES["file"]["tmp_name"],'r');
        $file_content = fread($handle,$_FILES["file"]["size"]);
        fclose($handle);
        $encoded = chunk_split(base64_encode($file_content)); 
        $id = $_POST["userid"];
        echo $_FILES["file"]["tmp_name"];
        $default_exist_sql = "SELECT * FROM members WHERE id='".$id."'";
        $default_result = mysql_query($default_exist_sql);
        $results = mysql_fetch_array($default_result);
        if(!$results["default_image"])
        {
            $insert_sql = "UPDATE members SET default_image = '$encoded' WHERE id='". $id ."'";
            mysql_query($insert_sql);

        }

        $sql = "INSERT INTO images (userid, sixfourdata) VALUES ('$id','$encoded')";
        mysql_query($sql);
    }
    else
    {
        echo "<div id='alertBox'>". $error . "</div>";
    }  
}
?>
<br />
<font class="heading"> Upload images </font>
<br /><br />

    <form enctype = "multipart/form-data" action = "<?php $_SERVER['PHP_SELF']; ?>" method =        "post" name = "uploadImage">
<input type = "hidden" name="userid" value = "<?php echo $_GET["userid"]; ?>" >
<input id="stextBox" type="file" name="file" size="35"><br />
<input type="submit" name="imgsubmit" value="Upload">
</form>
<?php include("include/footer.php"); ?>

Следующий файл отображает:

<?php
// image.php                    
// By Tyler Biscoe              
// 09 Mar 2008                  
// File used to display pictures
include("connect.php");

$imgid = $_GET["id"];

$result = mysql_query("SELECT * FROM images WHERE imgid=" . $imgid . "");

$image = mysql_fetch_array($result);
echo base64_decode($image["sixfourdata"]);
echo $image["sixfourdata"];

?>

Затем:

<img src="image.php?id=your_img_id">
0 голосов
/ 08 июля 2011

Если скрипт выполняется на сервере Unix, вы можете попытаться создать символическую ссылку в вашем веб-корне, которая ссылается на каталог вне вашего веб-корня.

ln -s /webroot/pictures /outside-of-webroot/uploads

Если вы используете сервер Apache, вы также можете взглянуть на mod_alias. Я слышал, что есть несколько проблем при использовании mod_alias и его настройке через .htaccess. К сожалению, у меня нет никакого опыта работы с mod_alias.

...