GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menampilkan gambar di luar direktori root web di aplikasi php saya?

PHP secara default sudah dapat mengakses file di luar web root, kecuali dibatasi dengan open_basedir direktif (atau mode aman, tapi harap Anda tidak berada di kandang itu).

Biasanya merupakan praktik yang baik untuk menyisipkan open_basedir ke dalam konfigurasi VirtualHost larangan. Anda dapat menentukan beberapa direktori yang dipisahkan oleh : di Linux dan ; di jendela.

php_admin_value open_basedir /var/www/s/stage:/usr/share/php:/your/dir

Untuk mengakses file-file itu gunakan jalur absolut atau jalur relatif ke posisi file PHP yang dipanggil. (Jadi, Anda harus ../ untuk mencapai level di atas).

Pastikan juga bahwa direktori tempat Anda ingin menulis ditugaskan ke pengguna server web dan memiliki izin menulis.

Jika tidak, Anda memiliki opsi kedua:

Di dalam direktori www Anda, buat file "image.php", dengan konten yang mirip dengan:

<?php
  header('Content-Type: image/png');
  readfile("../img/" . $_GET['img']);
?>

Dan beri nama gambar Anda dengan

<img src="image.php?img=myimage.png" />

Perlu diketahui bahwa file PHP Anda seharusnya tidak sesederhana itu :) Karena Anda mungkin ingin mengatasi beberapa format gambar (dan memberikan tajuk yang benar untuknya), memeriksa jalur/penyertaan file berbahaya (Anda tidak ingin menggunakan $ _GET tanpa memvalidasi/membersihkan input), caching tambahan, dll., dll., dll.

Namun, ini akan memberi Anda gambaran tentang cara menargetkan masalah Anda.


Sesederhana itu, ini akan menampilkan gambar dengan header yang benar,
ingat bahwa Anda harus menyetel header() sebelum membilas apa pun dari buffer keluaran
=> tidak ada gema atau cetak sebelumnya

$file = '../../somedirectory/image.jpg';
header('Content-Type:image/jpeg');
header('Content-Length: '.filesize($file));
echo file_get_contents($file);

Untuk aplikasi saya, tidak ada jawaban yang berfungsi - saya tidak bisa menampilkan gambar dan tidak mungkin bagi saya untuk menambahkan file php baru untuk dipanggil karena alasan. Apa yang DID berhasil bagi saya adalah

$filename = read_filename_from_database;
$fileDir = "/path/to/files/";
$file = $fileDir . $filename;
if (file_exists($file))
{
     $b64image = base64_encode(file_get_contents($file));
     echo "<img src = 'data:image/png;base64,$b64image'>";
}

Linux
  1. Bagaimana Internal Sudo Bekerja?

  2. Bagaimana aplikasi C/C++ saya menentukan apakah pengguna root menjalankan perintah?

  3. Bagaimana Anda mengkonfigurasi command prompt di Linux untuk menampilkan direktori saat ini?

  1. Bagaimana Cara Menginstal R 3.3.1 Di Direktori Sendiri?

  2. Bagaimana Cara Menampilkan Path Lengkap File Atau Direktori Di Terminal?

  3. Bagaimana Mencegah Pengguna Mengakses Direktori Root?

  1. Bagaimana saya bisa mengukur penggunaan memori sebenarnya dari suatu aplikasi atau proses?

  2. Bagaimana cara mengubah direktori root dari server Apache?

  3. Bagaimana saya bisa mengeksekusi kode PHP dari baris perintah?