[PHP/JS] Content controleren op plaatjes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Mijn CMS'je biedt gebruikers de mogelijkheid om plaatjes te uploaden en deze desgewenst te hernoemen of weer te verwijderen van de server. Ik zoek nu een manier om de hernoem / verwijder functie te disablen als een plaatje ergens op de website gebruikt wordt.

In beginsel lijkt dit eenvoudig: op het moment dat een gebruiker een pagina, artikel of andere contenttype aanmaakt of verandert, controleer ik bij het saven ervan met een regex of er img-tags zijn en match het src-attribuut met plaatjes op de server. Vervolgens sla ik in een aparte database tabel op welke plaatjes waar in de site in de html staan.

Iets irritanter wordt het bij css files: ik heb nog geen regex kunnen schrijven die bullet-proof plaatjes filtert. Waarschijnlijk kun je gewoon filteren op url(), toch? Voor zover ik weet pak je dan alle plaatjes.

Nog lastiger - imho niet te doen - wordt het bij js bestanden: image tags kunnen op verschillende manieren worden aangemaakt (via DOM of innerhtml bijvoorbeeld), en de src-url kan op nog veel meer manieren tot stand komen.

Nu dacht ik dit alles te kunnen omzeilen door een javascriptje te schrijven dat de DOM uitleest nadat de pagina op de client gerenderd is, en alle images terug te sturen naar de server en dan op te slaan in genoemde tabel. Het probleem hierbij is weer dat de DOM ook op de client gemanipuleerd kan worden - sommige plaatjes worden pas onclick of onmouseover aan de DOM toegevoegd bijvoorbeeld. Ik zou dan een soort "listener-scriptje" kunnen schrijven, dat bij elke client-side actie kijkt of er een plaatje geladen wordt.

Je snapt het al - lastig lastig! Daarom graag jullie input. Is dit te doen? Heb je het al eens ergens gezien? Ben je zelf al eens met zoiets bezig geweest? Heb je een ander idee waarop dit uitvoerbaar is? Heb je commentaar (positief of negatief) voor me? Ontzettend graag! :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
Hoi,

wat je natuurlijk zou kunnen doen is alle plaatjes beschikbaar maken via een php-script. Je slaat in de database een link naar je plaatje op. En in je html/css/javascript plaats je een link naar image.php?id=x. Vervolgens haal je plaatje met id x op uit de database en stuurt dat met de juiste header door.

je zou dan ook in de database op kunnen slaan wanneer dat plaatje voor het laatst is opgevraagd.
En bijvoorbeeld kunnen beslissen om alle plaatjes die langer dan een maand niet zijn opgevraagd te verwijderen.....

Acties:
  • 0 Henk 'm!

  • harrald
  • Registratie: September 2005
  • Laatst online: 16-09 08:44
Waarom niet op het moment dat een opgeslagen plaatje geplaatst word op de site. Een vinkje zetten in de database?

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
douweh schreef op donderdag 30 oktober 2008 @ 08:31:
[...] wat je natuurlijk zou kunnen doen is alle plaatjes beschikbaar maken via een php-script. Je slaat in de database een link naar je plaatje op. En in je html/css/javascript plaats je een link naar image.php?id=x. Vervolgens haal je plaatje met id x op uit de database en stuurt dat met de juiste header door.[...]
Natuurlijk! Wat stom dat ik daar zelf niet aan gedacht heb |:( Ik vraag me alleen wel af wat de load op de server dan gaat zijn. Er zullen plaatjes zijn die niet zo vaak worden opgevraagd, maar bv. theme-plaatjes (onderdeel van de layout van de site) zullen tientallen keren per minuut worden opgevraagd. Hoe ga ik hiermee om? Soort van caching of wel direct naar theme images linken (buiten het script om dus)?

[ Voor 5% gewijzigd door Reveller op 30-10-2008 10:45 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 19-09 18:02
En waarom filteren op img-tag en url(). Zoek gewoon of de bestandsnaam van het plaatje ergens voorkomt, daar gaat het om. Als je de bestandsnaam ergens vindt kan je ervanuit gaan dat het wellicht ergens nog wordt gebruikt.

Blijft bovengenoemde oplossing als veel efficienter staan natuurlijk.

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 20-09 21:46

Koetjeboe

Boe, zegt de koe

Reveller schreef op donderdag 30 oktober 2008 @ 10:41:
[...]

Natuurlijk! Wat stom dat ik daar zelf niet aan gedacht heb |:( Ik vraag me alleen wel af wat de load op de server dan gaat zijn. Er zullen plaatjes zijn die niet zo vaak worden opgevraagd, maar bv. theme-plaatjes (onderdeel van de layout van de site) zullen tientallen keren per minuut worden opgevraagd. Hoe ga ik hiermee om? Soort van caching of wel direct naar theme images linken (buiten het script om dus)?
Ik los het ook op deze manier op met het verschil dat je bij mij alle plaatjes mag verwijderen, maar die beslissing wel overwogen kan maken doormiddel van gebruik stats. Load valt best mee omdat het een simpel script is en je, als je alle headers goed stuurt, de browser de plaatjes wel kan laten cachen.

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Mijn CMS werkt met mod_rewrite maar mijn ervaring hiermee is beperkt. Momenteel heb ik dit in de .htaccess van de webroot staan:
code:
1
2
3
4
5
6
7
8
9
10
# Rewrite rules
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  # Rewrite URLs of the form 'index.php?q=x':
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Met andere woorden: een request naar mijnsite.nl/producten/fruit wordt herschreven naar mijnsite.nl/index.php?q=producten/fruit. Om plaatjes via een eenvoudig php scriptje naar de client te sturen, heb ik een uitzondering op deze regel nodig: mijnsite.nl/image/iets.jpg moet nu niet naar index.php?q=image/iets.jpg worden herschreven, maar naar images/image.php?q=iets.jpg. Evenzo moet mijnsite.nl/image/banners/got.jpg worden herschreven naar images/image.php?q=banners/got.jpg. Dit is nodig, omdat als het de standaard rewrite rule volgt, er een heleboel libraries worden ingeladen die ik toch niet nodig heb bij een eenvoudige request van een plaatje. Welke mod_rewrite guru kan mij helpen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."

Pagina: 1