【问题标题】:How to make a variable using date() constant througout the code ? (php, drupal)如何在代码中使用 date() 常量创建变量? (php,drupal)
【发布时间】:2013-10-05 13:54:01
【问题描述】:

我有时间问题。如果我使用 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)。我没有其他方法可以解决它。

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

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

【问题讨论】:

    标签: php date drupal time compile-time-constant


    【解决方案1】:

    我不太确定你在问什么。

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

    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>";
    

    【讨论】:

    • 感谢您的回答。如果不清楚,我很抱歉。英语不是我的母语。我想要做的就是你所说的,我需要在第一次调用时(加载页面时)设置日期(和时间),并在后续调用中设置相同的日期(时间)(最后当“保存" 按钮被按下)。但是第二次调用时,时间有几分钟的差异。我使用了您的代码(第二个),但它不起作用。我这样调用函数: $date = $this->myDate();但它没有编译。
    • 我认为我们混淆了这个问题。您基本上是在生成一个页面,该页面将提供一个按钮来访问先前定义的文件,对吧?
    • 再次感谢您。我尝试了两种解决方案,它们都编译得很好,但没有解决我的问题。感谢您的帮助,我编辑了我的问题以解决问题。
    【解决方案2】:

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

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

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

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

    $file = $_POST["filename"];

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

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 2023-03-11
      • 1970-01-01
      • 2018-03-19
      • 2013-05-06
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多