为了账号安全,请及时绑定邮箱和手机立即绑定

Docker可以看到image.png文件,但是浏览器不显示图片

Docker可以看到image.png文件,但是浏览器不显示图片

PHP
小唯快跑啊 2021-12-03 15:29:59
我正在学习 Docker 和 Swoole。运行一个包含 2 个文件和一个空目录的 Docker 容器。在浏览器中访问 HTTP 服务器时,不显示图像(获取损坏的图像图标)。我已经从外部网页尝试了 PNG,该图像显示正确。我也试过“docker run -it hello-swoole sh”并确认容器显示data  index.php  image.png文件FROM php:7.2-fpmRUN apt-get update && apt-get install vim -y && \    apt-get install openssl -y && \    apt-get install libssl-dev -y && \    apt-get install wget -y RUN cd /tmp && wget https://pecl.php.net/get/swoole-4.2.9.tgz && \    tar zxvf swoole-4.2.9.tgz && \    cd swoole-4.2.9  && \    phpize  && \    ./configure  --enable-openssl && \    make && make installRUN touch /usr/local/etc/php/conf.d/swoole.ini && \    echo 'extension=swoole.so' > /usr/local/etc/php/conf.d/swoole.iniRUN mkdir -p /app/dataWORKDIR /appCOPY ./app /appEXPOSE 8101CMD ["/usr/local/bin/php", "/app/index.php"]索引.php<?php$http = new swoole_http_server("0.0.0.0", 8101);$http->on("start", function ($server) {    echo "Swoole http server is started at http://127.0.0.1:8101\n";});$http->on("request", function ($request, $response) {    $response->header("Content-Type", "text/html; charset=utf-8");    $response->end('<!DOCTYPE html><html><body><img src="image.png"></body></html>');});$http->start();知道为什么不显示 image.png 吗?更新 以下工作来显示图像,但没有显示任何 HTML。感觉爱德华的答案在这里是正确的,我还没有正确处理所有请求。现在可以肯定,这个问题更像是一个 Swoole 问题而不是 Docker 问题。<?php$http = new swoole_http_server("0.0.0.0", 8101);$http->on("start", function ($server) {    echo "Swoole http server is started at http://127.0.0.1:8101\n";});$http->on("request", function ($request, $response) {    $response->header('Content-Type', 'image/png');    $response->sendfile('image.png'); // code seems to stop executing here    $response->header("Content-Type", "text/html; charset=utf-8");    $response->end('<!DOCTYPE html><html><body><img src="/image.png"></body></html>');});$http->start();
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

我设法在这里找到答案:https : //www.swoole.co.uk/docs/modules/swoole-http-server/configuration ...


只需要添加:


$http->set([

    'document_root' => '/app',

    'enable_static_handler' => true,

]);

完整更新代码


<?php

$http = new swoole_http_server("0.0.0.0", 8101);


$http->set([

    'document_root' => '/app',

    'enable_static_handler' => true,

]);


$http->on("start", function ($server) {

    echo "Swoole http server is started at http://127.0.0.1:8101\n";

});


$http->on("request", function ($request, $response) {

    $response->header("Content-Type", "text/html; charset=utf-8");

    $response->end('<!DOCTYPE html><html><body><img src="image.png" height="200"></body></html>');

});


$http->start();


查看完整回答
反对 回复 2021-12-03
?
aluckdog

TA贡献1847条经验 获得超7个赞

我假设您还必须对服务器进行编程以提供静态文件。



查看完整回答
反对 回复 2021-12-03
  • 2 回答
  • 0 关注
  • 399 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信