2012-01-11 78 views
2

我一直recieving一個PHP錯誤「調用未定義功能getallheaders()可以在/home/jbird11/public_html/grids/upload.php第8行」PHP錯誤上傳

上傳腳本基本上需要一個將圖像拖入區域並上傳。當我拖動圖片時,我收到了這條消息。

這裏是php文件的前40行:

<?php 

    // Maximum file size 
    $maxsize = 1024; //Kb 
    // Supporting image file types 
    $types = Array('image/png','images/gif','image/jpeg'); 

    $headers = getallheaders(); 

    // LOG 
    $log = '=== '. @date('Y-m-d H:i:s') . ' ========================================'."\n" 
      .'HEADER:'.print_r($headers,1)."\n" 
      .'GET:'.print_r($_GET,1)."\n" 
      .'POST:'.print_r($_POST,1)."\n" 
      .'REQUEST:'.print_r($_REQUEST,1)."\n" 
      .'FILES:'.print_r($_FILES,1)."\n"; 
    $fp = fopen('log.txt','a'); 
    fwrite($fp, $log); 
    fclose($fp); 

    header('content-type: plain/text'); 

    // File size control 
    if($headers['X-File-Size'] > ($maxsize *1024)) { 
     die("Max file size: $maxsize Kb"); 
    } 

// File type control 
if(in_array($headers['X-File-Type'],$types)){ 
    // Create an unique file name 
    $filename = sha1(@date('U').'-'.$headers['X-File-Name']).'.'.$_GET['type']; 
    // Uploaded file source 
    $source = file_get_contents('php://input'); 
    // Image resize 
    imageresize($source, $filename, $_GET['width'], $_GET['height'], $_GET['crop'], $_GET['quality']); 
} else die("Unsupported file type: ".$headers['X-File-Type']); 

// File path 
$path = str_replace('upload.php','',$_SERVER['SCRIPT_NAME']); 
// Image tag 
echo '<img src="'.$path.$filename.'" alt="image" />'; 

任何想法是什麼原因造成這個錯誤?權限也許?權限設置爲755.你可以在這裏看到一個工作演示:http://pixelcakecreative.com/grids/

任何想法如何解決這個問題?在此先感謝

+1

什麼Web服務器您使用的? – 2012-01-11 21:58:10

+0

我正在使用hostgator – JCHASE11 2012-01-11 22:01:25

+1

從服務器響應的外觀來看,它是一個GFE 2.0服務器,所以很有可能Apache特定的功能不可用 – 2012-01-11 22:03:06

回答

2

從文檔:

此功能用於apache_request_headers()的別名。請閱讀apache_request_headers()文檔以獲取有關此函數如何工作的更多信息。

如果您不使用apache(以php作爲模塊),則此功能不可用。

+0

它位於共享主機環境中,我無法訪問這些設置。我會假設共享主機會允許這樣做。 – JCHASE11 2012-01-11 21:59:57

+0

它們可能在版本5.4之前運行PHP,而不是Apache模塊(例如FastCGI)。或者他們使用的不是Apache(nginx等) – Phil 2012-01-11 22:00:54

+0

這可以添加到共享主機環境,還是我需要專用? – JCHASE11 2012-01-11 22:03:02

0

來自託管公司:似乎該功能僅在PHP作爲Apache模塊運行時才受支持。我們的共享和經銷商服務器以CGI的身份運行PHP,不幸的是這不能改變。很抱歉給您帶來不便。

如果您的站點絕對需要該功能,則需要考慮升級到VPS,在這種情況下,您可以安裝PHP。

0

您可以使用此代碼,以確保您有不依賴於服務器軟件配置這樣的功能:

if (!function_exists("getallheaders")) 
{ 
    function getallheaders() 
    { 
    $headers = ""; 

    foreach ($_SERVER as $name => $value) 
    { 
     if (substr($name, 0, 5) == "HTTP_") 
     { 
     $headers[str_replace(" ", "-", ucwords(strtolower(str_replace("_", " ", substr($name, 5)))))] = $value; 
     } 
    } 

    return $headers; 
    } 
}