2013-08-19 8 views
0

я постоянно получаю ошибку для этого кода, даже если он работает, как он должен, когда я запустить его в браузере, но при вызове include_once он не работает из-за ошибкиНедействительного аргумент для Еогеаспа() в

foreach(($hostlist->uploaded) as $uploaded) { 
    if (strcmp($uploaded->url,"http://someurl.com/")==0) { 
    $host = simplexml_load_file($config['hostlist']); 
    unset($host->uploaded->url); 
    unset($host->uploaded->pass); 
    $host->uploaded->addChild('url',"http://anotherurl.com/"); 
    $host->uploaded->addChild('pass',"anotherpass"); 
    $host->uploaded->asXML($config['hostlist']); 
    $host->asXML($config['hostlist']);` 
    echo "URL Changed to http://anotherurl.com/"; 
    } 
    } 

зная, что переменные являются:

$config['hostlist'] = 'xml/host.xml'; 

$hostlist = simplexml_load_file($config['hostlist']); 

и это образец файла XML:

<host> 
<uploaded> 
    <work>yes</work> 
    <url>http://someurl.com/</url> 
    <pass>pass</pass> 
</uploaded> 
</host> 
+0

' Да http://someurl.com/ пройти GuestofHonor

+0

Я приложил его к испытанию после многих сбоев :) – GuestofHonor

+1

Do 'var_dump' в' $ hostlist', и вы можете увидеть, что это логическое значение false, что означает, что php не размещал файл. Сначала проверьте файл_exists ('$ config ['hostlist']') и убедитесь, что это правда. Возможно, вам придется настроить путь включения или использовать абсолютный путь. –

ответ

1

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

Вот простой пример того, что может произойти с вами.

Я имею следующую структуру папок:

root 
    - include_folder/ 
    - include_folder/read_host.php 
    - include_folder/xml 
    - include_folder/xml/host.xml 
    - test_xml.php 

При обращении include_folder/read_host.php он считывает файл просто отлично.

Это мой read_host.php:

<?php 

$config['hostlist'] = 'xml/host.xml'; 
$hostlist = simplexml_load_file($config['hostlist']); 
foreach($hostlist->uploaded as $uploaded) 
{ 
    echo $uploaded->work, "\n"; 
    echo $uploaded->url, "\n"; 
    echo $uploaded->pass, "\n"; 
} 

Выход:

yes 
http://someurl.com/ 
pass 

Однако если доступ из test_xml.php, которые имеют следующее содержание:

<?php 
include_once('include_folder/read_host.php'); 
echo "what happens"; 

Она с ошибкой:

PHP Warning: simplexml_load_file(): I/O warning : failed to load external entity "xml/host.xml" in /home/admin/include_folder/read_host.php on line 4 PHP Notice: Trying to get property of non-object in /home/admin/include_folder/read_host.php on line 5 PHP Warning: Invalid argument supplied for foreach() in /home/admin/include_folder/read_host.php on line 5

what happens

Однако, если я изменю $config['hostlist'] = 'xml/host.xml'; на абсолютный путь к XML файл, он прекрасно работает и выход:

yes 
http://someurl.com/ 
pass 
what happens 

Так что в моем случае абсолютная папка была:

$config['hostlist'] = '/home/admin/include_folder/xml/host.xml'; 
+0

спасибо большое, Я сделал это с другим файлом только сегодня, но я просто потерял идею при редактировании этого файла. еще раз спасибо – GuestofHonor

+0

@GuestofHonor добро пожаловать;) – Prix

Смежные вопросы