Тестирование PHP для файлов JPG

Я просто делаю небольшую PHP-программу / страницу для удовольствия. Моя конечная цель – позволить себе загрузить файл изображения в мою базу данных mysql. Затем вызовите этот файл в строку в ASCII, а затем вырежьте этот файл для созданного файла JPG.

Чтобы проверить это, я использовал программу FTK Imager вместе с моим веб-сервером, и результаты были менее чем непригодными. Конечно, я довольно новичок в PHP, поэтому я знаю, что, вероятно, есть много вещей, о которых я не знаю, что я делаю неправильно. Поэтому я надеялся получить несколько указателей 🙂

Моя процедура. Создайте и НЕОБХОДИМО использовать файл изображения ad1 с помощью FTK Imager. Я создал образ каталога, содержащего несколько файлов. .docx, .pdf, .jpeg и т. д. Затем я добавил этот файл изображения в свой каталог webservers вместе со своей тестовой страницей. Затем я вызывал страницу через окно браузера.

Я был встречен синглом 6. Это был мой результат, 6. Я попытался сделать эхо некоторую ошибку на этом пути, поскольку код выполняется вместе с некоторыми сообщениями об ошибках и, насколько я могу судить, $ soff не получает предназначенное по той или иной причине (точное значение не имеет значения).

Почему бы не получить правильное значение? Я знаю, что это правильные подписи ASCII Header / Trailer.

Вот мой скрипт с включенными эхо-сигналами и ошибками.

<?php ini_set('display_errors',1); error_reporting(E_ALL); // Search Criterium $jpgs = "ÿØÿà"; echo "yoya Start<br />" . $jpgs; $jpgeoff = "702"; echo "<br />" . $jpgeoff; $jpge = "ÿÙ"; echo "<br />" . $jpge; // Input file to string $ipfile = file_get_contents('testimage.ad1'); // Input file length for math $m1 = strlen($ipfile); echo "<br />" . $m1; // Check for empty file if(isset($ipfile)) { } else { echo "ERROR - Empty File!<br />"; } // Set starting offset with first criterium find $soff = strpos($ipfile, $jpgs); echo "<br />" . $soff; // Do math to find where to start substr to cut first part off beginning of string. $x1 = ($soff - 1); echo "<br />" . $x1; $x2 = ($m1 - $soff); echo "<br />" . $x2; // Execute the final math into cuts. $ipfile = substr($ipfile, $x1, $x2); // New input file length for more math. $m2 = strlen($ipfile); echo "<br />" . $m2; // Set ending offset with jpgeoff to skip false positives for jpegs, then jpge to find real trailer character. $eoff = strpos($ipfile, $jpge, $jpgeoff); echo "<br />" . $eoff; // Do math to find where to start substr to cut second part off end of string. Start at 0 for beginning of jpg, keep chars via math, cuts rest off. $y1 = "0"; echo "<br />" . $y1; $y2 = ($eoff + 1); echo "<br />" . $y2; // Execute the final math into cuts. $ipfile = substr($ipfile, $y1, $y2); // The $ipfile string should now contain the ASCII string of only the JPG file. echo $ipfile; ?> 

Вот результат в моем веб-браузере.

 yoya Start ÿØÿà 702 ÿÙ 16542148 -1 16542148 1 Warning: strpos() [function.strpos]: Offset not contained in string in /var/www/html/test1.php on line 32 0 16 

Я ссылался на свою информацию о подписи файла отсюда http://www.garykessler.net/library/file_sigs.html и проверил это, просмотрев мои файлы jpg в FTK Imager.

Лучше всего я могу понять, что есть другой способ, которым я должен рассказывать сценарию, чтобы найти смещения информации заголовка / подписи на моем изображении.

Любая информация очень приветствуется! Это просто для удовольствия и обучения.

Спасибо 🙂

EDIT – 7/22

Я работал над своим кодом и продолжал. Я сделал некоторые изменения, чтобы лучше отражать структуру файла JPEG, когда он просматривается в шестнадцатеричном виде, и это то, что я буду искать. Я запускаю одну ошибку, кажется, что strpos не «видит» 0? Моя программа возвращается почти по результатам, заголовки и все отлично смотрятся, но strpos или что-то … находит ложное позитивное в этих точках в шестнадцатеричном файле jpeg …

Ложно положительный

Он читает FFD9 с каждой стороны этих двух нулей, когда мне нужен FFD9 рядом с eachother …

Вот мой обновленный код,

 <?php ini_set('display_errors',1); error_reporting(E_ALL); // HEX/STR Functions for converting string to hex and vice versa function strhex($string) { $hex=''; for ($i=0; $i < strlen($string); $i++) { $hex .= dechex(ord($string[$i])); } return $hex; } function hexstr($hex) { $string=''; for ($i=0; $i < strlen($hex)-1; $i+=2) { $string .= chr(hexdec($hex[$i].$hex[$i+1])); } return $string; } // Search Criterium $jpgs = "ffd8ff"; echo "yoya Start<br />" . $jpgs; echo "<br />jpgoff " . $jpgeoff; $jpge = "ffd9"; echo "<br />jpge " . $jpge; // Input file to string $ipfileg = file_get_contents('ti.ad1'); // Turn to hex $ipfile = strhex($ipfileg); // Input file length for math $m1 = strlen($ipfile); echo "<br />m1 " . $m1; // Check for empty file if(isset($ipfile)) { } else { echo "ERROR - Empty File!<br />"; } // Set starting offset with first criterium find $soff = strpos($ipfile, $jpgs); echo "<br />soff " . $soff; // Do math to find where to start substr to cut first part off beginning of string. $x1 = $soff; echo "<br />x1 " . $x1; $x2 = ($m1 - $soff); echo "<br />x2 " . $x2; // Execute the final math into cuts. $ipfile = substr($ipfile, $x1, $x2); // New input file length for more math. $m2 = strlen($ipfile); echo "<br />m2 " . $m2; // Set ending offset. My jpeg test files had three hits for FFD9, so I need to skip two. $eoff1 = strpos($ipfile, $jpge); $eoff2 = ($eoff1 + 1); $eoff3 = strpos($ipfile, $jpge, $eoff2); $eoff4 = ($eoff3 + 1); $eoff = strpos($ipfile, $jpge, $eoff4); echo "<br />eoff " . $eoff; // Do math to find where to start substr to cut second part off end of string. Start at 0 for beginning of jpg, keep chars via math, cuts rest off. $y1 = "0"; echo "<br />y1 " . $y1; $y2 = ($eoff + 4); echo "<br />y2 " . $y2; // Execute the final math into cuts. $ipfile = substr($ipfile, $y1, $y2); // Convert hex to ASCII string. $ipfile = hexstr($ipfile); // The $ipfile string should now contain the ASCII string of only the JPG file. echo "<br />final " . $ipfile; // Create JPG file. file_put_contents("test.jpg", $ipfile); ?> 

Solutions Collecting From Web of "Тестирование PHP для файлов JPG"