11

エンド ユーザーの出身地に基づいてカスタマイズできる Web アプリケーションを設計しています。たとえば、ユーザーが Farmer's Market というストアからアクセスしている場合、その特定のストアに固有の、そのユーザーが利用できるカスタマイズされたコンテンツまたは追加のリンクが存在する可能性があります。file_exists() は、インポートする必要があるページのカスタマイズされた部分があるかどうかを判断するために使用されます。

これまで、アイテム ID 番号とストアが GET パラメーターとして渡されるだけで、ページ内の各リンクにそれらを適用することをシステムが認識しているという、比較的安全でない方法を使用してきました。ただし、ストアとアイテム番号が暗号化され (「gd651hd8h41dg0h81」のように見える)、可逆ハッシュ方式に切り替えており、ページは単純にそれらをデコードして、ストアと ID 変数を割り当てます。

しかし、それ以来、Google で検索しても答えが見つからないというエラーが発生しました。似たようなコード ブロックがいくつかありますが、それらはすべて次のようになります。

$buttons_first = "../stores/" . $store . "/buttons_first.php";

if(file_exists($buttons_first))
{
    include($buttons_first);
}

(/stores/ ディレクトリは、実際には作業ディレクトリの上のディレクトリにあるため、../)

かなり簡単です。ただし、通常の ID とストアが渡された場合は問題なく動作しますが、暗号化された ID を使用すると、同様のステートメントごとに次のエラーがスローされます。

警告: file_exists() は、パラメーター 1 が有効なパスであると想定しています。11 行目の [URL が削除されました] で指定された文字列です。

スクリプトに完全な URL を吐き出させたところ、$store が正しく割り当てられているようです。1&1 ホスティングで PHP 5.4.11 を実行しています (サーバーの動作に何らかの異常があることがわかっているため)。

4

5 に答える 5

16

以前に同じエラーが発生しましたが、この解決策が問題で機能するかどうかはわかりません。「\ 0」を削除して置き換えてみてください。

$cleaned = strval(str_replace("\0", "", $buttons_first));

私の場合はうまくいきました。

于 2014-04-09T09:09:57.633 に答える
3

var_dump(strpos($buttons_first,"\0")) を実行します。この警告は、セキュリティ上の理由から、パスに null バイトが含まれている場合に表示されることがあります。それでもうまくいかない場合は、文字列の長さをチェックし、他の目に見えないバイトがある場合に備えて、それが期待どおりであることを確認してください。

于 2013-08-22T02:28:09.707 に答える
1

スクリプトを実行している場所に依存するため、パスに問題がある可能性があります。絶対パスを使用する方が安全です。現在のスクリプトが実行されているディレクトリへのパスを取得するには、dirname(__FILE__).

于 2013-02-13T15:37:08.217 に答える
0

/の前に追加stores/します。絶対パスを使用することをお勧めします。

于 2013-02-13T15:36:01.157 に答える
0

この投稿が 2013 年に作成されたことは知っていますが、一般的な解決策は見当たりませんでした。

このエラーは 、たとえば、php で次のようなファイルを使用している場合に追加multipleした後に発生します。 しかし、フォームにオプションを追加した後。あなたの入力名はfile submit form$_FILES['file']['tmp_name']multiplefile => file[]

したがって、ファイルを 1 つだけ投稿する場合でも、次の $_FILES['file']['tmp_name']ように変更する必要があります。$_FILES['file']['tmp_name'][0]

于 2020-07-17T13:43:30.700 に答える