コード例 #1
0
 function get_cached_image($url)
 {
     $file_cache_r = fetch_url_file_cache_r($url, 'ITEM', INCLUDE_EXPIRED);
     if ($file_cache_r != FALSE) {
         //$imagefile = file_cache_get_cache_file_thumbnail($file_cache_r);
         $imagefile = file_cache_get_cache_file($file_cache_r);
         if ($imagefile != FALSE) {
             return $imagefile;
         }
     }
     //else
     return NULL;
 }
コード例 #2
0
 function &fetchURI($URI, $http_cache = TRUE)
 {
     @set_time_limit(600);
     $URI = trim($URI);
     $this->__debug('fetchURI', "URI: {$URI}");
     $this->_file_cache_r = NULL;
     $overwrite_cache_entry = FALSE;
     if ($http_cache !== FALSE && $this->_file_cache_enabled) {
         // see if we can find the cache file.
         $this->_file_cache_r = fetch_url_file_cache_r($URI, 'HTTP');
         if ($this->_file_cache_r !== FALSE) {
             $file_location = file_cache_get_cache_file($this->_file_cache_r);
             if ($file_location !== FALSE) {
                 $this->_file_cache_r['content'] = file_get_contents($file_location);
                 if (strlen($this->_file_cache_r['content']) == 0) {
                     $this->__debug('fetchURI', 'URL cache invalid');
                     $overwrite_cache_entry = TRUE;
                     unset($this->_file_cache_r);
                 }
             } else {
                 unset($this->_file_cache_r);
             }
         }
     }
     if (is_not_empty_array($this->_file_cache_r)) {
         $this->__debug('fetchURI', 'URL cached');
         return $this->_file_cache_r['content'];
     } else {
         $this->__debug('fetchURI', 'URL NOT cached');
         if ($this->fetch($URI) && $this->status >= 200 && $this->status < 300) {
             opendb_logger(OPENDB_LOG_INFO, __FILE__, __FUNCTION__, NULL, array($URI));
             $this->_file_cache_r['url'] = $URI;
             $this->_file_cache_r['content'] = $this->results;
             $this->results = NULL;
             if (strlen($this->_file_cache_r['content']) > 0) {
                 $this->__debug('fetchURI', 'URL fetched (Size=' . strlen($this->_file_cache_r['content']) . ')');
                 // assume a default.
                 $this->_file_cache_r['content_type'] = 'text/html';
                 if (is_array($this->headers) && count($this->headers) > 0) {
                     for ($i = 0; $i < count($this->headers); $i++) {
                         if (preg_match("/^([^:]*):([^\$]*)\$/i", $this->headers[$i], $matches)) {
                             if (strcasecmp(trim($matches[1]), 'content-type') === 0) {
                                 $this->_file_cache_r['content_type'] = trim($matches[2]);
                                 break;
                             }
                         }
                     }
                 }
                 $this->_file_cache_r['location'] = $this->lastredirectaddr;
                 if ($http_cache !== FALSE && $this->_file_cache_enabled) {
                     if (file_cache_insert_file($this->_file_cache_r['url'], $this->_file_cache_r['location'], $this->_file_cache_r['content_type'], $this->_file_cache_r['content'], 'HTTP', $overwrite_cache_entry) !== FALSE) {
                         $this->__debug('fetchURI', "Added {$URI} to file cache");
                     } else {
                         $this->__debug('fetchURI', "Failed to add {$URI} to file cache");
                     }
                 }
                 //if($http_cache!==FALSE && $this->_file_cache_enabled)
             }
             //if(strlen($_file_cache_r['content'])>0)
             return $this->_file_cache_r['content'];
         } else {
             $this->__debug('fetchURI', "Failed to fetch {$URI}", ifempty($this->error, 'Status ' . $this->status));
             opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, ifempty($this->error, 'Status ' . $this->status), array($URI));
             return FALSE;
         }
     }
 }
コード例 #3
0
ファイル: filecache.php プロジェクト: horrabin/opendb
function file_cache_insert_file($url, $location, $content_type, $content, $cache_type = 'HTTP', $overwrite = FALSE)
{
    $cache_config_r = file_cache_get_config($cache_type);
    if (is_array($cache_config_r) && $cache_config_r['enable'] !== FALSE) {
        $directory = $cache_config_r['directory'];
        if ($directory === FALSE) {
            return FALSE;
        }
        // we need to know whether we are overwriting existing URL or not
        $file_cache_r = fetch_url_file_cache_r($url, $cache_type, INCLUDE_EXPIRED);
        if (is_array($file_cache_r)) {
            if (!file_cache_get_cache_file($file_cache_r)) {
                opendb_logger(OPENDB_LOG_INFO, __FILE__, __FUNCTION__, 'Cache file record exists, but there is no cache file - will recreate', $file_cache_r);
                $file_cache_r['cache_file'] = NULL;
                // delete thumbnail if it exists
                if (!($thumbnail_file = file_cache_get_cache_file_thumbnail($file_cache_r))) {
                    delete_file($thumbnail_file);
                }
                $file_cache_r['cache_file_thumb'] = NULL;
            } else {
                if (!$overwrite) {
                    opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, 'File cache record exists and cannot be overwritten', $file_cache_r);
                    return FALSE;
                }
            }
        } else {
            $file_cache_r['cache_type'] = $cache_type;
        }
        if ($content == NULL && is_url_absolute($url)) {
            $httpClient = new OpenDbSnoopy();
            $content = $httpClient->fetchURI($url, FALSE);
            if ($content !== FALSE) {
                $location = $httpClient->getLocation();
                $content_type = $httpClient->getContentType();
                unset($httpClient);
            } else {
                unset($httpClient);
                // http client logs error
                return FALSE;
            }
        }
        $file_cache_r['url'] = ifempty($url, $file_cache_r['url']);
        $file_cache_r['location'] = ifempty($location, $file_cache_r['location']);
        $file_cache_r['content_type'] = validate_content_type(ifempty($content_type, $file_cache_r['content_type']));
        $thumbnail_support = FALSE;
        if (strlen($file_cache_r['content_type']) > 0) {
            $file_type_r = fetch_file_type_r($file_cache_r['content_type']);
            $file_cache_r['extension'] = $file_type_r['extension'];
            $thumbnail_support = $file_type_r['thumbnail_support_ind'] == 'Y';
        } else {
            $extension = get_file_ext($file_cache_r['url']);
            if (strlen($extension) > 0 && ($ext_content_type = fetch_file_type_for_extension($extension)) !== FALSE) {
                $content_type = $ext_content_type;
            } else {
                $content_type = validate_content_type($content_type);
            }
            $file_type_r = fetch_file_type_r($content_type);
            if (!is_array($file_type_r)) {
                opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, 'Content type not supported', array($url, $location, $content_type, $cache_type, $overwrite));
                return FALSE;
            }
            $file_cache_r['content_type'] = $content_type;
            $file_cache_r['extension'] = $file_type_r['extension'];
            $thumbnail_support = $file_type_r['thumbnail_support_ind'] == 'Y';
        }
        $file_cache_r['content_length'] = 0;
        if (($uploadFile = get_item_input_file_upload_url($url)) !== FALSE) {
            $file_cache_r['content_length'] = @filesize($uploadFile);
            $file_cache_r['cache_file'] = basename($uploadFile);
            $file_cache_r['upload_file_ind'] = 'Y';
        } else {
            if (strlen($content) > 0) {
                $file_cache_r['content_length'] = strlen($content);
                $file_cache_r['upload_file_ind'] = 'N';
            }
        }
        if ($file_cache_r['content_length'] > 0) {
            if (!is_numeric($file_cache_r['sequence_number'])) {
                $file_cache_r['sequence_number'] = insert_file_cache($cache_type, $file_cache_r['upload_file_ind'], $file_cache_r['url'], $file_cache_r['location'], $file_cache_r['content_type']);
                if ($file_cache_r['sequence_number'] === FALSE) {
                    return FALSE;
                }
            }
            if ($file_cache_r['cache_file'] == NULL) {
                $file_cache_r['cache_file'] = filecache_generate_cache_filename($file_cache_r);
            }
            if ($content != NULL) {
                $directory = file_cache_get_cache_type_directory($file_cache_r['cache_type']);
                $cacheFile = $directory . '/' . $file_cache_r['cache_file'];
                if (!file_put_contents($cacheFile, $content) !== FALSE) {
                    opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, 'Cache file not written', array($cacheFile));
                    return FALSE;
                }
            }
            if ($thumbnail_support) {
                if (strlen($file_cache_r['cache_file_thumb']) == 0) {
                    $file_cache_r['cache_file_thumb'] = filecache_generate_cache_filename($file_cache_r, TRUE);
                }
            }
            if ($file_cache_r['upload_file_ind'] != 'Y') {
                $expire_date = is_numeric($cache_config_r['lifetime']) ? "NOW()+ INTERVAL " . $cache_config_r['lifetime'] . " SECOND" : NULL;
            } else {
                $expire_date = NULL;
            }
            // do not expire uploaded file records.
            if (!update_file_cache($file_cache_r['sequence_number'], $file_cache_r['content_length'], $expire_date, $file_cache_r['cache_file'], $file_cache_r['cache_file_thumb'])) {
                return FALSE;
            }
            if ($thumbnail_support) {
                file_cache_save_thumbnail_file($file_cache_r, $errors);
            }
            return TRUE;
        } else {
            opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, 'File content length is zero', array($url, $location, $content_type, $cache_type, $overwrite));
            return FALSE;
        }
    } else {
        if (!is_array($cache_config_r)) {
            opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, 'No file cache configuration', array($url, $location, $content_type, $cache_type, $overwrite));
            return FALSE;
        } else {
            // file cache is disabled
            return TRUE;
        }
    }
}