标头位置在 PHP 中不起作用 [重复]

Posted

技术标签:

【中文标题】标头位置在 PHP 中不起作用 [重复]【英文标题】:Header Location not working in Php [duplicate] 【发布时间】:2016-08-21 00:16:37 【问题描述】:

以下语句似乎不起作用。我也没有收到任何错误消息。

header("Location: /home/shaliu/Projects/Nominatim/website/search.php?q="+$query);

我在 search.php 文件中使用 file_put_contents()。

有没有办法找出问题所在?

【问题讨论】:

你应该在 header-location 中使用完整的而不是相对的 URI 在调用header之前,您还应该确保没有其他echo出现在屏幕上 @windrunn3r.1990 如果是这种情况,他会\应该收到一条错误消息 哦,是的!忘了那个。谢谢 当然很多人很傻,开发时关闭了错误检查\显示,所以,这不是一个无效点:_0 【参考方案1】:

改变这个:

+$query

到这里:

.$query

因为:

+javascript 的连接运算符,其中 . 是 php 的连接参数

另外,您发送的路径似乎不正确。 header函数里面的参数应该是一个完整的网址,例如以http开头:

header('Location: http://www.example.com/');

虽然您的答案是使用本地文件路径:"Location: /home/shaliu/Projects/Nominatim..."

【讨论】:

解释代码真的很有帮助,而不仅仅是说“做这个” 这也无济于事。该文件仍未被调用。【参考方案2】:

请尝试:

你可以使用:

header("Location: http://www.example.com/search.php?q=".$query); exit();

或者如果您的 search.php 文件位于根目录:

header("Location: /search.php?q=".$query); exit();

也许对你有帮助。

【讨论】:

【参考方案3】:

输入错误报告(E_ALL);

使用相对路径。

更改为

 header("Location: /home/shaliu/Projects/Nominatim/website/search.php?q="+$query);

在 php 中用于连接使用 ".","+" 在 javascript 中而不是在 php 中使用

header("Location: /home/shaliu/Projects/Nominatim/website/search.php?q=".$query);

请为文件设置正确的路径

【讨论】:

【参考方案4】:

在将+ 固定为. 之后,正如@Webeng 之前所说的那样。

如果您通过在浏览器中输入 /home/shaliu/Projects/Nominatim/website/index.php 来访问您的页面,标题将根本不起作用,因为您不在网络上下文中,而是在本地文件视图上下文中。

如果您通过http://localhost/Nominatim/index.php 访问它,您将处于网络环境中,但您的标头将不起作用,因为您在技术上将重定向发送到http://localhost/home/shaliu/Projects/Nominatim/website/search.php 的路径,该路径可能在此位置不存在。如果您的 website/ 文件夹链接到 http://localhost/ 或任何适当的,您应该将其更改为:/search.php,而不是这样,取决于您的环境配置。

【讨论】:

【参考方案5】:

你可以试试这个。希望对你有帮助

header('Location: http://www.example.com/search.php?q='.$query);

【讨论】:

【参考方案6】:

header( ) 用于发送 http 标头 (http://php.net/manual/en/function.header.php)。看起来好像您正在尝试使用本地文件路径而不是 http(Web)地址来访问 php 文件。 “/home/shaliu/Projects/Nominatim/website/search.php”需要可通过网络访问,并且该网址是 header() 中需要使用的地址(请参阅@Purushotham 的答案)。

【讨论】:

【参考方案7】:

如果你正在使用

/home/shaliu/Projects/Nominatim/website/search.php

在这种情况下,您的位置以 / 开头,这意味着主文件夹(目录)应位于服务器的根文件夹中。例如,作为本地服务器,如果我们考虑 XAMPP,则主文件夹应位于 C:\xampp\htdocs(通常)内,如果我们考虑 WAMP,则主文件夹应位于 www 文件夹内。

如果您的主文件夹位于当前页面所在的文件夹中,那么您应该使用

home/shaliu/Projects/Nominatim/website/search.php

没有 /(需要正斜杠)。

第二件事是您需要将 + 替换为 .连接字符串。

所以,如果您的主文件夹位于服务器的根目录中,那么您应该使用

header("Location: /home/shaliu/Projects/Nominatim/website/search.php?q=".$query);

否则,你应该去

header("Location: home/shaliu/Projects/Nominatim/website/search.php?q=".$query);

【讨论】:

【参考方案8】:

用测试“如果文件存在”试试这个代码:

if(is_file("/home/shaliu/Projects/Nominatim/website/search.php")) header("Location: /home/shaliu/Projects/Nominatim/website/search.php?q=".$query); else echo "Error!";

记住:在 php 中用于连接使用 . (@shivani parmar)

记住:如果header在任何html元素之后被调用,php会返回错误!

【讨论】:

【参考方案9】:

header("Location:https://www.example.com/search.php?q='<?php echo $get_id; ?>'");

请试试这个 php 代码。 如果您在 php 第一个标头和位置中使用标头,则问号您的搜索获取 ID。

【讨论】:

【参考方案10】:

您需要将 plus(+) 替换为 dot(.) 以连接字符串。

试试这个。

header('Location: http://www.example.com/search.php?q='.$query);

【讨论】:

【参考方案11】:

除了已经指出的明显的连接问题,看起来这条路径/home/shaliu/Projects/Nominatim/website/search.php 是一个*NIX 路径;给定它开头的/home/<user> 模式。

如果是这种情况,并且您正尝试像这样在 Web 服务器根目录之外打开文件,那么您的问题很可能是权限问题。将您的 search.php 移动到 Web 服务器进程可访问的位置并在您尝试打开 Web 服务器进程的文件上运行 chmod/chown 可能会解决您的问题。此外,您可能必须指定您使用的操作系统,以防您还需要运行chcon

哦,我会发表评论,但我似乎没有必要的代表来添加 cmets。

【讨论】:

以上是关于标头位置在 PHP 中不起作用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP Header Location 在 localhost xampp 中不起作用?

使用 CORS 标头时,$.get 在 IE 中不起作用

mail()函数在php中不起作用[重复]

位置粘性在IE中不起作用[重复]

基于 header(location) 命令重定向 php 页面不起作用;标头已发送错误[重复]

为啥是我的标头(“位置:$_SERVER['HTTP_REFERER']”); PHP函数不起作用?