GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso mostrare le immagini al di fuori della directory radice web nella mia applicazione php?

PHP per impostazione predefinita può già accedere ai file al di fuori della web root, a meno che non sia limitato da un open_basedir direttiva (o modalità provvisoria, ma spero che tu non sia in quella gabbia).

Normalmente è buona norma inserire all'interno di una configurazione VirtualHost un open_basedir restrizione. Puoi specificare più directory separate da : su Linux e ; su Windows.

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

Per accedere a questi file utilizzare un percorso assoluto o un percorso relativo alla posizione del file PHP richiamato. (Quindi dovrai ../ per raggiungere livelli superiori).

Assicurati inoltre che le directory in cui vuoi scrivere siano assegnate all'utente del server web e dispongano dell'autorizzazione di scrittura.

Altrimenti hai la seconda opzione:

All'interno della tua directory www, crea un file "image.php", con un contenuto simile a:

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

E chiama le tue immagini con

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

Tieni presente che il tuo file PHP non dovrebbe essere così semplice :) Poiché potresti voler indirizzare più formati di immagine (e fornire loro l'intestazione corretta), verificando la presenza di percorsi/inclusioni di file dannosi (non vuoi usare $ _GET senza convalidare/disinfettare l'input), cache extra ecc. ecc. ecc.

Ma questo dovrebbe darti un'idea su come indirizzare il tuo problema.


Così semplice, questo produrrà l'immagine con le intestazioni corrette,
ricorda che devi impostare header() prima di scaricare qualsiasi cosa dal buffer di output
=> nessun eco o stampa prima

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

Per la mia applicazione, nessuna di queste risposte funzionava:semplicemente non riuscivo a visualizzare l'immagine e non era davvero fattibile per me aggiungere un nuovo file php da chiamare per motivi. Quello che ha funzionato per me è

$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. Come funzionano gli interni di Sudo?

  2. Come mostrare il percorso completo di un file o di una directory nel terminale?

  3. In che modo la mia applicazione C/C++ può determinare se l'utente root sta eseguendo il comando?

  4. Come posso eseguire il codice PHP dalla riga di comando?

  5. Come posso elencare (ls) gli ultimi 5 file modificati in una directory?

Come ottenere la dimensione di una directory in Linux

Come aggiungere un'applicazione al Dock nel sistema operativo elementare

Come modificare la directory principale dei documenti in Plesk?

Qual è il percorso della mia home directory principale, come può essere modificato?

Aggiungere una directory alla radice Web di Apache?

Come posso ripristinare un chmod nella directory etc?