Alpha Framework alpha--util
[ class tree: alpha--util ] [ index: alpha--util ] [ all elements ]

Source for file AlphaFileUtils.inc

Documentation is available at AlphaFileUtils.inc

  1. <?php
  2.  
  3. /**
  4.  * A utility class for carrying out various file system tasks
  5.  * 
  6.  * @package alpha::util
  7.  * @since 1.0
  8.  * @author John Collins <dev@alphaframework.org>
  9.  * @version $Id: AlphaFileUtils.inc 1454 2011-12-04 15:14:05Z johnc $
  10.  * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
  11.  * @copyright Copyright (c) 2011, John Collins (founder of Alpha Framework).
  12.  *  All rights reserved.
  13.  * 
  14.  *  <pre>
  15.  *  Redistribution and use in source and binary forms, with or
  16.  *  without modification, are permitted provided that the
  17.  *  following conditions are met:
  18.  * 
  19.  *  * Redistributions of source code must retain the above
  20.  *    copyright notice, this list of conditions and the
  21.  *    following disclaimer.
  22.  *  * Redistributions in binary form must reproduce the above
  23.  *    copyright notice, this list of conditions and the
  24.  *    following disclaimer in the documentation and/or other
  25.  *    materials provided with the distribution.
  26.  *  * Neither the name of the Alpha Framework nor the names
  27.  *    of its contributors may be used to endorse or promote
  28.  *    products derived from this software without specific
  29.  *    prior written permission.
  30.  *   
  31.  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  32.  *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  33.  *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  34.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  35.  *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  36.  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  37.  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  38.  *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  39.  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  40.  *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  41.  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  42.  *  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  43.  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  44.  *  </pre>
  45.  *  
  46.  */
  47. class AlphaFileUtils {
  48.  
  49.     /**
  50.      * A hash array for mapping file extensions to MIME types.
  51.      * 
  52.      * @var array 
  53.      * @since 1.0
  54.      */
  55.     private static $extensionToMIMEMappings array (
  56.         '3dm' => 'x-world/x-3dmf',
  57.         '3dmf' => 'x-world/x-3dmf',
  58.         'a' => 'application/octet-stream',
  59.         'aab' => 'application/x-authorware-bin',
  60.         'aam' => 'application/x-authorware-map',
  61.         'aas' => 'application/x-authorware-seg',
  62.         'abc' => 'text/vnd.abc',
  63.         'acgi' => 'text/html',
  64.         'afl' => 'video/animaflex',
  65.         'ai' => 'application/postscript',
  66.         'aif' => 'audio/aiff',
  67.         'aifc' => 'audio/aiff',
  68.         'aiff' => 'audio/aiff',
  69.         'aim' => 'application/x-aim',
  70.         'aip' => 'text/x-audiosoft-intra',
  71.         'ani' => 'application/x-navi-animation',
  72.         'aos' => 'application/x-nokia-9000-communicator-add-on-software',
  73.         'aps' => 'application/mime',
  74.         'arc' => 'application/octet-stream',
  75.         'arj' => 'application/arj',
  76.         'art' => 'image/x-jg',
  77.         'asf' => 'video/x-ms-asf',
  78.         'asm' => 'text/x-asm',
  79.         'asp' => 'text/asp',
  80.         'asx' => 'application/x-mplayer2',
  81.         'au' => 'audio/basic',
  82.         'avi' => 'application/x-troff-msvideo',
  83.         'avs' => 'video/avs-video',
  84.         'bcpio' => 'application/x-bcpio',
  85.         'bin' => 'application/octet-stream',
  86.         'bm' => 'image/bmp',
  87.         'bmp' => 'image/bmp',
  88.         'boo' => 'application/book',
  89.         'book' => 'application/book',
  90.         'boz' => 'application/x-bzip2',
  91.         'bsh' => 'application/x-bsh',
  92.         'bz' => 'application/x-bzip',
  93.         'bz2' => 'application/x-bzip2',
  94.         'c' => 'text/plain',
  95.         'c++' => 'text/plain',
  96.         'cat' => 'application/vnd.ms-pki.seccat',
  97.         'cc' => 'text/plain',
  98.         'ccad' => 'application/clariscad',
  99.         'cco' => 'application/x-cocoa',
  100.         'cdf' => 'application/cdf',
  101.         'cer' => 'application/pkix-cert',
  102.         'cha' => 'application/x-chat',
  103.         'chat' => 'application/x-chat',
  104.         'class' => 'application/java',
  105.         'com' => 'application/octet-stream',
  106.         'conf' => 'text/plain',
  107.         'cpio' => 'application/x-cpio',
  108.         'cpp' => 'text/x-c',
  109.         'cpt' => 'application/mac-compactpro',
  110.         'crl' => 'application/pkcs-crl',
  111.         'crt' => 'application/pkix-cert',
  112.         'csh' => 'application/x-csh',
  113.         'css' => 'application/x-pointplus',
  114.         'cxx' => 'text/plain',
  115.         'dcr' => 'application/x-director',
  116.         'deepv' => 'application/x-deepv',
  117.         'def' => 'text/plain',
  118.         'der' => 'application/x-x509-ca-cert',
  119.         'dif' => 'video/x-dv',
  120.         'dir' => 'application/x-director',
  121.         'dl' => 'video/dl',
  122.         'doc' => 'application/msword',
  123.         'dot' => 'application/msword',
  124.         'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  125.         'dp' => 'application/commonground',
  126.         'drw' => 'application/drafting',
  127.         'dump' => 'application/octet-stream',
  128.         'dv' => 'video/x-dv',
  129.         'dvi' => 'application/x-dvi',
  130.         'dwf' => 'drawing/x-dwf (old)',
  131.         'dwg' => 'application/acad',
  132.         'dxf' => 'application/dxf',
  133.         'dxr' => 'application/x-director',
  134.         'el' => 'text/x-script.elisp',
  135.         'elc' => 'application/x-bytecode.elisp (compiled elisp)',
  136.         'env' => 'application/x-envoy',
  137.         'eps' => 'application/postscript',
  138.         'es' => 'application/x-esrehber',
  139.         'etx' => 'text/x-setext',
  140.         'evy' => 'application/envoy',
  141.         'exe' => 'application/octet-stream',
  142.         'f' => 'text/plain',
  143.         'f77' => 'text/x-fortran',
  144.         'f90' => 'text/plain',
  145.         'fdf' => 'application/vnd.fdf',
  146.         'fif' => 'application/fractals',
  147.         'fli' => 'video/fli',
  148.         'flo' => 'image/florian',
  149.         'flx' => 'text/vnd.fmi.flexstor',
  150.         'fmf' => 'video/x-atomic3d-feature',
  151.         'for' => 'text/plain',
  152.         'fpx' => 'image/vnd.fpx',
  153.         'frl' => 'application/freeloader',
  154.         'funk' => 'audio/make',
  155.         'g' => 'text/plain',
  156.         'g3' => 'image/g3fax',
  157.         'gif' => 'image/gif',
  158.         'gl' => 'video/gl',
  159.         'gsd' => 'audio/x-gsm',
  160.         'gsm' => 'audio/x-gsm',
  161.         'gsp' => 'application/x-gsp',
  162.         'gss' => 'application/x-gss',
  163.         'gtar' => 'application/x-gtar',
  164.         'gz' => 'application/x-compressed',
  165.         'gzip' => 'application/x-gzip',
  166.         'h' => 'text/plain',
  167.         'hdf' => 'application/x-hdf',
  168.         'help' => 'application/x-helpfile',
  169.         'hgl' => 'application/vnd.hp-hpgl',
  170.         'hh' => 'text/plain',
  171.         'hlb' => 'text/x-script',
  172.         'hlp' => 'application/hlp',
  173.         'hpg' => 'application/vnd.hp-hpgl',
  174.         'hpgl' => 'application/vnd.hp-hpgl',
  175.         'hqx' => 'application/binhex',
  176.         'hta' => 'application/hta',
  177.         'htc' => 'text/x-component',
  178.         'htm' => 'text/html',
  179.         'html' => 'text/html',
  180.         'htmls' => 'text/html',
  181.         'htt' => 'text/webviewhtml',
  182.         'htx' => 'text/html',
  183.         'ice' => 'x-conference/x-cooltalk',
  184.         'ico' => 'image/x-icon',
  185.         'idc' => 'text/plain',
  186.         'ief' => 'image/ief',
  187.         'iefs' => 'image/ief',
  188.         'iges' => 'application/iges',
  189.         'igs' => 'application/iges',
  190.         'ima' => 'application/x-ima',
  191.         'imap' => 'application/x-httpd-imap',
  192.         'inf' => 'application/inf',
  193.         'ins' => 'application/x-internett-signup',
  194.         'ip' => 'application/x-ip2',
  195.         'isu' => 'video/x-isvideo',
  196.         'it' => 'audio/it',
  197.         'iv' => 'application/x-inventor',
  198.         'ivr' => 'i-world/i-vrml',
  199.         'ivy' => 'application/x-livescreen',
  200.         'jam' => 'audio/x-jam',
  201.         'jav' => 'text/plain',
  202.         'java' => 'text/plain',
  203.         'jcm' => 'application/x-java-commerce',
  204.         'jfif' => 'image/jpeg',
  205.         'jfif-tbnl' => 'image/jpeg',
  206.         'jpe' => 'image/jpeg',
  207.         'jpeg' => 'image/jpeg',
  208.         'jpg' => 'image/jpeg',
  209.         'jps' => 'image/x-jps',
  210.         'js' => 'application/x-javascript',
  211.         'jut' => 'image/jutvision',
  212.         'kar' => 'audio/midi',
  213.         'ksh' => 'application/x-ksh',
  214.         'la' => 'audio/nspaudio',
  215.         'lam' => 'audio/x-liveaudio',
  216.         'latex' => 'application/x-latex',
  217.         'lha' => 'application/lha',
  218.         'lhx' => 'application/octet-stream',
  219.         'list' => 'text/plain',
  220.         'lma' => 'audio/nspaudio',
  221.         'log' => 'text/plain',
  222.         'lsp' => 'application/x-lisp',
  223.         'lst' => 'text/plain',
  224.         'lsx' => 'text/x-la-asf',
  225.         'ltx' => 'application/x-latex',
  226.         'lzh' => 'application/octet-stream',
  227.         'lzx' => 'application/lzx',
  228.         'm' => 'text/plain',
  229.         'm1v' => 'video/mpeg',
  230.         'm2a' => 'audio/mpeg',
  231.         'm2v' => 'video/mpeg',
  232.         'm3u' => 'audio/x-mpequrl',
  233.         'man' => 'application/x-troff-man',
  234.         'map' => 'application/x-navimap',
  235.         'mar' => 'text/plain',
  236.         'mbd' => 'application/mbedlet',
  237.         'mc$' => 'application/x-magic-cap-package-1.0',
  238.         'mcd' => 'application/mcad',
  239.         'mcf' => 'image/vasa',
  240.         'mcp' => 'application/netmc',
  241.         'me' => 'application/x-troff-me',
  242.         'mht' => 'message/rfc822',
  243.         'mhtml' => 'message/rfc822',
  244.         'mid' => 'application/x-midi',
  245.         'midi' => 'application/x-midi',
  246.         'mif' => 'application/x-frame',
  247.         'mime' => 'message/rfc822',
  248.         'mjf' => 'audio/x-vnd.audioexplosion.mjuicemediafile',
  249.         'mjpg' => 'video/x-motion-jpeg',
  250.         'mm' => 'application/base64',
  251.         'mme' => 'application/base64',
  252.         'mod' => 'audio/mod',
  253.         'moov' => 'video/quicktime',
  254.         'mov' => 'video/quicktime',
  255.         'movie' => 'video/x-sgi-movie',
  256.         'mp2' => 'audio/mpeg',
  257.         'mp3' => 'audio/mpeg3',
  258.         'mpa' => 'audio/mpeg',
  259.         'mpc' => 'application/x-project',
  260.         'mpe' => 'video/mpeg',
  261.         'mpeg' => 'video/mpeg',
  262.         'mpg' => 'audio/mpeg',
  263.         'mpga' => 'audio/mpeg',
  264.         'mpp' => 'application/vnd.ms-project',
  265.         'mpt' => 'application/x-project',
  266.         'mpv' => 'application/x-project',
  267.         'mpx' => 'application/x-project',
  268.         'mrc' => 'application/marc',
  269.         'ms' => 'application/x-troff-ms',
  270.         'mv' => 'video/x-sgi-movie',
  271.         'my' => 'audio/make',
  272.         'mzz' => 'application/x-vnd.audioexplosion.mzz',
  273.         'nap' => 'image/naplps',
  274.         'naplps' => 'image/naplps',
  275.         'nc' => 'application/x-netcdf',
  276.         'ncm' => 'application/vnd.nokia.configuration-message',
  277.         'nif' => 'image/x-niff',
  278.         'niff' => 'image/x-niff',
  279.         'nix' => 'application/x-mix-transfer',
  280.         'nsc' => 'application/x-conference',
  281.         'nvd' => 'application/x-navidoc',
  282.         'o' => 'application/octet-stream',
  283.         'oda' => 'application/oda',
  284.         'omc' => 'application/x-omc',
  285.         'omcd' => 'application/x-omcdatamaker',
  286.         'omcr' => 'application/x-omcregerator',
  287.         'p' => 'text/x-pascal',
  288.         'p10' => 'application/pkcs10',
  289.         'p12' => 'application/pkcs-12',
  290.         'p7a' => 'application/x-pkcs7-signature',
  291.         'p7c' => 'application/pkcs7-mime',
  292.         'p7m' => 'application/pkcs7-mime',
  293.         'p7r' => 'application/x-pkcs7-certreqresp',
  294.         'p7s' => 'application/pkcs7-signature',
  295.         'part' => 'application/pro_eng',
  296.         'pas' => 'text/pascal',
  297.         'pbm' => 'image/x-portable-bitmap',
  298.         'pcl' => 'application/vnd.hp-pcl',
  299.         'pct' => 'image/x-pict',
  300.         'pcx' => 'image/x-pcx',
  301.         'pdb' => 'chemical/x-pdb',
  302.         'pdf' => 'application/pdf',
  303.         'pfunk' => 'audio/make',
  304.         'pgm' => 'image/x-portable-graymap',
  305.         'pic' => 'image/pict',
  306.         'pict' => 'image/pict',
  307.         'pkg' => 'application/x-newton-compatible-pkg',
  308.         'pko' => 'application/vnd.ms-pki.pko',
  309.         'pl' => 'text/plain',
  310.         'plx' => 'application/x-pixclscript',
  311.         'pm' => 'image/x-xpixmap',
  312.         'pm4' => 'application/x-pagemaker',
  313.         'pm5' => 'application/x-pagemaker',
  314.         'png' => 'image/png',
  315.         'pnm' => 'application/x-portable-anymap',
  316.         'pot' => 'application/mspowerpoint',
  317.         'pov' => 'model/x-pov',
  318.         'ppa' => 'application/vnd.ms-powerpoint',
  319.         'ppm' => 'image/x-portable-pixmap',
  320.         'pps' => 'application/mspowerpoint',
  321.         'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
  322.         'ppt' => 'application/mspowerpoint',
  323.         'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  324.         'ppz' => 'application/mspowerpoint',
  325.         'pre' => 'application/x-freelance',
  326.         'prt' => 'application/pro_eng',
  327.         'ps' => 'application/postscript',
  328.         'psd' => 'application/octet-stream',
  329.         'pvu' => 'paleovu/x-pv',
  330.         'pwz' => 'application/vnd.ms-powerpoint',
  331.         'py' => 'text/x-script.phyton',
  332.         'pyc' => 'applicaiton/x-bytecode.python',
  333.         'qcp' => 'audio/vnd.qcelp',
  334.         'qd3' => 'x-world/x-3dmf',
  335.         'qd3d' => 'x-world/x-3dmf',
  336.         'qif' => 'image/x-quicktime',
  337.         'qt' => 'video/quicktime',
  338.         'qtc' => 'video/x-qtc',
  339.         'qti' => 'image/x-quicktime',
  340.         'qtif' => 'image/x-quicktime',
  341.         'ra' => 'audio/x-pn-realaudio',
  342.         'ram' => 'audio/x-pn-realaudio',
  343.         'ras' => 'application/x-cmu-raster',
  344.         'rast' => 'image/cmu-raster',
  345.         'rexx' => 'text/x-script.rexx',
  346.         'rf' => 'image/vnd.rn-realflash',
  347.         'rgb' => 'image/x-rgb',
  348.         'rm' => 'application/vnd.rn-realmedia',
  349.         'rmi' => 'audio/mid',
  350.         'rmm' => 'audio/x-pn-realaudio',
  351.         'rmp' => 'audio/x-pn-realaudio',
  352.         'rng' => 'application/ringing-tones',
  353.         'rnx' => 'application/vnd.rn-realplayer',
  354.         'roff' => 'application/x-troff',
  355.         'rp' => 'image/vnd.rn-realpix',
  356.         'rpm' => 'audio/x-pn-realaudio-plugin',
  357.         'rt' => 'text/richtext',
  358.         'rtf' => 'application/rtf',
  359.         'rtx' => 'application/rtf',
  360.         'rv' => 'video/vnd.rn-realvideo',
  361.         's' => 'text/x-asm',
  362.         's3m' => 'audio/s3m',
  363.         'saveme' => 'application/octet-stream',
  364.         'sbk' => 'application/x-tbook',
  365.         'scm' => 'application/x-lotusscreencam',
  366.         'sdml' => 'text/plain',
  367.         'sdp' => 'application/sdp',
  368.         'sdr' => 'application/sounder',
  369.         'sea' => 'application/sea',
  370.         'set' => 'application/set',
  371.         'sgm' => 'text/sgml',
  372.         'sgml' => 'text/sgml',
  373.         'sh' => 'application/x-bsh',
  374.         'shar' => 'application/x-bsh',
  375.         'shtml' => 'text/html',
  376.         'sid' => 'audio/x-psid',
  377.         'sit' => 'application/x-sit',
  378.         'skd' => 'application/x-koan',
  379.         'skm' => 'application/x-koan',
  380.         'skp' => 'application/x-koan',
  381.         'skt' => 'application/x-koan',
  382.         'sl' => 'application/x-seelogo',
  383.         'smi' => 'application/smil',
  384.         'smil' => 'application/smil',
  385.         'snd' => 'audio/basic',
  386.         'sol' => 'application/solids',
  387.         'spc' => 'application/x-pkcs7-certificates',
  388.         'spl' => 'application/futuresplash',
  389.         'spr' => 'application/x-sprite',
  390.         'sprite' => 'application/x-sprite',
  391.         'src' => 'application/x-wais-source',
  392.         'ssi' => 'text/x-server-parsed-html',
  393.         'ssm' => 'application/streamingmedia',
  394.         'sst' => 'application/vnd.ms-pki.certstore',
  395.         'step' => 'application/step',
  396.         'stl' => 'application/sla',
  397.         'stp' => 'application/step',
  398.         'sv4cpio' => 'application/x-sv4cpio',
  399.         'sv4crc' => 'application/x-sv4crc',
  400.         'svf' => 'image/vnd.dwg',
  401.         'svr' => 'application/x-world',
  402.         'swf' => 'application/x-shockwave-flash',
  403.         't' => 'application/x-troff',
  404.         'talk' => 'text/x-speech',
  405.         'tar' => 'application/x-tar',
  406.         'tbk' => 'application/toolbook',
  407.         'tcl' => 'application/x-tcl',
  408.         'tcsh' => 'text/x-script.tcsh',
  409.         'tex' => 'application/x-tex',
  410.         'texi' => 'application/x-texinfo',
  411.         'texinfo' => 'application/x-texinfo',
  412.         'text' => 'application/plain',
  413.         'tgz' => 'application/gnutar',
  414.         'tif' => 'image/tiff',
  415.         'tiff' => 'image/tiff',
  416.         'tr' => 'application/x-troff',
  417.         'tsi' => 'audio/tsp-audio',
  418.         'tsp' => 'application/dsptype',
  419.         'tsv' => 'text/tab-separated-values',
  420.         'turbot' => 'image/florian',
  421.         'txt' => 'text/plain',
  422.         'uil' => 'text/x-uil',
  423.         'uni' => 'text/uri-list',
  424.         'unis' => 'text/uri-list',
  425.         'unv' => 'application/i-deas',
  426.         'uri' => 'text/uri-list',
  427.         'uris' => 'text/uri-list',
  428.         'ustar' => 'application/x-ustar',
  429.         'uu' => 'application/octet-stream',
  430.         'uue' => 'text/x-uuencode',
  431.         'vcd' => 'application/x-cdlink',
  432.         'vcs' => 'text/x-vcalendar',
  433.         'vda' => 'application/vda',
  434.         'vdo' => 'video/vdo',
  435.         'vew' => 'application/groupwise',
  436.         'viv' => 'video/vivo',
  437.         'vivo' => 'video/vivo',
  438.         'vmd' => 'application/vocaltec-media-desc',
  439.         'vmf' => 'application/vocaltec-media-file',
  440.         'voc' => 'audio/voc',
  441.         'vos' => 'video/vosaic',
  442.         'vox' => 'audio/voxware',
  443.         'vqe' => 'audio/x-twinvq-plugin',
  444.         'vqf' => 'audio/x-twinvq',
  445.         'vql' => 'audio/x-twinvq-plugin',
  446.         'vrml' => 'application/x-vrml',
  447.         'vrt' => 'x-world/x-vrt',
  448.         'vsd' => 'application/x-visio',
  449.         'vst' => 'application/x-visio',
  450.         'vsw' => 'application/x-visio',
  451.         'w60' => 'application/wordperfect6.0',
  452.         'w61' => 'application/wordperfect6.1',
  453.         'w6w' => 'application/msword',
  454.         'wav' => 'audio/wav',
  455.         'wb1' => 'application/x-qpro',
  456.         'wbmp' => 'image/vnd.wap.wbmp',
  457.         'web' => 'application/vnd.xara',
  458.         'wiz' => 'application/msword',
  459.         'wk1' => 'application/x-123',
  460.         'wmf' => 'windows/metafile',
  461.         'wml' => 'text/vnd.wap.wml',
  462.         'wmlc' => 'application/vnd.wap.wmlc',
  463.         'wmls' => 'text/vnd.wap.wmlscript',
  464.         'wmlsc' => 'application/vnd.wap.wmlscriptc',
  465.         'word' => 'application/msword',
  466.         'wp' => 'application/wordperfect',
  467.         'wp5' => 'application/wordperfect',
  468.         'wp6' => 'application/wordperfect',
  469.         'wpd' => 'application/wordperfect',
  470.         'wq1' => 'application/x-lotus',
  471.         'wri' => 'application/mswrite',
  472.         'wrl' => 'application/x-world',
  473.         'wrz' => 'model/vrml',
  474.         'wsc' => 'text/scriplet',
  475.         'wsrc' => 'application/x-wais-source',
  476.         'wtk' => 'application/x-wintalk',
  477.         'xbm' => 'image/x-xbitmap',
  478.         'xdr' => 'video/x-amt-demorun',
  479.         'xgz' => 'xgl/drawing',
  480.         'xif' => 'image/vnd.xiff',
  481.         'xl' => 'application/excel',
  482.         'xla' => 'application/excel',
  483.         'xlb' => 'application/excel',
  484.         'xlc' => 'application/excel',
  485.         'xld' => 'application/excel',
  486.         'xlk' => 'application/excel',
  487.         'xll' => 'application/excel',
  488.         'xlm' => 'application/excel',
  489.         'xls' => 'application/excel',
  490.         'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  491.         'xlt' => 'application/excel',
  492.         'xlv' => 'application/excel',
  493.         'xlw' => 'application/excel',
  494.         'xm' => 'audio/xm',
  495.         'xml' => 'application/xml',
  496.         'xmz' => 'xgl/movie',
  497.         'xpix' => 'application/x-vnd.ls-xpix',
  498.         'xpm' => 'image/x-xpixmap',
  499.         'x-png' => 'image/png',
  500.         'xsr' => 'video/x-amt-showrun',
  501.         'xwd' => 'image/x-xwd',
  502.         'xyz' => 'chemical/x-pdb',
  503.         'z' => 'application/x-compress',
  504.         'zip' => 'application/x-compressed',
  505.         'zoo' => 'application/octet-stream',
  506.         'zsh' => 'text/x-script.zsh',
  507.     );
  508.  
  509.     /**
  510.      * Method that allows you to determine a MIME type for a file which you provide the extension for.
  511.      * 
  512.      * @param string $ext The file extension.
  513.      * @return string 
  514.      * @throws IllegalArguementException
  515.      * @since 1.0
  516.      */
  517.     public static function getMIMETypeByExtension($ext{
  518.         $ext strtolower($ext);
  519.         if (!isset(AlphaFileUtils::$extensionToMIMEMappings[$ext]))
  520.             throw new IllegalArguementException('Unable to determine the MIME type for the extension ['.$ext.']');
  521.  
  522.  
  523.         return AlphaFileUtils::$extensionToMIMEMappings[$ext];
  524.     }
  525.     
  526.     /**
  527.      * Renders the contents of the directory as a HTML list.
  528.      * 
  529.      * @param string $sourceDir The path to the source directory.
  530.      * @param integer $fileCount The current file count (used in recursive calls).
  531.      * @return integer The current filecount for the directory.
  532.      * @throws AlphaException
  533.      * @since 1.0
  534.      */
  535.     public static function listDirectoryContents($sourceDir$fileCount=0{
  536.         try
  537.         {
  538.             $dir new DirectoryIterator($sourceDir);
  539.             $fileCount 0;
  540.             
  541.             echo '<ul>';
  542.             foreach ($dir as $file{
  543.                 if($file->isDir(&& !$file->isDot()) {
  544.                       echo '<li><em>'.$file->getPathname().'</em></li>';
  545.                       $fileCount += AlphaFileUtils::listDirectoryContents($file->getPathname()$fileCount);
  546.                   }elseif(!$file->isDot()){
  547.                     $fileName $file->getFilename();
  548.                     $fileCount++;
  549.                     echo '<li>'.$fileName.'</li>';
  550.                   }                  
  551.             }
  552.             echo '</ul>';
  553.             
  554.             return $fileCount;            
  555.         }catch (Exception $e{
  556.             throw new AlphaException('Failed list files in the ['.$sourceDir.'] directory, error is ['.$e->getMessage().']');
  557.         }
  558.     }
  559.     
  560.     /**
  561.      * Recursively deletes the contents of the directory indicated.
  562.      * 
  563.      * @param string $sourceDir The path to the source directory.
  564.      * @throws AlphaException
  565.      * @since 1.0
  566.      */
  567.     public static function deleteDirectoryContents($sourceDir{
  568.                 
  569.         try    {
  570.             $dir new DirectoryIterator($sourceDir);        
  571.             
  572.             foreach ($dir as $file{
  573.                 if($file->isDir(&& !$file->isDot()) {
  574.                     if(count(scandir($file->getPathname())) == 2// remove an emtpy directory
  575.                         rmdir($file->getPathname());
  576.                     else
  577.                           AlphaFileUtils::deleteDirectoryContents($file->getPathname());
  578.                   }elseif(!$file->isDot()){
  579.                     unlink($file->getPathname());
  580.                   }                  
  581.             }
  582.         }catch (Exception $e{
  583.             throw new AlphaException('Failed to delete files files in the ['.$sourceDir.'] directory, error is ['.$e->getMessage().']');
  584.         }
  585.     }
  586.  
  587.     /**
  588.      * Recursively copies the indicated folder, or single file, to the desintation location
  589.      * 
  590.      * @param string $source The path to the source directory or file.
  591.      * @param string $dest The destination source directory or file.
  592.      * @throws AlphaException
  593.      * @since 1.1
  594.      */
  595.     public static function copy($source$dest{
  596.         
  597.         if (is_file($source)) {
  598.             if(!copy($source$dest))
  599.                 throw new AlphaException("Error copying the file [$source] to [$dest].");
  600.             return;
  601.         }
  602.  
  603.         // Make destination directory if it does not already exist
  604.         if (!file_exists($dest&& !is_dir($dest)) {
  605.             if(!mkdir($dest))
  606.                 throw new AlphaException("Error creating the destination directory [$dest].");
  607.         }
  608.  
  609.         $dir dir($source);
  610.         while (false !== $entry $dir->read()) {
  611.             if ($entry == '.' || $entry == '..'{
  612.                 continue;
  613.             }
  614.      
  615.             if ($dest !== "$source/$entry"{
  616.                 self::copy("$source/$entry""$dest/$entry");
  617.             }
  618.         }
  619.  
  620.         $dir->close();
  621.     }
  622.  
  623.     /**
  624.      * Recursively compresses the contens of the source directory indicated to the desintation zip archive
  625.      * 
  626.      * @param string $source The path to the source directory or file.
  627.      * @param string $dest The destination zip file file.
  628.      * @throws AlphaException
  629.      * @since 1.1
  630.      */
  631.     public static function zip($source$dest{
  632.         if (extension_loaded('zip'=== true{
  633.  
  634.             if (file_exists($source=== true{
  635.                 $zip new ZipArchive();
  636.  
  637.                 if ($zip->open($destZIPARCHIVE::CREATE=== true{
  638.                     $source realpath($source);
  639.  
  640.                     if(is_dir($source=== true{
  641.                         $files new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source)RecursiveIteratorIterator::SELF_FIRST);
  642.  
  643.                         foreach ($files as $file{
  644.                             $file realpath($file);
  645.  
  646.                             if(is_dir($file=== true{
  647.                                 $zip->addEmptyDir(str_replace($source '/'''$file '/'));
  648.                             }
  649.  
  650.                             if(is_file($file=== true{
  651.                                 $zip->addFromString(str_replace($source '/'''$file)file_get_contents($file));
  652.                             }
  653.                         }
  654.                     }
  655.  
  656.                     if(is_file($source=== true{
  657.                         $zip->addFromString(basename($source)file_get_contents($source));
  658.                     }
  659.                 }
  660.  
  661.                 $zip->close();
  662.             }
  663.         }else{
  664.                 throw new AlphaException('Unable to create the zip file ['.$dest.'] as the zip extension is unavailable!');
  665.         }
  666.     }
  667. }
  668.  
  669. ?>

Documentation generated on Tue, 13 Dec 2011 20:26:05 +0000 by phpDocumentor 1.4.3