Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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站点的包含问题_Php_Html - Fatal编程技术网

php站点的包含问题

php站点的包含问题,php,html,Php,Html,下面的问题。我有2个php文件 1.)../folder/main.php 2.)../folder/subfolder/page_coocking.php 3.)../folder/subfolder/bread.php 4.)../folder/subfolder/video_folder/video1.mp4 其中载有下列案文: 1.) main.php .. include('subfolder/page_coocking.php'); .. 2.) page_

下面的问题。我有2个php文件

1.)../folder/main.php
2.)../folder/subfolder/page_coocking.php
3.)../folder/subfolder/bread.php
4.)../folder/subfolder/video_folder/video1.mp4
其中载有下列案文:

1.) main.php
    ..
    include('subfolder/page_coocking.php');
    ..
2.) page_coocking.php
    ..
    include('bread.php');
    ..
3.) bread.php
    ..
    <video controls poster="video_folder/video1.mp4" width="400" height="">
      <source src="video_folder/video1.mp4"/>
    </video>

有权访问视频。为什么?我无法解释自己。如果你采用某种MVC或前端控制器,可能会有其他没有包含的风格?

这会对你有很大帮助。你所采取的方法最多也很难维持

您还需要非常清楚地了解面向php文件的函数(如include和require)与web空间(相对于web服务器的webroot)之间的区别

在这种情况下,您可以同时执行这两种操作,即直接使用web空间运行脚本,并且包含与webroot无关的php脚本

您的问题是您的webroot是“文件夹”。因此,对于Web服务器在url中请求的任何内容,例如main.php,url是

在main.php中,如果您发出代码,然后要求浏览器查找与其相关的内容,则相对路径为:http://yourserver.tld/video_folder/video1.mp4

这当然不起作用,因为视频实际上在http://yourserver.tld/subfolder/video_folder/video1.mp4

相对Webroot确实具有当前目录的概念,因此当您在子文件夹中执行脚本(如使用bread.php)时,此时的网页是:

http://yourserver.tld/subfolder/ 因为你正在执行http://yourserver.tld/subfolder/bread.php. 当bread.php发出相对路径时,该路径将被转换为http://yourserver.tld/subfolder/video_folder/video1.mp4.

框架采用的做法是拥有一个独立于php脚本源的webroot文件。只有需要直接从webspace.css、.js、图像返回的资产保存在该目录结构中。通常会有一个前端控制器脚本index.php,所有请求都通过该脚本传递,然后前端控制器可以根据路由需要包含其他脚本

即使使用简化的main.php,您也可以通过将其他脚本移动到目录中来采用这种做法,以便您的文件结构更像:

/project
        /web  (set as webroot for http server, only index.php here)
        /web/js
        /web/css
        /web/images
        /web/videos
        /include (php includes and classes)

在index.phpmain.php中,可以设置处理所有相对路径的常量或变量

考虑一下bread.php中构造的路径,它包含在main.php中,main.php有一个路径,而page_coock.php存在于另一个文件夹中…\+视频文件夹!=\子文件夹+视频_folder@enhzflep我怎样才能解决这个问题=/您可以使用绝对路径,也可以使用与main.php相关的所有路径作为主路径。这有点不好,因为我需要更多项目的组合,而不仅仅是一个页面。这是个问题。我认为在我打开另一台服务器的ssh时,我会将play作为隧道中的隧道效果,就像ssh一样,ssh会为我做出正确的解释。我想我可以访问这个页面,在这种情况下,bread.php将以隧道形式直接连接到隧道上,只需选择main.php处理包含intern链接的函数的其余部分,这样我就可以看到main.php的正常url。这可能有助于您的OP演示或填写MVC的实际内容-只需对需要使用的人说一句话,这就没有什么实际意义了,相反,你需要使用A、B或C,它们都是很好的东西[MVC]。然后人们可以通过谷歌或Bing探索如何使用MVC A或MVC B等@EduardTester来回答您的问题,您可以使用前端控制器获得任意数量的页面。这需要一些代码来查看正在发出的请求,然后分支或包含处理代码。我还提到了MVC模型-视图-控制器模式,这基本上就是控制器所做的-处理请求的路由,并根据请求的url确定要执行的逻辑。从这类内容开始的简单方法是使用名为“page”的url参数。因此,您可能有一个“联系人”页面,您可以使用site.com?page=contact路由到该页面
/project
        /web  (set as webroot for http server, only index.php here)
        /web/js
        /web/css
        /web/images
        /web/videos
        /include (php includes and classes)