簡體   English   中英

PHP創建映像文件,但僅適用於本地開發人員,而不適用於遠程服務器

[英]PHP creates image file but only works on local dev, not at the remote server

我有一個可以動態調整圖像大小並將其發送到瀏覽器的代碼。

但是它不能正常工作……僅當我要求它將圖像輸出到文件而不是瀏覽器時。

我不認為問題出在我的代碼上,因為這個問題只發生在真實的服務器上 在我的電腦上,它的工作非常完美

碼:

$img = $_GET['img'];

ini_set('allow_url_fopen', 'on');

$info = getimagesize($img);
header('Content-type: '.image_type_to_mime_type($info[2]));
Fotos::redimensiona($img, null, Fotos::MINIGAL_WIDTH, Fotos::MINIGAL_HEIGHT, false);

照片:: redimensiona():

//[...] a whole bunch of code calculating dimensions, they just works
// $funcImage is like 'imagejpeg'/'imagepng'/'imagegif', depends on file
if ($arquivo) {
    $funcImage($thumb, "$final.$ext");
    return "$final.$ext";
}
else {
    $funcImage($thumb);
}

請記住:它適用於本地開發,但不適用於遠程Web服務器。

[編輯]
如果我注釋header行,則打印二進制代碼; 並且當我更改原始圖像時,此代碼也會發生更改。
但是Firefox的header我顯示了該頁面的URL(例如http://www.sabianoar.com.br/novosabia/inc/phpImg.php?img=awful_escaped_long_path.jpeg ),如果我執行CTRL+I它將告訴CTRL+I對我來說,它是0x0大小的JPEG,就像10kb。
Opera給我顯示了一個空圖像,就像我用錯誤的src放置<img> ,即

[EDIT2]當我嘗試保存然后打開輸出(通常保存為.jpeg文件)時,EyeOfGnome說“不是JPEG文件:以0xef 0xbb開頭”。

您的代碼在開始時輸出BOM 從遠程Web服務器打開代碼,並檢查(使用十六進制編輯器,例如xxd)代碼是否包含<?php之前的BOM。 如果BOM表不在您要查看的文件中,則可能在include中。

一些編輯器添加BOM並由apache輸出。 那可能就是破壞您的圖像的原因。

檢查圖像所在的圖像/目錄的權限。

這可能不是原因,但是為什么要回顯Fotos::redimensional() 諸如imagejpeg()類的函數在輸出圖像后都返回布爾值(不是圖像數據),因此最終將在圖像末尾打印“ 1”。 我只是測試了一下,它似乎並沒有破壞jpeg圖像。

您是否嘗試過將本地計算機與服務器進行比較? 比較phpinfo()的輸出; 他們是不同的平台嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM