1

我目前正在编写一个页面,该页面托管在单板计算机上。我正在编码的当前网页用于设置板的时区和当前时间设置。它具有 jquery 项目、javascript 函数、带有 3 个提交按钮的表单、php 脚本和一些正在运行的 linux 命令行 exec 调用,以从命令行更改板的时区。在确定默认下拉项选择应该是什么时,我还进行了一些字符串比较。

我遇到的问题是非常可重复的。如果我提交时区,然后更改时间,再次设置时区,再次更改时间,并且可能再重复一次,页面没有完全加载。查看源代码后,很明显整个页面并未完全加载。通常它会在下拉选择创建中的某个地方失败。

例如,当它失败时,它位于加载的源代码文件的最底部:

<input class="button" type="submit" name="getLocalTime" value="Copy Local Time"><br><br><br><table><tr><td colspan="2"><tr><td>

<select name="DropDownTimezone" id="DropDownTimezone">
<option  value="Etc/GMT+12">(GMT -12:00) Eniwetok, Kwajalein</option>
<option  value="Etc/GMT+11">(GMT -11:00) Midway Island, Samoa</option>
<option  value="Etc/GMT+10">(GMT -10:00) Hawaii</option>
<option  value="Etc/GMT+9">(GMT -9:00) Alaska</option>
<option  value="Etc/GMT+8">(GMT -8:00) Pacific Time (US &amp; Canada)</option>
<option  value="Etc/GMT+7">(GMT -7:00)

该部分的编码如下:

<select name="DropDownTimezone" id="DropDownTimezone">
<option <?php if ($hwOffset == "-12") echo 'selected'; ?> value="Etc/GMT+12">(GMT -12:00) Eniwetok, Kwajalein</option>
<option <?php if ($hwOffset == "-11") echo 'selected'; ?> value="Etc/GMT+11">(GMT -11:00) Midway Island, Samoa</option>
<option <?php if ($hwOffset == "-10") echo 'selected'; ?> value="Etc/GMT+10">(GMT -10:00) Hawaii</option>
<option <?php if ($hwOffset == "-9") echo 'selected'; ?> value="Etc/GMT+9">(GMT -9:00) Alaska</option>
<option <?php if ($hwOffset == "-8") echo 'selected'; ?> value="Etc/GMT+8">(GMT -8:00) Pacific Time (US &amp; Canada)</option>
<option <?php if ($hwOffset == "-7") echo 'selected'; ?> value="Etc/GMT+7">(GMT -7:00) Mountain Time (US &amp; Canada)</option>
<option <?php if ($hwOffset == "-6") echo 'selected'; ?> value="Etc/GMT+6">(GMT -6:00) Central Time (US &amp; Canada), Mexico City</option>
<option <?php if ($hwOffset == "-5") echo 'selected'; ?> value="Etc/GMT+5">(GMT -5:00) Eastern Time (US &amp; Canada), Bogota, Lima</option>
<option <?php if ($hwOffset == "-4") echo 'selected'; ?> value="Etc/GMT+4">(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz</option>
<option <?php if ($hwOffset == "-3") echo 'selected'; ?> value="Etc/GMT+3">(GMT -3:00) Brazil, Buenos Aires, Georgetown</option>
<option <?php if ($hwOffset == "-2") echo 'selected'; ?> value="Etc/GMT+2">(GMT -2:00) Mid-Atlantic</option>
<option <?php if ($hwOffset == "-1") echo 'selected'; ?> value="Etc/GMT+1">(GMT -1:00) Azores, Cape Verde Islands</option>
<option <?php if ($hwOffset == "+0") echo 'selected'; ?> value="Etc/GMT+0">(GMT) Western Europe Time, London, Lisbon, Casablanca</option>
<option <?php if ($hwOffset == "+1") echo 'selected'; ?> value="Etc/GMT-1">(GMT +1:00) Brussels, Copenhagen, Madrid, Paris</option>
<option <?php if ($hwOffset == "+2") echo 'selected'; ?> value="Etc/GMT-2">(GMT +2:00) Kaliningrad, South Africa</option>
<option <?php if ($hwOffset == "+3") echo 'selected'; ?> value="Etc/GMT-3">(GMT +3:00) Baghdad, Riyadh, Moscow, St Petersburg</option>
<option <?php if ($hwOffset == "+4") echo 'selected'; ?> value="Etc/GMT-4">(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi</option>
<option <?php if ($hwOffset == "+5") echo 'selected'; ?> value="Etc/GMT-5">(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent</option>
<option <?php if ($hwOffset == "+6") echo 'selected'; ?> value="Etc/GMT-6">(GMT +6:00) Almaty, Dhaka, Colombo</option>
<option <?php if ($hwOffset == "+7") echo 'selected'; ?> value="Etc/GMT-7">(GMT +7:00) Bangkok, Hanoi, Jakarta</option>
<option <?php if ($hwOffset == "+8") echo 'selected'; ?> value="Etc/GMT-8">(GMT +8:00) Beijing, Perth, Singapore, Hong Kong</option>
<option <?php if ($hwOffset == "+9") echo 'selected'; ?> value="Etc/GMT-9">(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk</option>
<option <?php if ($hwOffset == "+10") echo 'selected'; ?> value="Etc/GMT-10">(GMT +10:00) Eastern Australia, Guam, Vladivostok</option>
<option <?php if ($hwOffset == "+11") echo 'selected'; ?> value="Etc/GMT-11">(GMT +11:00) Magadan, Solomon Islands, New Caledonia</option>
<option <?php if ($hwOffset == "+12") echo 'selected'; ?> value="Etc/GMT-12">(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka</option>
</select>

我认为这与内存耗尽或缓冲区填满有关,因为它不会每次都失败,但会在大致相同数量的重复步骤后失败。PHP 中是否有任何有用的命令或方法可以避免出现此问题?或者还有其他可能导致此类问题的根本原因吗?提前致谢。

4

2 回答 2

2

这不是为什么会发生这种情况的答案(因为您的代码看起来不错,虽然丑陋,并且正如其他人所提到的,请尝试使用error_reporting(E_ALL))。这是您使用 jQuery 收到的内容,还是加载网站时的 HTML 输出?

作为附加组件,这里是您的代码的数组版本,您应该能够轻松地合并您的翻译。

<?php
    $timezones = array(
        'Eniwetok, Kwajalein',
        'Midway Island, Samoa',
        'Hawaii',
        'Alaska',
        'Pacific Time (US &amp; Canada)',
        'Mountain Time (US &amp; Canada)',
        'Central Time (US &amp; Canada), Mexico City',
        'Eastern Time (US &amp; Canada), Bogota, Lima',
        'Atlantic Time (Canada), Caracas, La Paz',
        'Brazil, Buenos Aires, Georgetown',
        'Mid-Atlantic',
        'Azores, Cape Verde Islands',
        'Western Europe Time, London, Lisbon, Casablanca',
        'Brussels, Copenhagen, Madrid, Paris',
        'Kaliningrad, South Africa',
        'Baghdad, Riyadh, Moscow, St Petersburg',
        'Abu Dhabi, Muscat, Baku, Tbilisi',
        'Ekaterinburg, Islamabad, Karachi, Tashkent',
        'Almaty, Dhaka, Colombo',
        'Bangkok, HanoiBeijing, Perth, Singapore, Hong Kong, Jakarta',
        'Beijing, Perth, Singapore, Hong Kong',
        'Tokyo, Seoul, Osaka, Sapporo, Yakutsk',
        'Eastern Australia, Guam, Vladivostok',
        'Magadan, Solomon Islands, New Caledonia',
        'Auckland, Wellington, Fiji, Kamchatka'
    );
    echo '<select name="DropDownTimezone" id="DropDownTimezone">';
    for ($i = 0; $i < sizeof($timezones); $i++) {
        $timezone = ($i - 12);
        $timezoneReverse = ($timezone * -1);
        $timezoneValue = ($timezone >= 0 ? '+' . $timezone : $timezone);
        $timezoneReverseValue = ($timezoneReverse >= 0 ? '+' . $timezoneReverse : $timezoneReverse);
        echo '<option' . ($hwOffset == $timezoneValue ? ' selected' : '') . ' value="Etc/GMT' . $timezoneReverseValue . '">(GMT' . ($timezone != 0 ? ' ' . $timezoneValue . ':00' : '') . ') ' . $timezones[$i] . '</option>';
    }
    echo '</select>';
?>

请注意,这实际上可能无法解决您的问题,因此请不要接受它作为解决方案,因为它只是对您的 HTML 的编辑,但对于我来说,这是一个太大的改变,不想编辑您的 OP

于 2012-06-18T13:44:44.927 回答
0

不幸的是,令人尴尬的是,这个问题与我的表单代码有关,与时区下拉列表无关,只是巧合地每次都失败了。感谢大家对这个问题的投入,因为它确实为我指明了正确的方向(让我觉得自己很愚蠢哈哈)。一旦我开始追踪可能损坏的变量,我注意到我的表单 action= item 指向一个变量来获取文件名。看了一会儿错误日志后,我很快意识到文件名没有设置。一旦我清理了那条线路,它似乎奇怪地解决了我的其他问题。

前:echo "<form method='POST' action='".$PHP_SELF."' onsubmit='getTime();'>";

后:echo "<form method='POST' action='?page=home' onsubmit='getTime();'>";

这似乎已经解决了它。我有点困惑为什么它仍在提交,以及为什么它以这种方式失败,但这条线似乎已经修复了正在发生的任何部分加载的页面。

于 2012-06-18T14:16:24.540 回答