afbeeldingen downloaden werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software programmeur

Functieomschrijving Voor een erkende werkgever in de regio van Goes zijn wij op zoek naar een enthousiaste software programmeur met PHP/Symfony ervaring. Een gedreven persoon die het development team komt versterken met het aanpakken van complexe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor zowel professionele als persoonlijke groei? Lees dan snel verder! Dit ga je doen: Beheer en ontwikkeling van de serviceportal in Symfony en de webshops in de tweede versie van Magento; Testen en door ontwikkelen van software; Ontwikkelen van nieuwe functionaliteiten;

Bekijk vacature »

Teamlead PHP Developer

Functieomschrijving Voor een gewaardeerde werkgever in de buurt van Middelburg zijn wij op zoek naar een gemotiveerde teamlead PHP developer met affiniteit met Symfony/Laravel. Een enthousiast persoon die het ontwikkelteam komt versterken met het aanpakken van uitdagende projecten. Ben jij op zoek naar een uitdaging waar je de tijd en ruimte krijgt jezelf te ontwikkelen en je eigen IT-team aan te sturen? Lees dan snel verder! Die ga je doen: Bijdragen aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de PHP based applicaties; Ontwikkeling en beheer van de serviceportal in Symfony en de webshops in de tweede versie van

Bekijk vacature »

Hands-on Solution Architect / Software Architect (

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Solution Architect / Software Architect op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je werkt samen met gedreven DevOps teams, bestaande uit frontend, backend en middleware developers, testers, UX-designers. Samen met de teams ben je continu op zoek naar de beste oplossingen voor onze klanten. Als Solution Architect onderzoek

Bekijk vacature »

.NET Developer C#

Dit ga je doen Als developer nieuwe gave features implementeren; Werken met technieken als C# .NET en (REST) API's webservices; Ontwikkelen van koppelingen middels API's; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken Als C# .NET Developer wordt je verantwoordelijk voor het ontwikkelen van applicaties voor belangrijkste product van deze organisatie. Dit product is een applicatie voor alles omtrent hypotheken. De programmeertaal die je hierbij beheerst is C#. Er

Bekijk vacature »

Senior front-end developer (React)

Functie Momenteel zijn ze op zoek naar een ervaren front-end developer. Als senior werk je nauw samen met 5 collega developers. Een klein scrum team dus, met korte lijnen waardoor jouw ideeën snel tot uitvoering gebracht kunnen worden. De huidige applicaties worden veelal ontwikkeld met o.a. React, Redux, TypeScript. Ze zijn echt op zoek naar een kartrekker in het team. Naast het meedenken over, opzetten en uitvoeren van bijvoorbeeld de architectuur of toepassing van nieuwe technieken krijg je ook veel tijd om de meer junior (front-end) developers te begeleiden. Hierin nemen ze graag de tijd om mensen de ruimte te

Bekijk vacature »

Medior/senior Python developer

Functie Bedrijven komen bij deze organisatie om technische vraagstukken op te lossen en hierin ook tot oplossingen te komen waar ze zelf misschien niet aan gedacht hadden. Jij gaat vanuit je ervaring dus niet alleen hands-on aan de slag met het ontwikkelen, maar zult ook zeker adviseren en proactief meedenken met de klant. Er zijn meerdere lange en/of korte projecten en het type klanten is heel uiteenlopend. Zo kun je terecht komen in een multidisciplinair scrumteam waarin je als Python developer meewerkt, of juist voor een kleiner (Greenfield) project aan de slag gaan waarin je veel breder bezig bent. Door

Bekijk vacature »

Full stack Javascript ontwikkelaar

Functie Benieuwd hoe jouw dag eruit ziet? Je komt binnen rond een uur of 10 en dat start je met de morning call. Dit doen we vanaf het hoofdkantoor of op het lab, ligt eraan welk project je mee bezig bent. Na de call en het verdelen van de tickets ga je met je team aan de slag. Rond een uur of 12 is er een goede lunch en ga je smiddags weer lekker door met je werk. De ene keer maak jij een game voor een groot merk om de interactie tussen product en eindgebruiker te vergroten. De andere

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Front-end developer wanted! (Angular, React, Vue.j

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

C#.NET Developer

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »

.NET Developer

Functie omschrijving Net afgestudeerd en op zoek naar een leuke baan als developer? Zoek niet verder! Ik heb een functie beschikbaar als back-end developer, bij een leuk familiebedrijf. Je gaat werken met de Microsoft stack en de technieken C# en .NET. Verder maak je gebruik van MVC en Entity framework. SQL kent ook geen geheimen voor jou. Jouw verantwoordelijkheden: Nieuwe maatwerk software bouwen; API koppelingen bouwen; Applicaties en software optimaliseren; Back-end programmeren. Een erg uitdagende functie, met veel vrijheid. Je kan meerdere dagen thuis werken en als je op kantoor werkt wordt de lunch verzorgd. Heb je interesse, reageer dan

Bekijk vacature »

Magento developer

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Front-end Developer

Front-end Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »
Marco Eilander

Marco Eilander

28/05/2016 12:35:06
Quote Anchor link
Hallo,


Met dit script probeer ik afbeeldingen te downloaden, maar als ik ze open, krijg ik een foutmelding en worden ze niet weergegeven. Ik krijg alleen de melding "Dit bestand kan niet worden geopend.".

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
        header ('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header ('Content-Description: File Transfer');
        header ('Content-Type: application/octet-stream');
        header ('Content-Length: ' . filesize(__DIR__ .'/opslag/'.$_GET['bestand']));
    header('Content-Type: image/png');        
    header("Content-Disposition: attachment; filename=".$_GET['bestand']."");

?>
 
PHP hulp

PHP hulp

21/05/2024 02:32:36
 
Ben van Velzen

Ben van Velzen

28/05/2016 13:23:41
Quote Anchor link
Waar is de inhoud van je bestand? Heb je dat voor het voorbeeld weggelaten of ben je het gewoon vergeten?
 
Marco Eilander

Marco Eilander

28/05/2016 14:13:07
Quote Anchor link
Ben van Velzen op 28/05/2016 13:23:41:
Waar is de inhoud van je bestand? Heb je dat voor het voorbeeld weggelaten of ben je het gewoon vergeten?


Dan is dat dus het probleem. :P
Hoe krijg ik de inhoud?
 
Ben van Velzen

Ben van Velzen

28/05/2016 14:18:22
Quote Anchor link
Voeg dit eens toe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
fpassthru(__DIR__ . '/opslag/' . $_GET['bestand']);
?>


Het is overigens aan te bevelen om niet direct op de inhoud van $_GET['bestand'] te vertrouwen, het is in deze opzet een koud kunstje om ieder gewenst bestand op je systeem op te vragen. Bijvoorbeeld de inhoud van index.php, welke weer verwijst naar configuraties e.d.
 
Marco Eilander

Marco Eilander

28/05/2016 21:11:02
Quote Anchor link
Ben van Velzen op 28/05/2016 14:18:22:
Voeg dit eens toe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
fpassthru(__DIR__ . '/opslag/' . $_GET['bestand']);
?>


Het is overigens aan te bevelen om niet direct op de inhoud van $_GET['bestand'] te vertrouwen, het is in deze opzet een koud kunstje om ieder gewenst bestand op je systeem op te vragen. Bijvoorbeeld de inhoud van index.php, welke weer verwijst naar configuraties e.d.


Helaas. Inhoud blijft leeg.
 
Ben van Velzen

Ben van Velzen

28/05/2016 21:13:37
Quote Anchor link
zet je error reporting eens aan en haal de headers weg, wat krijg je dan?
 
Marco Eilander

Marco Eilander

28/05/2016 22:58:08
Quote Anchor link
Ben van Velzen op 28/05/2016 21:13:37:
zet je error reporting eens aan en haal de headers weg, wat krijg je dan?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: fpassthru() expects parameter 1 to be resource, string given in /home/blablabla/domains/mijndomein.nl/public_html/upload/download.php on line 4


Ik neem aan, dat het gaat om dit stukje : '/opslag/'
Gewijzigd op 28/05/2016 23:05:21 door Marco Eilander
 
Joakim Broden

Joakim Broden

29/05/2016 12:10:29
Quote Anchor link
Marco Eilander op 28/05/2016 12:35:06:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' . filesize(__DIR__ .'/opslag/'.$_GET['bestand']));
    header('Content-Type: image/png');        
    header("Content-Disposition: attachment; filename=".$_GET['bestand']."");
?>


Bij de header 'Content-Length' zit het bestand in de map 'opslag'. Bij de header 'Content-Disposition' niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    header("Content-Disposition: attachment; filename=".__DIR__ ."/opslag/".$_GET['bestand']."");
?>
Gewijzigd op 29/05/2016 12:11:13 door Joakim Broden
 
Ben van Velzen

Ben van Velzen

29/05/2016 12:32:02
Quote Anchor link
En dat is niet relevant. De content disposition mag zelfs geen mapnamen hebben. Doe dit eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' . filesize(__DIR__ .'/opslag/'.$_GET['bestand']));
    header('Content-Type: image/png');        
    header("Content-Disposition: attachment; filename=".$_GET['bestand']);
    readfile(__DIR__ . '/opslag/' . $_GET['bestand']);
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

29/05/2016 14:35:44
Quote Anchor link
My 2c:
- in bestandsnamen kunnen spaties zitten, zet daartoe dubbele quotes om filename, oftewel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
header('Content-Disposition: attachment; filename="'.$fileName.'"');
?>

- voeg een exit-statement aan het einde toe om te voorkomen dat er verder nog output geproduceerd wordt wat het bestand mogelijk kan corrumperen
 
Marco Eilander

Marco Eilander

29/05/2016 18:32:58
Quote Anchor link
Ik denk, dat het toch op één of ander manier corrupt wordt.
Er komt nu wel data in het bestand te staan als ik het open, maar ik blijf de melding krijgen, dat het bestand niet geopend kan worden in de windows 10 app -> Foto's.

Dit heb ik nu:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
    $filename
= $_GET['bestand'];
    $ext = explode(".",$filename);
    if($ext[1] == 'png'){
        header('Content-Type: image/png');
    }

    if($ext[1] == 'jpg'){
        header('Content-Type: image/jpg');
    }

    if($ext[1] == 'jpeg'){
        header('Content-Type: image/jpeg');
    }
    
    if($ext[1] == 'gif'){
        header('Content-Type: image/gif');
    }

    if($ext[1] == 'bmp'){
        header('Content-Type: image/bmp');
    }
    
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' . filesize(__DIR__ .'/opslag/'.$filename));      
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    readfile(__DIR__ . '/opslag/' . $filename);
    exit();
?>


UPDATE

Ik had notepad++ op UTF-8 staan, nu ik het op ANSI heb gezet, werkt het! :)
Gewijzigd op 29/05/2016 18:39:06 door Marco Eilander
 
Thomas van den Heuvel

Thomas van den Heuvel

30/05/2016 00:34:19
Quote Anchor link
Hmm...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$ext
= explode(".",$filename);
// ...
if($ext[1] == 'png'){ // altijd tweede positie $ext[1]?
?>

En wat als je foto nu dit.is.een.test.jpg heet, wat een volledig valide naam is?

De extensie van een bestand is doorgaans alles wat na de laatste punt in de bestandsnaam komt.

Mogelijke verbetering, gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
function getExtension($in) {
    return substr($in, strrpos($in, '.') + 1);
}

?>
 
Marco Eilander

Marco Eilander

30/05/2016 10:47:30
Quote Anchor link
Dat gebeurt niet. ;)
Alle bestanden worden opgeslagen met een willekeurig reeks karakters a-z, A-Z, 0-9 in mijn database.
Mogelijkheid om die bestanden van naam te veranderen is niet mogelijk.
 
Ben van Velzen

Ben van Velzen

30/05/2016 11:01:06
Quote Anchor link
De mogelijkheid om een andere bestandsnaam op te vragen blijft er altijd, en daarmee blijft het gevaarlijk om het zo te doen.
 
Marco Eilander

Marco Eilander

30/05/2016 13:10:32
Quote Anchor link
Er gebeurt niks gevaarlijks, wanneer het bestand niet bestand niet bestaat, downloaden ze gewoon een leeg bestand.
Daarnaast wordt er ook nog gecontroleerd voor het downloaden, of het bestand wel bestaat, zo niet, dan worden ze doorgestuurd naar de index.
 
Ben van Velzen

Ben van Velzen

30/05/2016 14:03:36
Quote Anchor link
Goed, geef mij maar eens een link naar waar dit online staat, dan zal ik je even demonstreren hoe dat te misbruiken is ;-)
Kort gezegd, als je op deze manier werkt gaat het vroeg of laat helemaal fout, en als je betalende klanten hebt gaat geen aansprakelijkheidsverzekering je nog redden. Je bouwt nu tegen beter weten in een hele mooie backdoor in.
Gewijzigd op 30/05/2016 14:06:23 door Ben van Velzen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.