-1

我有时间问题。如果我使用 php 进行某些操作,我正在制作一个卡拉 OK 网站。该网站是用 Drupal 制作的。我的问题是我正在使用 date() 来制作所录制歌曲的文件名。但是这个文件名在我的页面上的两个地方使用。第一个位置是在页面加载后立即生成文件名,并“回显”它以供小程序使用。小程序是在用户录制歌曲后离开页面时最后上传文件。

按下按钮时,第二个位置将使用文件名。此代码会将文件名写入节点(我的歌曲)以供稍后访问。所以两个文件名必须相同。问题是两个代码使用常量的时间之间存在差异。所以节点My Songs中写入的文件名与上传的文件名不一样。因为两个代码使用文件名时有4-5分钟的差异。我想函数: date('dmhi') 存储在常量中,而不是函数的字符串(结果)中。我尝试使用一个变量并首先用一个字符串对其进行初始化,以便它仍然是一个字符串,但它不起作用。我更像是一个 C++ 和 VB 编码器,所以我不明白变量和常量在 php 中是如何工作的。我在网上搜索了几天,但没有找到任何答案。我希望你们能帮助我。这是我的代码的一部分:

第一次出现:

<?php

Global $user;
  profile_load_profile($user);
$name = $user->name; 
define("FILE", $title . $name . date('dmhi') . ".spx");


echo "<param name=\"refreshURL\" value=\"http://english.karavid.com/node/2?sampleName=" . FILE . "&movie=" . $movie . "&title=" . $title . "&name=" . $name . "\">\n";

echo "<param name=\"uploadFileName\" value=\"" . FILE . "\">\n";


?>

按下按钮时的第二次出现:

$node1->body = substr($node1->body, 0, -8) . "<tr>
 <th scope=\"col\"><a href=\"http://english.karavid.com/node/2?sampleName=" . FILE . "&movie=" . $movie . "&title=" . $title . "&name=" . $name . "\">" . $title . "</a></th>
<th scope=\"col\">" . date('j M Y') . "</th>
<th scope=\"col\"></th>
</tr> </table>";

node_save($node1);

提前感谢您能给我的任何线索。

娜塔莉

编辑:

我会尽力解释得更好。我正在生成一个页面,该页面将在小程序(语音记录器)中构建一些代码。在那个applet 中,我使用php 来制作applet 代码的一部分。那部分是让小程序上传用户完成的录音。现在,我需要一个对每个用户都不同的文件名。如果用户在一天中多次录制同一首歌曲,则文件名必须不同,所以我在文件名中使用日期和时间。使用函数 date();

但是该文件名是在加载时生成的。所以文件名将包括加载页面的时间。后来当用户真正保存歌曲时,时间已经过去,但上传的文件名包含加载时间而不是保存时间。发生这种情况是因为在加载页面时小程序内的文件名是“echo”(ed)。我没有其他办法可以解决它。

但是,我想保留这段时间,以便我可以再次使用它。问题是当我再次尝试使用文件名时,时间不再相同。几分钟过去了。所以文件名不一样。并且当文件名在保存后记录后写入另一个页面(节点或文件)时,它与前一个不一样。

我知道这有点复杂。但基本上,我需要生成一个包含时间的文件名。并在两个场合使用相同的文件名,这将用一个时间范围分隔。但文件名不应更改。

4

2 回答 2

0

所以在尝试了很多事情之后,我找到了解决它的方法。我把它贴在这里,以防将来有人需要这样做。

在我的页面上,我有一个用于“保存”按钮的表单。我只是在表格末尾添加了这个:

echo "<input type=\"hidden\" value=\"" . FILE . "\" name=\"filename\" id=\"filename\">
</form>";

所以它会在页面加载时打印我需要的文件名,并且它保持隐藏状态。因此,当稍后按下“保存”按钮时,最终代码运行,我只是恢复传递到此隐藏字段的常量,如下所示:

$file = $_POST["filename"];

这不是一个完美的解决方案,但它确实有效。如果有人有更好的,请告诉我。

于 2013-10-05T21:55:01.427 回答
0

我不确定你在问什么。

您可以创建一个函数来返回日期...

public function myDate(){
    return date('dmhi');
}

并打电话

echo $this->myDate();

或者,如果您想在第一次通话时设置日期并让后续通话检索相同的日期

private $_myDate;
public function myDate(){
    if($this->_myDate == null)
        $this->_myDate = date('dmhi');
    return $this->_myDate;
}

编辑

不使用 $this 试试?

$_myDate = null;
function myDate(){
    if($_myDate == null)
        $_myDate = date('dmhi');
    return $_myDate;
}

$date = myDate();

编辑 2

为什么不这样做呢?

$myDate = date('dmhi');
$file = $title . $name . $myDate . ".spx";

然后

$node1->body = substr($node1->body, 0, -8) . "<tr>
 <th scope=\"col\"><a href=\"http://english.karavid.com/node/2?sampleName=" . $file . "&movie=" . $movie . "&title=" . $title . "&name=" . $name . "\">" . $title . "</a></th>
<th scope=\"col\">" . $myDate . "</th>
<th scope=\"col\"></th>
</tr> </table>";
于 2013-10-05T14:07:13.793 回答