私は、ユーザーが別のファイルをアップロードしてから、必要なものだけを投稿できるようなライブラリを開発中です。ファイルの名前を変更AJAX PHP
ユーザーがファイルをアップロードすると、これらのファイルは一時フォルダに保存されます。後で、フォームを入力することによって、ユーザーは選択したファイルを投稿できます。ユーザーが送信ボタンを押すとすぐに、一時フォルダーからユーザーが提案した別のフォルダーにファイルを移動します。
現在、私は提案されたフォルダを作成することができます。それにもかかわらず、「アクセスが拒否されました(コード5)」というエラーが表示され、ファイルが新しいフォルダに表示されません。私は他の問題を読んで、htdocs(XAMPPフォルダ)内のすべてのフォルダについて、すべてのユーザに「読み書き」権限を追加しました。それでも、エラーは引き続き表示されます。
私はこのスクリプトをAJAXファイルで実行しています(下記のJSコードを参照)。
ここに私のコードです。あなたが私を助けることができれば、これは他人を助けることができますように!あなたより
// When the form is submitted we want for the temp file to be moved to the directory chosen by the user
\t \t $("form").submit(function(event) {
\t \t \t $directory = $('#directory').val();
\t \t \t $file = $('#fileid').val();
\t \t \t $.ajax({
\t \t \t \t \t url:'ajax/rename.php',
\t \t \t \t \t type:"POST",
\t \t \t \t \t data:({ \t directory:$directory,
\t \t \t \t \t \t \t file:$file
\t \t \t \t \t \t }),
\t \t \t \t \t success:function(data){
\t \t \t \t \t //window.location.href = 'home';//redirect to the homepage
\t \t \t \t \t alert(data);
\t \t \t \t },
\t \t \t \t \t error: function(xhr, status, error) {
\t \t \t \t \t var err = eval("(" + xhr.responseText + ")");
\t \t \t \t \t alert(err.Message);
\t \t \t \t \t }
\t \t \t });event.preventDefault();
\t \t });
AJAX CODE
<?php
\t require_once '../../app/models/DB.php';
\t require_once '../../app/models/Files.php';
\t require_once '../../app/init.php';
\t \t $db= DB::getInstance();
\t \t $files= new Files();
\t \t $directory = $_POST['directory'];
\t \t $file = $_POST['file'];
\t \t if (!file_exists('../' . $directory)) {
\t \t \t mkdir('../' . $directory, 0744, true);
\t \t \t chmod('../'. $directory, 0777);
\t \t }
\t \t $currentdirectory = $db->query("SELECT path FROM file WHERE id = '$file'")->first()->path;
\t \t rename('../' . $currentdirectory,'../' . $directory);
\t \t $data = $db->query("UPDATE file SET path = '$directory' WHERE id = '$file'");
\t \t
\t \t echo('../' . $currentdirectory);
\t \t ?>
.secondaryContainer{
\t \t margin:0 auto; width:86%;
\t \t height:58px;
\t \t background: linear-gradient(to bottom,#FBFBFB,#A7A6A6) #f3f3f3;
\t \t border-radius: 5px 5px 5px 5px;
\t }
\t #HomesearchBar{
\t \t float:right;
\t }
\t .boxHeader{
\t \t padding:15px 15px 0px 15px ;
\t }
\t #headerTab{
\t \t border-bottom:0px;
\t }
\t .filesBoxContent{
\t \t background-color: #aeaeae !important;
\t border-color: #818181 !important;
\t border-radius: 5px 5px 5px 5px;
\t }
\t #MainPageThumbnails{
\t \t margin-top: 15px;
\t }
\t #MainPageThumbnails{
\t \t text-align:justify;
\t }
\t .clicked {
border: 3px solid blue;
}
\t \t #mainPage{
\t \t \t max-width: 900px;
\t \t }
\t \t #mainPage h1, #mainPage h2 {
\t \t font-size: 28px;
\t \t color: #25A7DE;
\t \t font-weight: lighter;
\t \t text-align: left;
\t \t }
\t \t .postPage legend {
\t \t text-align: center;
\t \t background: #25A7DE;
\t \t color: #fff;
\t \t font-size: 18px;
\t \t padding: 4px;
\t \t -webkit-border-radius: 34px;
\t \t -moz-border-radius: 34px;
\t \t border-radius: 34px;
\t \t width: 34px;
\t \t height: 34px;
\t \t }
\t \t fieldset{
\t \t border-top: 1px solid #ccc;
\t \t }
\t \t .fileUpload {
\t \t position: relative;
\t \t overflow: hidden;
\t \t margin: 10px;
\t \t }
\t \t .fileUpload input.upload {
\t \t position: absolute;
\t \t top: 0;
\t \t right: 0;
\t \t margin: 0;
\t \t padding: 0;
\t \t font-size: 20px;
\t \t cursor: pointer;
\t \t opacity: 0;
\t \t filter: alpha(opacity=0);
\t \t }
\t \t #banner_warning{
\t \t \t float:left;
\t \t }
\t \t .form-actions {
\t \t margin: 0;
\t \t background-color: transparent;
\t \t text-align: center;
\t \t }
\t \t /*---------Category CSS-------*/
\t \t .subcategoryList,.categoryList {
\t \t border-radius: 15px;
\t \t background-color: white;
\t \t border: 1px solid #ccc;
\t \t padding: 5px;
\t \t min-height:150px;
\t \t max-height:150px;
\t \t overflow-y: auto;
\t \t overflow-x:hidden;
\t \t margin-bottom:20px !important;
\t \t }
\t \t .categoryList{
\t \t \t float: left;
\t \t \t width:49%;
\t \t }
\t \t .subcategoryList{
\t \t \t float: right;
\t \t \t width:49%;
\t \t \t visibility: hidden;
\t \t }
\t \t .subcategoryList ul,.categoryList ul {
\t \t list-style-type: none;
\t \t margin: 0;
\t \t padding: 0;
\t \t }
\t \t .subcategory,.category {
\t \t text-decoration: none;
\t \t color: #000;
\t \t -webkit-transition: font-size 0.3s ease, background-color 0.3s ease;
\t \t -moz-transition: font-size 0.3s ease, background-color 0.3s ease;
\t \t -o-transition: font-size 0.3s ease, background-color 0.3s ease;
\t \t -ms-transition: font-size 0.3s ease, background-color 0.3s ease;
\t \t transition: font-size 0.3s ease, background-color 0.3s ease;
\t \t display: block;
\t \t }
\t \t .subcategory:hover,.category:hover {
\t \t font-size: 15px;
\t \t background: #f6f6f6;
\t \t }
\t \t .input-group{
\t \t \t z-index: 0;
\t \t }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<!-- Form Container -->
<div id="mainPage" class="container">
\t <h1>Add New Post</h1>
\t <div class = "postPage">
\t \t <form action="" method="post">
\t \t \t <fieldset class="form-group">
\t \t \t \t <legend>1</legend>
\t \t \t \t <div class="input-group">
\t \t \t \t <span class="input-group-addon" id="basic-addon1">Title*</span>
\t \t \t \t <input type="text" class="form-control" name="title" id="title" aria-describedby="basic-addon1" placeholder="Enter the post title">
\t \t \t \t </div>
\t \t \t \t <div class="fileUpload btn btn-primary">
\t \t \t \t <span>Choose Banner</span>
\t \t \t \t <input type="file" name="banner" id="uploadBtn" class="upload" />
\t \t \t \t </div>
\t \t \t \t <span id="thumbnail" ></span>
\t \t \t \t <div id="banner_warning">
\t \t \t \t \t <small class="banner">Choose a banner for your post.</small>
\t \t \t </div>
\t \t \t \t <div class="input-group">
\t \t \t \t <span class="input-group-addon" id="basic-addon1">Description*</span>
\t \t \t \t <textarea class="form-control" name="description" id="description" rows="10" placeholder="Type a short description for this file"></textarea>
\t \t \t </div>
\t \t \t </fieldset>
\t \t \t <fieldset class="form-group">
\t \t \t \t <legend>2</legend>
\t \t \t \t <div class="categoryList">
\t \t \t \t <ul>
\t \t \t \t \t <?php foreach($category as $item):?>
\t \t \t \t \t <li class="category" id="<?php echo $item->id;?>"><?php echo $item->name; ?></li>
\t \t \t \t <?php endforeach; ?>
\t \t \t \t </ul>
\t \t \t \t <input type="hidden" name="category" id="category"/>
\t \t \t \t </div>
\t \t \t \t <div class="subcategoryList">
\t \t \t \t <ul>
\t \t \t \t </ul>
\t \t \t \t <input type="hidden" name="subcategory" id="subcategory"/>
\t \t \t \t </div>
\t \t \t \t \t \t \t \t \t
\t \t \t \t <!-- Trigger/Open The Modal -->
\t \t \t \t <div class="form-actions">
\t \t \t \t \t <button type="button" id="myBtn" class="btn btn-default btn-lg">
\t \t \t \t \t <span class="glyphicon glyphicon-paperclip" aria-hidden="true"></span> Add Media
\t \t \t \t \t </button>
\t \t \t \t </div>
\t \t \t \t <div class="input-group">
\t \t \t \t <span class="input-group-addon" id="basic-addon1">Directory</span>
\t \t \t \t <input type="text" class="form-control" name="directory" id="directory" aria-describedby="basic-addon1">
\t \t \t \t <input type="hidden" name="filename" id="filename"/>
\t \t \t \t <input type="hidden" name="fileid" id="fileid"/>
\t \t \t \t </div>
\t \t \t </fieldset>
\t \t \t <fieldset class="form-group">
\t \t \t \t <legend>3</legend>
\t \t \t \t <label for="keywords"><h3>Keywords</h3></label>
\t \t \t <textarea class="form-control" name="keywords" id="keywords" rows="3"></textarea>
\t \t \t <small class="text-muted">Separate words by either '/' or ';'</small>
\t \t \t </fieldset>
\t \t \t
\t \t
\t \t \t <!--Token will be generated here. Model Token will be called for this-->
\t \t \t <input type="hidden" name = "token" value="<?php echo Token::generate(); ?>">
\t \t \t <input type="submit" value="Post"> \t
\t \t </form>
\t </div>
</div>
<!-- End of Form Container -->