PHP Error in DOMElement::setAttribute()
Ok, dus ik heb rond gevraagt op paar engels sites (stackoverflow, phpfreaks.com), en volgens mij weet niemand het antwoord zover. Ik heb een P3T (PS3 theme) extractor, gebasseerd op een python versie (port), maar ik krijg dus een fout PHP fout. Je kan de script vinden hiero: http://pastebin.com/bRGL9KFh .
De fout die ik krijg is:
Code (php)
1
Warning: DOMElement::setAttribute() [domelement.setattribute]: Couldn't fetch P3TElement in D:\www\p3textract\extract.php on line 115
Kan iemand alstublieft mij helpen, want ik kan er niks over vinden.
Alvast bedankt.
Hosh
PS: deze classen lezen een .p3t bestand (playstation 3 themes) en pakken de images en de XML ervan uit. Hij is nog niet af, maar zo ver hoort het op zn minst alle images ervanuit te halen (de XML extracter is er nog niet).
PPS: de python versie kan je hier vinden: http://p3textractor.googlecode.com/svn/trunk/p3textractor.py
EDIT: ik had per ongeluk een oude versie hier gelinkt. link geupdate met nieuwe versie
Gewijzigd op 25/03/2011 15:56:37 door The Hosh
Je schrijft prima nl. :)
Jordi kroon op 25/03/2011 07:31:25:
Je schrijft prima nl. :)
Wat een toegevoegde waarde.
Ontopic:
Waar staat de setAttribute function eigenlijk?
Kan je je fout reduceren tot de meest eenvoudige code? Dan kunnen we er iets zinnigs over zeggen. Nu is het een speld in een hooiberg...
@Joris, setAttribute() is interitted van de class DOMElement, dit is een PHP class, meer kan je vinden hier: http://uk2.php.net/manual/en/class.domelement.php
@Pim, sorry, het meest zinnig code is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class P3TElement extends DOMElement {
public $attribs = array();
public function add_attribute($attr) {
if ($attr->type == 6) {
$this->has_file = 1;
}
$this->attribs[$attr->name] = $attr;
if ($attr->name == "size") {
return;
}
if ($attr->name && $attr->value) {
// de volgende lijn is 115
$this->setAttribute((string)$attr->name, (string)$attr->value);
}
}
}
class P3TAttribute{
public $type = 0;
public $name = "";
public $value = 0;
}
$ele = new P3TElement($h);
$attr = new P3TAttribute();
$attr->parse($attr_bin, $h, $f);
$ele->add_attribute($attr);
?>
class P3TElement extends DOMElement {
public $attribs = array();
public function add_attribute($attr) {
if ($attr->type == 6) {
$this->has_file = 1;
}
$this->attribs[$attr->name] = $attr;
if ($attr->name == "size") {
return;
}
if ($attr->name && $attr->value) {
// de volgende lijn is 115
$this->setAttribute((string)$attr->name, (string)$attr->value);
}
}
}
class P3TAttribute{
public $type = 0;
public $name = "";
public $value = 0;
}
$ele = new P3TElement($h);
$attr = new P3TAttribute();
$attr->parse($attr_bin, $h, $f);
$ele->add_attribute($attr);
?>
$attr->parse() probeert PHP's unpack() te gebruiken om de .p3t bestand te lezen en stukjes op te slaan
$h bevat random data
$f is een fopen('file.p3t', 'rb') handle.
$attr_bin returnt deze array wanneer ik unpack('N3int/x4fill', $attr_bin); gebruik:
Gewijzigd op 25/03/2011 11:54:05 door The Hosh