从本地服务器检索PHP中的图像内容并保存在远程服务器中

时间:2016-06-02 07:11:15

标签: javascript php angularjs

$imgData = base64_encode(file_get_contents('F:\images\home\pic.jpg')); 

以上是我的本地主机路径。对于本地主机,它正在运行。

但是,我怎样才能在远程服务器上获取它?

我还没有使用过FTP。请指导我。

我需要单独获取图像的内容。我不需要将文件上传到远程服务器。

1 个答案:

答案 0 :(得分:0)

由于\目录分隔符,您似乎在Windows计算机上进行开发。最佳做法是使用正斜杠/,因为它可以在Windows和Linux上运行,如果使用相对路径(引用根目录的路径称为绝对路径。参考当前目录称为relative)。你应该尽可能地使用相对路径。

示例:

  • F:/images/home/pic.jpg是绝对路径。注意我换了你的 带有forwardslash \的反斜杠/
  • http://www.example.com/images/pic.png是绝对路径。
  • ./pic.jpg是相对路径,相当于pic.jpg
  • ../images/pic.jpg我是一个相对路径(..表示您已退出当前文件夹,进入图像文件夹所在的工作目录。)

在远程(Linux)服务器上,您必须知道相对路径

假设您的远程服务器是linux / apache服务器。也许您还应该使用apache代替javascript/angular来标记您的问题?

您应该确定图像的相对路径,并使用上面的示例将代码重写为以下内容:

$imgData = base64_encode(file_get_contents('../images/home/pic.jpg'));

您也可以使用绝对路径(http://www.example.com/images/pic.png),但这并不总是可行或推荐。

如何找到图像的相对路径?使用PHP,SSH或FTP有多种方法可以做到这一点。 如果导航到您的图像,您的FTP软件将显示图像的路径,但您需要将其调整到工作目录路径。此图像来自Filezilla,一个开源FTP客户端:

enter image description here

在这种情况下,在Filezilla中看到的/home/bg29ll/public_html/food2/images中,food2是您的工作目录,因此您只需要使用:

$imgData = base64_encode(file_get_contents('images/pic.jpg'));

您也可以在php代码中包含此行并在服务器上运行它:

print_r( dirname(__FILE__) );

这会让你知道你的绝对路径是什么。

编辑:要将图像保存在数据库中(尽管我建议将图像上传到服务器并仅将位置/名称保存到数据库中),您必须使用blob列类型(其中一个)其变体,TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB)。 Mediumblob允许文件大小最大为16 MB。

CREATE TABLE images (
    id   INT           AUTO_INCREMENT PRIMARY KEY,
    mime VARCHAR       (255) NOT NULL,
    data MEDIUMBLOB          NOT NULL
);

然后您可以使用类似的内容在数据库中插入图像(使用PDO):

    $blob = fopen($filePath, 'rb');

    $sql = "INSERT INTO files(mime,data) VALUES(:mime,:data)";
    $stmt = $this->pdo->prepare($sql);

    $stmt->bindParam(':mime', $mime);
    $stmt->bindParam(':data', $blob, PDO::PARAM_LOB);

    $stmt->execute();