由于PHP是一种服务器端语言,我假设我使用的浏览器并不重要,但显然不是这样.我只使用过谷歌浏览器.
我在本地计算机上安装了WAMP,因此我可以在本地测试它以查看它是否与我的共享主机帐户相同.这两个代码都按照他们应该的方式工作(在Chrome中你会想到).然后我查看了共享主机上完全相同的代码 - 一个有效,另一个没有.
我打电话给我的共享托管支持,他们试图复制该问题,并表示他们没有找到它.所以我在Firefox中试了一下它们就行了,在IE浏览器中,看到它......就像WAMP一样,它们都很完美.
这对我来说仍然没有多大意义.我在我的共享主机帐户上使用PHP 5.3与一个知名的托管公司,但没有到达任何地方因为他们无法真正解决代码问题.他们可以复制问题,但无法回答原因.我将在接下来的几周内尝试查找更多内容并发布更新,因为我知道更多.
我尝试使用array_shift();,它在第一次运行时工作正常,但每次我运行代码后,它将删除前两个元素.
为了测试发生了什么我尝试先打印数组array_shift();,然后再打印数组,看看发生了什么.
运行#1:
[0]=>5 [1]=>2 [2]=>1 [3]=>4 [4]=>3 //print_r($array);
//execute array_shift($array);
[0]=>2 [1]=>1 [2]=>4 [3]=>3 //print_r($array);
Run Code Online (Sandbox Code Playgroud)
运行#2:
[0]=>2 [1]=>1 [2]=>4 [3]=>3 //print_r($array);
//execute array_shift($array);
[0]=>1 [1]=>4 [2]=>3 //print_r($array);
Run Code Online (Sandbox Code Playgroud)
运行#1:
[0]=>5 [1]=>2 [2]=>1 [3]=>4 [4]=>3 //print_r($array);
//execute array_shift($array);
[0]=>2 [1]=>1 [2]=>4 [3]=>3 //print_r($array);
Run Code Online (Sandbox Code Playgroud)
运行#2:
[0]=>1 [1]=>4 [2]=>3 //print_r($array);
//execute array_shift($array);
[0]=>4 [1]=>3 //print_r($array);
Run Code Online (Sandbox Code Playgroud)
那么我尝试使用reset($array);,unset($array[0]);并array_splice($array,1,0);作为array_shift($ array)的替代品; 它工作了!然后我尝试将它们并排比较并清理代码,现在它们正在做彼此相反的事情.有时重置,取消设置和array_shift; 当调用一次时,甚至会跳过数组中最多7个单元格.array_shift();正在以我想要的方式工作,但我想知道原因.这让我疯了!如果有人能帮助我,我会非常感激.
<?php
session_start();
$min = A;
$max = S;
if((!isset($_SESSION['image'])) || ($_SESSION['image'] == null))
{
$numbers = range($min, $max); //set a range for all images
shuffle($numbers); //shuffle the order for randomness
$_SESSION['image'] = $numbers;
echo "<br />Current value: " . $_SESSION['image'][0] . "<br />";
print_r($_SESSION['image']);
reset($_SESSION['image']);
unset($_SESSION['image'][0]);
array_splice($_SESSION['image'],1,0);
echo "<br />New value: " . $_SESSION['image'][0] . "<br />";
echo "<br />1st exec<br />";
}
else
{
echo "<br />Current value: " . $_SESSION['image'][0] . "<br />";
print_r($_SESSION['image']);
reset($_SESSION['image']);
unset($_SESSION['image'][0]);
array_splice($_SESSION['image'],1,0);
echo "<br />New value: " . $_SESSION['image'][0] . "<br />";
echo "<br />2nd exec<br />";
}
?>
Run Code Online (Sandbox Code Playgroud)
<?php
session_start();
$min = A;
$max = S;
if((!isset($_SESSION['id2'])) || ($_SESSION['id2'] == null))
{
$numbers = range($min, $max); //set a range for all images
shuffle($numbers); //shuffle the order for randomness
$_SESSION['id2'] = $numbers;
echo "<br />Current value: " . $_SESSION['id2'][0] . "<br />";
print_r($_SESSION['id2']);
array_shift($_SESSION['id2']);
echo "<br />New value: " . $_SESSION['id2'][0] . "<br />";
echo "<br />1st execution<br />";
}
else
{
echo "<br />Current value: " . $_SESSION['id2'][0] . "<br />";
print_r($_SESSION['id2']);
array_shift($_SESSION['id2']);
echo "<br />New value: " . $_SESSION['id2'][0] . "<br />";
echo "<br />2nd execution<br />";
}
?>
Run Code Online (Sandbox Code Playgroud)
为了最终了解发生了什么,我建议注册一个 tick-function。tick-function可以在每次 PHP 语句执行时执行。
这是一个简单的,它跟踪每个语句的行/文件(随意添加更多详细信息):
// Execute at each single statement
declare(ticks=1);
// Function to get called at each executing statement
function logEachStatement() {
$traceInfo = debug_backtrace();
$lastActivation = $traceInfo[ count( $traceInfo ) - 1 ];
$info = "\n"
. $lastActivation[ 'line' ] . '@' . $lastActivation[ 'file' ]
;
$targetFile = dirname( __FILE__ ) . '/stmnt.log' );
file_put_contents( $targetFile, $info, FILE_APPEND );
}
// using a function as the callback
register_tick_function( 'logEachStatement', true );
Run Code Online (Sandbox Code Playgroud)
虽然还有其他选项可以追踪问题,但此选项不需要外部基础设施。
| 归档时间: |
|
| 查看次数: |
2476 次 |
| 最近记录: |