0

誰かが私を助けてくれるのではないかと思います。

次のファイルパスを使用して xml ファイルをロードしようとしています。

/UploadedFiles/username/location/files.xml

私がしばらくの間やろうとしてきたことは、「ユーザー名」と「場所」という 2 つのフォーム フィールドの値を使用して、それらをファイルパスに組み込むことですが、これを正しく行うことができないようです。

これらの値を取得してファイルパスで使用する方法を誰かが教えてくれるのではないかと思いました。

どうもありがとう

修正後の投稿

ファイルパスを変更するだけで問題を解決できると思っていたので、元の投稿ですが、PHPの知識が不足していることを恐れており、問題はコードの奥深くにあると思われます。

詳細は以下をご覧ください。

以下のスクリプトは、最初に画像を保存する方法を示しています。

「アップロード.php」

<?php
require_once 'Includes/gallery_helper.php'; 
require_once 'ImageUploaderPHP/UploadHandler.class.php'; 
$galleryPath = 'UploadedFiles/'; 

function onFileUploaded($uploadedFile) { 
  global $galleryPath; 

  $packageFields = $uploadedFile->getPackage()->getPackageFields(); 
  $username=$packageFields["username"]; 
  $locationid=$packageFields["locationid"]; 
  $username = preg_replace('/[^a-z0-9_\-\.()\[\]{}]/i', '_', $_POST['username']); 
  $location = preg_replace('/[^a-z0-9_\-\.()\[\]{}]/i', '_', $_POST['locationid']); 
  $dirName = preg_replace('/[^a-z0-9_\-\.()\[\]{}]/i', '_', $_POST['folder']); 

  $absGalleryPath = realpath($galleryPath) . DIRECTORY_SEPARATOR . $username . DIRECTORY_SEPARATOR . $location . DIRECTORY_SEPARATOR; 
  $absThumbnailsPath = $absGalleryPath . 'Thumbnails' . DIRECTORY_SEPARATOR; 


  if (!is_dir($absGalleryPath)) mkdir($absGalleryPath, 0777, true); 
  chmod($absGalleryPath, 0777); 
  if (!is_dir($absGalleryPath . $dirName)) mkdir($absGalleryPath . $dirName, 0777, true); 
  chmod($absGalleryPath . $dirName, 0777); 

  if ($uploadedFile->getPackage()->getPackageIndex() == 0 && $uploadedFile->getIndex() == 0) 
    initGallery($absGalleryPath, $absThumbnailsPath, FALSE); 

  $originalFileName = $uploadedFile->getSourceName(); 
  $files = $uploadedFile->getConvertedFiles(); 
  $sourceFileName = getSafeFileName($absGalleryPath, $originalFileName); 
  $sourceFile = $files[0]; 

  if ($sourceFile) $sourceFile->moveTo($absGalleryPath . $sourceFileName); 
  $thumbnailFileName = getSafeFileName($absThumbnailsPath, $originalFileName); 
  $thumbnailFile = $files[1]; 
  if ($thumbnailFile) $thumbnailFile->moveTo($absThumbnailsPath . $thumbnailFileName); 

  $descriptions = new DOMDocument('1.0', 'utf-8'); 
  $descriptions->load($absGalleryPath . 'files.xml'); 

  $xmlFile = $descriptions->createElement('file'); 
  // <-- please check the following line 
  $xmlFile->setAttribute('name', $_POST['folder'] . '/' . $originalFileName); 
  $xmlFile->setAttribute('source', $sourceFileName); 
  $xmlFile->setAttribute('size', $uploadedFile->getSourceSize()); 
  $xmlFile->setAttribute('originalname', $originalFileName); 
  $xmlFile->setAttribute('thumbnail', $thumbnailFileName); 
  $xmlFile->setAttribute('description', $uploadedFile->getDescription()); 
  $xmlFile->setAttribute('username', $username); 
  $xmlFile->setAttribute('locationid', $locationid); 
  $xmlFile->setAttribute('folder', $dirName); 


  $descriptions->documentElement->appendChild($xmlFile); 
  $descriptions->save($absGalleryPath . 'files.xml'); 
} 

$uh = new UploadHandler(); 
$uh->setFileUploadedCallback('onFileUploaded'); 
$uh->processRequest(); 
?>

このスクリプトは、次のファイル構造を生成します。

UploadedFiles (既存のフォルダー)

  • 'username' ('location' フォルダーを含むサブフォルダー)
  • 'location' (元の画像、'files.xml' および 'Thumbnails' フォルダーを含むサブフォルダー)
  • 「サムネイル」 (元の画像のサムネイルを含むサブフォルダー)

注意。「username」および「location」フォルダー名は、現在のユーザーおよび場所の値から派生します。

次に、画像ギャラリーの作成に関する問題に取り組みます。

以下のコードは、私の最初の「gallery.php」スクリプトです。スクリプトの上部の PHP セクションを変更して、新しいフォルダー構造に一致させる必要があります。つまりUploadedFiles/'username'/'location'/ThumbnailsUploadedFiles/'username'/'location'.files.xml

「ギャラリー.php」

<?php 

  $galleryPath = 'UploadedFiles/'; 

  $thumbnailsPath = $galleryPath . 'Thumbnails/'; 

  $absGalleryPath = realpath($galleryPath) . DIRECTORY_SEPARATOR; 

  $descriptions = new DOMDocument('1.0'); 
  $descriptions->load($absGalleryPath . 'files.xml'); 
?>
<head> 
  <title>Gallery</title> 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
  <link href="Libraries/fancybox/jquery.fancybox-1.3.1.css" rel="stylesheet" type="text/css" /> 
  <link href="Styles/style.css" rel="stylesheet" type="text/css" /> 
  <!--[if IE]>   
  <link href="Styles/ie.css" rel="stylesheet" type="text/css" /> 
  <![endif]-->
  <script src="Libraries/jquery/jquery-1.4.3.min.js" type="text/javascript"></script> 
  <script src="Libraries/fancybox/jquery.fancybox-1.3.1.pack.js" type="text/javascript"></script> 
  <script type="text/javascript"> 

  $(function() { $('a.fancybox').fancybox(); }); 

  </script> 
  <style type="text/css">
<!--
.style1 {
    font-size: 14px;
    margin-right: 110px;
}
.style4 {font-size: 12px}
-->
  </style>
</head>
<body style="font-family: Calibri; color:  #505050; font-size: 9px; border-bottom-width: thin; margin-top: 5px; margin-left: -476px; margin-right: 1px; margin-bottom: -10px;">
<div align="right" class="style1"> <a href = "imagefolders.php" /> View Uploaded Images In Folder Structure <a/> &larr; View All Uploaded Images </div>
  <form id="gallery" class="page"> 
  <div id="container"> 
    <div id="center"> 
      <div class="aB"> 
        <div class="aB-B"> 
          <?php if ('Uploaded files' != $current['title']) :?>
          <?php endif;?>
          <div class="demo"> 
          <input name="username" type="text" id="username" value="IRHM73" />
          <input name="locationid" type="text" id="locationid" value="1" />
            <div class="inner"> 
              <div class="container"> 
                <div class="gallery"> 
                  <ul class="gallery-image-list"> 
                  <?php for ($i = 0; $i < $descriptions->documentElement->childNodes->length; $i++) : 
                          $xmlFile = $descriptions->documentElement->childNodes->item($i); 
                          $name = htmlentities($xmlFile->getAttribute('originalname'), ENT_COMPAT, 'UTF-8'); 
                          $description = htmlentities($xmlFile->getAttribute('description'), ENT_COMPAT, 'UTF-8'); 
                          $folder = htmlentities($xmlFile->getAttribute('folder'), ENT_COMPAT, 'UTF-8'); 
                          $source = $galleryPath . rawurlencode($xmlFile->getAttribute('source')); 
                          $thumbnail = $thumbnailsPath . rawurlencode($xmlFile->getAttribute('thumbnail')); 
                  ?>
                    <li class="item"> 
                      <a class="fancybox" target="_blank" rel="original" href="<?php echo $source; ?>"><img class="preview" 
                        alt="<?php echo $name; ?>"  src="<?php echo $thumbnail; ?>" /></a></li>
                        <p><span class="style4"><b>Image Description:</b> <?php echo htmlentities($xmlFile->getAttribute('description'));?> <br />
                          <b>Contained in folder:</b> <?php echo htmlentities($xmlFile->getAttribute('folder'));?> </span><br />  
                          <?php endfor; ?>
                          </li>
                        </p>
                  </ul>
                </div> 
              </div> 
            </div> 
          </div> 
        </div> 
      </div> 
    </div> 
    </div> 
        <div class="aB-a">        </div> 
      </div> 
    </div> 
  </div> 
  </form> 
</body> 
</html>

私はこれを解決する方法に本当に途方に暮れていることを認めます.変更する必要があるのは私の「gallery.php」スクリプトなのか、「upload.php」なのかわかりません.

どんな助けでもとても感謝しています。

敬具

4

3 に答える 3

1

これは、フォームで post または get メソッドを使用しているかどうかに関係なく機能します。入力テキスト html 要素のフィールド名のユーザー名と場所を必ず選択してください。

$filepath = "/UploadedFiles/{$_REQUEST['username']}/{$_REQUEST['location']}/files.xml"
于 2012-04-14T15:49:20.173 に答える
1

それらを変数として定義し、文字列内に含める必要があります

$username = "user1";
$location = "userlocation1";

$url = "/UploadedFiles/$username/$location/files.xml";

//Next you might want to verify the location

if(is_file($url)) {
   //do your operation....
}
于 2012-04-14T15:53:09.960 に答える
1

OK、次の値があるとしましょう: username, location.

次に、(質問が正しければ)応答スクリプト(フォームアクションを受け取るスクリプト)で、これを試してください:

<?php

     $username = $_GET['username'];
     $location = $_GET['location'];

     $filepath = "/UploadedFiles/$username/$location/files.xml";

?>

ヒント(文字列を連結する 2 つの方法) :

$filepath = "/UploadedFiles/$username/$location/files.xml";

また

$filepath = "/UploadedFiles/".$username."/".$location."/files.xml";
于 2012-04-14T15:44:42.390 に答える