Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中保存文件而不在yii php中保存文件夹_Php_Mysql_Yii - Fatal编程技术网

在php中保存文件而不在yii php中保存文件夹

在php中保存文件而不在yii php中保存文件夹,php,mysql,yii,Php,Mysql,Yii,我在php中将文件保存为long blob,首先将其保存在文件夹中,然后保存到数据库中,问题是服务器具有写入权限,因此我希望直接保存它 这是我尝试过的(这非常有效): if(isset($_POST['image'])){ $id = 0; $image = $_POST['image']; $tmp_image = date('YmdHisu').'.jpg'; file_put_contents($tmp_image,

我在
php
中将文件保存为
long blob
,首先将其保存在文件夹中,然后保存到数据库中,问题是服务器具有写入权限,因此我希望直接保存它

这是我尝试过的(这非常有效):

 if(isset($_POST['image'])){

        $id = 0;

        $image = $_POST['image'];
         $tmp_image = date('YmdHisu').'.jpg';

        file_put_contents($tmp_image, base64_decode($image));

         $sql = "INSERT INTO fingerprint(template)
            VALUES ('".addslashes(file_get_contents($tmp_image))."')";

                try
                    {
                               $connection=Yii::app()->db; 
                                $command=$connection->createCommand($sql);

                                $rowCount=$command->execute(); // execute the non-query SQL


                    echo "saved successifully";
                    unlink($tmp_image);

                    }
                    catch(Exception $ex)
                    {
                        echo 'Query failed' , $ex->getMessage();
                        unlink($tmp_image);
                    }


            }

如何在
mysql
blob字段中保存此文件,而不必先将其保存在文件夹中,然后保存到db

让我们假设您已使用POST方法通过Android将文件发送到运行Yii1的服务器

首先,物理文件包含在$\u FILES变量中,$\u POST变量中,正如您所说,包含一个以base64格式编码的文件字符串(我写这个是为了得到一个清晰的答案)。

现在,您可以尝试使用yii代码以标准MVC yii方式上传文件:

确实,您正在从外部设备上载文件,但Yii在课堂上得到了您的帮助:

调用getInstance检索上载文件的实例,然后使用saveAs将其保存在服务器上。您还可以查询有关该文件的其他信息,包括名称、临时名称、类型、大小和错误

特别是,您应该使用返回以指定数组名开头的实例数组的函数

$temp = CUploadedFile::getInstanceByName("image");  // $_FILES['image']
通过此功能,您可以访问文件数据:

$temp->name; // Name of the file
$temp->type; // Type of the file 
$temp->size; // Size of the file
// etc etc..
$temp->saveAs("/your/path/" . $tmp_image . $temp->type); // Save your file
对于最终版本,您可以检查文件是否已保存并执行查询:

if($temp->saveAs("/your/path/" . $tmp_image . $temp->type)) {
 // File is saved you can execute the query for save the record in your db
} else {
 // Something went wrong.
}
您还可以在模型中传输此逻辑。


希望这会对您有所帮助。

假设您已使用POST方法通过Android将文件发送到运行Yi1的服务器

首先,物理文件包含在$\u FILES变量中,$\u POST变量中,正如您所说,包含一个以base64格式编码的文件字符串(我写这个是为了得到一个清晰的答案)。

现在,您可以尝试使用yii代码以标准MVC yii方式上传文件:

确实,您正在从外部设备上载文件,但Yii在课堂上得到了您的帮助:

调用getInstance检索上载文件的实例,然后使用saveAs将其保存在服务器上。您还可以查询有关该文件的其他信息,包括名称、临时名称、类型、大小和错误

特别是,您应该使用返回以指定数组名开头的实例数组的函数

$temp = CUploadedFile::getInstanceByName("image");  // $_FILES['image']
通过此功能,您可以访问文件数据:

$temp->name; // Name of the file
$temp->type; // Type of the file 
$temp->size; // Size of the file
// etc etc..
$temp->saveAs("/your/path/" . $tmp_image . $temp->type); // Save your file
对于最终版本,您可以检查文件是否已保存并执行查询:

if($temp->saveAs("/your/path/" . $tmp_image . $temp->type)) {
 // File is saved you can execute the query for save the record in your db
} else {
 // Something went wrong.
}
您还可以在模型中传输此逻辑。


希望这能对你有所帮助。

如果
$\u POST['image']
确实包含文件的内容(我对此表示怀疑),那么只需
addslashes($\u POST['image'])
这个$\u POST['image']包含一个以base 64格式编码的文件字符串,这就是我在上面解码它的原因。以上工作非常完美您使用的是哪个版本的yii?我使用的是yii版本1您应该使用yii标准方式上传它:创建上传文件的模型。如果
$\u POST['image']
确实包含文件的内容(我怀疑它),那么只需
添加斜线($\u POST['image'])
该$\u POST['image']包含以Base64格式编码的文件字符串,这就是我在上面对其进行解码的原因。以上工作非常完美您使用的是哪个版本的yii?如果您使用的是yii版本1,您应该使用yii标准方式进行上传:创建上传文件的模型。