0

ここでコードに問題があるようです。php ファイルからファイルを作成するのですが、インクルード パスでエラーが発生します。

include('../include/config.php');

$name = ($_GET['createname']) ? $_GET['createname'] : $_POST['createname'];

function buildhtml($strphpfile, $strhtmlfile) {
ob_start();
include($strphpfile);
$data = ob_get_contents();
$fp = fopen ($strhtmlfile, "w");
fwrite($fp, $data);
fclose($fp);
ob_end_clean();
}

buildhtml('portfolio.php?name='.$name, "../gallery/".$name.".html");

問題はここにあるようです:

'portfolio.php?name='.$name

これを置き換えて、変数を送信する方法はありますか?


php 拡張子の後に ?name を付けると、次のエラーが表示されます。

Warning: include(portfolio.php?name=hyundai) [function.include]: failed to open stream: No such file or directory in D:\Projects\Metro Web\Coding\admin\create.php on line 15

Warning: include(portfolio.php?name=hyundai) [function.include]: failed to open stream: No such file or directory in D:\Projects\Metro Web\Coding\admin\create.php on line 15

Warning: include() [function.include]: Failed opening 'portfolio.php?name=hyundai' for inclusion (include_path='.;C:\php\pear') in D:\Projects\Metro Web\Coding\admin\create.php on line 15
4

4 に答える 4

1

以前の回答へのコメントであなたのコードを見ました。いくつか指摘したいことがあります

function buildhtml($strhtmlfile) {
    ob_start(); // redundant
    $fp = fopen ($strhtmlfile, "w"); // redundant
    file_put_contents($strhtmlfile,
                      file_get_contents("http://host/portfolio.php?name={$name}")); 
//                                       where does $name come from?? ---^
    close($fp); // also redundant
    ob_end_clean(); // also redundant
}
buildhtml('../gallery/'.$name.'.html');

PHP では、他の多くの言語と同様に、さまざまな方法で物事を行うことができます。あなたが行ったことは、3 つの異なる方法を取り、1 つだけに従ったことです (これで十分です)。したがって、関数を使用file_put_contents()file_get_contents()、バッファを必要としない場合、それはob_関数のファミリです。これは、バッファ内の何も読み取らず、 で取得する必要があるためですob_get_contents()fopen()また、によって作成および使用されるファイル ハンドルも必要ありませfclose()ん。 fwrite()fread()

関数の目的がhtmlページをローカルファイルにコピーすることであると私が正しく推測している場合、私の提案は次のようになります。

function buildhtml($dest_path, $name) {
    file_put_contents($dest_path,
                  file_get_contents("http://host/portfolio.php?name={$name}"));
}

buildhtml('../gallery/'.$name.'.html', $name);
于 2012-09-16T09:08:46.893 に答える
0
file_put_contents($strhtmlfile, file_get_contents("http://host/portfolio.php?name={$name}"))

大丈夫ですか?

于 2012-09-16T08:11:42.323 に答える
0

次の出力:

'portfolio.php?name='.$name, "../gallery/".$name.".html";

は:

portfolio.php?name=[your name]../gallery/[your name].html

それがあなたが望むものだと確信していますか?

于 2012-09-16T08:12:04.247 に答える
0

PHP の include/require ステートメントを使用すると、サーバーに既に保存されているファイルに含まれるコードにアクセスできます。

あなたが達成しようとしているのは、特定のパラメーターを使用してそのファイル内のコードを実行した出力結果を含めることです

MrSil が提供する推奨例では、これらのファイルでコードの実行を要求し、パラメーターを提供できます。空白のページが表示される理由は、file_put_contents が「データをファイルに保存」し、file_get_contents が結果をエコーせずに返すためです。file_put_contents 呼び出しを削除し、file_get_contents の前の行の先頭にエコーを追加すると、機能するはずです。

echo file_get_contents('http://domain.com/file.php?param=1');

警告として、このアプローチは 2 つの個別の PHP プロセスの実行を強制します。インクルードは、最初のプロセス内で 2 番目のファイルのコードを実行します。

インクルード アプローチを機能させるには、最初に行ったように、パラメーターを指定せずにファイルをインクルードする必要があります。各ファイルをインクルードする前に、 $_GET['name'] = $name のように期待されるパラメータを設定する必要があります

于 2012-09-16T08:40:50.397 に答える