私は PHP を少しだけ使用していますが、基本的なタスクしか実行しておらず、ナレッジベースの一部を構築しようとしてスタックしてしまいました。
記事の作成中に、スクリーンショットをアップロードできます。これらは、記事が保存されるまでステージング エリアに保存する必要があり、ユーザー セッションに情報が保存されます。
POST アップロードの場合:
...
$new_ss = array();
$new_ss['display_name'] = $ss_name;
$new_ss['server_path'] = "../uploads/"; /* outside of doc root */
$new_ss['server_path'] .= hash_file('md5', $ss_tmp_name) . "_" . $ss_name;
if ( @move_uploaded_file($ss_tmp_name, $new_ss['server_path']) )
{
$_SESSION['article']['screenshots'] .= $new_ss;
...
次に、編集ページ内でユーザーにアップロードを表示しようとしています:
if ( is_array($_SESSION['article']['screenshots']) && count($_SESSION['article']['screenshots']) > 0 )
{
echo "<table border=\"1\">\n";
foreach ( $_SESSION['article']['screenshots'] as $ss )
{
... display table of uploaded images ...
問題は、PHP が $_SESSION['article']['screenshots'] を配列として認識していないことです。その理由はわかりません。
ここで答えをたどった後: PHP foreach() with arrays within arrays? 私はすぐに次のことを試しました:
function print_array($key, $item) {
echo "$key -> $item\n";
}
...
{
$_SESSION['article']['screenshots'] .= $new_ss;
array_walk_recurisve($_SESSION['article']['screenshots'], 'print_array');
...
ただし、「パラメーター1が配列、文字列であると予想されます」というエラーが表示されます。
「error_log($_SESSION['article']['screenshots']);」を実行すると、アップロードされた画像の数だけ「配列」を出力し、print_rは「1」を単独で出力しました。
誰かが光を当てることができますか?