«PS c: \> New-WebSite -Blah:» выбрасывает Index за пределы массива

На одном из моих серверов команда New-WebSite перестала работать сегодня (вчера она работала нормально), выдав исключение «Индекс находился за пределами массива». pic_brief и pic_detail на самом деле хранят путь к изображению, например, значение, сохраненное в одном из трех объектов, будет выглядеть следующим образом upload / file / pic_title1.jpg

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

for($j=0;$j<$count;$j++){
        $delete_id = $checkbox[$j];
        $query = "SELECT news.pic_title, news.pic_brief, news.pic_detail FROM news WHERE id = '$delete_id'";
        $result = mysql_query($query);
        $row = mysql_fetch_array($result);
        unlink($row['pic_title']);
        unlink($row['pic_brief']);
        unlink($row['pic_detail']);
        }

Приведенный выше код не может удалить запрошенный файл, моя строка запроса отлично работает, я проверил ее с помощью удаляя функцию unlink и печатая значения, она печатает все выбранное значение, но отказывается удалять файл, и когда я пытаюсь запустить цикл, она показывает ошибку в трех последних строках, хотя я почти уверен, что $ row ['pic_title'], $ row ['pic_brief'], $ row ['pic_brief'], укажите полный путь к изображению.

    unlink($row['pic_title']);
    unlink($row['pic_brief']);
    unlink($row['pic_brief']);

где я ошибаюсь?

PS: нет ничего плохого в разрешении файла, потому что, когда я пытаюсь запустить функцию unlink, я удаляю файл из того же каталога.

РЕДАКТИРОВАТЬ: Это сообщение об ошибке, которое я получаю

Warning: unlink() [function.unlink]: No error in C:\wamp\www\bn\admin-login\action.php on line 580

Warning: unlink() [function.unlink]: No error in C:\wamp\www\bn\admin-login\action.php on line 581

Warning: unlink() [function.unlink]: No error in C:\wamp\www\bn\admin-login\action.php on line 582

Чтобы быть более точным, я протестировал эту функцию индивидуально в php, и она прекрасно работает

$target = 'upload/file/file1.jpg';
unlink($target);

, и по этой причине я не думаю, что файл разрешение вызывает ошибку, я думаю, что где-то не так с логикой.

@Lekensteyn дал мне решение, спасибо Lekensteyn.

На самом деле мне пришлось сначала сохранить значение в переменной, а затем отсоединить файл. рабочий код выглядит следующим образом.

 for($j=0;$j<$count;$j++){
        $delete_id = $checkbox[$j];
        $query = "SELECT * FROM news WHERE id = '$delete_id'";
        $result = mysql_query($query);
        $row = mysql_fetch_array($result);
        $pic_title = $row['pic_title'];
        $pic_brief = $row['pic_brief'];
        $pic_detail = $row['pic_detail'];
        unlink($pic_title);
        unlink($pic_brief);
        unlink($pic_detail);
        }
1
задан Ibrahim Azhar Armar 26 August 2010 в 10:23
поделиться

3 ответа

Это могут быть права доступа к файлам. Вы должны быть владельцем файла, чтобы удалить его.

Некоторые хостеры запускают веб-сайт под пользователем «apache» (или подобным), но файлы принадлежат пользователю ftpuser (например, accountxxxx).

Проверьте также текущий рабочий каталог с помощью echo getcwd(), если пути не абсолютны.

Ваш скрипт также уязвим для SQL-инъекции, почтовый запрос с флажком[]='||1||' удаляет все.

1
ответ дан 2 September 2019 в 21:51
поделиться

Добавьте

error_reporting(E_ALL);

в начало скрипта.
Ваша проблема связана с потоком программы и может быть обнаружена только с помощью отладки.
Начните с отображения ВСЕХ возникших ошибок и исправьте их. Это, скорее всего, приведет вас к причине, по которой вы не можете удалить свои файлы.

1
ответ дан 2 September 2019 в 21:51
поделиться

Вероятно, проблема в вашем пути загрузки. В вашем тестовом сценарии:

$target = 'upload/file/file1.jpg';
unlink($target);

Бьюсь об заклад, вы запустили это из каталога прямо под 'upload/', верно?

А этот скрипт удаления, наверное, не в том же каталоге?

Я рекомендую использовать полный путь к каталогу 'upload/file/'; это зависит от вашей конфигурации, но, вероятно, выглядит как /www/htdocs/upload/file или /var/www/public_html/upload/file.

Чтобы сделать скрипт более переносимым, вы можете использовать константу PHP FILE для определения каталога. Я обычно устанавливаю это приложение/сайт широко в загрузочном или универсальном файле конфигурации, в соответствии с

define('PATH', dirname(__FILE__)); # sets PATH with the directory name of the bootstrap file where this code lives

Иногда я нажимаю на что-то на своем пути, на что я могу положиться, например, на имя моего приложения. Скажем, мой бутстрап находится здесь:

/www/apps/golf-scorecard/bootstrap.php

Я мог бы разделить на «карту результатов гольфа».

list($path,) = explode('golf-scorecard',dirname(__FILE__)); # $path should be /www/apps/
define('PATH', $path.'golf-scorecard'); # since I split on it, I have to add it back in

Это означает, что если я перенесу приложение/сайт на другой сервер или клонирую его из репозитория на компьютер, где находится корень документа, скажем, /home/username/apps/golf-scorecard/htdocs/, то это не имеет значения. Это связано с названием приложения, но я согласен с этим.

0
ответ дан 2 September 2019 в 21:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: