PHP代码在本地服务器上工作但不在域上工作

时间:2014-04-26 16:41:15

标签: php webserver

我似乎遇到了几行代码的问题,因为它在xampp上的本地服务器上运行,但是当我通过FTP上传到我的域时它不再有效。我附上了代码段以及它包含的文件。域所做的只是完全忽略代码并继续进行,就好像它不存在一样。任何帮助都提前赞赏!

代码段

<?php
include_once("colors.inc.php");
$ex=new GetMostCommonColors();
$ex->image="http://maps.googleapis.com/maps/api/staticmap?center=25.437484181498,-89.594942854837&zoom=50&size=600x300&maptype=roadmap&markers=color:blue&sensor=false";

$colors=$ex->Get_Color();
$how_many=12;
$colors_key=array_keys($colors);
?>

colors.inc.php

<?php

class GetMostCommonColors
{

    var $image;


    function Get_Color()
    {
        if (isset($this->image))
        {
            $PREVIEW_WIDTH    = 150;  /
            $PREVIEW_HEIGHT   = 150;
            $size = GetImageSize($this->image);
            $scale=1;
            if ($size[0]>0)
            $scale = min($PREVIEW_WIDTH/$size[0], $PREVIEW_HEIGHT/$size[1]);
            if ($scale < 1)
            {
                $width = floor($scale*$size[0]);
                $height = floor($scale*$size[1]);
            }
            else
            {
                $width = $size[0];
                $height = $size[1];
            }
            $image_resized = imagecreatetruecolor($width, $height);
            if ($size[2]==1)
            $image_orig=imagecreatefromgif($this->image);
            if ($size[2]==2)
            $image_orig=imagecreatefromjpeg($this->image);
            if ($size[2]==3)
            $image_orig=imagecreatefrompng($this->image);
            imagecopyresampled($image_resized, $image_orig, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); 
            $im = $image_resized;
            $imgWidth = imagesx($im);
            $imgHeight = imagesy($im);
            for ($y=0; $y < $imgHeight; $y++)
            {
                for ($x=0; $x < $imgWidth; $x++)
                {
                    $index = imagecolorat($im,$x,$y);
                    $Colors = imagecolorsforindex($im,$index);
                    $Colors['red']=intval((($Colors['red'])+15)/32)*32;    
                    $Colors['green']=intval((($Colors['green'])+15)/32)*32;
                    $Colors['blue']=intval((($Colors['blue'])+15)/32)*32;
                    if ($Colors['red']>=256)
                    $Colors['red']=240;
                    if ($Colors['green']>=256)
                    $Colors['green']=240;
                    if ($Colors['blue']>=256)
                    $Colors['blue']=240;
                    $hexarray[]=substr("0".dechex($Colors['red']),-2).substr("0".dechex($Colors['green']),-2).substr("0".dechex($Colors['blue']),-2);
                }
            }
            $hexarray=array_count_values($hexarray);
            natsort($hexarray);
            $hexarray=array_reverse($hexarray,true);
            return $hexarray;

        }
        else die("You must enter a filename! (\$image parameter)");
    }
}
?>

2 个答案:

答案 0 :(得分:2)

我同意@Rodrigo Brun,但也鼓励您查看您的托管客户端是否支持PHP中的GD库。您可以通过在目录中创建包含内容<?php phpinfo(); ?>的页面来查看它是否支持GD。有时这是关闭的,可以通过编辑php.ini文件轻松修复。我有一个类似的问题,这解决了它运气好,希望这有帮助!

答案 1 :(得分:1)

默认情况下,大多数Web服务器不允许使用基本功能从url(远程文件)打开文件,例如file_get_contents(&#34; http:// ....&#34;)或getimagesize(&#34) ; HTTP://...")。这是一个安全问题,不建议使用此方法获取远程图像或文件的属性。试试Curl库,它更安全,并为此建立。

但是在本地服务器中,通常你的php可以通过基本功能打开远程文件。

因此,您可以修改您的php.ini(搜索&#34; allow_url_fopen&#34;,并将值设置为&#34; 1&#34;),或者,您可以在您的PHP代码中使用direct(第一行),

ini_set("allow_url_fopen",1);

这个功能是&#34;替换&#34; php.ini中的配置,但没有更改原始的php.ini文件,仅在执行时间。

恢复:您的问题的两个答案是可用的,CURL或INI_SET(allow_url_fopen)。

希望我有所帮助。

[已编辑] -----------

嗨,以下代码适合您的要求,使用curl库获取图像的宽度,高度和Mime类型(在INTEGER和STRING值中)。

只需将这3个功能添加到您的班级&#34; {}&#34;。在var $image之后

function getImageBytes(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->image);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $info = curl_exec($ch);
    curl_close($ch);
    return $info;
}

function getSize(){
    $bytes = $this->getImageBytes();
    $img = imagecreatefromstring($bytes);

    $out = array();
    $out[0] = imagesx($img);
    $out[1] = imagesy($img);

    $f = finfo_open();
    $mime = finfo_buffer($f, $bytes, FILEINFO_MIME_TYPE);
    $out[2] = $this->getIntMimeType($mime);
    $out[3] = $mime;

    return $out;
}

function getIntMimeType($m){
    switch ($m) {
        case "image/gif":
            return 1;           
        case "image/jpeg":
            return 2;
        case "image/png":
            return 3;
        default:
            return 0;
    }
}

现在,为了获得正确的结果,请更改此行

$size = GetImageSize($this->image);

新功能

$size = $this->getSize();

没有必要在新功能中传递参数。它在&#34; getImageBytes&#34;中使用的$this->image变量功能

函数getIntMimeType($m)适用于您的条件$size[2]==1 ...只是字符串到整数的翻译器。

$size中索引3的值现在是字符串中的mime-type(例如image / png或image / gif)。

:)