1

我一直在开发一个网站,现在我准备部署它。我现在已经把所有东西都放在了远程服务器上,一切似乎都很好,但我遇到的问题是 Zend Validators。事实上,我将整个 Zend Framework (28 mb) 上传到服务器。我知道路径并且一切都正确,因为我使用 Zend_File_Transfer_Adapter_Http 将文件上传到服务器并且它确实如此,还检查了我添加到文件上传中的各种验证器。但是,我不明白为什么我的角色验证器都失败了。我在本地主机上对它们进行了本地测试,它们都可以工作。但是在远程服务器中,它们都没有。比如说,我通过执行以下操作来验证字符串:

$validaUno = new Zend_Validate_Regex('/^([[:alpha:]]|[ÁÉÍÓÚÑñáéíóúÄËÏÖÜäëïöü])[[:alpha:]]|[ÁÉÍÓÚÑñáéíóúÄËÏÖÜäëïöü]+\s?([[:alpha:]][ÁÉÍÓÚÑñáéíóúÄËÏÖÜäëïöü])?/');

针对一些 $_POST 变量,无论我写什么,都不会发生任何事情(并且在本地工作的正则表达式应该传递给每个单词,后跟一个空格,然后是你想要的任意数量的单词(我已经用一些脚本测试了这个来测试正则表达式)。

我也有:

$validaTres = new Zend_Validate_EmailAddress;

和:

if(!$validaTres->isValid($correo)) $errors['mail']="No es una dirección de correo electrónico válida.";

同样,其他根本没有通过的验证。

我真的很感激一些帮助,因为我在这里完全迷失了。

顺便说一句,我读到这一定与脚本找不到 Zend Framework 的路径有关,但我不明白为什么 Zend_File_Transfer_Adapter_Http 正在工作。如果它与库的路径有关,那么正确的使用方法是什么(DIR)或正确获取路径的方法。我这样打电话:

$libreria='C:/Zend_FW/ZendFramework-1.11.12-minimal/library';
set_include_path(get_include_path().PATH_SEPARATOR.$libreria);
require_once('Zend/Loader/Autoloader.php');
Zend_Loader_Autoloader::getInstance();

然后我将它包含在每个需要它的页面上。我必须再次寻求帮助,不过我认为这一定很简单。

抱歉,我必须更正我以前的代码,它实际上不是我在远程服务器上拥有的(我复制了我在本地拥有的文件),它是这样的:

$libreria='Zend/ZendFramework/library';

这是我在服务器上实际拥有的,根目录中名为 Zend 的文件夹,然后是路径的其余部分。该路径是相对于文档的,因为脚本从同一个根文件夹中调用它,所以我看不出有什么问题。请问有什么建议吗?我试过这样做:

../Zend/ZendFramework/libray

./Zend/ZendFramework/library

但是当我尝试这个时它只是给了我一个服务器错误。我想这不是在 Unix 中引用文件夹的正确方法,但我真的不知道。

我认为 Zend 完全按照它们的大写方式调用它的类,正是为了避免忽略或不区分大小写的问题。所以代码应该可以工作,但它不能。

好的,所以我将重新提出我的问题:我所知道的是,正确编写我的脚本及其依赖项(也许没有太注意和谨慎区分大小写),以及服务器中正确的文件夹结构,那么脚本应该可以工作.

然后我对代码本身有疑问,Zend 类的语法是否对引用我的输入有意义,以及如何调用类以及它们的方法是否合适(它们应该是静态的还是其他类型的,以及是否存在问题在调用新操作员等的情况下进行。

我还认为 Zend 框架本身的配置可能存在问题,即它调用类的方式以及与整个操作系统相关的方式,但我真的迷失了哪些文件必须做接着就,随即。幸运的是,这显然不是问题。

然而,我几乎可以肯定问题不在于代码,而正如 Seth 所指出的,问题在于操作系统之间的语法不兼容。关于使用常量的问题(__DIR__)是我稍后会研究的问题,因为我认为有时使用它来配置脚本更容易。但是,在这种情况下,我无法弄清楚服务器的结构,所以我坚持使用我的包含。

无论如何,感谢您的帮助,我必须指出,正如 Seth 所说,问题在于使用相对路径调用库,这就像知道在 Linux/Unix 中调用根目录的方式只是一个斜杠一样简单。

不过还是有问题

大家好,我不知道发生了什么,也许我梦到了它,但我的提供者似乎阻止了对该set_include_path功能的访问。所以我仍然有很多问题。我说我梦到了它,因为今天早上早些时候我看到代码在工作,然后它就停止了。我可以再次看到问题在于 Zend 框架的路径,因为如果我将其指定为相对路径,$libreria='Zend/ZendFramework/library';那么 weppage 会简单地跳过它并表现得好像没有加载库一样。但是,如果我将其正确指定为绝对路径,服务器会抛出 500 错误。

我已经阅读了相关的帖子并尝试了几乎所有的东西,我做到了ini_set('include_path', $libreria.":".get_include_path());,但没有任何改变。我没有尝试修改open_basedir,因为我很确定我的提供商不允许它。最后,我尝试通过在字符串中输入完整路径来直接包含路径,并且还做了 getcwd() 并将其链接到字符串,但显示了相同的行为。

我还尝试将带有框架的文件夹移动到我网站的根目录(不是文件夹 public_html),这样绝对路径/Zend/ZendFrameWork/library肯定就是我调用它的位置。(我的站点的根目录是指以我的工作目录字符串开始的路径部分)。我什至将 Zend 文件夹重命名为 ZendF 以避免混淆。但我知道我错过了一些东西。

这怎么解决,我应该和我的供应商打架吗?

再想一想,我必须说我真的不认为我的提供者会阻止更改包含路径,这根本没有意义。我想知道是否有人可以向我解释一下 PHP 核心的哪些指令通常被某些提供商阻止,因为我想没有很多关于 PHP 和我真的不知道的服务器中的安全性的事情。

所以问题仍然在我构建路径的方式上,选项只是一些:相对路径或绝对路径。

4

0 回答 0