小编Sér*_*ues的帖子

为什么PHP认为0等于字符串?

我有以下代码:

$item['price'] = 0;
/*code to get item information goes in here*/
if($item['price'] == 'e') {
    $item['price'] = -1;
}
Run Code Online (Sandbox Code Playgroud)

它旨在将项目价格初始化为0,然后获取有关它的信息.如果价格被告知为'e',则意味着交换而不是卖出,其用负值表示,因为它将被存储在需要数值的数据库中.

还有可能将价格保留为0,因为该项目是奖金或因为价格将在稍后设定.

但是,总是在没有设置价格时,它使初始值为0,上面指出的if循环评估为真,价格设置为-1.也就是说,它认为0等于'e'.

怎么解释这个?

编辑:当价格提供为0(初始化后)时,行为不稳定:有时if评估为true,有时评估为false.

php string numbers evaluate

103
推荐指数
7
解决办法
3万
查看次数

PHP中rename()的奇怪行为

我的php有一个奇怪的问题.每当我尝试使用rename()移动文件时,不仅不会移动文件,还会删除应该复制的文件以及其中的所有文件.原始代码是:

rename('temp.odt', 'tmp/report.odt');
Run Code Online (Sandbox Code Playgroud)

但我已经尝试过其他路径分隔符了

rename('temp.odt', 'tmp\report.odt');

rename('temp.odt', 'tmp\\report.odt');

rename('temp.odt', 'tmp' . DIRECTORY_SEPARATOR . 'report.odt');

rename('C:\wamp\www\zaiko\temp.odt', 'C:\wamp\www\zaiko\tmp\report.odt');
Run Code Online (Sandbox Code Playgroud)

一切都无济于事.代码来自第三方模块,该模块在我正在使用的系统中使用.

好点检查点:

  1. 文件'temp.odt'确实存在于当前目录中;
  2. 目录'tmp'确实存在,其中有几个文件.它也不是只读的.
  3. 目标文件尚不存在(实际文件名有时间戳,为简单起见,我在这里减少了它)

在运行rename()之后,'temp.odt'文件在其原始位置完好无损,而文件夹'tmp' 以及其中的所有内容都消失了.发出以下警告:

(!)警告:重命名(temp.odt,tmp\report.odt)[function.rename]:系统找不到指定的路径*.(代码:3)在第192行的C:\ wamp\www\zaiko\modules\mod_deliver.php中

*翻译自葡萄牙语

在Windows XP上运行:带有PHP 5.3.5的Apache 2.2.17和NTFS


编辑:

刚刚找到了问题的原因.事实证明,应用程序使用的模块又使用压缩库; 此库使用与应用程序使用的名称完全相同的临时文件夹.

它必须使用某种缓存,这可以解释为什么错误没有100%出现.

通过将'tmp'文件夹的名称更改为其他任何内容来解决问题.

感谢你们所有的时间,抱歉打扰你们这样一个愚蠢的事情,事实证明,这与我最初的猜测完全没有关系,因此,问题已经形成.

php windows rename file

6
推荐指数
1
解决办法
4793
查看次数

标签 统计

php ×2

evaluate ×1

file ×1

numbers ×1

rename ×1

string ×1

windows ×1