コード例 #1
0
ファイル: NewsPortal.php プロジェクト: bhagvank/nuntium
function getNewsByDate($date, $BLOGURL)
{
    $NUMITEMS = 100;
    $TIMEFORMAT = "j F Y, g:ia";
    $CACHE = "/tmp/" . md5($BLOGURL);
    $TIME = 4;
    if (!file_exists($CACHE) || time() - filemtime($CACHEFILE) > 3600 * $CACHETIME) {
        if ($feed_content = http_get_contents($BLOGURL)) {
            $feed = fopen($CACHE, "w'");
            fwrite($feed, $feed_content);
            fclose($feed);
        }
    }
    $rssParser = new myRSSParser($CACHE);
    $feeddata = $rssParser->getRawOutput();
    extract($feeddata['RSS']['CHANNEL'][0], EXTR_PREFIX_ALL, 'rss');
    echo htmlspecialchars($rss_TITLE) . "<br> \n";
    $count = 0;
    foreach ($rss_ITEM as $itemdata) {
        $pubdate = $itemdata['PUBDATE'];
        if (strpos($pubdate, $date) !== false) {
            echo $itemdata['LINK'] . " " . $itemdata['DESCRIPTION'] . " " . $itemdata['PUBDATE'] . "<br>\n";
        }
        if (++$count >= $NUMITEMS) {
            break;
        }
    }
}
コード例 #2
0
 function auth_ok($config = array())
 {
     $ok = FALSE;
     // check for configuration problem
     if (!$config) {
         $config = config_get();
     }
     if (!config_error($config)) {
         // check for aleady signed in
         $uid = auth_userid();
         $ok = !!$uid;
         if ($ok) {
             // we found a username, check for password
             switch ($config['authentication']) {
                 case '':
                     break;
                     // any password is okay, just look for user
                 // any password is okay, just look for user
                 default:
                     $ok = FALSE;
                     if (is_string($config['authentication'])) {
                         $password = http_get_contents($config['authentication']);
                         $supplied = empty($_SERVER['PHP_AUTH_PW']) ? '' : $_SERVER['PHP_AUTH_PW'];
                         $ok = $password && $supplied && $password == $supplied;
                     }
             }
         }
     }
     return $ok;
 }
コード例 #3
0
 function config_defaults($config = array())
 {
     $config['authentication'] = empty($config['authentication']) ? '' : $config['authentication'];
     $config['aws_access_key_id'] = empty($config['aws_access_key_id']) ? '' : $config['aws_access_key_id'];
     $config['aws_secret_access_key'] = empty($config['aws_secret_access_key']) ? '' : $config['aws_secret_access_key'];
     $config['export_audio_codec_audio'] = empty($config['export_audio_codec_audio']) ? 'libmp3lame' : $config['export_audio_codec_audio'];
     $config['export_audio_bitrate'] = empty($config['export_audio_bitrate']) ? '128' : $config['export_audio_bitrate'];
     $config['export_audio_codec'] = empty($config['export_audio_codec']) ? 'aac' : $config['export_audio_codec'];
     $config['export_audio_extension'] = empty($config['export_audio_extension']) ? 'mp3' : $config['export_audio_extension'];
     $config['export_audio_rate'] = empty($config['export_audio_rate']) ? '44100' : $config['export_audio_rate'];
     $config['export_dimensions'] = empty($config['export_dimensions']) ? '512x288' : $config['export_dimensions'];
     $config['export_extension'] = empty($config['export_extension']) ? 'mp4' : $config['export_extension'];
     $config['export_video_rate'] = empty($config['export_video_rate']) ? '30' : $config['export_video_rate'];
     $config['export_meta_title'] = empty($config['export_meta_title']) ? '' : $config['export_meta_title'];
     $config['export_video_bitrate'] = empty($config['export_video_bitrate']) ? '2000' : $config['export_video_bitrate'];
     $config['export_video_codec'] = empty($config['export_video_codec']) ? 'libx264' : $config['export_video_codec'];
     $config['web_root_directory'] = empty($config['web_root_directory']) ? $_SERVER['DOCUMENT_ROOT'] : $config['web_root_directory'];
     $config['temporary_directory'] = empty($config['temporary_directory']) ? sys_get_temp_dir() : $config['temporary_directory'];
     $config['queue_directory'] = empty($config['queue_directory']) ? path_concat($config['temporary_directory'], 'queue') : $config['queue_directory'];
     $config['import_audio_bitrate'] = empty($config['import_audio_bitrate']) ? '128' : $config['import_audio_bitrate'];
     $config['import_audio_extension'] = empty($config['import_audio_extension']) ? 'mp3' : $config['import_audio_extension'];
     $config['import_audio_basename'] = empty($config['import_audio_basename']) ? 'audio' : $config['import_audio_basename'];
     $config['import_audio_rate'] = empty($config['import_audio_rate']) ? '44100' : $config['import_audio_rate'];
     $config['import_dimensions'] = empty($config['import_dimensions']) ? '256x144' : $config['import_dimensions'];
     $config['import_extension'] = empty($config['import_extension']) ? 'jpg' : $config['import_extension'];
     $config['import_video_rate'] = empty($config['import_video_rate']) ? '10' : $config['import_video_rate'];
     $config['import_image_quality'] = empty($config['import_image_quality']) ? '1' : $config['import_image_quality'];
     $config['import_original_basename'] = empty($config['import_original_basename']) ? 'original' : $config['import_original_basename'];
     $config['import_waveform_backcolor'] = empty($config['import_waveform_backcolor']) ? 'FFFFFF' : $config['import_waveform_backcolor'];
     $config['import_waveform_basename'] = empty($config['import_waveform_basename']) ? 'waveform' : $config['import_waveform_basename'];
     $config['import_waveform_dimensions'] = empty($config['import_waveform_dimensions']) ? '8000x32' : $config['import_waveform_dimensions'];
     $config['import_waveform_extension'] = empty($config['import_waveform_extension']) ? 'png' : $config['import_waveform_extension'];
     $config['import_waveform_forecolor'] = empty($config['import_waveform_forecolor']) ? '000000' : $config['import_waveform_forecolor'];
     $config['module_host'] = empty($config['module_host']) ? $_SERVER['HTTP_HOST'] : http_get_contents($config['module_host']);
     $config['user_media_host'] = empty($config['user_media_host']) ? $_SERVER['HTTP_HOST'] : http_get_contents($config['user_media_host']);
     $config['callback_host'] = empty($config['callback_host']) ? $_SERVER['HTTP_HOST'] : http_get_contents($config['callback_host']);
     $config['log_request'] = empty($config['log_request']) ? '' : $config['log_request'];
     $config['log_response'] = empty($config['log_response']) ? '' : $config['log_response'];
     $config['log_api_request'] = empty($config['log_api_request']) ? '' : $config['log_api_request'];
     $config['log_api_response'] = empty($config['log_api_response']) ? '' : $config['log_api_response'];
     $config['max_meg_audio'] = empty($config['max_meg_audio']) ? '' : $config['max_meg_audio'];
     $config['max_meg_image'] = empty($config['max_meg_image']) ? '' : $config['max_meg_image'];
     $config['max_meg_video'] = empty($config['max_meg_video']) ? '' : $config['max_meg_video'];
     $config['log_file'] = empty($config['log_file']) ? '' : $config['log_file'];
     $config['callback_directory'] = empty($config['callback_directory']) ? substr(dirname(dirname(__FILE__)), strlen(path_add_slash_end($config['web_root_directory']))) : $config['callback_directory'];
     $config['install_directory'] = empty($config['install_directory']) ? substr(dirname(dirname(dirname(__FILE__))), strlen(path_add_slash_end($config['web_root_directory']))) : $config['install_directory'];
     $config['cgi_directory'] = empty($config['cgi_directory']) ? substr(dirname(dirname(__FILE__)), strlen(path_add_slash_end(path_concat($config['web_root_directory'], $config['install_directory'])))) : $config['cgi_directory'];
     $config['user_media_directory'] = isset($config['user_media_directory']) ? $config['user_media_directory'] : path_concat(substr(dirname(dirname(dirname(__FILE__))), strlen(path_add_slash_end(path_concat($config['web_root_directory'], $config['install_directory'])))), 'user');
     $config['user_media_url'] = isset($config['user_media_url']) ? $config['user_media_url'] : $config['user_media_directory'];
     $config['user_data_directory'] = isset($config['user_data_directory']) ? $config['user_data_directory'] : path_concat(substr(dirname(dirname(dirname(__FILE__))), strlen(path_add_slash_end($config['web_root_directory']))), 'user');
     $config['module_directory'] = empty($config['module_directory']) ? substr(dirname(dirname(dirname(__FILE__))), strlen(path_add_slash_end($config['web_root_directory']))) : $config['module_directory'];
     $config['s3_bucket'] = empty($config['s3_bucket']) ? '' : $config['s3_bucket'];
     $config['s3_region'] = empty($config['s3_region']) ? '' : $config['s3_region'];
     $config['sqs_queue_url'] = empty($config['sqs_queue_url']) ? '' : $config['sqs_queue_url'];
     $config['chmod_directory_new'] = isset($config['chmod_directory_new']) ? $config['chmod_directory_new'] : '0775';
     $config = service_config_defaults($config);
     ksort($config);
     return $config;
 }
コード例 #4
0
 function myAtomParser($file)
 {
     $errorlevel = error_reporting();
     error_reporting($errorlevel & ~E_NOTICE);
     // instantiate xml-parser and assign event handlers
     $xml_parser = xml_parser_create("");
     xml_set_object($xml_parser, $this);
     xml_set_element_handler($xml_parser, "startElement", "endElement");
     xml_set_character_data_handler($xml_parser, "parseData");
     // open file for reading and send data to xml-parser
     $data = preg_match("/^http/", $file) ? http_get_contents($file) : file_get_contents($file);
     xml_parse($xml_parser, $data) or die(sprintf("myAtomParser: Error <b>%s</b> at line <b>%d</b><br>", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
     // dismiss xml parser
     xml_parser_free($xml_parser);
     error_reporting($errorlevel);
 }
コード例 #5
0
ファイル: social.class.php プロジェクト: Gordondalos/union
 function get_user($social_config)
 {
     global $config, $lang;
     if (!isset($_SESSION['od_access_token'])) {
         $params = array('client_id' => $social_config['odid'], 'client_secret' => $social_config['odsecret'], 'grant_type' => 'authorization_code', 'code' => $_GET['code'], 'redirect_uri' => $config['http_home_url'] . "index.php?do=auth-social&provider=od");
         $token = @json_decode(http_get_contents('http://api.odnoklassniki.ru/oauth/token.do', $params), true);
     } else {
         $token = array('access_token' => $_SESSION['od_access_token']);
     }
     if (isset($token['access_token'])) {
         $sign = md5("application_key={$social_config['odpublic']}format=jsonmethod=users.getCurrentUser" . md5("{$token['access_token']}{$social_config['odsecret']}"));
         $params = array('method' => 'users.getCurrentUser', 'access_token' => $token['access_token'], 'application_key' => $social_config['odpublic'], 'format' => 'json', 'sig' => $sign);
         $user = @json_decode(http_get_contents('http://api.odnoklassniki.ru/fb.do' . '?' . http_build_query($params)), true);
         if (isset($user['uid'])) {
             if (!isset($_SESSION['od_access_token'])) {
                 $_SESSION['od_access_token'] = $token['access_token'];
                 $_SESSION['od_access_code'] = $_GET['code'];
             }
             if (!$user['email'] and isset($_GET['email'])) {
                 $user['email'] = $_GET['email'];
             }
             return array('sid' => sha1('odnoklassniki' . $user['uid']), 'nickname' => $user['name'], 'name' => $user['first_name'] . ' ' . $user['last_name'], 'email' => $user['email'], 'avatar' => $user['pic_2'] . '.jpg', 'provider' => 'Odnoklassniki');
         } else {
             return $lang['social_err_3'];
         }
     } else {
         return $lang['social_err_1'];
     }
 }
コード例 #6
0
<?php

use NovakSolutions\FrontDesk\Generate;
use Doctrine\Common\Inflector;
require_once '/vendor/autoload.php';
$coreParser = new Generate\CoreParser();
$coreApiDocsAsHtml = http_get_contents("https://developer.frontdeskhq.com/docs/api/v2");
$definitions = $coreParser->extractDataFromHtml($coreApiDocsAsHtml);
$modelDefinitions = $coreParser->convertToModels($definitions);
//Process Definitions Info Select, Update, Insert, etc...
/** @var mixed $models */
$template = getTwigTemplate();
$models = array();
/**
 * @param $selectMethod
 * @return string
 */
$baseClass = 'CoreModel';
foreach ($modelDefinitions as $place => $models) {
    foreach ($models as $modelName => $model) {
        $standardMethods = array();
        $fields = $model['fields'];
        $renderedTemplate = $template->render(compact('model', 'baseClass'));
        if (!file_exists("src/Model/{$place}")) {
            mkdir("src/Model/{$place}");
        }
        file_put_contents("src/Model/{$place}/" . $modelName . '.php', $renderedTemplate);
    }
}
function http_get_contents($url)
{
コード例 #7
0
ファイル: parsator.php プロジェクト: spyre/emiral
<?php

function http_get_contents($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    if (FALSE === ($retval = curl_exec($ch))) {
        echo curl_error($ch);
    } else {
        return $retval;
    }
}
$request_url = 'http://gdata.youtube.com/feeds/api/videos/sVKvNQgzPgY';
$result = http_get_contents($request_url);
print_r($result);
// $simpleXML = new SimpleXMLElement($result);
// print_r($simpleXML);
// $canal = 'UCwGog58wbTpXXcG9iWVb1hA';
$url = 'https://gdata.youtube.com/feeds/api/channels?q=soccer&start-index=11&max-results=10&v=2';
$ytString = file_get_contents($url);
$ytXML = simplexml_load_string($ytString);
echo 'YT SAIS: ';
print_r($ytXML);
echo '<hr/>';
echo '<hr/>';
$namespaces = $ytXML->getNamespaces(true);
echo '<hr/>';
echo '<hr/>';
コード例 #8
0
/**
 * Get PukiWiki Page List via http using cmd=filelist
 * @access public
 * @param string $url PukiWiki URL (cmd=filelist)
 * @return array 
 *     Page list whose each element has keys 'href', 'page', 'file'. 
 *     FALSE if HTTP GET failed. 
 * @uses PKWKFilelistHandler
 * @uses PEAR XML/XML_HTMLSax.php
 * @uses $GLOBALS['ADMINPASS']
 * @uses $GLOBALS['USERNAME']
 * @uses $GLOBALS['USERPASS']
 */
function &pkwk_get_existpages($url, $filter = NULL, $except = NULL)
{
    $parsed = parse_url($url);
    $queries = array();
    parse_str($parsed['query'], $queries);
    $cmd = $queries['cmd'];
    if ($cmd == 'filelist' && $GLOBALS['ADMINPASS'] != '') {
        // POST adminpass
        require_once 'HTTP/Request.php';
        $req = new HTTP_Request($url);
        $req->setMethod(HTTP_REQUEST_METHOD_POST);
        $req->addPostData('pass', $GLOBALS['ADMINPASS']);
        $req->setBasicAuth($GLOBALS['USERNAME'], $GLOBALS['USERPASS']);
        if (PEAR::isError($req->sendRequest())) {
            return FALSE;
        }
        $html = $req->getResponseBody();
    } else {
        if (($html = http_get_contents($url, $GLOBALS['USERNAME'], $GLOBALS['USERPASS'])) === FALSE) {
            return FALSE;
        }
    }
    require_once 'XML/XML_HTMLSax.php';
    $parser = new XML_HTMLSax();
    $handler = new PKWKFilelistHandler();
    $parser->set_object($handler);
    $parser->set_element_handler('openHandler', 'closeHandler');
    $parser->set_data_handler('dataHandler');
    $parser->parse($html);
    if ($filter !== NULL) {
        $pregfilter = '/' . str_replace('/', '\\/', $filter) . '/';
        foreach ($handler->pages as $i => $page) {
            if (!preg_match($pregfilter, $page['page'])) {
                unset($handler->pages[$i]);
            }
        }
    }
    if ($except !== NULL) {
        $pregexcept = '/' . str_replace('/', '\\/', $except) . '/';
        foreach ($handler->pages as $i => $page) {
            if (preg_match($pregexcept, $page['page'])) {
                unset($handler->pages[$i]);
            }
        }
    }
    if ($cmd != 'filelist') {
        foreach ($handler->pages as $i => $page) {
            $handler->pages[$i]['file'] = get_wikifilename($page['page']);
        }
    }
    // unique (probably this can be done in html parsing process concurrently, though)
    $uniq_pages = array();
    foreach ($handler->pages as $page) {
        $uniq_pages[] = $page['page'];
    }
    $uniq_pages = array_unique($uniq_pages);
    $pages = array();
    foreach ($uniq_pages as $i => $page) {
        $pages[] = $handler->pages[$i];
    }
    return $pages;
}
コード例 #9
0
<?php

use NovakSolutions\FrontDesk\Generate;
require_once '/vendor/autoload.php';
$v3Parser = new Generate\ReportingParser();
$reportingApiDocsAsHtml = http_get_contents("https://developer.frontdeskhq.com/docs/reporting/v3");
$reportingDefinitions = $v3Parser->extractDataFromHtml($reportingApiDocsAsHtml);
//Process Definitions Info Select, Update, Insert, etc...
/** @var mixed $models */
$models = array();
$loader = new Twig_Loader_Filesystem('src/Generate/Templates');
$twig = new Twig_Environment($loader);
$function = new Twig_SimpleFunction('descriptionToPhpDocType', function ($type) {
    switch ($type) {
        case 'boolean':
            return "boolean";
        default:
            return $type;
    }
});
$twig->addFunction($function);
$template = $twig->loadTemplate('reporting_model.twig');
foreach ($reportingDefinitions as $objectName => $endPoints) {
    $model = array();
    $model['modelName'] = preg_replace("/[^A-Za-z0-9]/", "", $objectName);
    $model['modelName'] = preg_replace('{s$}', '', $model['modelName']);
    $model = array_merge($endPoints, $model);
    $frontOrDesk = 'Desk';
    $className = $model['modelName'];
    $baseClass = 'ReportingModel';
    $renderedTemplate = $template->render(compact('frontOrDesk', 'model', 'className', 'baseClass'));
コード例 #10
0
ファイル: p.php プロジェクト: ORNChurch/ornchurch.org
 if (isset($_GET['proxy'])) {
     $url .= '&proxy=' . $_GET['proxy'];
 }
 // Ad URL rewrite
 if (strpos($url, 'http') === false) {
     $url = 'http:' . $url;
 }
 if (isset($_GET['callback'])) {
     foreach ($_GET as $key => $value) {
         if (in_array($key, array('url', 'mode', 'full_headers', 'full_status', 'send_cookies'))) {
             continue;
         }
         $url .= "&" . $key . '=' . $value;
     }
 }
 $ch = http_get_contents($url);
 if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
     curl_setopt($ch, CURLOPT_POST, true);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
 }
 if (isset($_GET['send_cookies']) && $_GET['send_cookies']) {
     $cookie = array();
     foreach ($_COOKIE as $key => $value) {
         $cookie[] = $key . '=' . $value;
     }
     if (isset($_GET['send_session']) && $_GET['send_session']) {
         $cookie[] = SID;
     }
     $cookie = implode('; ', $cookie);
     curl_setopt($ch, CURLOPT_COOKIE, $cookie);
 }
コード例 #11
0
ファイル: favicon.php プロジェクト: nao-pon/HypCommon
function update_cache($url)
{
    if (!is_writable(FAVICON_CACHE_DIR)) {
        // cache dir was not writable
        return false;
    }
    // Garbage Collection
    $garbage = FAVICON_CACHE_DIR . '.garbage.time';
    if (!is_file($garbage) || filemtime($garbage) + 86400 < UNIX_TIME) {
        include_once dirname(dirname(__FILE__)) . '/hyp_common_func.php';
        HypCommonFunc::touch($garbage);
        clear_cache();
    }
    $url_org = $url;
    $html = http_get_contents($url, 81920);
    if ($html === false) {
        // connection failed or timed out
        $favicon = 'DefaultIcon';
    } else {
        if ($html === null) {
            // 404 status code or unsupported scheme
            $favicon = 'ErrorIcon';
        } else {
            $url = parse_url($url);
            $base = $url['scheme'] . '://' . $url['host'] . (isset($url['port']) ? ':' . $url['port'] : '');
            $url = $base . (isset($url['path']) ? $url['path'] : '/');
            $html = strtolower($html);
            list($html) = explode('</head>', $html);
            if (preg_match_all('#<link[^>]+?>#', $html, $m)) {
                $html = join(' ', $m[0]);
                if (preg_match('/<link ([^>]*)rel=[\'"]?(?:shortcut )?icon[\'"]?([^>]*)/', $html, $matches)) {
                    $link = implode(' ', $matches);
                    if (preg_match('/href=[\'"]?((?:https?:)?\\/\\/)?([^\'" ]+)/', $link, $matches)) {
                        $favicon = $matches[2];
                        if ($matches[1]) {
                            if ($matches[1][0] === '/') {
                                $matches[1] = $url['scheme'] . ':' . $matches[1];
                            }
                            $favicon = $matches[1] . $favicon;
                        } else {
                            if ($favicon[0] === '/') {
                                $favicon = $base . $favicon;
                            } else {
                                if (substr($url, -1) === '/') {
                                    $favicon = $url . $favicon;
                                } else {
                                    $favicon = dirname($url) . '/' . $favicon;
                                }
                            }
                        }
                        str_replace('/./', '/', $favicon);
                        while (preg_match('#[^/]+/\\.\\./#', $favicon)) {
                            $favicon = preg_replace('#[^/]+/\\.\\./#', '', $favicon);
                        }
                    }
                }
            }
            if (empty($favicon)) {
                $favicon = $base . '/favicon.ico';
            }
            $data = http_get_contents($favicon);
            if ($data === false) {
                // connection failed or timed out
                return false;
            } else {
                if ($ext = get_extention($data)) {
                    $favicon = md5($url) . $ext;
                    $image = get_image_filename($favicon);
                    if (file_put_contents($image, $data) === FALSE) {
                        $favicon = 'ErrorIcon';
                    }
                } else {
                    // no favicon or unknown format
                    $favicon = 'DefaultIcon';
                }
            }
        }
    }
    $filename = get_url_filename($url_org);
    if (file_put_contents($filename, $favicon)) {
        return $favicon;
    } else {
        return false;
    }
}
コード例 #12
0
ファイル: envoi.php プロジェクト: bibwho/MATPbootstrap
 function replace_include($match)
 {
     global $mode, $lang, $error, $msg_error;
     preg_match_all('/\\s+([a-z_:][a-z0-9_:.-]*)\\s?=\\s?(["\'])(.+?)(?<!\\\\)(?:\\\\\\\\)*\\2/i', $match[1], $attrs, PREG_SET_ORDER);
     $resource = null;
     $tds = false;
     foreach ($attrs as $attr) {
         switch ($attr[1]) {
             case 'src':
                 $resource = stripslashes($attr[3]);
                 break;
             case 'tds' && $attr[3] == 'true':
             case 'now' && $attr[3] == 'true':
                 $tds = true;
                 break;
         }
     }
     if (is_null($resource) || !$tds && $mode != 'send') {
         return $match[0];
     }
     if (substr($resource, 0, 7) == 'http://') {
         $result = http_get_contents($resource, $errstr);
         if ($result == false) {
             $errstr = sprintf($lang['Message']['Error_load_url'], htmlspecialchars($resource), $errstr);
         }
     } else {
         if ($resource[0] != '/') {
             $resource = WA_ROOTDIR . '/' . $resource;
         }
         if (is_readable($resource)) {
             $fp = fopen($resource, 'r');
             $data = fread($fp, filesize($resource));
             fclose($fp);
             $result = array('data' => $data, 'charset' => '');
         } else {
             $result = false;
             $errstr = sprintf($lang['Message']['File_not_exists'], htmlspecialchars($resource));
         }
     }
     if ($result == false) {
         $error = true;
         $msg_error[] = $errstr;
         return $match[0];
     } else {
         return convert_encoding($result['data'], $result['charset']);
     }
 }
コード例 #13
0
ファイル: class.attach.php プロジェクト: bibwho/MATPbootstrap
 /**
  * Effectue les vérifications nécessaires et ajoute une entrée dans les tables de 
  * gestion des fichiers joints
  * 
  * Le fichier peut être uploadé via le formulaire adéquat, être sur un serveur distant, 
  * ou avoir été uploadé manuellement sur le serveur
  * 
  * @param string  $upload_mode   Mode d'upload du fichier (upload http, à distance, fichier local)
  * @param integer $log_id        Identifiant du log
  * @param string  $filename      Nom du fichier
  * @param string  $tmp_filename  Nom temporaire du fichier/nom du fichier local/url du fichier distant
  * @param integer $filesize      Taille du fichier
  * @param string  $filetype      Type mime du fichier
  * @param string  $errno_code    Code erreur éventuel de l'upload http
  * @param boolean $error         True si une erreur survient
  * @param array   $msg_error     Tableau des messages d'erreur
  * 
  * @return void
  * @access public
  */
 function upload_file($upload_mode, $log_id, $filename, $tmp_filename, $filesize, $filetype, $errno_code, &$error, &$msg_error)
 {
     global $db, $lang, $nl_config;
     $extension = substr($filename, strrpos($filename, '.') + 1);
     if ($extension == '') {
         $extension = 'x-wa';
     }
     //
     // Vérification de la validité du nom du fichier
     //
     if (!$this->check_filename($filename)) {
         $error = TRUE;
         $msg_error[] = $lang['Message']['Invalid_filename'];
     }
     //
     // Vérification de l'extension du fichier
     //
     if (!$this->check_extension($extension)) {
         $error = TRUE;
         $msg_error[] = $lang['Message']['Invalid_ext'];
     }
     if (!$error) {
         //
         // Si l'upload a échoué, on récupère le message correspondant à l'erreur survenue
         // Voir fichier constantes.php pour les codes d'erreur
         //
         if ($upload_mode == 'upload' && $errno_code != UPLOAD_ERR_OK) {
             $error = TRUE;
             switch ($errno_code) {
                 case UPLOAD_ERR_INI_SIZE:
                     $msg_error[] = $lang['Message']['Upload_error_1'];
                     break;
                 case UPLOAD_ERR_FORM_SIZE:
                     $msg_error[] = $lang['Message']['Upload_error_2'];
                     break;
                 case UPLOAD_ERR_PARTIAL:
                     $msg_error[] = $lang['Message']['Upload_error_3'];
                     break;
                 case UPLOAD_ERR_NO_FILE:
                     $msg_error[] = $lang['Message']['Upload_error_4'];
                     break;
                 case UPLOAD_ERR_NO_TMP_DIR:
                     $msg_error[] = $lang['Message']['Upload_error_6'];
                     break;
                 case UPLOAD_ERR_CANT_WRITE:
                     $msg_error[] = $lang['Message']['Upload_error_7'];
                     break;
                 default:
                     $msg_error[] = $lang['Message']['Upload_error_5'];
                     break;
             }
             return;
         } else {
             if ($upload_mode == 'remote') {
                 $URL = $tmp_filename;
                 $part = @parse_url($URL);
                 if (!is_array($part) || !isset($part['scheme']) || $part['scheme'] != 'http' && ($part['scheme'] != 'ftp' || !extension_loaded('ftp'))) {
                     $error = TRUE;
                     $msg_error[] = $lang['Message']['Invalid_url'];
                     return;
                 }
                 $tmp_path = OPEN_BASEDIR_RESTRICTION ? WA_TMPDIR : '/tmp';
                 $tmp_filename = tempnam($tmp_path, 'wa0');
                 if (!($fw = @fopen($tmp_filename, 'wb'))) {
                     $error = TRUE;
                     $msg_error[] = $lang['Message']['Upload_error_5'];
                     return;
                 }
                 if ($part['scheme'] == 'http') {
                     $result = http_get_contents($URL, $errstr);
                     if ($result == false) {
                         $error = TRUE;
                         $msg_error[] = $errstr;
                         return;
                     }
                     fwrite($fw, $result['data']);
                     $filesize = strlen($result['data']);
                     $filetype = $result['type'];
                 } else {
                     if (!isset($part['user'])) {
                         $part['user'] = '******';
                     }
                     if (!isset($part['pass'])) {
                         $part['pass'] = '******';
                     }
                     $port = !isset($part['port']) ? 21 : $part['port'];
                     if (!($cid = @ftp_connect($part['host'], $port)) || !@ftp_login($cid, $part['user'], $part['pass'])) {
                         $error = TRUE;
                         $msg_error[] = sprintf($lang['Message']['Unaccess_host'], htmlspecialchars($part['host']));
                         return;
                     }
                     $path = !isset($part['path']) ? '/' : $part['path'];
                     $path .= !isset($part['query']) ? '' : '?' . $part['query'];
                     $filesize = ftp_size($cid, $path);
                     if (!ftp_fget($cid, $fw, $path, FTP_BINARY)) {
                         $error = TRUE;
                         $msg_error[] = $lang['Message']['Not_found_at_url'];
                         return;
                     }
                     ftp_quit($cid);
                     require WAMAILER_DIR . '/class.mailer.php';
                     $filetype = Mailer::mime_type(substr($filename, strrpos($filename, '.') + 1));
                 }
                 fclose($fw);
             } else {
                 if ($upload_mode == 'local') {
                     require WAMAILER_DIR . '/class.mailer.php';
                     $filetype = Mailer::mime_type($extension);
                     //
                     // On verifie si le fichier est bien présent sur le serveur
                     //
                     $filesize = $this->joined_file_exists($tmp_filename, $error, $msg_error);
                 }
             }
         }
     } else {
         return;
     }
     //
     // Vérification de la taille du fichier par rapport à la taille maximale autorisée
     //
     $total_size = 0;
     if (!$this->check_maxsize($log_id, $filesize, $total_size)) {
         $error = TRUE;
         $msg_error[] = sprintf($lang['Message']['weight_too_big'], formateSize($nl_config['max_filesize'] - $total_size));
     }
     //
     // Si fichier uploadé ou fichier distant, on déplace le fichier à son emplacement final
     //
     if (!$error && $upload_mode != 'local') {
         $physical_filename = $this->make_filename();
         if ($this->use_ftp) {
             $mode = $this->get_mode($filetype);
             if (!@ftp_put($this->connect_id, $physical_filename, $tmp_filename, $mode)) {
                 $error = TRUE;
                 $msg_error[] = $lang['Message']['Ftp_error_put'];
             } else {
                 @ftp_site($this->connect_id, 'CHMOD 0644 ' . $physical_filename);
             }
         } else {
             if ($upload_mode == 'remote') {
                 $result_upload = @copy($tmp_filename, $this->upload_path . $physical_filename);
             } else {
                 $result_upload = @move_uploaded_file($tmp_filename, $this->upload_path . $physical_filename);
             }
             if (!$result_upload) {
                 $error = TRUE;
                 $msg_error[] = $lang['Message']['Upload_error_5'];
             }
             if (!$error) {
                 @chmod($this->upload_path . $physical_filename, 0644);
             }
         }
         //
         // Suppression du fichier temporaire créé par nos soins
         //
         $this->remove_file($tmp_filename);
     }
     if (!$error) {
         //
         // Tout s'est bien passé, on entre les nouvelles données dans la base de données
         //
         $db->beginTransaction();
         $filedata = array('file_real_name' => $filename, 'file_physical_name' => $upload_mode == 'local' ? $tmp_filename : $physical_filename, 'file_size' => $filesize, 'file_mimetype' => $filetype);
         if (!$db->build(SQL_INSERT, JOINED_FILES_TABLE, $filedata)) {
             trigger_error('Impossible d\'insérer les données du fichier dans la base de données', ERROR);
         }
         $file_id = $db->lastInsertId();
         $sql = "INSERT INTO " . LOG_FILES_TABLE . " (log_id, file_id) \n\t\t\t\tVALUES({$log_id}, {$file_id})";
         if (!$db->query($sql)) {
             trigger_error('Impossible d\'insérer la jointure dans la table log_files', ERROR);
         }
         $db->commit();
     }
     $this->quit();
 }