2017-01-11 2 views
0
konvertieren

Ich habe Probleme mit der Konvertierung von Variablen von $ _POST [] nach int (long), um eine Funktion zu erfüllen, die lange dauert.PHP Konnte Variablen nicht in int

Diese Funktion benötigt einige Eingabevariablen ($ width und $ height), die beide lang sind. Das Skript ruft diese Variablen von $ _POST [] ab und sie werden beim Abrufen natürlich mit einer Zeichenkette versehen. Ich habe für die Umwandlung dieser Variablen in beiden float, int und lange verschiedene Methoden ausprobiert:

$variable = (float) $_POST["variable"]; 

und

$variable = $_POST["variable"] + 0; 

und

settype($variable, "float"); 

Aber ich immer noch die gleichen Fehler in Fehler. protokollieren, egal was ich mache:

PHP Warning: imagecreatetruecolor() expects parameter 1 to be long, string given in /bla bla bla/resize_image.php on line 30 

Es ist soweit, dass ich es satt habe, auf Google nach Lösungen zu suchen, da nichts das verdammte Ding zu konvertieren scheint. Also frage ich euch, ob ich etwas übersehen habe oder ob das überhaupt möglich ist.

get_image.php

$url = "../../" . $_POST["url"]; 

$cropped = false; 
$width = 0; 
$height = 0; 

if (isset($_POST["cropped"])) { 
    $cropped = $_POST["cropped"]; 
} 

if (isset($_POST["width"])) { 
    $width = $_POST["width"]; 
} 

if (isset($_POST["height"])) { 
    $height = $_POST["height"]; 
} 

// Get image 
$type = pathinfo($url, PATHINFO_EXTENSION); 
$data = file_get_contents($url); 

if ($width > 0 && $height > 0) { 

    include "Classes/resize_image.php"; 

    settype ($width , "float"); 
    settype ($height , "float"); 

    $data = resize_image($url, $cropped, $width, $height, $_POST["type"]); 
} 

$base64 = base64_encode($data); 
echo $base64; 

resize_image.php (Klasse)

function resize_image($file, $w, $h, $crop=FALSE, $type) { 
list($width, $height) = getimagesize($file); 
$r = $width/$height; 
if ($crop) { 
    if ($width > $height) { 
     $width = ceil($width-($width*abs($r-$w/$h))); 
    } else { 
     $height = ceil($height-($height*abs($r-$w/$h))); 
    } 
    $newwidth = $w; 
    $newheight = $h; 
} else { 
    if ($w/$h > $r) { 
     $newwidth = $h*$r; 
     $newheight = $h; 
    } else { 
     $newheight = $w/$r; 
     $newwidth = $w; 
    } 
} 

if ($type == "png") { 
    $src = imagecreatefrompng($file); 
} else if ($type == "jpeg") { 
    $src = imagecreatefromjpeg($file); 
} 

$dst = imagecreatetruecolor($newwidth, $newheight); 
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

return $dst; 

}

Ich bin dringend !!

+0

Haben Sie 'floatval()' ausprobiert? – shalvah

+0

Sieht so aus, als hätten Sie die Funktion falsch aufgerufen. '$ data = resize_image ($ url, $ abgeschnitten, $ width, $ height, $ _POST [" type "]);' sollte '$ data = resize_image ($ url, $ width, $ height, $ cropped, $ _POST sein ["type"]); ' – shalvah

Antwort

1

Die Warnung

PHP Warning: imagecreatetruecolor() Parameter 1 zu sein, lange erwartet, string gegeben ...

bedeutet, dass der erste Parameter eine Zeichenfolge ist. Schauen wir uns die Funktionsaufruf aussehen in resize_image.php:

$dst = imagecreatetruecolor($newwidth, $newheight); 

Das erste Argument ist $newwidth, die entweder $w zugeordnet ist, oder $h*$r. Das Ergebnis der Multiplikation ist immer eine Zahl (float oder integer). Jedoch ist $w auf die Funktion ohne Typumwandlung geführt:

if (isset($_POST["cropped"])) { 
    $cropped = $_POST["cropped"]; 
} 

// ... 

$data = resize_image($url, $cropped, $width, $height, $_POST["type"]); 

Es gibt kein Typ für das Gießen $cropped (das zweite Argument) innerhalb der Funktion, zu.

Sie müssen also $w entweder im Funktionsaufruf oder innerhalb von resize_image in Ganzzahl umwandeln.Es ist besser, Parameter innerhalb der Funktionskörper zu sanieren:

function resize_image($file, $w, $h, $crop=FALSE, $type) { 
    $w = (int)$w; 
    $h = (int)$h; 
    // ... 

Ach, und Sie wahrscheinlich nicht bedeutete $cropped als $w passieren.

+0

DANKE. SIE. Ich kann nicht glauben, dass ich das die ganze Zeit vermisst habe. Es ist in Ordnung! – Fluesopp

0

Ich frage mich, ob der Beitrag tatsächlich numerisch ist. Vielleicht versuchen:

$int = (is_numeric($_POST['variable']) ? (int)$_POST['variable'] : 0); 

Gibt 0 zurück, wenn nicht numerisch, Sie können je nach Bedarf ändern.