私はウェブサイトで作業していて、今それを展開する準備ができています。私は今すべてをリモートサーバーに置いており、すべてがうまくいくようですが、私が抱えている問題はZendValidatorsにあります。実際、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 Framework自体の構成、つまりクラスの呼び出し方法やオペレーティングシステム全体に関連する問題があったのではないかと思いましたが、どのファイルを実行する必要があるのか本当にわかりませんでした。それと。幸いなことに、それは明らかに問題ではありませんでした。
ただし、問題はコードにあるのではなく、Sethが指摘したように、オペレーティングシステム間で互換性のない構文にあることはほぼ確実でした。定数の使用について私が持っていた質問は(__DIR__)
、後で調査するために置くものです。これを使用してスクリプトを構成する方が簡単な場合があると思うからです。ただし、この場合、サーバーがどのように構成されているかがわからないため、インクルードを使用し続けました。
とにかく、助けてくれてありがとう。Sethが言ったように、問題は相対パスでライブラリを呼び出すことであり、Linux/Unixではルートを呼び出す方法が単にスラッシュであることを知っているのと同じくらい簡単だったことを指摘しなければなりません。
まだ問題がありますが
みなさん、こんにちは。何が起こったのかわかりません。夢見ていたかもしれませんが、プロバイダーがset_include_path
関数へのアクセスをブロックしているようです。ですから、私はまだ多くの問題を抱えています。今朝早くコードが機能しているのを見て、それが機能しなくなったので、私はそれを夢見ていたと言います。問題は、Zend Frameworkへのパスに何度もあることがわかります。これは、相対パスとして指定すると$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とサーバーのセキュリティについて、私が本当に知らない多くのことをベースにしていないと思うからです。
したがって、問題はまだパスを作成する途中であり、オプションはほんのわずかです。相対パスまたは絶対パスです。