[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Редактирование и сохранение файла
quickxyan
всех с новым годом smile.gif

суть такая. по нажатию на кнопку выполняется js-функция которая через аякс связывается с еще одним скриптом, который уже сохраняет всякие изменения в файл. суть в том, что ничего не сохраняется.
открыть файл могу, а перезаписать нет. права стоят 0777.
в чем может быть дело?



Спустя 20 минут, 14 секунд (3.01.2012 - 13:05) sergeiss написал(а):
Цитата (quickxyan @ 3.01.2012 - 13:45)
в чем может быть дело?

Ты вопрос задал так, будто первый день на форуме. Код-то где, который используешь для работы с файлом?

Спустя 16 минут, 45 секунд (3.01.2012 - 13:22) Игорь_Vasinsky написал(а):
ну в отладчике ошибки JS есть?
error_reporting(E_ALL) - or die() в конце концов.

Спустя 2 минуты, 14 секунд (3.01.2012 - 13:24) quickxyan написал(а):
по нажатию на кнопку вызывается данная функция (берет все записи из select'a и переделывает их в строку. строка передается как GET - параметр, еще есть один POST-он определяет в какую именно папку будет сохраняться файл с данными)

function qwerty(){
var s2=document.getElementById("select2");
var dns=document.getElementById("dns").value;
var str='';

for (var i=0; i<s2.options.length; i++){
str += 'x'+ i +'='+ s2.options[i].text +'&';
}
//режем последнюю запятую
str = str.substring(0, str.length - 1);
url = '../../functions/save.php?'+str;
$.ajax({
url: url,
type: "POST",
data: {dns: dns},
error: function () {alert("error");},
success: function () {alert("Сохранено");}
}
);
}


файл save.php (получает данные и сохраняет их в 2 файла (1 - название файлов, 2 - полный путь к файлу))


<?php
session_start();
$dns = $_REQUEST['dns'];
$adr = 'http://test.ru/config/'.$_SESSION['login'].'/'.$dns;
//$adr = '../config/'.$_SESSION['login'].'/'.$dns;

//echo $adr;


$fp=fopen($adr.'/list.txt',"w");
for ($i=0;$i<=1000;$i++){
if($_GET['x'.$i]!=''){
fputs($fp,$_GET['x'.$i]. "\r\n");
}
}

fclose($fp);
$fp=fopen($adr.'/playlist.txt',"w");
for ($i=0;$i<=1000;$i++){
if($_GET['x'.$i]!=''){
fputs($fp,'http://test.ru/www/'.$_SESSION['login'].'/'.$dns.'/'.$_GET['x'.$i]. "\r\n");
}
}

fclose($fp);


Так вот вся эта штука на локалхосте работает, а на хосте нет :(
если есть вопросы по коду, то могу подробно объяснить, что я хотел сделать.

Спустя 58 минут, 23 секунды (3.01.2012 - 14:23) sergeiss написал(а):
Цитата (quickxyan @ 3.01.2012 - 14:24)
$adr = 'http://test.ru/config/'.$_SESSION['login'].'/'.$dns;

Я думаю, что проблема в этой строке. Ты берешь имя файла в виде http://..., а не локальное для сервера. И у тебя, как я понимаю, запрещена запись в файлы извне. Не помню точное имя директивы и где она, но она есть. Права 0777 не имеют значения в данном случае, насколько я понимаю.
Тебе надо сменить имя файла на локальное и всё должно заработать. А директиву не ищи и не меняй. Ну, разве что только если на локальном компе, чтобы ты мог корректно отлаживать сервер в локальной версии.

И еще. На клиентской стороне ты пишешь url = '../../functions/save.php?'+str;, давая инфорумацию потенциальным злоумышленникам, где у тебя лежит определенная информация. Да и еще, "до кучи", ты мечтаешь открыть возможность удаленной записи файлов smile.gif А это всё вместе не просто возможность инъекции, это гигантские открытые врата для любого, даже начинающего, хакера. С надписью над вратами "Добро пожаловать, хакер!" wink.gif

Спустя 16 минут, 13 секунд (3.01.2012 - 14:39) quickxyan написал(а):
sergeiss
спасибо буду работать с путями.
а что делать с путями на клиентской стороне???? переместить js файл в корень?

Спустя 49 минут, 27 секунд (3.01.2012 - 15:28) inpost написал(а):
quickxyan
Есть файловые пути РУТ, и веб-пути ХОСТ.
Если работаешь с файловой системой необходимо использовать файловые пути.

Спустя 12 минут, 56 секунд (3.01.2012 - 15:41) quickxyan написал(а):
inpost
так суть в том, что я пробовал и так, и так. наверное где-то все-таки прошляпил :(

вот перекопировал файл save.php из папки functions в корень и немного переделал его.


<?php
session_start();
$dns = $_REQUEST['dns'];
$adr = 'config/'.$_SESSION['login'].'/'.$dns;

$fp=fopen($adr.'/list.txt',"w");
for ($i=0;$i<=1000;$i++){
if($_GET['x'.$i]!=''){
fputs($fp,$_GET['x'.$i]. "\r\n");
}
}

fclose($fp);

$fp=fopen($adr.'/playlist.txt',"w");
for ($i=0;$i<=1000;$i++){
if($_GET['x'.$i]!=''){
fputs($fp,$_SERVER["DOCUMENT_ROOT"].'/www/'.$_SESSION['login'].'/'.$dns.'/'.$_GET['x'.$i]. "\r\n");
}
}

fclose($fp);


Теперь все файлы пересохраняются и это очень радует :)

и вот таки остался один вопрос с js - как там поступить с путями к файлам (если переместить js файл в корень сайта, то тогда структура сайта пропадает) !?!?

Спустя 2 минуты, 44 секунды (3.01.2012 - 15:44) inpost написал(а):
JS находится где? У клиента, клиент не имеет доступа к файловой системе сервера, итого он может давать пути веба ХОСТ к файлу, и, желательно, АБСОЛЮТНЫЕ.

Спустя 2 минуты (3.01.2012 - 15:46) quickxyan написал(а):
inpost
Не понял ничего. Можно на пальцах пожалуйста?

Спустя 2 минуты, 1 секунда (3.01.2012 - 15:48) inpost написал(а):
url = '../../functions/save.php?'+str; - это не абсолютный путь!
Абсолютный: http://site.ru/...

Спустя 7 минут, 25 секунд (3.01.2012 - 15:55) quickxyan написал(а):
а какая разница? если узнать где находится мой js файл, то уже не составит труда понять где файл save.php

я просто не понимаю хорошо это или плохо. скорее всего плохо, но не знаю как можно это исправить

Спустя 3 минуты, 28 секунд (3.01.2012 - 15:59) inpost написал(а):
А тебе не надо скрывать месторасположение файлов smile.gif

Спустя 1 час, 28 минут, 29 секунд (3.01.2012 - 17:27) quickxyan написал(а):
вобщем спасибо, что-то туплю я сегодня страшно smile.gif


_____________
печатаю со скоростью 320 минут в знак...

плюсуем карму не стесняемся
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.