2012-05-12 2 views
2

Я хотел бы использовать PHP для загрузки файла по типу файла, не зная имя или местоположение файлов, возможно ли это? файл будет открыт/добавлен другой HTML-страницей, которая передает файл.PHP - как открыть файл, который передается на страницу по файлу

Сценарий, который я хочу сделать, сможет найти URL-адрес всех файлов определенного типа файлов, потокового/открытого/включенного (извините, что не знаю правильного термина) на отдельной странице HTML.

поэтому PHP-скрипт должен будет открыть страницу, определить, какие файлы передаются на этой странице, и выбрать файл с правильным типом файла. это та часть, которую я не знаю, как писать, или даже если это возможно.

Если это не объясняет проблему достаточно хорошо, я добавлю больше.

+0

Я думаю, вам нужно немного прояснить проблему. Не могли бы вы использовать прецедент? Например, On 'a.html' Пользователь A выполняет [Action1], а на' b.html' Admin видит результат действия User A. (Я думаю, что это как раз то, что вы получаете?) – garromark

+0

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

+0

Как вы думаете, «file_get_contents» будет работать для этого?Я понимаю, что это странное использование PHP, но из-за интерактивности с веб-страницей, я думаю, что php - лучший выбор. –

ответ

1

Лучший способ определить тип файла - это изучить первые несколько байтов файла, называемые [magic bytes].

<?php 
     $file = "/path/to/file"; 

    // in PHP 4, we can do: 
    $fhandle = finfo_open(FILEINFO_MIME); 
    $mime_type = finfo_file($fhandle,$file); // e.g. gives "image/jpeg" 

    // in PHP 5, we can do: 

    $file_info = new finfo(FILEINFO_MIME); // object oriented approach! 
    $mime_type = $file_info->buffer(file_get_contents($file)); // e.g. gives "image/jpeg" 

    switch($mime_type) { 
     case "image/jpeg": 
      // your actions go here... 
    } 
?> 

и вот массив всех типов пантомимы:

$mime_types = array("323" => "text/h323", 
"acx" => "application/internet-property-stream", 
"ai" => "application/postscript", 
"aif" => "audio/x-aiff", 
"aifc" => "audio/x-aiff", 
"aiff" => "audio/x-aiff", 
"asf" => "video/x-ms-asf", 
"asr" => "video/x-ms-asf", 
"asx" => "video/x-ms-asf", 
"au" => "audio/basic", 
"avi" => "video/x-msvideo", 
"axs" => "application/olescript", 
"bas" => "text/plain", 
"bcpio" => "application/x-bcpio", 
"bin" => "application/octet-stream", 
"bmp" => "image/bmp", 
"c" => "text/plain", 
"cat" => "application/vnd.ms-pkiseccat", 
"cdf" => "application/x-cdf", 
"cer" => "application/x-x509-ca-cert", 
"class" => "application/octet-stream", 
"clp" => "application/x-msclip", 
"cmx" => "image/x-cmx", 
"cod" => "image/cis-cod", 
"cpio" => "application/x-cpio", 
"crd" => "application/x-mscardfile", 
"crl" => "application/pkix-crl", 
"crt" => "application/x-x509-ca-cert", 
"csh" => "application/x-csh", 
"css" => "text/css", 
"dcr" => "application/x-director", 
"der" => "application/x-x509-ca-cert", 
"dir" => "application/x-director", 
"dll" => "application/x-msdownload", 
"dms" => "application/octet-stream", 
"doc" => "application/msword", 
"dot" => "application/msword", 
"dvi" => "application/x-dvi", 
"dxr" => "application/x-director", 
"eps" => "application/postscript", 
"etx" => "text/x-setext", 
"evy" => "application/envoy", 
"exe" => "application/octet-stream", 
"fif" => "application/fractals", 
"flr" => "x-world/x-vrml", 
"gif" => "image/gif", 
"gtar" => "application/x-gtar", 
"gz" => "application/x-gzip", 
"h" => "text/plain", 
"hdf" => "application/x-hdf", 
"hlp" => "application/winhlp", 
"hqx" => "application/mac-binhex40", 
"hta" => "application/hta", 
"htc" => "text/x-component", 
"htm" => "text/html", 
"html" => "text/html", 
"htt" => "text/webviewhtml", 
"ico" => "image/x-icon", 
"ief" => "image/ief", 
"iii" => "application/x-iphone", 
"ins" => "application/x-internet-signup", 
"isp" => "application/x-internet-signup", 
"jfif" => "image/pipeg", 
"jpe" => "image/jpeg", 
"jpeg" => "image/jpeg", 
"jpg" => "image/jpeg", 
"js" => "application/x-javascript", 
"latex" => "application/x-latex", 
"lha" => "application/octet-stream", 
"lsf" => "video/x-la-asf", 
"lsx" => "video/x-la-asf", 
"lzh" => "application/octet-stream", 
"m13" => "application/x-msmediaview", 
"m14" => "application/x-msmediaview", 
"m3u" => "audio/x-mpegurl", 
"man" => "application/x-troff-man", 
"mdb" => "application/x-msaccess", 
"me" => "application/x-troff-me", 
"mht" => "message/rfc822", 
"mhtml" => "message/rfc822", 
"mid" => "audio/mid", 
"mny" => "application/x-msmoney", 
"mov" => "video/quicktime", 
"movie" => "video/x-sgi-movie", 
"mp2" => "video/mpeg", 
"mp3" => "audio/mpeg", 
"mpa" => "video/mpeg", 
"mpe" => "video/mpeg", 
"mpeg" => "video/mpeg", 
"mpg" => "video/mpeg", 
"mpp" => "application/vnd.ms-project", 
"mpv2" => "video/mpeg", 
"ms" => "application/x-troff-ms", 
"mvb" => "application/x-msmediaview", 
"nws" => "message/rfc822", 
"oda" => "application/oda", 
"p10" => "application/pkcs10", 
"p12" => "application/x-pkcs12", 
"p7b" => "application/x-pkcs7-certificates", 
"p7c" => "application/x-pkcs7-mime", 
"p7m" => "application/x-pkcs7-mime", 
"p7r" => "application/x-pkcs7-certreqresp", 
"p7s" => "application/x-pkcs7-signature", 
"pbm" => "image/x-portable-bitmap", 
"pdf" => "application/pdf", 
"pfx" => "application/x-pkcs12", 
"pgm" => "image/x-portable-graymap", 
"pko" => "application/ynd.ms-pkipko", 
"pma" => "application/x-perfmon", 
"pmc" => "application/x-perfmon", 
"pml" => "application/x-perfmon", 
"pmr" => "application/x-perfmon", 
"pmw" => "application/x-perfmon", 
"pnm" => "image/x-portable-anymap", 
"pot" => "application/vnd.ms-powerpoint", 
"ppm" => "image/x-portable-pixmap", 
"pps" => "application/vnd.ms-powerpoint", 
"ppt" => "application/vnd.ms-powerpoint", 
"prf" => "application/pics-rules", 
"ps" => "application/postscript", 
"pub" => "application/x-mspublisher", 
"qt" => "video/quicktime", 
"ra" => "audio/x-pn-realaudio", 
"ram" => "audio/x-pn-realaudio", 
"ras" => "image/x-cmu-raster", 
"rgb" => "image/x-rgb", 
"rmi" => "audio/mid", 
"roff" => "application/x-troff", 
"rtf" => "application/rtf", 
"rtx" => "text/richtext", 
"scd" => "application/x-msschedule", 
"sct" => "text/scriptlet", 
"setpay" => "application/set-payment-initiation", 
"setreg" => "application/set-registration-initiation", 
"sh" => "application/x-sh", 
"shar" => "application/x-shar", 
"sit" => "application/x-stuffit", 
"snd" => "audio/basic", 
"spc" => "application/x-pkcs7-certificates", 
"spl" => "application/futuresplash", 
"src" => "application/x-wais-source", 
"sst" => "application/vnd.ms-pkicertstore", 
"stl" => "application/vnd.ms-pkistl", 
"stm" => "text/html", 
"svg" => "image/svg+xml", 
"sv4cpio" => "application/x-sv4cpio", 
"sv4crc" => "application/x-sv4crc", 
"t" => "application/x-troff", 
"tar" => "application/x-tar", 
"tcl" => "application/x-tcl", 
"tex" => "application/x-tex", 
"texi" => "application/x-texinfo", 
"texinfo" => "application/x-texinfo", 
"tgz" => "application/x-compressed", 
"tif" => "image/tiff", 
"tiff" => "image/tiff", 
"tr" => "application/x-troff", 
"trm" => "application/x-msterminal", 
"tsv" => "text/tab-separated-values", 
"txt" => "text/plain", 
"uls" => "text/iuls", 
"ustar" => "application/x-ustar", 
"vcf" => "text/x-vcard", 
"vrml" => "x-world/x-vrml", 
"wav" => "audio/x-wav", 
"wcm" => "application/vnd.ms-works", 
"wdb" => "application/vnd.ms-works", 
"wks" => "application/vnd.ms-works", 
"wmf" => "application/x-msmetafile", 
"wps" => "application/vnd.ms-works", 
"wri" => "application/x-mswrite", 
"wrl" => "x-world/x-vrml", 
"wrz" => "x-world/x-vrml", 
"xaf" => "x-world/x-vrml", 
"xbm" => "image/x-xbitmap", 
"xla" => "application/vnd.ms-excel", 
"xlc" => "application/vnd.ms-excel", 
"xlm" => "application/vnd.ms-excel", 
"xls" => "application/vnd.ms-excel", 
"xlt" => "application/vnd.ms-excel", 
"xlw" => "application/vnd.ms-excel", 
"xof" => "x-world/x-vrml", 
"xpm" => "image/x-xpixmap", 
"xwd" => "image/x-xwindowdump", 
"z" => "application/x-compress", 
"zip" => "application/zip"); 

чек здесь: Best way to recognize a filetype in php

+0

спасибо, это помогает решить часть проблемы, однако другой вопрос заключается в том, как найти файлы, транслируемые страница? это полезно, большое спасибо –

2

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

Если вы хотите общее решение, которое работает для , то большинство всех веб-страниц ... Я думаю, что единственным действительно хорошим рабочим решением является захват необработанных сетевых данных, например, через пакетный сниффер, а затем попросите свой php-скрипт сообщить веб-браузеру, установленному на вашем сервере, какую веб-страницу загружать. Причина в том, что потоковая передача мультимедиа часто включает в себя плагины браузера (java, flash, silverlight и т. Д.) Или javascript. По большей части они должны быть выполнены до того, как будет создан желаемый URL-адрес, поскольку URL-адрес может быть собран из фрагментов данных, или, возможно, URL-адрес находится во внешнем файле, который необходимо загрузить первым ... многочисленны.

Но ... веб-браузер может понять все. Просто позвольте ему начать потоковое воспроизведение в течение секунды, и все время, пока вы смотрите через сниффер пакетов и ищете интересующий вас тип mime, и URL-адрес для него будет в данных, все проанализированы и готовы для вас.

на второй взгляд - забудьте об уменьшении количества пакетов. просто напишите расширение браузера. если firebug может видеть все запрашиваемые URL-адреса, то и ваше расширение. firebug также является открытым исходным кодом, поэтому вы можете видеть, как они это делают. добавьте свое расширение в адрес локального файла или скрипта.

fyi- Это задача для опытного программиста, а не для новичков.

+0

«Это задача для опытного программиста, а не для новичков». да, вот почему я думал, что использование php i сможет взаимодействовать с веб-страницей и поддерживать простоту программирования. однако я думаю, что я либо возьму ваш совет и сделаю аддон браузера, либо попробую использовать python, так как это не то, для чего php предназначен, мне нужно что-то более гибкое. благодаря –

Смежные вопросы