我正在尝试使用类中的方法将图像文件上传到数据库。它应该像函数一样工作。
我有2个php文件。第一个,接收图像并调用方法的文件:
<?php
if (!empty($_FILES)){
require_once('masterclass.php');
$galeria = $_POST['gal'];
$fecha = $_POST['fecha'];
$titulo = $_FILES['Filedata']['name'];
$imagen = $_FILES['Filedata']['tmp_name'];
$mc = new masterclass;
$mc->saveImage($galeria, $fecha, $titulo, $imagen, 800, 600, 80);
}
?>
第二个,应该做的工作方法:
public function saveImage($galeria, $fecha, $titulo, $tmpImagen, $maxWidth, $maxHeight, $quality){
if( isset($galeria, $fecha, $titulo, $tmpImagen, $maxWidth, $maxHeight, $quality) ){
$ms->dbc(true); // connect to database
$fecha = $this->formatFecha($fecha); // format date string
$origen = imagecreatefromjpeg($tmpImagen);
$x = imagesx($origen);
$y = imagesy($origen);
if( $x > $maxWidth ){
$nx = $maxWidth;
$ny = $y*$nx/$x;
}
if( $y > $maxHeight ){
$ny = $maxHeight;
$nx = $x*$ny/$y;
}
else{
$nx = $x;
$ny = $y;
}
$destino = imagecreatetruecolor($nx,$ny);
imagecopyresized($destino,$origen,0,0,0,0,$nx,$ny,$x,$y);
imagejpeg($destino, $tmpImagen, $quality);
$imagen = addslashes(fread(fopen($tmpImagen, "rb"), filesize($tmpImagen)));
$peticion = "insert into galeria_fotos (galeria, fecha, titulo, imagen) values ('$galeria', '$fecha', '$titulo', '$imagen')";
mysql_query($peticion) or die($this->isError(2));
$ms->dbc(false); // disconnect from database
}
else{
die($this->isError(2));
}
}
如果我直接在第一个php文件中执行该方法的工作,它就可以工作。但是当我从类中使用saveImage()时它不会。 我从去年开始只使用JavaScript工作,而且我对PHP感到很冷淡。
很抱歉西班牙语中的变量名称,但我认为这完全可以理解。
作为附加信息,我可以说我在调用方法时尝试直接发送$_FILES
数组,但没有结果。
答案 0 :(得分:0)
我试图重现你的问题。但是,我做不到。我对我的世界做了一些改变,但我相信会覆盖你发布的所有内容。
按照我的例子:
的index.php
<html>
<head></head>
<body>
<form action="upload.php" enctype="multipart/form-data" method=post>
<input type="file" id="f_up" name="f_up">
<input type="submit" value=go>
</form>
</body>
</html>
upload.php的
<?php
require_once('masterclass.php');
if (!empty($_FILES)){
require_once('masterclass.php');
$galeria = $_POST['gal'];
$fecha = $_POST['fecha'];
$titulo = $_FILES['f_up']['name'];
$imagen = $_FILES['f_up']['tmp_name'];
$mc = new masterclass;
$mc->saveImage($imagen, 800, 600, 80);
}
masterclass.php
<?php
class masterclass{
public function saveImage($tmpImagen, $maxWidth, $maxHeight, $quality){
$db = mysql_connect('127.0.0.1','root') or die('could not connect');
mysql_select_db('examples',$db);
$origen = imagecreatefromjpeg($tmpImagen);
if( isset($tmpImagen, $maxWidth, $maxHeight, $quality) ){
//$fecha = $this->formatFecha($fecha); // format date string
$origen = imagecreatefromjpeg($tmpImagen);
$x = imagesx($origen);
$y = imagesy($origen);
if( $x > $maxWidth ){
$nx = $maxWidth;
$ny = $y*$nx/$x;
}
if( $y > $maxHeight ){
$ny = $maxHeight;
$nx = $x*$ny/$y;
}
else{
$nx = $x;
$ny = $y;
}
$destino = imagecreatetruecolor($nx,$ny);
imagecopyresized($destino,$origen,0,0,0,0,$nx,$ny,$x,$y);
imagejpeg($destino, $tmpImagen, $quality);
$imagen = addslashes(fread(fopen($tmpImagen, "rb"), filesize($tmpImagen)));
$peticion = "insert into upload_image (image) values ('$imagen')";
mysql_query($peticion,$db) or die('error');
}
else{
die($this->isError(2));
}
}
}
此代码适用于mysql 5.5.27和PHP 5.3.15。让我们更多地了解您的环境。