我的代码中有以下行,它在PHP-5.6中运行良好,但在PHP-7.1中没有。
require_once '/app/plugin.php';
当我将其更改为以下之一时,它适用于PHP-7.1?
require_once './app/plugin.php';
或
require_once 'app/plugin.php';
代码的第一行有什么问题?
提前致谢。
答案 0 :(得分:0)
我认为你在PHP5和PHP7中设置了不同的包含路径。运行class Cell_Style: IEquatable<Cell_Style>
{
private Color cellColor;
private Color fontColor;
private int fontSize;
private bool underline;
private bool bold;
private bool italic;
public int FontSize { get => fontSize; set => fontSize = value; }
public Color FontColor { get => fontColor; set => fontColor = value; }
public Color CellColor { get => cellColor; set => cellColor = value; }
public bool Underline { get => underline; set => underline = value; }
public bool Bold { get => bold; set => bold = value; }
public bool Italic { get => italic; set => italic = value; }
public Cell_Style(Excel.Range cell)
{
cellColor = ColorTranslator.FromOle(Convert.ToInt32(cell.Interior.Color));
underline = (cell.Font.Underline == (int)Excel.XlUnderlineStyle.xlUnderlineStyleSingle) ? true : false;
bold = cell.Font.Bold;
fontColor = ColorTranslator.FromOle(Convert.ToInt32(cell.Font.Color));
fontSize = Convert.ToInt32(cell.Font.Size);
italic = cell.Font.Italic;
}
//1st attempt
bool IEquatable<Cell_Style>.Equals(Cell_Style other)
{
return Equals(other);
}
//2nd attempt
bool IEquatable<Cell_Style>.Equals(Cell_Style other)
{
if (other.Bold == bold &&
other.CellColor == cellColor &&
other.FontColor == fontColor &&
other.FontSize == fontSize &&
other.Underline == underline &&
other.Italic == italic)
{
return true;
}
else
{
return false;
}
}
}
并比较两个PHP版本的结果。
答案 1 :(得分:0)
代码的第一行有什么问题?
首先让我们注意,它适用于 PHP 5.6(在您的设置中),而不适用于 7.x。所以它不可能完全错,只是说。
甚至您的报告也让我感到惊讶 - 以前从未经历过 - 这可能已经解释了一点并导致了解决方案。
即使在 PHP 5.6 中,使用所谓的 Magic Constant __DIR__
也是完全安全的,它指的是 PHP 脚本本身的目录。
这很方便,尤其是。对于相对包含/需要路径。
举个例子:
require_once '/app/plugin.php';
是您当前的 (PHP 5.6) 代码。让我们利用__DIR__
:
require_once __DIR__ . '/app/plugin.php';
如果您可以确认它在 PHP 5.6 上工作,我的理解是,此修改后的代码应该可移植到 PHP 7 及更高版本(PHP 5.6 之后的下一个版本),因为 __DIR__
始终包含绝对 (, real) to-require 脚本的路径,以便您可以使用它安全表达与其他文件的关系。
作为空白处的注释:require_once
还与 realpath(如 __DIR__
)有关,因此这是兼容的(只有文件系统中的一些开销 stat 调用,但我确信在此答案的上下文中可以忽略它们)。
再次:
<块引用>代码的第一行有什么问题?
至少在 PHP 7 及更高版本中,分辨率似乎对当前工作目录是正确的,这意味着 PHP 7+ 在绝对路径中查找文件:
/app/plugin.php
那个文件很可能在那个盒子上不存在。 /
是文件系统的根目录,任何 以斜杠 (/
) 开头的路径都是绝对路径。
也许(如我所写,我个人从未经历过这种情况)PHP 5.6 可能是不遵守 POSIX/UNIX/LINUX 关于什么构成以及绝对或相对的约定的罪魁祸首路径(前导斜杠)。
我的个人建议:使用标准,前导斜杠=绝对路径。使用 __DIR__
为您的 PHP 带来好处。