0

我似乎无法弄清楚这里的问题是什么。我托管在 GoDaddy 上,我编写了一个基本的 .htaccess 文件,因此该网站将受到密码保护,因为它是针对客户的。我找不到 php 代码本身有什么问题,但我是 php 新手,所以我可能遗漏了一些明显的东西。这是代码:

<?php
$date = date("m,d");

if($date == "10,06"){ 
     echo("<img src="maps/img1.jpg" />");
}
elseif($date == "10,10" or "10,11" or "10,12" or "10,13"){
     echo("<img src="maps/img2.jpg" />");
}
elseif($date == "10,18" or "10,19" or "10,20"){
     echo("<img src="maps/img3.jpg" />");
}
elseif($date == "10,25" or "10,26" or "10,27"){
     echo("<img src="maps/img4.jpg" />");
}
elseif($date == "11,01" or "11,02" or "11,03"){
     echo("<img src="maps/img5.jpg" />");
}
elseif($date == "11,07"){
     echo("<img src="img6.jpg" />");
}
elseif($date == "11,22" or "11,23" or "11,24"){
     echo("<img src="maps/img7.jpg" />");
}
elseif($date == "12,01"){
     echo("<img src="maps/img8.jpg" />");
}
elseif($date == "12,06" or "12,07" or "12,08"){
     echo("<img src="maps/img9.jpg" />");
}
else{
     echo("<img src="maps/img10.jpg" />"); 
}
?>

我在dreamweaver 中编码,代码显示为“死”,但我不知道它有什么问题。问题似乎出在这一行:

if($date == "10,06"){ echo("<img src="maps/img1.jpg" />");
}

但我看不出有什么问题。如果我把它放在 HTML 文件的正文中,我会看到图像周围有一堆乱七八糟的代码。如果我把它放在一个 .php 文件中,我会收到以下错误消息:

Parse error: syntax error, unexpected T_STRING in /home/content/##/blahblah/html/test.php on line 12

如果这是任何线索,我试过运行一个简单的

<?php echo "hello world"; ?>

它只是空白。所以我觉得这是一个权限错误,但我没有最微弱的方法来解决它。我尝试将此字符串添加到 .htaccess 文件中

AddType application/x-httpd-php .html

这只会导致内部服务器错误。

现在 .htaccess 文件中唯一的内容是:

AuthUserFile /home/content/##/blahblah/html/.htpasswd
AuthGroupFile /dev/null
AuthName "EnterPassword"
AuthType Basic

require valid-user

(当然我在根目录中也有 .htpasswd 文件)

所以我可能需要在 .htaccess 中添加更多内容,但我不知道是什么。


编辑: 我修复了 echo 和 else 语句错误(谢谢!!),我在 .html 和 .php 上都对其进行了测试。现在看来问题是服务器不想读取 html 文件中的 php,因为它似乎在 .php 测试中工作正常。正如我之前提到的,我尝试将AddType application/x-httpd-php .html字符串添加到 .htaccess 文件中,但这只会弄乱整个网站。我将转到 test.html,它会在我输入该字符串后询问我是否要下载该页面。

EDIT2: 我似乎已经解决了嵌入 php 的问题。经过大量研究,我发现 GoDaddy 允许您像这样应用自定义扩展:

Options +ExecCGI
AddHandler x-httpd-php5-3 .mysite

通过它我会用'.html'替换'.mysite'

现在像梦一样工作。(虽然我还没有看到这是否会在未来引起其他问题)

感谢所有人纠正我的陈述——如果没有这个,绝对不会奏效!

4

6 回答 6

2

好的,这里有很多事情要做,我不确定这些是否会解决您的问题,但从示例中提供的这需要更改。

您的 echo 语句需要更改为单引号:

if($date == "10,06"){ 
 echo("<img src='maps/img1.jpg' />"); //Note use of single quotes
}

或者你可以用斜杠转义它们:

if($date == "10,06"){ 
 echo("<img src=\"maps/img1.jpg\" />"); //Note use of escaping
}

你的elseif陈述需要改变

elseif($date == "10,10" or $date == "10,11" or $date == "10,12" or $date == "10,13"){
 echo("<img src='maps/img2.jpg' />"); // You are missing this      ^------^
}

您还可以将括号放在 echo 上:

if($date == "10,06"){ 
 echo "<img src='maps/img1.jpg' />"; //Note lack of parentheses
}

至于 .htaccess 没有它可以正常工作吗?

于 2013-10-05T17:10:32.517 回答
0

要在字符串中使用引号,如果与用于启动字符串的引号类型相同,则必须对它们进行转义。如果您使用单引号,最好在其上使用双引号,如在$str = 'this "was" something'; 但如果您使用双引号,则必须转义它们以告诉解析器您此时尚未完成字符串:$str = "this \"was\" something";. 所以解析器明白引号是一个实际的字符,而不是字符串的结尾。

如果您使用单引号字符串,则同样适用:$str = 'this \'was\' something';

在这里您可以获得有关 PHP 字符串的更多信息:

要指定文字单引号,请使用反斜杠 () 对其进行转义。要指定文字反斜杠,请将其加倍 (\)。所有其他反斜杠实例将被视为文字反斜杠:这意味着您可能习惯使用的其他转义序列,例如 \r 或 \n,将按指定的字面输出而不是具有任何特殊含义。

于 2013-10-05T17:08:31.293 回答
0

转义字符串中的双引号

echo "<img src=\"maps/img1.jpg\" />"

或使用单引号

echo "<img src='maps/img1.jpg' />"
于 2013-10-05T17:08:38.123 回答
0

您编码的每个回声功能都是错误的。他们每个人都应该如下所示:

echo "<img src='maps/img1.jpg' />";

这是echo的手册页:php.net/manual/en/function.echo.php

于 2013-10-05T17:04:25.223 回答
0
if($date == "10,06"){ echo("<img src=\"maps/img1.jpg\" />");

您需要通过反斜杠来转义双引号内的引号,否则 PHP 解释器会将其识别为 echo 语句的结尾,然后它期望完全结束或连接。或者如下所述,使用单引号和双引号的组合来完全避免这个问题。

在此处查看更多信息:http: //www.tizag.com/phpT/echo.php

于 2013-10-05T17:04:36.043 回答
0

您的echo陈述没有使用正确的双引号。

所以,你的声明:

echo("<img src="maps/img1.jpg" />");

正在关闭,"maps因此代码在它显然是解析错误之后出现。

更正一个:

echo("<img src=\"maps/img1.jpg\" />");

你应该总是有一个很好的练习来正确地关闭你的字符串。

这可以确保您不会收到任何解析错误/警告或不需要的输出。

于 2013-10-05T17:14:44.047 回答