Display thumbnailPhoto from Active Directory in PHP - php

I've set up a system to display everyone's name, email address and phone number from Active Directory however I can't get the 'thumbailPhoto' to work.
I have searched around on the internet but haven't been able to find if this is possible or at the very least what format is returned from Active Directory.
I am currently using the adldap class so if it is possible to use this that would be ideal.
Thanks in advance.
Edit:
I can retrieve the data in the thumbnailPhoto attribute and if I dump them straight to the browser I get something like this:
ÿØÿàJFIFððÿá
PExifII*bh~†(2Ži‡¢XCanonCanon EOS 5D Mark
IIIðð2013:05:19 17:35:31š‚à‚è"ˆ'ˆ 0230ð’
’ ’ (’0’8’ ’ ’#‘’11’’11 0100
ÿÿ¢H¢P¢¤¤¤¤ 2013:04:17
11:44:522013:04:17 11:44:52H¹o#B¬ †
è»dnäWµ˜:̦®(¶’
HHÿØÿàJFIFÿÛC $.'
",#(7),01444'9=82<.342ÿÛC
2!!22222222222222222222222222222222222222222222222222ÿÀ–d"ÿÄ
ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚
%&'()456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ
ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()
That isn't all of it but it is a very long string, I am presuming is some sort of binary string?

This seems to be a JPEG-File, so you should be able to send that data together with the appropriate mime-type to the browser. It should be possible to output that image with something like:
<img src="data:image/jpeg;base64,<?php echo base64_encode($imageString); ?>"/>
But it might also be possible to save files of any image format into that thumbnailPhoto attribute. Therefore, I would put the content into a temporary file that will then be served directly from the server. You will need to pass the file through finfo to get the correct mime-type.
So you might do something like this:
$tempFile = tempnam(sys_get_temp_dir(), 'image');
file_put_contents($tempFile, $imageString);
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = explode(';', $finfo->file($tempFile));
echo '<img src="data:' . $mime[0] . ';base64,' . base64_encode($imageString) . '"/>';

Try the code below. It is an adaptation of the answer above.
<?php
$result = ldap_search($ad , $dn , $filter, $attributes);
$aduser = ldap_get_attributes($ad, ldap_first_entry($ad,$result));
?>
<img src="data:image/jpeg;base64,<?php echo base64_encode($aduser['thumbnailPhoto'][0]); ?>" />

when you store the photo data into ldap i.e. "jpegphoto" attribute it should be done by using encode base64.
Reading the attribute is already decoded on fly. Hence I would use something less modified code
$tempFile = tempnam(sys_get_temp_dir(), 'image');
file_put_contents($tempFile, $imageString);
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = explode(';', $finfo->file($tempFile));
header("Content-Type: $mime");
echo $imageString;
This is direct php image write example
you can directly use it under tag img i.e.
<img src="example.php" />

Related

how to convert the image back to jpg format converted using file_get_contents() in php

$bin_string = file_get_contents($_FILES["file"]["name"]); // image reading
$hex_string = base64_encode($bin_string); // encoded image
Saving into database and then retrieving back...
$decoded= base64_decode($message); // decoded image....
In HTML:
<?php header("Content-Length: " . strlen($decoded));
header('Content-Type: image/png'); ?>
<?php echo $decoded ?>
But this is not working.... what else is needed?
Here is the output of base64_encode($bin_string) :
/9j/4AAQSkZJRgABAgEASABIAAD/7Q1oUGhvdG9zaG9wIDMuMAA4QklNA+0KUmVzb2x1dGlvbgAAAAAQAEgAAAABAAEASAAAAAEAAThCSU0EDRhGWCBHbG9iYWwgTGlnaHRpbmcgQW5nbGUAAAAABAAAAHg4QklNBBkSRlggR2xvYmFsIEFsdGl0dWRlAAAAAAQAAAAeOEJJTQPzC1ByaW50IEZsYWdzAAAACQAAAAAAAAAAAQA4QklNBAoOQ29weXJpZ2h0IEZsYWcAAAAAAQAAOEJJTScQFEphcGFuZXNlIFByaW50IEZsYWdzAAAAAAoAAQAAAAAAAAACOEJJTQP1F0NvbG9yIEhhbGZ0b25lIFNldHRpbmdzAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+BdDb2xvciBUcmFuc2ZlciBTZXR0aW5ncwAAAHAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAOEJJTQQIBkd1aWRlcwAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHg1VUkwgb3ZlcnJpZGVzAAAABAAAAAA4QklNBBoGU2xpY2VzAAAAAHMAAAAGAAAAAAAAAAAAAABIAAAAoAAAAAkAYQBpAHIAdABhAHMAdABpAGMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAKAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhCSU0EERFJQ0MgVW50YWdnZWQgRmxhZwAAAAEBADhCSU0EFBdMYXllciBJRCBHZW5lcmF0b3IgQmFzZQAAAAQAAAACOEJJTQQMFU5ldyBXaW5kb3dzIFRodW1ibmFpbAAACcEAAAABAAAAcAAAADIAAAFQAABBoAAACaUAGAAB/9j/4AAQSkZJRgABAgEASABIAAD/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwM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
1)
$_FILES["file"]["name"] contains only name of uploaded file. Real temporary path of uploaded file on your server is stored in $_FILES["file"]["tmp_name"].
$bin_string = file_get_contents($_FILES["file"]["tmp_name"]);
2)
There can be some invisible character printed out before or after the image.
Please ensure that <?php is the first thing on the first row of your file and, for simplicity, remove all other <?php and ?>, including the last one. You can add die; on the last row to end the script to ensure that nothing else is added to the end of image.
I got the solution...
simply convert the image using
$bin_string = file_get_contents($_FILES["file"]["tmp_name"]); // image reading
And then for converting string back to image use the following :
" />

Displaying images stored in a database using PHP

For my current assignment I'm trying to store files into the DB and display them. Currently I have no problem storing the files but I can't display them properly. I'm using this in my main form.
<td><a href=getImage.php?id='.$file[0].'" />Resume</a></td>
And this is the query I'm using to get the file out of the DB.
$sql = "SELECT file FROM table WHERE Res_ID=$referenced_ID";
$result = mysqli_query($dbc, $sql);
$row = mysqli_fetch_assoc($result);
header('Content-type: image/jpg');
echo "<img src=\"{$row['file']}\" /><br />";
The result is
…³V!µÔ¢ošweöÿZ–îÌèEÈÎpEJ·˜kä€òþòâ­Gas
È*G¨¥vA¤uEN¤S]‰:ñY“iwØ8‡¥e]ØÝGÑ‘øQÍ!«3¨ÄvÙÁu§]zÕÿOã^ssÌuáY7WP“ÔT6Æà™ëâþÊQË!üi­oe8
9ô5ã?ÛSÇÔ‘RÃ⛘VCBh¹>ϳ=BïÃVwåçÔW#¯|8†ufŠ4ob1PiÞ=q(,>µÐYx®Æ÷¥ò›Ñ5b½äy6«ðÆbͲϡ®fóá–
í„ξ‹’xvîYVEöæ«6§]|²½ýj‡Ï#åËßjv™-k.u\ŠÈ›O–#ó!ЊúÊmcLþ-¹ïšÆÔ4ïkùñE¸ÿ0h±j§‘òù
Ԉ켯íº×ÂÝã/g:»¸âïþ=³-²û?áHÑI3ŒKÙW¨ÍNºŽî-¶_Ã#IÙ¸{Tiû¸>â€3ÿu7#V[àü­š‘í•ùT[9\Ó’ª?oçJ©ù…69Ùxß÷¹©ö¼
|ÊOµ°™W##êàÔ²iw®»–uõ5Eíåˆà«ôÅHä¯"‘\PˆÙŽ>ïÖœÖò'¡÷†^Ž#3Sg+ÀéYžt±uBG­>=H'ÞB>”À¾7ƒè)É#)åsU×S‰‡R>µ"\£ô4‹é"ç=D/ÿ-
š¦¼ô©àuCó'´‰ Ë7çPëÑ¿Z½åÛÌ>\Mk
&ʱœÒ0ê*#)ÏAV怩#Bd`^):ܲ¯ü*îÛERk†^ù¦CiÃsõ¦
ší¹Îj¬“*øhf﶑¬†CqíH’ëëIæsŒŠÐ{=ÍW{
:dÓ¸aÐœýjXîæCÃA:æ”CŽÿe5iG£}h7I7ßCüê¬8èqP–t<Ò…©£¸MÄúbª¼EM'ÚJš‘oPýôϽHˆ2GµZ¶¾T
H/Ò¢yb“§ò¦R9ÓC6,n...
I'm using images as a sample at the moment but the finished php should eventually allow to display PDF documents. If it's any help I'm using phpmyadmin and MySQLi.
As the comments suggest, storing the file location in the database is much better than storing the file's data in the database. BUT if you need to store the file contents in the database for some reason, there are two methods. One is using the HTML data: URL and the other is having a PHP file as the middle man.
For the PHP Middle Man method, look at the answer above mine where it sets the header information and then echo's the file contents. The file extension doesn't matter since browsers refer to the content-type header instead of file extensions.
For the Data URL method, which can be placed directly in your code easily check out http://en.wikipedia.org/wiki/Data_URI_scheme
<?php
// Array of valid Mime Types, prevents possible XSS methods.
$valid_mimes = array(
'image/png',
'image/gif',
'image/jpeg'
);
// Obtain Mime Type using finfo
// Finfo allows for strings instead of file path
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->buffer($row['file']);
// Check if mime is in our $valid_mimes array
if(!in_array($mime,$valid_mimes)) {
// Handle Error
echo 'Illegal Mime Type: '.$mime;
die();
}
$b64 = base64_encode($row['file']);
echo '<img src="data:'.$mime.';base64,'.$b64.'" />';
?>
You cant output <img src=\ as an output it will corrupt the image file and
Please use getImage.php as a different file to output images or verify that no output is printed before,after or in mid of image else it will corrupt the image.
if(isset($_GET['id'])){
$sql = "SELECT file FROM table WHERE Res_ID=$referenced_ID";
$result = mysqli_query($dbc, $sql);
$row = mysqli_fetch_assoc($result);
header('Content-type: image/jpg');
echo $row['file'];
}

Overwrite text in a specific div in a file (PHP HTML)

I am creating a slideshow editor. I have been able to parse a file and present it to the user in a form. Now I need to figure out how to write the saved information to the file. I want the user to be able to edit the information before and after the slideshow, so there is no specific set of information to be able to overwrite the whole file.
If there is a way to get all of the text before the div and copy it to the variable, add the new information, then get the rest of the information after the div and add that to the variable and then write all that information to the file, then that would work. Otherwise, here is what I have put together.
/* Set Variables */
$x = $_POST['x'];
$file = $_POST['file'];
$path = '../../yardworks/content_pages/' . $file;
$z=0;
while ($z<$x){
$title[$z] = $_POST['image-title'.$z];
$description[$z] = $_POST['image-desc'.$z];
$z++;
}
for ($y=0; $y<$x; $y++){
$contents .= '<li>
<a class="thumb" href="images/garages/'.$file[$y].'">
<img src="images/garages/'.$file[$y].'" alt="'.$title[$y].'" height="100px" width="130px" class="slideshow-img" />
</a>
<div class="caption">
<div class="image-title">'.$file[$y].'</div>
<div class="image-desc">'.$description[$y].'</div>
</div>
</li>';
}
/* Create string of contents */
$mydoc = new DOMDocument('1.0', 'UTF-8');
$mydoc->loadHTMLFile($path);
$mydoc->getElementById("replace")->nodeValue = $contents;
$mydoc->saveHTMLFile($path);
$file = file_get_contents($path);
$file = str_replace("<", "<", $file);
$file = str_replace(">", ">", $file);
file_put_contents($path, $file);
?>
Nothing throws out an error, but the file also remains unchanged. Is there anything I can change or fix to make it write to the file? This is all I have been able to find regarding this specific problem.
I would like to stick to one language, but if I find a way to write to the file using javascript, do the php variables pass on to the javascript section or do I have to stick with one language?
**Edit
Everything is working. ONE problem: is there a way to keep the special characters without converting them? I need the < and > to stay as they are and not convert to a string
I have decided to save the file as it is and use a separate code set to replace the string. I have edited my question above.

remove special characters before upload file

with the code below I get an image through a form on a html page, make some cuts in it and add another image to it, it's working perfectly.
I'm having problems with special characters in the name of the image that I got from the html form ...
In short, before you upload, crop images, move them, etc., I must treat their name ... removing blank spaces, remove accents, etc. ..
I tried to use some functions but without success .. Can someone give a help?
Here my code:
<?php
require( "./lib/WideImage.php");
// Example of accessing data for a newly uploaded file
$fileName = $_FILES["uploaded_file"]["name"];
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"];
// Path and file name
$pathAndName = "cartelas/cart".$fileName;
// Run the move_uploaded_file() function here
$moveResult = move_uploaded_file($fileTmpLoc, $pathAndName);
// Evaluate the value returned from the function if needed
$image = WideImage::load($pathAndName);
$unh = WideImage::load("unh11.png");
$crop1 = $image->crop("25", "50", 111, 132);
$out1 = $crop1->merge($unh,'middle','middle');
$pathAndName1 = "unha-1-".$fileName;
$crop1->saveToFile('./cartelas/estampa'.$pathAndName1);
$out1->saveToFile('./cartelas/'.$pathAndName1);
echo "Imagens geradas:<BR>";
echo "<img src=./cartelas/estampa$pathAndName1><img src=./cartelas/$pathAndName1>";
?>
Thank you!
if u want to do it on php side you can do whatever you want with a filename. If you don't have to have exact same name you can use rawurlencode() or base64_encode(); or even md5() hash from the name. This should solve problems with weird names or special chars.
If u need store all this files u can do $newfilename = md5($filename) . '_' . uniqid(); so they will be unique. You can add also user id or something like that.
imclickingmaniac it would lose its extension if you do that! so instead do...
<?php
$ext=pathinfo($_FILES["file1"]["name"], PATHINFO_EXTENSION);
$fileName=md5($fileName);
$fileName="$fileName.$ext";
?>

PHP: Image retrieval from MySQL Blob directly into <img> tag

I've stored my Images into (Medium) BLOB fields and want to retrieve them embedded within my PHP-generated web pages.
When I test retrieving the stored images using
header('Content-type: ' . $image['mime_type']);
echo $image['file_data'];
everything looks just fine.
However, I have not yet found a way to retrieve the image(s) cleanly into the middle of my documents. For example, using
$image = $row['file_data'];
echo '<img src="data:image/jpeg;base64,'.$image['file_data'].'" alt="photo"><br>';
...or...
$im = imageCreateFromString($image);
I just wind up with a bunch of hexadecimal garbage on screen.
I intitially stored the Images using:
ob_start();
imagejpeg($resizedImage, null, 100);
$content = ob_get_contents();
ob_end_clean();
$sql = sprintf(
"insert into images (filename, mime_type, file_size, file_data, event_id)
values ('%s', '%s', %d, '%s',%d)",
mysql_real_escape_string($fileName),
mysql_real_escape_string($mimeType),
$imageSize,
mysql_real_escape_string($content),
$eventID
);
$result = $cn->query($sql);
Does anyone PLEASE have a working code snippet to successfully display the stored .jpg mid-file in the PHP output?
echo '<img src="data:image/jpeg;base64,'.base64_encode($image['file_data']).'" alt="photo"><br>';
However, remember that old IE versions do not support this kind of inline images! Besides that, the browser cannot cache such an image except together with its containing HTML page.
You should create some sort of "image server". You're already close to that.
For example, create something like image.php that will get a image name and will generate it on the fly.
So, for example, say you want to get somePic.jpg image. You can get it through:
image.php?name=somePic.jpg
<?php
header('Content-type: ' . $image['mime_type']);
echo $image['file_data'];
?>
Your tag:
<img src='image.php?name=somePic.jpg' />
Or more general:
echo "<img src='image.php?name={$image['filename']}' />"
Why not just call your test page image.php, then have it called from the browser on the rendered page:
<img src="image.php?imageid=123" alt="photo" />

Categories